zoukankan      html  css  js  c++  java
  • 根据一定格式的坐标串,生成图形展示

    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/mx"
    minWidth="955"
    minHeight="600"
    xmlns:esri="http://www.esri.com/2008/ags"
    creationComplete="application1_creationCompleteHandler(event)">
    <fx:Script>
    <![CDATA[
    import com.esri.ags.Graphic;
    import com.esri.ags.SpatialReference;
    import com.esri.ags.events.GeometryServiceEvent;
    import com.esri.ags.geometry.Extent;
    import com.esri.ags.geometry.Geometry;
    import com.esri.ags.geometry.MapPoint;
    import com.esri.ags.geometry.Polygon;
    import com.esri.ags.geometry.Polyline;
    import com.esri.ags.symbols.SimpleFillSymbol;
    import com.esri.ags.symbols.SimpleLineSymbol;
    import com.esri.ags.symbols.SimpleMarkerSymbol;
    import com.esri.ags.symbols.Symbol;
    import com.esri.ags.tasks.GeometryService;

    import mx.controls.Alert;
    import mx.core.FlexGlobals;
    import mx.events.FlexEvent;
    import mx.rpc.AsyncResponder;
    import mx.rpc.IResponder;
    import mx.rpc.Responder;
    import mx.rpc.events.FaultEvent;
    import mx.rpc.events.ResultEvent;
    import mx.rpc.soap.mxml.WebService;
    import mx.utils.StringUtil;

    private var lslid:String="";
    private var xslid:String="";
    private var type:String="";
    private var webserviceurl:String="";

    private var toExtent:Extent=null;//存储累计的extent
    private var geometryurl:String="http://192.168.2.74/ArcGIS/rest/services/Geometry/GeometryServer";


    private var webService:WebService=null;



    /* private var ZBstr:String="7,4382950.00,39395150.00,4383250.00,39395167.00,4383470.00,39395680.00,4383385.00,39395719.00,4383190.00,39395483.00,4382950.00,39395610.00,4382850.00,39395318.00,"+
    "1*7,4382973.43,39394626.14,4382820.00,39395060.00,4382790.00,39395630.00,4382550.00,39395620.00,4382450.00,39395450.00,4382620.00,39394950.00,4382617.83,39394451.57,"+
    "1*4,4383840.00,39395700.00,4383840.00,39396203.00,4383640.00,39396203.00,4383640.00,39395700.00,"+
    "1*10,4383100.00,39395767.00,4383157.00,39396244.00,4383225.00,39396314.00,4383090.00,39396645.00,4383394.00,39396677.00,4383481.57,39396849.57,4382947.87,39396697.06,"+
    "4382922.00,39396526.00,4382870.00,39396136.00,4382896.00,39395767.00,1" ;
    */

    private var qkArray:Array=null;

    protected function application1_creationCompleteHandler(event:FlexEvent):void
    {
    type=FlexGlobals.topLevelApplication.parameters.type;
    lslid=FlexGlobals.topLevelApplication.parameters.lslid;
    xslid=FlexGlobals.topLevelApplication.parameters.xslid;

    if(StringUtil.trim(lslid).length==0)
    {
    lslid="@#$%^&";
    zbSM(-1,1);
    }
    if(StringUtil.trim(xslid).length==0)
    {
    xslid="@#$%^&";
    zbSM(1,-1);
    }


    webserviceurl=FlexGlobals.topLevelApplication.parameters.webserviceurl;

    webService=new WebService();
    webService.useProxy=false;
    webService.wsdl=webserviceurl;
    webService.loadWSDL();

    webService.RelationStr.addEventListener( ResultEvent.RESULT, getZbResult);
    webService.RelationStr.addEventListener( FaultEvent.FAULT,FaultResult);

    webService.RelationStr(type,xslid,lslid);
    }

    private function getZbResult(event:ResultEvent):void//从服务获取坐标id并传给方法生成图形
    {
    var lzb:String=event.result.toString().split("&")[0];
    var xzb:String=event.result.toString().split("&")[1];

    if(StringUtil.trim(lzb).length==0&&lslid!="@#$%^&")
    {
    zbSM(0,1);
    }
    if(StringUtil.trim(xzb).length==0&&xslid!="@#$%^&")
    {
    zbSM(1,0);
    }

    if(type=="ckq")
    {
    if(StringUtil.trim(lzb)!="")
    {
    makeGraphicFromZbstr(StringUtil.trim(lzb),0xFF0000,3);
    }
    if(StringUtil.trim(xzb)!="")
    {
    makeGraphicFromZbstr(StringUtil.trim(xzb),0x0000FF,1);
    }

    if(toExtent!=null)
    {
    this.myMap.extent=toExtent.expand(1.5);
    this.myMap.centerAt(toExtent.center);
    }
    }
    else (type=="tkq")
    {
    if(StringUtil.trim(lzb)!="")
    {
    makeGraphicFromZbstrbyJWD(StringUtil.trim(lzb),0xFF0000,3);
    }
    if(StringUtil.trim(xzb)!="")
    {
    makeGraphicFromZbstrbyJWD(StringUtil.trim(xzb),0x0000FF,1);
    }
    }

    }
    private function FaultResult(event:FaultEvent):void
    {
    var a:String=event.message.toString();
    }
    //经纬度到平面的坐标转换
    private function JWzbToPMzb(poly:Array,color:Number,int):void
    {
    var Dest_referenc:SpatialReference=new SpatialReference(2363);
    var geosrv:GeometryService=new GeometryService(geometryurl);

    geosrv.project(poly,Dest_referenc,new AsyncResponder(onResult, onFault));
    function onFault(evt:Object, token:Object):void
    {
    Alert.show("坐标转换异常!","提示");
    }
    function onResult(evt:Object, token:Object):void
    {
    var geoAry:Array=evt as Array;
    if(geoAry.length==poly.length)
    {
    addGraphic(geoAry,color,width);//根据转换好的图形数组geoAry,添加到graphiclayer中
    }

    }
    }
    //根据平面坐标,解析多个区块
    private function makeGraphicFromZbstr(ZBstr:String,color:Number,int):void
    {
    qkArray=ZBstr.split("*");

    for(var j:int =0;j<qkArray.length;j++)//解析区块数组
    {
    var zbArray:Array=qkArray[j].toString().split(",");
    var pointNum:Number=Number(zbArray[0]);

    var firstPoint:MapPoint=null;
    var points:Array=new Array();
    var geom:Geometry=null;
    var grap:Graphic=new Graphic();

    if(pointNum>1)//表示面信息
    {
    for(var i:int=0;i+2<zbArray.length;i=i+2)//解析坐标数组
    {
    var x:Number=Number(zbArray[1+i]);
    var y:Number=Number(zbArray[2+i]);
    var tempPoint:MapPoint=new MapPoint(y,x);
    if(i==0)
    {
    firstPoint=tempPoint;
    }
    points.push(tempPoint);
    }
    points.push(firstPoint);//在最后追加第一个点

    addGraphic(points,color,width);//添加到graphiclayer中
    }
    }
    }

    //根据经纬度坐标,解析多个区块
    private function makeGraphicFromZbstrbyJWD(ZBstr:String,color:Number,int):void
    {
    qkArray=ZBstr.split("*");

    for(var j:int =0;j<qkArray.length;j++)//解析区块数组
    {
    var zbArray:Array=qkArray[j].toString().split(",");
    var pointNum:Number=Number(zbArray[0]);

    var firstPoint:MapPoint=null;
    var points:Array=new Array();


    if(pointNum>1)//表示面信息
    {
    for(var i:int=0;i+2<zbArray.length;i=i+2)//解析坐标数组
    {
    var x:Number=Number(zbArray[1+i]);
    var y:Number=Number(zbArray[2+i]);
    var tempPoint:MapPoint=new MapPoint(x,y,new SpatialReference(4326));
    if(i==0)
    {
    firstPoint=tempPoint;
    }
    points.push(tempPoint);
    }
    points.push(firstPoint);//在最后追加第一个点

    JWzbToPMzb(points,color,width);//添加到graphiclayer中
    }
    }
    }

    //根据图形数组,添加到Graphiclayer
    private function addGraphic(points:Array,color:Number,int):void
    {
    var geom:Geometry=null;
    var grap:Graphic=new Graphic();

    if(points.length>1)//生成几何图形
    {
    geom=new Polygon([points]);
    grap.symbol=new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,color,0,new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,color,1,width));
    grap.geometry=geom;
    }
    if(this.myGraphicLayer!=null)
    {
    this.myGraphicLayer.add(grap);
    if(toExtent==null)
    {
    toExtent=grap.geometry.extent;
    }
    else
    {
    toExtent=toExtent.union(grap.geometry.extent);
    }
    }

    if(toExtent!=null)
    {
    this.myMap.extent=toExtent.expand(1.5);
    this.myMap.centerAt(toExtent.center);
    }
    }

    private function zbSM(lzb:int,xzb:int):void
    {
    if(lzb==-1)
    {
    bcsm.text="未找到历史矿区范围信息,无法解析!"
    }
    if(xzb==-1)
    {
    bcsm.text="未找到当前矿区范围信息,无法解析!"
    }

    if(lzb==0)
    {
    bcsm.text="历史矿区范围信息异常,无法解析!"
    }
    if(xzb==0)
    {
    bcsm.text="当前矿区范围信息异常,无法解析!"
    }
    }


    ]]>
    </fx:Script>
    <fx:Declarations>
    <!-- 将非可视元素(例如服务、值对象)放在此处 -->
    </fx:Declarations>

    <mx:HBox width="100%" height="20" horizontalAlign="center" backgroundColor="0xE6E6E6">
    <s:Label color="red" fontSize="14" text="红色为历史矿区范围图,"/>
    <s:Label color="blue" fontSize="14" text="蓝色为当前矿区范围图."/>
    <s:Spacer width="100"/>
    <s:Label id="bcsm" fontSize="14" color="red" />
    </mx:HBox>

    <esri:Map id="myMap" logoVisible="false" zoomSliderVisible="false" scaleBarVisible="false" >
    <esri:GraphicsLayer id="myGraphicLayer">

    </esri:GraphicsLayer>
    </esri:Map>





    </s:Application>

     坐标有平面坐标,也有经纬度坐标,经纬度的坐标要先转换成平面坐标,然后再进行操作。

  • 相关阅读:
    js 复杂研究
    js 页面 保持状态 的方法
    C# 向上取整数
    js 获取dom 为null 测试
    net core 下 接受文件 测试
    layui 源码解读(部分)
    js 定时器
    js addEventListener
    C# 获得对象的命名空间 ?.
    修改maven的默认jdk版本
  • 原文地址:https://www.cnblogs.com/tiandi/p/2319975.html
Copyright © 2011-2022 走看看