Arcgis for Js之GeometryService实现測量距离和面积
距离和面积的測量时GIS常见的功能。在本节,讲述的是通过GeometryService实现測量面积和距离。先看看实现后的效果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvR0lTU2hpWGlTaGVuZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
距离 面积
首先,进行配置:
//identify proxy page to use if the toJson payload to the geometry service is greater than 2000 characters.
//If this null or not available the project and lengths operation will not work. Otherwise it will do a http post to the proxy.
esriConfig.defaults.io.proxyUrl = "/proxy";
esriConfig.defaults.io.alwaysUseProxy = false;
接着,定义GeometryService和画图工具:
var gsvc = new GeometryService("http://localhost:6080/arcgis/rest/services/Utilities/Geometry/GeometryServer");
var measureToolbar = new esri.toolbars.Draw(map);
接下来,画图结束后将所绘制图形加入到地图上面。并返回測量结果,那么添加measureToolbar的draw-end事件:
measureToolbar.on("draw-end",showMeasureResults);
/**
* 显示測量结果
* @param evt
*/
var showPt=null;
function showMeasureResults(evt){
measureToolbar.deactivate();
map.setMapCursor("default");
var geometry = evt.geometry;
switch (geometry.type) {
case "polyline":{
var length = geometry.paths[0].length;
showPt = new Point(geometry.paths[0][length-1],map.spatialReference);
var lengthParams = new LengthsParameters();
lengthParams.lengthUnit = esri.tasks.GeometryService.UNIT_KILOMETER;
lengthParams.polylines = [geometry];
gsvc.lengths(lengthParams);
break;
}
case "polygon":{
showPt = new Point(geometry.rings[0][0],map.spatialReference);
var areasAndLengthParams = new AreasAndLengthsParameters();
areasAndLengthParams.lengthUnit = esri.tasks.GeometryService.UNIT_KILOMETER;
areasAndLengthParams.areaUnit = esri.tasks.GeometryService.UNIT_SQUARE_KILOMETERS;
gsvc.simplify([geometry], function(simplifiedGeometries) {
areasAndLengthParams.polygons = simplifiedGeometries;
gsvc.areasAndLengths(areasAndLengthParams);
});
break;
}
}
var graphic = new Graphic(geometry, getGeometrySymbol(geometry.type));
map.graphics.add(graphic);
}
依据geometry的类型。添加GeometryService的lengths-complete或者areas-and-lengths-complete事件:
gsvc.on("lengths-complete",outputLength);
function outputLength(evtObj){
var result = evtObj.result;
showmeasureInfo(showPt, result.lengths[0].toFixed(3), "千米");
};
gsvc.on("areas-and-lengths-complete",outputAreaAndLength);
function outputAreaAndLength(evtObj){
var result = evtObj.result;
showmeasureInfo(showPt, result.areas[0].toFixed(3), "平方千米");
};
最后,将返回的结果显示在地图上:
/**
* 显示測量结果
* @param showPnt
* @param data
* @param unit
*/
function measureInfo(showPnt,data,unit){
var measureDiv=$("#measure");
var isShow = false;
var screenPnt=map.toScreen(showPnt);
measureDiv.css("left",screenPnt.x+"px");
measureDiv.css("top",screenPnt.y+"px");
measureDiv.css("position","absolute");
measureDiv.css("height","20px");
measureDiv.css("display","block");
isShow = true;
measureDiv.css("z-index","999");
if(unit==="千米"){
measureDiv.css("width","90px");
}
else{
measureDiv.css("width","130px");
}
$("#result").html(data+unit);
$("#infoclose").click(function(){
map.graphics.clear();
measureDiv.css("display","none");
isShow = false;
}); map.on("pan-start", function(){
measureDiv.css("display","none");
}); map.on("pan-end", function(panend){
if(isShow == true){
screenPnt=map.toScreen(showPnt);
measureDiv.css("left",screenPnt.x+"px");
measureDiv.css("top",screenPnt.y+"px");
measureDiv.css("position","absolute");
measureDiv.css("height","20px");
measureDiv.css("display","block");
}
});
map.on("zoom-start", function(){
measureDiv.css("display","none");
});
map.on("zoom-end", function(){
if(isShow == true){
screenPnt=map.toScreen(showPnt);
measureDiv.css("left",screenPnt.x+"px");
measureDiv.css("top",screenPnt.y+"px");
measureDiv.css("position","absolute");
measureDiv.css("height","20px");
measureDiv.css("display","block");
}
});
};
结果的显示我是通过一个div来显示的,而且做了缩放和地图移动的处理。
Arcgis for Js之GeometryService实现測量距离和面积的更多相关文章
- Arcgis for Js之GeometryService实现测量距离和面积
距离和面积的测量时GIS常见的功能,在本节,讲述的是通过GeometryService实现测量面积和距离.先看看实现后的效果: 距离 ...
- (转)Arcgis for Js之GeometryService实现测量距离和面积
http://blog.csdn.net/gisshixisheng/article/details/40540601 距离和面积的测量时GIS常见的功能,在本节,讲述的是通过GeometryServ ...
- arcgis for js 之 获取两点之间的距离
换了新公司,接触新行业,半路出家,看着别人的代码,看着api慢慢理解. 需求如下:已知两点坐标求距离. 思路,没有,站在同事的肩膀上踩路子,给的这个链接 https://developers.arcg ...
- arcgis api for javascript 距离与面积量算
在之前的实验中,距离量算跟面积量算一直出问题,费了非常长的时间,各种调式找不到原因. 如今成功完毕.与君共勉 1.距离量算中 lengthParams.polylines = [geom ...
- ArcGIS JS 学习笔记1 用ArcGIS JS 实现仿百度地图的距离量测和面积量测
一.开篇 在博客注册了三年,今天才决定写第一篇博客,警告自己不要懒!!! 二.关于ArcGIS JS 版本选择 在写这篇博客时ArcGIS JS 4.0正式版已经发布.它和3.x版本的不同是,Map不 ...
- Arcgis for Js之加载wms服务
概述:本节讲述Arcgis for Js加载ArcgisServer和GeoServer发布的wms服务. 1.定义resourceInfo var resourceInfo = { extent: ...
- Arcgis for JS之Cluster聚类分析的实现(基于区域范围的)
原文:Arcgis for JS之Cluster聚类分析的实现(基于区域范围的) 咱们书接上文,在上文,实现了基于距离的空间聚类的算法实现,在本文,将继续介绍空间聚类之基于区域范围的实现方式,好了,闲 ...
- Arcgis for JS之Cluster聚类分析的实现
原文:Arcgis for JS之Cluster聚类分析的实现 在做项目的时候,碰见了这样一个问题:给地图上标注点对象,数据是从数据库来 的,包含XY坐标信息的,通过graphic和graphicla ...
- Arcgis for js载入天地图
综述:本节讲述的是用Arcgis for js载入天地图的切片资源. 天地图的切片地图能够通过esri.layers.TiledMapServiceLayer来载入.在此将之进行了一定的封装,例如以下 ...
随机推荐
- nginx 反向代理做域名转发简单配置
这里用的是nginx for windows 首先进入nginx配置文件,做以下配置: server { listen 80; server_name abc.com; location / { pr ...
- 动态规划初级 入门理解 C#代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Micros ...
- EMQ并发测试
yum install -y git git clone https://github.com/emqtt/emqtt_benchmark.git cd /home/emqtt_benchmark m ...
- object-c输出对象
有时候在xcode里打断点很不准,看到对象总是nil,还是用打log比较靠谱: NSLog(@"obj info:%@",obj);
- JS prototype 属性
String.prototype.trim=function(){ return this.replace(/(^\s*)|(\s*$)/g, "");}
- Oauth2.0协议曝漏洞 大量社交网站隐私或遭泄露
2014年是IT业界不平常的一年,XP停服.IE长老漏洞(秘狐)等等层出不穷,现在,社交网络也爆出惊天漏洞:Oauth2.0协议漏洞 继OpenSSL漏洞后,开源安全软件再曝安全漏洞.新加坡南洋理工大 ...
- THINKPHP3.2视频教程
http://edu.51cto.com/lesson/id-24504.html lunix视频教程 http://bbs.lampbrother.net/read-htm-tid-161465.h ...
- JQuery.Page.js分页插件的使用
1.简单直接贴代码 需要引用以下样式和脚本 <link href="~/Scripts/Page/pager.css" rel="stylesheet" ...
- instancetype 对比 id 的好处
转自:http://blog.csdn.net/yangzychina/article/details/8818941 今天研究代码的时候,发现居然返回 instancetype 类型,很惊讶自己学识 ...
- nginx+tomcat多节点部署
在一台机器上想要将一个应用程序部署多个节点,可以通过nginx来实现. 1.将tomcat复制多份,修改tomcat配置文件conf/server.xml,将端口号设置成不一样的 2.将多个tomca ...