亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Server Java講座--動態添加圖層數據

系統 1854 0

有的時候,特別是在做分析時,需要經常添加新的圖層到當前的地圖中。在這個時候,我們一般采用非池化的Server Object,以保證當前用戶的修改不會影響到其他用戶。添加圖層的代碼如下:
首選,得到Resource和mapFunctionality和MapServerInfo,以備后面使用:

Java代碼 復制代碼
  1. AGSLocalMapResource?gisrec=(AGSLocalMapResource)webContext.getResources().get( "ags1" ); ??
  2. AGSMapFunctionalitymapfunction=(AGSMapFunctionality)gisrec.getFunctionalities().get( "map" ); ??
  3. MapServerPortmapServer=gisrec.getMapServer(); ??
  4. MapServerInfoserverInfo=mapServer.getServerInfo(mapServer.getDefaultMapName());??
    AGSLocalMapResource gisrec=(AGSLocalMapResource)webContext.getResources().get("ags1");
AGSMapFunctionalitymapfunction=(AGSMapFunctionality)gisrec.getFunctionalities().get("map");
MapServerPortmapServer=gisrec.getMapServer();
MapServerInfoserverInfo=mapServer.getServerInfo(mapServer.getDefaultMapName());

  


得到MapServer的IMap接口

Java代碼 復制代碼
  1. IMaptargetMap=gisrec.getLocalMapServer().getMap(gisrec.getLocalMapServer().getDefaultMapName());??
    IMaptargetMap=gisrec.getLocalMapServer().getMap(gisrec.getLocalMapServer().getDefaultMapName());

  


IMap接口可以用來添加數據到ServerObject。下面的代碼可以用來從文件數據庫中讀取數據并把它添加到IMap中:

Java代碼 復制代碼
  1. IWorkspacewk= this .connectToFileDB( "D:\\data\\sapdata.gdb" ,gisrec.getServerContext()); ??
  2. IFeatureClassfc= this .getFeatureclass(wk, "MSA_Intersect" ); ??
  3. FeatureLayerflayer=(FeatureLayer)gisrec.getServerContext().createObject(FeatureLayer.getClsid()); ??
  4. flayer.setFeatureClassByRef(fc); ??
  5. targetMap.addLayer(flayer);??
    IWorkspacewk=this.connectToFileDB("D:\\data\\sapdata.gdb",gisrec.getServerContext());
IFeatureClassfc=this.getFeatureclass(wk,"MSA_Intersect");
FeatureLayerflayer=(FeatureLayer)gisrec.getServerContext().createObject(FeatureLayer.getClsid());
flayer.setFeatureClassByRef(fc);
targetMap.addLayer(flayer);

  


里面用到的兩個function的代碼如下:

Java代碼 復制代碼
  1. public ?IWorkspace?connectToFileDB(StringfileGDB,IServerContext?sc)? throws ?java.net.UnknownHostException,java.io.IOException{ ??
  2. com.esri.arcgis.datasourcesGDB.FileGDBWorkspaceFactoryfactory?=?(FileGDBWorkspaceFactory)sc.createObject(FileGDBWorkspaceFactory.getClsid()); ??
  3. com.esri.arcgis.geodatabase.IWorkspaceworkspace?=?factory.openFromFile(fileGDB, 0 ); ??
  4. return ?workspace; ??
  5. ??
  6. } ??
  7. ??
  8. publicIFeatureClass?getFeatureclass(IWorkspace?workspace,String?fName)?throwsjava.net.UnknownHostException,?java.io.IOException{ ??
  9. com.esri.arcgis.geodatabase.IEnumDatasetenumDataset?=workspace.getDatasets(com.esri.arcgis.geodatabase.esriDatasetType.esriDTFeatureClass); ??
  10. com.esri.arcgis.geodatabase.IDatasetds?=? null ; ??
  11. ds=?enumDataset.next(); ??
  12. while (ds!=? null ){ ??
  13. if (ds.getName().endsWith(fName)){ ??
  14. return ??
  15. new ?IFeatureClassProxy(ds); ??
  16. } ??
  17. ds=?enumDataset.next(); ??
  18. ??
  19. } ??
  20. ??
  21. retur?nnull; ??
  22. ??
  23. }??
    public IWorkspace connectToFileDB(StringfileGDB,IServerContext sc) throws java.net.UnknownHostException,java.io.IOException{
com.esri.arcgis.datasourcesGDB.FileGDBWorkspaceFactoryfactory = (FileGDBWorkspaceFactory)sc.createObject(FileGDBWorkspaceFactory.getClsid());
com.esri.arcgis.geodatabase.IWorkspaceworkspace = factory.openFromFile(fileGDB,0);
return workspace;

}

