地圖下載發布說明_第1頁
地圖下載發布說明_第2頁
地圖下載發布說明_第3頁
地圖下載發布說明_第4頁
地圖下載發布說明_第5頁
已閱讀5頁,還剩30頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、前言根據公司需要,需要根據某單位的地圖服務url進行地圖數據的下載,并且在我公司自己的地圖服務器(arcgisserver)進行地圖服務的發布;設計思路:1.地圖數據的下載與保存2.根據保存的下載數據生成圖層3.根據生成的圖層進行地圖的配置、渲染4.對配置好的地圖進行發布1. 地圖數據的下載開發環境:公司的java + flex開發環境,agslib-3.7-2014-11-06.swc(esri封裝的flex開發包)1.1地圖服務的組成:地圖是由圖層疊加組成的,圖層又分為矢量圖層(FeatureLayer)與柵格圖層(RaserLayer),由于本地圖中沒有柵格圖層,所有下載時不進行考慮1.

2、1.1 矢量圖層的組成矢量圖層包括:點圖層、線圖層、面圖層和注記圖層;本地圖服務中地圖不涉及注記圖層不需要考慮點、線、面圖層都是由要素(Feature)組成,要素(feature) = 圖形(geometry) + 屬性(attribute),1.1.2 如何建表根據矢量圖層可以知道,一個圖層對應的是一張表,一個要素(feature)則對應的是表中的一條數據. 根據地圖服務,可以看到圖層所具有的屬性字段,根據圖層有的屬性字段在表中添加相應字段以便于映射保存圖1.1.21(服務中看到的圖層屬性字段)圖1.1.22(圖層對應表結構)1.1.3圖形的保存點:結構簡單,只需要保存圖形的x、y坐標即可;

3、注意:字段名不能叫x或者y,因為字段名為單個字母時,調用我公司的框架save方法時值傳遞不過去。我取名為coordx和coordy(可以自定義修改)線:oracle數據庫無法直接保存線的結構,這里提到的線為折線(polyline);折線由多個路徑線段組成(多點連接成的線段)path;path由多個點順序連接而成.所以需要在oracle中多建立兩張表,一張保存polyline的path信息,一張保存path的point信息。Polyline應該有個唯一標識字段polylineid,path表中字段應該也有polylineid字段,標記這個path屬于哪個polyline,path表中還必須一個字

4、段ordercode表示他在path數組中的次序,保證日后在cs端數據生成時順序不亂;同理path表中有pathid字段,point表中數據有同樣pathid字段指向path表保存所屬關系;同樣point表也有ordercode字段用來排序;point表中coordx和coordy字段用來保存點的坐標;圖1.1.3-1(path表結構)圖1.1.3-2(point表結構)圖1.1.3-3(polyline結構示意圖)面:oracle數據庫無法直接保存面的結構,這里提到的線為曲面(polygon);面由多個路徑閉合環組成(多點連接成的閉合線段組成的面)ring;ring由多個點順序連接而成.所以

5、需要在oracle中多建立兩張表,一張保存polygon的ring信息,一張保存ring的point信息。Polygon應該有個唯一標識字段polygongid,ring表中字段應該也有polygonid字段,標記這個ring屬于哪個polygon,ring表中還必須一個字段ordercode表示他在ring數組中的次序,保證日后再cs端數據生成時順序不亂;同理ring表中有ringid字段,point表中數據有同樣ringid字段指向ring表保存所屬關系;同樣point表也有ordercode字段用來排序;point表中coordx和coordy字段用來保存點的坐標;圖1.1.3-4(ri

6、ng表結構)圖1.1.3-5(Point表結構)圖1.1.3-6(polygon結構示意圖)1.2代碼的編寫1.2.1 生成代碼根據上部創建的oracle數據庫表利用公司框架代碼生成器生成代碼,把生成代碼復制到相應位置,完成配置。1.2.2 查詢圖層public function queryAll(pageIndex:int,url:String):void/起始objectIdvar fromIndex:int =(pageIndex - 1)*1000;/終止objetIdvar toIndex:int = pageIndex*1000;/新建一個QueryTask/var queryTa

7、sk:QueryTask = new QueryTask("31:6080/arcgis/rest/services/CI/A4_CI_QYS/MapServer/20");var queryTask:QueryTask = new QueryTask(url);queryTask.showBusyCursor=true;/ Query對象var query:Query = new Query();/是否返回查詢結果的空間幾何信息query.returnGeometry = true;/查詢結果返回的字段,字段必須在圖層中,字段的大小寫可忽

8、略query.outFields="*"/quer.OutField.Add("*"); /返回所有字段 query.where = "ObjectID>" + fromIndex.toString() + "and ObjectID <=" + toIndex.toString();/異步查詢,需要綁定queryTask的兩個事件,通過ExecuteCompleted得到查詢結果queryTask.addEventListener(FaultEvent.FAULT,error);queryTask.a

