config.xml文件的配置如下:

        <widget label="态势标绘" icon="assets/images/impact_area_over.png"
config="widgets/esri/NewPlot/NewPlotWidget.xml" url="widgets/esri/NewPlot/NewPlotWidget.swf" />

源代码目录如下:

界面效果:

大概的思路如下:利用arcgis api  for flex的draw绘制接口以及一个第三方的绘制api PlotAPI4flex,来绘制各种箭头以及多边形、圆形等图形,文本和图片的绘制用的是arcgis api。

NewPlotWidget.xml:配置计算周长和面积的单位信息等等

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<geometryservice>http://localhost:6080/arcgis/rest/services/Utilities/Geometry/GeometryServer</geometryservice>
<spatialref>4326</spatialref>
<distanceunit>千米</distanceunit>
<areaunit>平方公里</areaunit>
<showMeasurements>显示测量结果</showMeasurements>
<perimeter>周长:</perimeter>
<arealabel>面积:</arealabel> </configuration>

NewPlotWidget.mxml:

简单的描述一下思路好了

1.响应绘制的事件,要激活draw工具:

            //集成后的标会响应函数
private function activateDrawTool(event:MouseEvent):void
{
this.drawToolbar.deactivate();
graphicsLayer.visible=true;
selectedDrawingIcon =BorderImage(event.currentTarget);
clearSelectionFilter();
selectedDrawingIcon.filters = [ glowFilter ]; finishDrawing = false;
showMeasurements = false;
drawType = selectedDrawingIcon.name; borVisibleChange(selectedDrawingIcon.id); switch (drawType)
{ case DrawTool.POLYLINE:
{
addingPlot=false;
drawingPolygon = false;
drawingLine = true;
showMeasurements = true; outlineColorId.visible=false;
outlineColor.visible=false; drawStatus = drawLineLabel; this.drawtool.deactivate();
setMapAction(drawType, drawStatus, lineSymbol, drawEnd);
break;
}
case DrawTool.FREEHAND_POLYLINE:
{
addingPlot=drawingPolygon =false;
drawingLine=showMeasurements = true; outlineColorId.visible=false;
outlineColor.visible=false; drawStatus = drawFreehandLineLabel; this.drawtool.deactivate();
setMapAction(drawType, drawStatus, lineSymbol, drawEnd);
break;
}
case DrawTool.POLYGON:
{
addingPlot= drawingLine = false;
drawingPolygon = showMeasurements = true; outlineColorId.visible=true;
outlineColor.visible=true; drawStatus = drawPolygonLabel; this.drawtool.deactivate();
setMapAction(drawType, drawStatus, fillSymbol, drawEnd);
break;
}
case DrawTool.EXTENT:
{
addingPlot= drawingLine = false;
drawingPolygon = showMeasurements = true; outlineColorId.visible=true;
outlineColor.visible=true; drawStatus = drawExtentLabel; this.drawtool.deactivate();
setMapAction(drawType, drawStatus, fillSymbol, drawEnd);
break;
}
case DrawTool.CIRCLE:
{
addingPlot= drawingLine = false;
drawingPolygon = showMeasurements = true; outlineColorId.visible=true;
outlineColor.visible=true; drawStatus = drawCircleLabel; this.drawtool.deactivate();
setMapAction(drawType, drawStatus, fillSymbol, drawEnd);
break;
}
case DrawTool.FREEHAND_POLYGON:
{
addingPlot= drawingLine = false;
drawingPolygon =showMeasurements = true; outlineColorId.visible=true;
outlineColor.visible=true; drawStatus = drawFreehandPolygonLabel; this.drawtool.deactivate();
setMapAction(drawType, drawStatus, fillSymbol, drawEnd);
break;
}
case DrawTool.MAPPOINT:
{
this.addingPlot=drawingPolygon =drawingLine = showMeasurements = false;
this.addingText=true;
drawStatus = drawMapPointLabel; outlineColorId.visible=true;
outlineColor.visible=true; this.drawtool.deactivate();
setMapAction(drawType,drawStatus,null,drawEnd);
break;
}
default:
{
//响应态势标会
drawingPolygon =drawingLine = showMeasurements = false;
this.addingPlot=true; outlineColorId.visible=true;
outlineColor.visible=true; this.setMapAction(null,null,null,null);
var outline:SimpleLineSymbol=new SimpleLineSymbol("solid", this.outlineColor.selectedColor, this.customAlpha.value, 1);
drawtool.fillSymbol=new SimpleFillSymbol("solid", this.fillColor.selectedColor, customAlpha.value, outline); this.drawtool.activate(drawType); } } }