publicIFeatureClass getFeatureclass(IWorkspace workspace,String fName) throwsjava.net.UnknownHostException, java.io.IOException{
com.esri.arcgis.geodatabase.IEnumDatasetenumDataset =workspace.getDatasets(com.esri.arcgis.geodatabase.esriDatasetType.esriDTFeatureClass);
com.esri.arcgis.geodatabase.IDatasetds = null;
ds= enumDataset.next();
while(ds!= null){
if(ds.getName().endsWith(fName)){
return
new IFeatureClassProxy(ds);
}
ds= enumDataset.next();

}

retur nnull;

}


  


添加圖層到ServerObject后,調用下面的代碼,讓修改生效。調用下面的代碼后,將會使ServerObject的狀態發生改變。

gisrec.getLocalMapServer().refreshServerObjects();

Server Object狀態改變后,需要重新得到serverInfo,并且設置MapFunctionality里面的LayerDescription,把新的layer加入進去。這里我們就不手工添加,而是直接把整個MapDescription設置一遍,如下面的代碼所示:

Java代碼 復制代碼
  1. serverInfo=mapServer.getServerInfo(mapServer.getDefaultMapName()); ??
  2. mapfunction.getMapServerInfo().setDefaultMapDescription(serverInfo.getDefaultMapDescription()); ??
  3. mapfunction.setMapDescription(serverInfo.getDefaultMapDescription());??
    serverInfo=mapServer.getServerInfo(mapServer.getDefaultMapName());
mapfunction.getMapServerInfo().setDefaultMapDescription(serverInfo.getDefaultMapDescription());
mapfunction.setMapDescription(serverInfo.getDefaultMapDescription());

  


最后,當然要加上一句refresh context的代碼:

Java代碼 復制代碼
  1. webContext.refresh();??
    webContext.refresh();

  


把此代碼放在一個tool或者command中運行即可。這應該是最簡潔明了的添加一個圖層的代碼了。

Server Java講座--動態添加圖層數據


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 午夜精品久久久久久久99热 | 欧美在线一级片 | 久久99国产乱子伦精品免费 | 国产日韩欧美亚洲综合在线 | 图片亚洲va欧美va国产综合 | 免费国产不卡午夜福在线观看 | 欧美精品视| 亚洲综合图片人成综合网 | 台湾成人性视频免费播放 | 色婷婷视频 | 中文视频在线 | 97久久人人 | 朴妮唛禁福利视频在线 | 久久久久久夜精品精品免费啦 | 国产成人精品午夜二三区 | 一级生活毛片 | 亚洲狠狠婷婷综合久久久久 | 日本一级毛片a免费播放 | 国产99视频精品免视看7 | 欧美日韩视频在线成人 | 成人午夜性a一级毛片美女 成人午夜性视频欧美成人 成人午夜亚洲影视在线观看 | 亚洲精品区 | 日韩欧美精品综合一区二区三区 | 青青青草国产 | 激情 婷婷| 日韩精品视频观看 | 久久高清免费视频 | 日本-区二区三区免费精品 日本热久久 | 国产色婷婷免费视频 | 亚洲欧美人成综合在线最新 | 久久国产精品麻豆映画 | 国产美女流白浆 | 成人美女免费网站视频 | 国产成人亚洲精品无广告 | 黄色福利在线观看 | 国产高清一区二区三区四区 | 五月婷婷伊人网 | 欧美色综合 | 四虎最新网址入口 | 香蕉久久ac一区二区三区 | 97se亚洲国产综合自在线观看 |