根据一定格式的坐标串,生成图形展示

<?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>

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

原文地址:https://www.cnblogs.com/tiandi/p/2319975.html