微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于ArcGIS Flex API实现动态标绘1.2

动态标绘API 1.2,相较前一版本(点击进入),该版本新增对基本标绘符号的支持包括

单点、多点、折线、手绘线、多边形、手绘多边形、矩形,并提供相应的编辑功能

如下图所示,对多点的编辑。

下图,用单点表示坦克,多点表示战斗机群。

实例代码如下:

private var plotDrawTool:PlotDrawTool;
private var plotEditTool:PlotEditTool;

private var outline:SimpleLinesymbol = new SimpleLinesymbol("solid",0xff0000,1,1);
private var markerOutline:SimpleLinesymbol = new SimpleLinesymbol("dash",0x000000,2);
private var tank:PictureMarkerSymbol = new PictureMarkerSymbol("assets/tank.png");
private var plane:PictureMarkerSymbol = new PictureMarkerSymbol("assets/plane.png");
private var markerSymbol:SimpleMarkerSymbol = new SimpleMarkerSymbol("circle",25,markerOutline);
private var multiMarkerSymbol:SimpleMarkerSymbol = new SimpleMarkerSymbol("circle",0x00ff00,markerOutline);
private var linesymbol:SimpleLinesymbol = new SimpleLinesymbol("dash",0x0000ff,2);
private var fillSymbol:SimpleFillSymbol = new SimpleFillSymbol("solid",0.5,outline);

private static const STATE_MOVE_SCALE_ROTATE:int = 0;
private static const STATE_EDIT_CONTROL_POINTS:int = 1;

private var editState:int = 0;
private var activePlot:Graphic;

private function init():void{
	// 实例化绘制工具
	this.plotDrawTool = new PlotDrawTool(map);
	// 监听 DRAW_END事件,绘制结束后可获得plot
	this.plotDrawTool.addEventListener(PlotDrawEvent.DRAW_END,drawEndHandler);
	// 实例化编辑工具
	this.plotEditTool = new PlotEditTool(map);
}

private function drawEndHandler(event:PlotDrawEvent):void{
	// 对plot设置渲染符号
	var geometry:Geometry = event.plotGraphic.geometry;
	if(geometry is polygon)
		event.plotGraphic.symbol = fillSymbol;
	else if(geometry is polyline)
		event.plotGraphic.symbol = linesymbol;
	else if(geometry is MapPoint)
		event.plotGraphic.symbol = tank;
	else if(geometry is Multipoint)
		event.plotGraphic.symbol = plane;
	// 显示
	this.graphicslayer.add(event.plotGraphic);
	// 设置鼠标单击事件响应
	event.plotGraphic.addEventListener(MouseEvent.CLICK,graphicclickHandler);
}

private function graphicclickHandler(event:MouseEvent):void{
	var graphic:Graphic = event.currentTarget as Graphic;
	if(graphic == this.activePlot){
		if(this.editState == STATE_MOVE_SCALE_ROTATE){
			// 开启 移动+编辑控制点 状态
			this.plotEditTool.activate(PlotEditTool.MOVE|PlotEditTool.EDIT_CONTROL_POINTS,graphic);
			this.editState = STATE_EDIT_CONTROL_POINTS;
		}
		else{
			// 开启 移动+旋转缩放 状态
			this.plotEditTool.activate(PlotEditTool.MOVE|PlotEditTool.SCALE_ROTATE,graphic);
			this.editState = STATE_MOVE_SCALE_ROTATE;
		}
	}
	else{
		this.activePlot = graphic;
		this.plotEditTool.activate(PlotEditTool.MOVE|PlotEditTool.EDIT_CONTROL_POINTS,graphic);
		this.editState = STATE_EDIT_CONTROL_POINTS;
	}
}

示例代码下载地址 点击下载

在线体验  点击进入体验

欢迎大家使用、反馈意见。

QQ:21587252  email:gispace@yeah.net

您也可以加入 动态标绘讨论 QQ群  318659439 ,一起讨论具体需求和实现。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