ArcGIS 和TopMap的聯合開發

一、整體流程。

1. Web界面
       |
      //
2.  Extjs
       |
      //
3. Java method call (with parameter object)
       |
      //
4. JNI call 自己寫的map2dll.dll,這個dll調用TopMap的控件並傳入數據,生成一個等值線圖的文件。
       |
      //
5. 使用ArcGIS 按照一個新圖層的方式,導入這個等值線圖。等值線圖和其他的圖層疊加在一起就生成了一個新的web界面

從1到2,使用了Extjs技術,它可以把界面提交的數據用javascript和Ajax技術封裝成類的形式發給服務器端。

從2到3,到我這裏就是一個抽象的Java函數調用

從3到4,使用JNI技術實現Java調用TopMap的控件,生成等值線,等值面的圖形。

從4到5,如何生成一個新的圖層,圖層有很多種:

我抽象了一個基本圖層:BaseLayer.java和四個子圖層:
DuplicateLayer.java 完全複製一個圖層,包括上面的點,線,面。
MemoryLayer.java 生成一個內存圖層,對內存圖層的操作很快。
ProxyLayer.java 生成一個代理圖層,對這個圖層的操作等價於對他所代理的圖層。
ShapeFileLayer.java 根據圖層文件生成一個圖層
UtilityLayer.java 工具類

DemoGeoProcessor.java是使用ArcGIS的功能進行數據分析,生成等值線。

編輯圖層,可以對圖層上面的線寬度,面的顏色進行修改。

二、ArcGIS的配置,ArcGIS可以配置成Pool 和非Pool模式。


  • 如果是Pool模式,所有Web的用戶共享同一個圖層生成器。相互干擾(一個用戶添加的圖層,會反映到別的用戶上面)是無狀態的過程。
  • 如果是Non-Pool模式,每個Web界面使用不同的圖層,相互不干擾。但是如果用戶太多,就會等待很長時間。

我們使用的是Pool模式,在用戶疊加圖層的時候,先清除別的用戶的圖層。只要別的用戶不刷新就不會有問題,縮放沒有關係。

try {
            int count=targetMap.getLayerCount();
            for (int i = 0; i < count; i++) {
                ILayer layer=targetMap.getLayer(i);
                if (layer.getName().equals(myFeatureLayer.getName()))
                {
                    targetMap.deleteLayer(layer);
                    break;
                }
            }
            targetMap.addLayer(myFeatureLayer);
            targetMap.moveLayer(myFeatureLayer, 1);
            //------------------------------------------   
            MapServer mapserver = localMapResource.getLocalMapServer();
            mapserver.refreshServerObjects();           
            serverInfo = mapServerPort.getServerInfo(mapServer.getDefaultMapName());
            mapFunct.getMapServerInfo().setDefaultMapDescription(serverInfo.getDefaultMapDescription());
            mapFunct.setMapDescription(serverInfo.getDefaultMapDescription());
            context.refresh();
        } catch (AutomationException e) {
            log.error("",e);
        } catch (IOException e) {
            log.error("",e);
        }

對於後臺自動生成圖片的功能,可以在ArcGIS中生成另外一個地圖服務,使用該服務來生成圖片。不影響前天用戶的查詢。

三、ArcGIS的配置文件。

ArcGIS的配置嚮導,生成的配置文件在: WEB-INF 下的faces-config.xml,其中包括了地圖服務的IP地址和地圖服務的名稱。(也可以通過自己創建的Bean來控制)
WEB-INF 下的fc-hyperlink.xml,配置瞭如何在圖層上添加一個超級鏈接,把什麼樣的數據傳輸過去。

四、關於ArcGIS的標註

使用Web前臺可以製作標註,這樣不用刷新這個圖層。用戶點擊相應的地方,可以用Ajax技術把座標傳到服務器端,服務器端再通過Ajax把結果作爲DIV 或者iframe的方式展現在WEB頁面上。

五、因爲要在同一時間調用相同的TOPMap控件,所以寫了兩個DLL來做。其實不必這麼麻煩。

具體怎麼弄,我也給忘了。

六、生成圖片,使用ArcGIS功能。

圖片導出不復雜,ArcGIS支持的不錯。生成的圖像是在Web Server上。
export.setExportFileName(outPath);
IEnvelope pEnvelope = pView.getExtent();
            //導出參數          
            export.setResolution(100);
            tagRECT exportRect = new tagRECT();
            exportRect.left = exportRect.top = 0;
            exportRect.right = 594;
            exportRect.bottom = 503;
IExport export = null;

七,ArcGIS 地圖服務器和Web Server的位置。

ArcGIS生成圖層的代碼都是Web服務器的,Web服務器向ArcGIS server發送soap調用,然後ArcGIS返回圖層Picture到web服務器。
如果是前臺標註,Web服務器來完成圖形繪製,標註也是由Web服務器自己畫的。

所以,背景圖層的路徑應該是ArcGIS Server所在的目錄。由TOPMap生成的圖層都在Web server上。所以得把TopMap生成的圖形文件拷貝到ArcGIS Server上,ArcGIS server不能載入不在本地磁盤的圖層文件,即使是共享文件夾也不行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章