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

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條評論
主站蜘蛛池模板: 久久亚洲免费视频 | 久久久久久九 | 2021最新国产成人精品免费 | 久久夜色撩人精品国产 | 伊人久久精品 | 手机精品在线 | 国产成人久久精品二区三区 | 五月婷婷视频 | 日本在线小视频 | 久久国产精品成人免费 | 激情开心婷婷 | 老色99久久九九精品尤物 | 国产精品社区在线观看 | 精品在线播放视频 | 国产香蕉国产精品偷在线观看 | 国产香蕉久久精品综合网 | 欧美黄色网址 | 亚洲乱码在线视频 | 亚洲欧洲免费 | 久久99久久99精品免费看动漫 | 一区二区三区在线播放视频 | 久久久精品久久久久特色影视 | 伊人色综合久久 | 国产成人亚洲精品91专区高清 | 久久综合中文字幕一区二区 | 四虎影院久久久 | 国产福利视频一区二区三区 | 日本一级在线观看视频播放 | 久久国产亚洲欧美日韩精品 | 亚洲一区二区三区在线网站 | 久久网页 | 美女黄色一级毛片 | 国产v片成人影院在线观看 国产v视频 | 国产一级淫片a | 天天干天天色天天 | 亚洲综合图片区 | 欧美精品日韩一区二区三区 | 亚洲国产成人麻豆精品 | 狠狠色噜噜狠狠狠狠网站视频 | 亚洲精品综合久久 | 久久成年人视频 |