1、数据来源获取
数据源获取有多种方式:
1)通过ArcGIS桌面将业务数据库数据导出成ArcGIS要素类,这种方式是最原始的,也比较简单
2)通过AO程序自动将业务表读取到SDE数据库中,实现数据的自动后面导入,这个在后续博客中,也会和大家分享
3)通过WebService,从业务客户端,自动生成数据展现,这是这篇博客采用的方式
如下:
protected function application1_creationCompleteHandler(event:FlexEvent):void { var service:HTTPService = new HTTPService(); service.url = "http://*.*.*.*:*/wnms_web/3gtest/dtMap_view.cst"; service.useProxy = false; service.resultFormat="text"; service.addEventListener(ResultEvent.RESULT,http_resultHandler); service.addEventListener(FaultEvent.FAULT,http_resultHandler); var param:URLVariables = new URLVariables(); param["vo.startTime"] = "2012.05.01 00:00:00"; param["vo.endTime"] = "2012.05.16 23:59:59"; param["uesvo.uesName"] = "1,2,3,4,5,6"; param["vo.chooseType"] = "1"; param["vo.chooseId"] = "-1"; param["vo.kpiId"] = "-1"; param["vo.phoneType"] = "-1"; param["vo.cellType"] = "-1"; service.send(param); } protected function http_resultHandler(event:ResultEvent):void { trace(1); var data:String = event.result.toString(); data = data.replace( /\s/g, '' ); var jd:JSONDecoder = new JSONDecoder(data,true); var obj:Object=jd.getValue(); arr=obj.vos; map1_loadHandler(null); }
2、数据投影
地图数据投影变换涉及到大量的算法,网上也不乏有很多介绍的,在这次研究中,我们还是直接用Flex API来实现,在客户端主要有两种实现方法:
1)客户端实现投影变化,对于WebMercator与地理坐标下的转变com.esri.ags.utils包下的WebMercatorUtil提供了转换现成的正投影及反投影的方法,对于一个特殊的投影也可以通过寻找相关投影变化的算法自己实现,建议慎重考虑。
2)通过远程服务器实现批量投影,需要通过ArcGIS Server发布的几何服务来实现 ,这也是本次博客要介绍的方法,代码如下:
protected function map1_loadHandler(event:MapEvent):void { trace(2); //trace("lat-->" + arr[0].latitude); //trace("lng-->" + arr[0].longitude); //坐标投影 for(var i:int=0;i<arr.length;i++){ var lon:Number = arr[i].longitude as Number; var lat:Number = arr[i].latitude as Number; //var obj:Object = this.lonLat2Mercator({'x':lon,'y':lat}); var myPoint:Geometry = new MapPoint(arr[i].longitude, arr[i].latitude,new SpatialReference(4326)); points4326.addItem(myPoint); } projectNow(points4326.toArray()); } //进行投影 private function projectNow(mapPoints4326:Array):void { var outSR:SpatialReference = new SpatialReference(3857); // Note: GeometryService takes in geometries instead of graphics as input geometryService.project(mapPoints4326, outSR); }