地图下载发布说明_第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

提交评论