zoukankan      html  css  js  c++  java
  • 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(九)地图定位模块

    config.xml文件的配置如下:

            <widget label="地图定位" config="widgets/esri/Location/LocationWidget.xml" 
                icon="assets/images/ditudingwei.png" url="widgets/esri/Location/LocationWidget.swf" />

    源代码目录如下:

    界面效果:

    大概的思路如下:定位有两种方式:1.后台数据库关联的,即是从后台数据库读取事故列表的定位数据,然后加载出来显示在地图上;2.直接在地图上点击某处,获取该处的定位点信息。两者的共同点都是根据经纬度来定位。

    LocationWidget.xml:配置数据库事故列表的字段信息

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    <!--    <icon>assets/images/i_target.png</icon>-->
        <icon>assets/images/Red_glow.swf</icon>
        <title>{name}</title>
        <fields>         
            <field name="type" alias="事件类别" visible="true" />
            <field name="event_level_display" alias="事件级别" visible="true" />
            <field name="event_level" alias="事件级别Id" visible="false" />
            <field name="event_time" alias="事发时间" visible="true" />
            <field name="event_man" alias="联系人" visible="true" />
            <field name="event_status" alias="状态" visible="false" />
            <field name="event_status_display" alias="状态" visible="true" />
        </fields>
    </configuration>

    LocationWidget.mxml:这里截取核心实现部分

            protected function list1_clickHandler(event:ListEvent):void
                { 
                    graphicsLayer.clear();
                    // TODO Auto-generated method stub
                    var graphic:Graphic=lstEvent.selectedItem as  Graphic;//获取事故列表某项数据,转换graphic
                    if(graphic.attributes.X==0 || graphic.attributes.Y==0){//判断事故定位数据是否合法
                        Alert.show("此事件没有坐标信息,");
                    }else{
                        zoomToFeature(graphic);//跳转到定位函数 
                    }
                    
                }
                //定位函数
                private function zoomToFeature(feature:Graphic):void{
                    var mapPoint:MapPoint = feature.geometry as MapPoint;//获取经纬度
                    mapPoint.spatialReference=new SpatialReference(4326);
                    this.longitudeText.text="";
                    this.latitudeText.text="";
                    longitudeText.text="经度:"+mapPoint.x.toFixed(4).toString();
                    latitudeText.text="纬度:"+mapPoint.y.toFixed(4).toString();
                    //                var popUpRenderer:CustomPopUpRenderer=new CustomPopUpRenderer();
                    var popUpRenderer:PopUpRenderer=new PopUpRenderer();//设置气泡窗口
                    //popUpRenderer.forceSetMap(this._featureLayer.map); 
                    var popUpInfo:PopUpInfo=(this.graphicLayer.infoWindowRenderer as  ClassFactory).properties.popUpInfo;
                    popUpInfo.showZoomToButton=true;
                    popUpRenderer.popUpInfo=popUpInfo;                        
                    popUpRenderer.graphic=feature;    
                    //                if(!popUpRenderer.map)popUpRenderer.userMap=this.map;
                    this.map.infoWindow.content=popUpRenderer;    
                    this.map.level=7;
                    this.map.zoomTo(feature.geometry);
                    this.map.infoWindow.show(mapPoint);    
                    this.addSharedData("event_point", new ArrayCollection([mapPoint]));
                    var message:String="确定接入点,坐标为:x=" + mapPoint.x + " y=" + mapPoint.y; 
                    doBufferByPoint(mapPoint);
                }
                
                //添加分析的方法 start
                private var lastDrawGraphic:Graphic;
                private function doBufferByPoint(mapPoint:MapPoint):void
                {
                    var base:Number=Number(500);
                    var classNumber:Number=Number(1);
                    var interval:Number=Number(500);
                    var distances:Array=[];
                    if (classNumber >= 1)
                    {
                        for (var i:int=0; i < classNumber; i++)
                        {
                            distances.push(base + i * interval);
                        }
                    }
                    doBuffer(mapPoint, distances);
                    
                }
                
                
                private function doBuffer(geometry:Geometry, distances:Array):void
                {
                    var radius:Number=Number(500);
                    var param:BufferParameters=new BufferParameters();
                    param.geometries=[geometry];
                    param.distances=distances;
                    //param.geodesic=true;
                    //4326需要加上这个单位
                    param.unit=GeometryService.UNIT_METER;
                    //param.outSpatialReference=new SpatialReference(4326);
                    geometryService.buffer(param);
                    
                    lastDrawGraphic = new Graphic(geometry);    
                    var label:String = "面积:" + numFormatter.format(3.14*radius*radius/1000000) + "平方千米";
                    label += "
    " + "半径:" + numFormatter.format(radius/1000) + "千米";
                    addDrawLabel(label, lastDrawGraphic);
                }
                
                private function addDrawLabel(label:String, lastDrawnGraphic:Graphic):void
                {
                    var txtSym:TextSymbol = new TextSymbol(label);
                    txtSym.yoffset = 8;
                    var txtFormat:TextFormat = new TextFormat("Arial", 12, 0x000000, true); // black label
                    txtSym.textFormat = txtFormat;
                    lastDrawnGraphic.symbol = txtSym;
                }    

    备注:

    GIS技术交流QQ群:432512093

    WebGIS二次开发培训入门群: 238339408

  • 相关阅读:
    JAVA DBUTils和连接池
    JAVA jsp技术
    java cookie学习
    grub引导
    更改网卡顺序及名称
    ambari 警告信息
    radhat7.2 救援模式
    radhat7.2 系统引导修复
    sehll编程入门
    HBase安装部署
  • 原文地址:https://www.cnblogs.com/giserhome/p/5136911.html
Copyright © 2011-2022 走看看