9、ddEventListener(QueryEvent.EXECUTE_COMPLETE,backFun);queryTask.execute(query);/同步查詢,不需要綁定事件,直接返回查詢結果/FeatureSet featureSet = queryTask.Execute(query);1.2.3 保存數據在回調函數中獲得查詢結構,根據點、線、面數據結構的不同分別進行不同的保存。/保存graphics數據到數據庫private function saveGraphicsToOracle(arrGras:Array):void/歷遍返回結果中所有的面,映射保存到數組中for each

10、 (var result:Graphic in arrGras)if(result.geometry is Polygon)var pg:Polygon = result.geometry as Polygon;var pgGUID:String=UIDUtil.createUID();/面的唯一標識符var polygonModel:Polygon_gis = new Polygon_gis();polygonModel.polygoneid = pgGUID;polygonM = ;polygonArr.addItem(poly

11、gonModel);/歷遍面中所有的ring,映射保存到數組中for each(var ringArr:Array in pg.rings)var ringGUID:String=UIDUtil.createUID();/ring的唯一標識符var ringModel:Ring_gis = new Ring_gis();ringModel.ringid = ringGUID;ringModel.polygonid = pgGUID;_ringArr.addItem(ringModel);/歷遍ring中所有mappoint,映射保存到數組中for each (var mapPoint:MapP

12、oint in ringArr)var ptGUID:String=UIDUtil.createUID();/ring的唯一標識符var mapPointModel:Mappoint_gis = new Mappoint_gis();mapPointModel.coordx = mapPoint.x.toString();mapPointModel.coordy = mapPoint.y.toString();mapPointModel.mappointid = ptGUID;mapPointModel.ringid = ringGUID;mapppointArr.addItem(mapPoi

13、ntModel);/保存mappoint數據到數據庫/if(mapppointArr.length>0)/dataBaseServer.savePolygonData(mapppointArr,"mappoint_gisController");/保存ring數據到數據庫/if(_ringArr.length>0)/dataBaseServer.savePolygonData(_ringArr,"ring_gisController");/保存面數據到數據庫/if(polygonArr.length>0)/dataBaseServer.

14、savePolygonData(polygonArr,"polygon_gisController");/保存mappoint數據到數據庫if(mapppointArr.length>0)dataBaseServer.savePolygonData(mapppointArr,"mappoint_gisController");/保存ring數據到數據庫if(_ringArr.length>0)dataBaseServer.savePolygonData(_ringArr,"ring_gisController");/保存面

15、數據到數據庫if(polygonArr.length>0)dataBaseServer.savePolygonData(polygonArr,"polygon_gisController");/執行下次查詢/queryCoutn+;/Alert(queryCoutn.toString();/queryAll(queryCoutn);1.2.4 具體操作Queryall方法中設置好查詢url方法中設置映射的model 配置保存時候調用的后臺Controller運行程序根據點、線、面圖層的不同選擇點擊按鈕,點擊之后出現“保存成功”提示后依次增加中的數字(arcgisser

16、ver地圖服務查詢最多返回1000條數據,1表示根據arcgis默認主鍵objectid排序,查詢前1000條數據),繼續點擊按鈕,知道出現提示“到頭了”提示后,完成單個圖層下載。根據圖層數量,重復以上操作完成下載。1.2.5 程序優化及為實現原因現在xml文件dataDownLoad.xml配置如下:?xml version="1.0" encoding="UTF-8"?><root><!- 圖層下載配置id 標簽的唯一標識符layerType 圖層類型(點、線、面)ControllerName 后臺Controller的名字m

17、odelClassName 圖層中每個要素在flex中映射成的類 -><layers><layer id = "0" url = "/2:6080/arcgis/rest/services/%E6%97%A0%E6%A0%87%E9%A2%98/MapServer/0" layerType = "point" ControllerName = "ptlytest_testController" modelClassName ="com.lhd.test.mod

18、el.Ptlytest_test"></layer><!-<layer id = "1" url = "/2:6080/arcgis/rest/services/%E6%97%A0%E6%A0%87%E9%A2%98/MapServer/1" layerType = "polyline" ControllerName = "pllayertest_gisController" modelClassName ="Pllayertest_gis&q

19、uot;></layer><layer id = "2" url = "/2:6080/arcgis/rest/services/%E6%97%A0%E6%A0%87%E9%A2%98/MapServer/2" layerType = "polygon" ControllerName = "propolygon_gisController" modelClassName ="Propolygon_gis"></layer>->

20、</layers></root>遍歷layer節點,根據屬性自動完成下載失敗原因:1.Flex 反射機制不同于java,在根據去反射對象必須先聲明變量否則flex模塊不編譯此類型,反射不到對象2.保存數據結束后再次調用queryall方法時沒反應。2. 數據的生成開放環境:win7操作系統(64位),oracle10g客戶端(32位),arcgisengine10.2,VisualStudio2010;2.1環境搭建VisualStudio2010安裝,只需要點擊下一步即可;Arcgis安裝:點擊安裝上述三項破解:打開arcgis10.2 (含破解)Arcgis 10.2安裝與破解工具方法一 替換 License10.2bin 下的 service.txt改成你的主機名停止服務arcgis10.2 (含破解)Arcgis 10.2安裝與破解工具方法一 替換 License10.2bin 下的覆蓋到License的安裝路徑下C:Program

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論