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>

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

  • 相关阅读:
    Windows 科研软件推荐
    有关Python 包 (package) 的基本知识
    《Using Python to Access Web Data》Week4 Programs that Surf the Web 课堂笔记
    Coursera助学金申请模板
    《Using Databases with Python》 Week2 Basic Structured Query Language 课堂笔记
    Jupyter 解决单个变量输出问题
    解决 pandas 中打印 DataFrame 行列显示不全的问题
    《Using Python to Access Web Data》 Week3 Networks and Sockets 课堂笔记
    缓存击穿及解决方案
    jvm垃圾收集器
  • 原文地址:https://www.cnblogs.com/tiandi/p/2319975.html
Copyright © 2011-2022 走看看