免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 1101|回复: 0
收起左侧

[技术交流] 南沙政府应急系统之GIS一张图(arcgis api for flex)讲解(九)地图定位模块

[复制链接]

45

主题

8272

铜板

17

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
1122
QQ
发表于 2016-10-20 10:02 | 显示全部楼层 |阅读模式
config.xml文件的配置如下:
  1.     <widget label="地图定位" config="widgets/esri/Location/LocationWidget.xml"
  2.             icon="assets/images/ditudingwei.png" url="widgets/esri/Location/LocationWidget.swf" />
复制代码
源代码目录如下:
界面效果:
大概的思路如下:定位有两种方式:1.后台数据库关联的,即是从后台数据库读取事故列表的定位数据,然后加载出来显示在地图上;2.直接在地图上点击某处,获取该处的定位点信息。两者的共同点都是根据经纬度来定位。
LocationWidget.xml:配置数据库事故列表的字段信息
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <!--    <icon>assets/images/i_target.png</icon>-->
  4.     <icon>assets/images/Red_glow.swf</icon>
  5.     <title>{name}</title>
  6.     <fields>         
  7.         <field name="type" alias="事件类别" visible="true" />
  8.         <field name="event_level_display" alias="事件级别" visible="true" />
  9.         <field name="event_level" alias="事件级别Id" visible="false" />
  10.         <field name="event_time" alias="事发时间" visible="true" />
  11.         <field name="event_man" alias="联系人" visible="true" />
  12.         <field name="event_status" alias="状态" visible="false" />
  13.         <field name="event_status_display" alias="状态" visible="true" />
  14.     </fields>
  15. </configuration>
复制代码
LocationWidget.mxml:这里截取核心实现部分
  1. protected function list1_clickHandler(event:ListEvent):void
  2.             {
  3.                 graphicsLayer.clear();
  4.                 // TODO Auto-generated method stub
  5.                 var graphic:Graphic=lstEvent.selectedItem as  Graphic;//获取事故列表某项数据,转换graphic
  6.                 if(graphic.attributes.X==0 || graphic.attributes.Y==0){//判断事故定位数据是否合法
  7.                     Alert.show("此事件没有坐标信息,");
  8.                 }else{
  9.                     zoomToFeature(graphic);//跳转到定位函数
  10.                 }
  11.                
  12.             }
  13.             //定位函数
  14.             private function zoomToFeature(feature:Graphic):void{
  15.                 var mapPoint:MapPoint = feature.geometry as MapPoint;//获取经纬度
  16.                 mapPoint.spatialReference=new SpatialReference(4326);
  17.                 this.longitudeText.text="";
  18.                 this.latitudeText.text="";
  19.                 longitudeText.text="经度:"+mapPoint.x.toFixed(4).toString();
  20.                 latitudeText.text="纬度:"+mapPoint.y.toFixed(4).toString();
  21.                 //                var popUpRenderer:CustomPopUpRenderer=new CustomPopUpRenderer();
  22.                 var popUpRenderer:PopUpRenderer=new PopUpRenderer();//设置气泡窗口
  23.                 //popUpRenderer.forceSetMap(this._featureLayer.map);
  24.                 var popUpInfo:PopUpInfo=(this.graphicLayer.infoWindowRenderer as  ClassFactory).properties.popUpInfo;
  25.                 popUpInfo.showZoomToButton=true;
  26.                 popUpRenderer.popUpInfo=popUpInfo;                        
  27.                 popUpRenderer.graphic=feature;   
  28.                 //                if(!popUpRenderer.map)popUpRenderer.userMap=this.map;
  29.                 this.map.infoWindow.content=popUpRenderer;   
  30.                 this.map.level=7;
  31.                 this.map.zoomTo(feature.geometry);
  32.                 this.map.infoWindow.show(mapPoint);   
  33.                 this.addSharedData("event_point", new ArrayCollection([mapPoint]));
  34.                 var message:String="确定接入点,坐标为:x=" + mapPoint.x + " y=" + mapPoint.y;
  35.                 doBufferByPoint(mapPoint);
  36.             }
  37.             
  38.             //添加分析的方法 start
  39.             private var lastDrawGraphic:Graphic;
  40.             private function doBufferByPoint(mapPoint:MapPoint):void
  41.             {
  42.                 var base:Number=Number(500);
  43.                 var classNumber:Number=Number(1);
  44.                 var interval:Number=Number(500);
  45.                 var distances:Array=[];
  46.                 if (classNumber >= 1)
  47.                 {
  48.                     for (var i:int=0; i < classNumber; i++)
  49.                     {
  50.                         distances.push(base + i * interval);
  51.                     }
  52.                 }
  53.                 doBuffer(mapPoint, distances);
  54.                
  55.             }
  56.             
  57.             
  58.             private function doBuffer(geometry:Geometry, distances:Array):void
  59.             {
  60.                 var radius:Number=Number(500);
  61.                 var param:BufferParameters=new BufferParameters();
  62.                 param.geometries=[geometry];
  63.                 param.distances=distances;
  64.                 //param.geodesic=true;
  65.                 //4326需要加上这个单位
  66.                 param.unit=GeometryService.UNIT_METER;
  67.                 //param.outSpatialReference=new SpatialReference(4326);
  68.                 geometryService.buffer(param);
  69.                
  70.                 lastDrawGraphic = new Graphic(geometry);   
  71.                 var label:String = "面积:" + numFormatter.format(3.14*radius*radius/1000000) + "平方千米";
  72.                 label += "\n" + "半径:" + numFormatter.format(radius/1000) + "千米";
  73.                 addDrawLabel(label, lastDrawGraphic);
  74.             }
  75.             
  76.             private function addDrawLabel(label:String, lastDrawnGraphic:Graphic):void
  77.             {
  78.                 var txtSym:TextSymbol = new TextSymbol(label);
  79.                 txtSym.yoffset = 8;
  80.                 var txtFormat:TextFormat = new TextFormat("Arial", 12, 0x000000, true); // black label
  81.                 txtSym.textFormat = txtFormat;
  82.                 lastDrawnGraphic.symbol = txtSym;
  83.             }
复制代码

GIS作品:百度搜索:GIS之家(https://shop116521643.taobao.com/shop/view_shop.htm);
QQ兴趣部落GIS技术交流:gis之家(http://buluo.qq.com/p/barindex.html?bid=327395);
GIS技术交流群:432512093

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表