2.绘制完之后的结束事件,获取geometry等信息,分别判断是属于哪种类型(点、线、面等等),然后转换graphic,添加在地图上展示出来

            private function drawEnd(event:DrawEvent):void
{ finishDrawing = true;
this.drawtool.deactivate();
this.setMapAction(null,null,null,null); selectedDrawingIcon = null;
clearSelectionFilter();
event.target.deactivate();
var outSR:SpatialReference = new SpatialReference(102113);
var geom:Geometry = event.graphic.geometry; lastDrawGraphic = new Graphic(geom); if(addingPlot==true)
{ var outline:SimpleLineSymbol=new SimpleLineSymbol("solid", this.outlineColor.selectedColor, this.customAlpha.value, 1);
lastDrawGraphic.symbol=new SimpleFillSymbol("solid", this.fillColor.selectedColor, customAlpha.value, outline);
this.drawtool.deactivate(); }
else
{
switch (geom.type)
{
/* case Geometry.MAPPOINT:
{
//文本标会就是对点的symbol进行了修改
if (txtLabel.text == "")
return;
var text:String=txtLabel.text;
var color:uint=cpText.selectedColor;
var font:String=textFont.selectedItem.font;
var size:Number=numTextSize.value;
var textFormat:TextFormat=new TextFormat(font, size, color, bold.selected, italic.selected, underline.selected);
var textSymbol:TextSymbol=new TextSymbol(text);
textSymbol.textFormat=textFormat;
lastDrawGraphic.symbol=textSymbol;
break; } */
case Geometry.POLYLINE:
{
lastDrawGraphic.symbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, fillColor.selectedColor, customAlpha.value, 6);
if (chkMeasurements.selected)
{
var param:ProjectParameters=new ProjectParameters();
param.geometries=[geom];
param.outSpatialReference=outSR;
geometryService.project(param);
var polyline:Polyline = geom as Polyline;
measurePt = polyline.extent.center;
}
break;
}
case Geometry.POLYGON:
{ lastDrawGraphic.symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, fillColor.selectedColor, customAlpha.value, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, outlineColor.selectedColor, 1, 2));
if (chkMeasurements.selected)
{
var param:ProjectParameters=new ProjectParameters();
param.geometries=[geom];
param.outSpatialReference=outSR;
geometryService.project(param);
var polygon:Polygon = geom as Polygon;
measurePt = polygon.extent.center;
}
break; }
case Geometry.EXTENT:
{
lastDrawGraphic.symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, fillColor.selectedColor, customAlpha.value, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, outlineColor.selectedColor, 1, 2));
if (chkMeasurements.selected)
{
var param:ProjectParameters=new ProjectParameters();
param.geometries=[geom];
param.outSpatialReference=outSR;
geometryService.project(param);
var extent:Extent = geom as Extent;
measurePt = extent.center;
}
break;
}
}
} //添加删除要素监听事件
lastDrawGraphic.addEventListener(MouseEvent.CLICK, onGraphicClick); graphicsLayer.add(lastDrawGraphic);
onePlanGraphics.addItem(lastDrawGraphic);
savePlanBtn.enabled=true; }

3.投影结果函数,计算周长和面积等信息

            //使用GeometryService计算距离和面积等响应
private function projectCompleteHandler(event:GeometryServiceEvent):void
{
var geom:Geometry = (event.result as Array)[0];
var lengthsParameters:LengthsParameters = new LengthsParameters();
var areasAndLengthsParameters:AreasAndLengthsParameters = new AreasAndLengthsParameters();
switch (geom.type)
{
case Geometry.POLYLINE:
{
var pLine:Polyline = Polyline(geom);
lengthsParameters.geodesic = true;
lengthsParameters.polylines = [ pLine ];
geometryService.lengths(lengthsParameters);
break;
}
case Geometry.POLYGON:
{
var pGon:Polygon = Polygon(geom);
areasAndLengthsParameters.polygons = [ pGon ];
geometryService.areasAndLengths(areasAndLengthsParameters);
break;
}
case Geometry.EXTENT:
{
var extent:Extent = Extent(geom); // convert it to a polygon for measurment
const arrPoints:Array = [
new MapPoint(extent.xmin, extent.ymin),
new MapPoint(extent.xmin, extent.ymax),
new MapPoint(extent.xmax, extent.ymax),
new MapPoint(extent.xmax, extent.ymin),
new MapPoint(extent.xmin, extent.ymin)
]; var polygon:Polygon = new Polygon();
polygon.addRing(arrPoints);
polygon.spatialReference = extent.spatialReference; areasAndLengthsParameters.polygons = [ polygon ];
geometryService.areasAndLengths(areasAndLengthsParameters);
break;
}
}
} private function arealengthsCompleteHandler(event:GeometryServiceEvent):void
{
var area:Number = event.result.areas[0]; //event.arealengths.areas[0];
var length:Number = event.result.lengths[0]; // or (event.result as Array)[0]; //event.arealengths.lengths[0]; var label:String = "面积:" + numFormatter.format(area/1000000) + "平方千米";
label += "\n" + "周长:" + numFormatter.format(length/1000) + "千米";
addDrawLabel(label, lastDrawGraphic);
} private function lengthsCompleteHandler(event:GeometryServiceEvent):void
{
var length:Number = (event.result as Array)[0]; var label:String = "距离:" + numFormatter.format(length/1000) + "千米";
addDrawLabel(label, lastDrawGraphic);
}

