ArcGIS api for javascript—测量,测距问题
2024-08-31 12:14:34
首先量测
var map, toolbar, geometryService ;
function init() { map=new esri.Map("map",{
extent:new esri.geometry.Extent({xmin:110,ymin:31 ,xmax:117 ,ymax :37,spatialReference:{wkid:4326} })
});//选取的空间坐标系范围 dojo.connect(map, "onLoad", initToolbar); map.addLayer(new esri.layers.ArcGISTiledMapServiceLayer("url"); } function initToolbar(map) { toolbar = new esri.toolbars.Draw(map); //添加toolbar画图完成后事件监听调用 doMeasure
dojo.connect(toolbar, "onDrawEnd", doMeasure);
//实例化GeometryService,地址为ags发布的GeometryServer var geomrtryserver ="url2";
geometryService = new esri.tasks.GeometryService(geomrtryserver); }
//量测
function measutreLength() {
toolbar.activate(esri.toolbars.Draw.POLYLINE);
} function measutreArea() {
toolbar.activate(esri.toolbars.Draw.POLYGON);
}
//量算
function doMeasure(geometry) {
//更加类型设置显示样式
measuregeometry = geometry;
toolbar.deactivate();
switch (geometry.type) {
case "polyline":
var symbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0, 0, 0]), 2);
break;
case "polygon":
var symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_NONE, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_DASHDOT, new dojo.Color([255, 0, 0]), 2), new dojo.Color([255, 255, 0, 0.25]));
break;
}
//设置样式
var graphic = new esri.Graphic(geometry,symbol);
//清除上一次的画图内容
map.graphics.clear();
map.graphics.add(graphic);
//进行投影转换,完成后调用projectComplete
MeasureGeometry(geometry);
} //投影转换完成后调用方法
function MeasureGeometry(geometry) {
//如果为线类型就进行lengths距离测算
if (geometry.type == "polyline") {
var lengthParams = new esri.tasks.LengthsParameters();
lengthParams.polylines = [geometry];
lengthParams.lengthUnit = esri.tasks.GeometryService.UNIT_METER;
lengthParams.geodesic = true;
lengthParams.polylines[0].spatialReference = new esri.SpatialReference(4326);
geometryService.lengths(lengthParams);
dojo.connect(geometryService, "onLengthsComplete", outputDistance);
}
//如果为面类型需要先进行simplify操作在进行面积测算
else if (geometry.type == "polygon") {
var areasAndLengthParams = new esri.tasks.AreasAndLengthsParameters();
areasAndLengthParams.lengthUnit = esri.tasks.GeometryService.UNIT_METER;
areasAndLengthParams.areaUnit = esri.tasks.GeometryService.UNIT_SQUARE_METERS;
this.outSR = new esri.SpatialReference({ wkid: 102113 });
geometryService.project([geometry], this.outSR, function (geometry) {
geometryService.simplify(geometry, function (simplifiedGeometries) {
areasAndLengthParams.polygons = simplifiedGeometries;
areasAndLengthParams.polygons[0].spatialReference = new esri.SpatialReference(102113);
geometryService.areasAndLengths(areasAndLengthParams);
});
});
dojo.connect(geometryService, "onAreasAndLengthsComplete", outputAreaAndLength);
}
} //显示测量距离
function outputDistance(result) {
var CurX = measuregeometry.paths[0][measuregeometry.paths[0].length - 1][0];
var CurY = measuregeometry.paths[0][measuregeometry.paths[0].length - 1][1];
var CurPos = new esri.geometry.Point(CurX, CurY, map.spatialReference);
map.infoWindow.setTitle("距离测量");
map.infoWindow.setContent(" 测 量 长 度 : <strong>" + parseInt(String(result.lengths[0])) + "米</strong>");
map.infoWindow.show(CurPos);
} //显示测量面积
function outputAreaAndLength(result) {
var CurX = (measuregeometry._extent.xmax + measuregeometry._extent.xmin) / 2;
var CurY = (measuregeometry._extent.ymax + measuregeometry._extent.ymin) / 2
var CurPos = new esri.geometry.Point(CurX, CurY, map.spatialReference);
map.infoWindow.setTitle("面积测量");
map.infoWindow.setContent(" 面积 : <strong>" + parseInt(String(result.areas[0])) + "平方米</strong> 周长:" + parseInt(String(result.lengths[0])) + "米");
map.infoWindow.show(CurPos);
//alert("面积:" + dojo.number.format(result.areas[0]) + "平方米" + " 长度:" + dojo.number.format(result.lengths[0]) + "米");
}
最新文章
- Hackerrank11 LCS Returns 枚举+LCS
- mysql主键uuid、uuid_short和int自增对比
- 源码剖析——深入Windows句柄本质
- ps应用
- js-比较两个日期的大小
- get新技能: 如何设置元素高度与宽度成特定比例。宽度改变,高度自动按比例改变。 例如设置宽高比16:9。
- ViewPager和Fragment的组合使用
- CSU 1809 Parenthesis(线段树+前缀和)
- 详解Ossim 4.3控制台
- SDUT1466双向队列
- Java程序员学C#基本语法两个小时搞定(对比学习)
- HDU 4990 Reading comprehension
- jdk5升级至jdk8框架版本选型
- python数据库多字段插入
- 内网访问已经启动的vue项目
- Android蓝牙学习笔记
- ICP点云配准原理及优化
- POJ 2896 另解暴力
- EF中連表查詢的應用方式
- mysql更新日志问题
热门文章
- 初识Git(二)
- C语言-实现字符串倒序输出
- NetworkX-画图
- 模块-时间模块(new)
- 用TamperMonkey去掉cdsn中的广告
- LightOJ-1138 Trailing Zeroes (III) 唯一分解定理 算n!的某个因数个数
- 【Paper Reading】Improved Textured Networks: Maximizing quality and diversity in Feed-Forward Stylization and Texture Synthesis
- angular.js和vue.js中实现函数去抖(debounce)
- hadoop-16-sqoop导入oracle数据
- 蓝的成长记——追逐DBA(18):小机上WAS集群故障,由一次更换IP引起