ArcGIS Flex API中提供了点、线、面等几种常用的几何图形,当需要更多的几何图形时,需要扩展ArcGIS Flex API中的Geometry。大概思路是面状几何图形扩展Polygon,线状几何图形扩展Polyline。其中,Polygon有一个ring的数组组成,而Polyline由一个path组成。不管是ring,还是path,实质上都只是一个MapPoint的数组。
以五角星形为例:
package gispace.arcgisapiex.geometry
{
import com.esri.ags.SpatialReference;
import com.esri.ags.geometry.MapPoint;
import com.esri.ags.geometry.Polygon;
/**
* 五角星形
* @author ropp
*
*/
public class Pentagon extends Polygon
{
private var pointNum:int=5;
/**
*
* @param center 中心点
* @param majorRadius 长半径
* @param minorRadius 短半径
* @param spatialReference 空间参考
*
*/
public function Pentagon(center:MapPoint, majorRadius:Number, minorRadius:Number, spatialReference:SpatialReference=null)
{
super(null, spatialReference);
this.addRing(getPoints(center, majorRadius, minorRadius));
}
private function getPoints(center:MapPoint, majorRadius:Number, minorRadius:Number):Array
{
var x:Number;
var y:Number;
var angle:Number;
var points:Array=[];
var diff:Number = Math.PI/this.pointNum;
for (var i:int=0; i < this.pointNum; i++)
{
angle=Math.PI * 2 * i / this.pointNum;
x=center.x + majorRadius * Math.sin(angle);
y=center.y + majorRadius * Math.cos(angle);
points.push(new MapPoint(x, y));
angle += diff;
x=center.x + minorRadius * Math.sin(angle);
y=center.y + minorRadius * Math.cos(angle);
points.push(new MapPoint(x, y));
}
return points;
}
}
}
基于以上理解,提供一个ArcGIS Flex API Geometry的扩展,实现如下图所示的几何图形,包括圆弧、圆、椭圆、五角星形、等腰多边形、扇形等。