备注:

GIS技术交流QQ群:432512093

WebGIS二次开发培训入门群: 238339408

天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十)态势标绘模块的更多相关文章

  1. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(一)GIS一张图的系统开发环境以及flexviewer框架

    系统的GIS功能实现是基于arcgis api for flex,首先附上系统的主界面图,接下来的是对主界面的模块功能详细讲解: 一.GIS环境软件安装 (1)arcgis desktop的安装,要是 ...

  2. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(八)资源搜索模块

    config.xml文件的配置如下: <widget label="资源搜索" icon="assets/images/public_impact_over.png ...

  3. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(二)鹰眼模块

    讲解GIS功能模块实现之前,先大概说一下flexviewer的核心配置文件config.xml,系统额GIS功能widget菜单布局.系统的样式.地图资源等等都是在这里配置的,这里对flexviewe ...

  4. 天津政府应急系统之GIS一张图(arcgis api for flex)解说(二)鹰眼模块

    解说GIS功能模块实现之前,先大概说一下flexviewer的核心配置文件config.xml,系统额GIS功能widget菜单布局.系统的样式.地图资源等等都是在这里配置的,这里对flexviewe ...

  5. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十三)台风模块

    config.xml文件的配置如下: <widget label="台风" icon="assets/images/typhoon.png" config ...

  6. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十一)路径导航模块

    config.xml文件的配置如下: <widget label="路径导航" icon="assets/images/lujingdaohang.png" ...

  7. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(六)地图搜索模块

    config.xml文件的配置如下: <widget label="地图搜索" icon="assets/images/emergency_resource_ove ...

  8. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(四)地图导航控件模块

    config.xml文件的配置如下: <widget left="10" top="50" config="widgets/Navigation ...

  9. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(三)显示地图坐标系模块

    config.xml文件的配置如下: <widget left="3" bottom="3" config="widgets/Coordinat ...

随机推荐

  1. Disk Space Usage 术语理解:unallocated, unused and reserved

    通过standard reports查看Disk Usage,选中Database,右击,选择Reports->Standard Reports->Disk Space Usage,截图如 ...

  2. OLE DB Command transformation 用法

    OLE DB Command transformation component 能够引用参数,逐行调用sqlcommand,This transformation is typically used ...

  3. Entity Framework Code First执行SQL语句、视图及存储过程

    1.Entity Framework Code First查询视图 Entity Framework Code First目前还没有特别针对View操作的方法,但对于可更新的视图,可以采用与Table ...

  4. [转]浏览器退出之后php还会继续执行么?

    原文链接:http://www.cnblogs.com/yjf512/p/5362025.html 前提:这里说的是典型的lnmp结构,nginx+php-fpm的模式 如果我有个php程序执行地非常 ...

  5. 应用程序框架实战十五:DDD分层架构之领域实体(验证篇)

    在应用程序框架实战十四:DDD分层架构之领域实体(基础篇)一文中,我介绍了领域实体的基础,包括标识.相等性比较.输出实体状态等.本文将介绍领域实体的一个核心内容——验证,它是应用程序健壮性的基石.为了 ...

  6. T-Sql(四)表关联和视图(view)

    今天讲下T-sql中用于查询的表关联和视图,我们平时做项目的时候会遇到一些复杂的查询操作,比如有班级表,学生表,现在要查询一个学生列表,要求把学生所属班级名称也查询出来,这时候简单的select查询就 ...

  7. tomcat:there is no resources that can be added or removed from server

    原因: 1.不是web project 解决方式:project-->property--project facet 新建或者修改 2. 版本不兼容 升级tomcat版本

  8. MySQL入门01-MySQL源码安装

    操作系统:CentOS 6.7 MySQL版本:5.6.30 1.前期准备 2.系统配置 3.CMake编译配置 4.make && make install 5.后期配置和测试 Re ...

  9. php中调用WebService接口

    一.背景 调用第三方短信提供商的WebService接口. 二.介绍 1.WebService三要素: SOAP(Simple Object Access Protocol) 用来描述传递信息的格式 ...

  10. 优化JS加载时间过长的一种思路

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 去年公司在漳州的一个项目中,现场工程人员反映地图部分出图有点 ...