http://blog.csdn.net/gisshixisheng/article/details/40540601

距离和面积的测量时GIS常见的功能,在本节,讲述的是通过GeometryService实现测量面积和距离。先看看实现后的效果:

                                

距离                                                                                         面积

首先,进行配置:

  1. //identify proxy page to use if the toJson payload to the geometry service is greater than 2000 characters.
  2. //If this null or not available the project and lengths operation will not work.  Otherwise it will do a http post to the proxy.
  3. esriConfig.defaults.io.proxyUrl = "/proxy";
  4. esriConfig.defaults.io.alwaysUseProxy = false;

接着,定义GeometryService和绘图工具:

  1. var gsvc = new GeometryService("http://localhost:6080/arcgis/rest/services/Utilities/Geometry/GeometryServer");
  1. var measureToolbar = new esri.toolbars.Draw(map);

接下来,绘图结束后将所绘制图形添加到地图上面,并返回测量结果,那么增加measureToolbar的draw-end事件:

  1. measureToolbar.on("draw-end",showMeasureResults);
  2. /**
  3. * 显示测量结果
  4. * @param evt
  5. */
  6. var showPt=null;
  7. function showMeasureResults(evt){
  8. measureToolbar.deactivate();
  9. map.setMapCursor("default");
  10. var geometry = evt.geometry;
  11. switch (geometry.type) {
  12. case "polyline":{
  13. var length = geometry.paths[0].length;
  14. showPt = new Point(geometry.paths[0][length-1],map.spatialReference);
  15. var lengthParams = new LengthsParameters();
  16. lengthParams.lengthUnit = esri.tasks.GeometryService.UNIT_KILOMETER;
  17. lengthParams.polylines = [geometry];
  18. gsvc.lengths(lengthParams);
  19. break;
  20. }
  21. case "polygon":{
  22. showPt = new Point(geometry.rings[0][0],map.spatialReference);
  23. var areasAndLengthParams = new AreasAndLengthsParameters();
  24. areasAndLengthParams.lengthUnit = esri.tasks.GeometryService.UNIT_KILOMETER;
  25. areasAndLengthParams.areaUnit = esri.tasks.GeometryService.UNIT_SQUARE_KILOMETERS;
  26. gsvc.simplify([geometry], function(simplifiedGeometries) {
  27. areasAndLengthParams.polygons = simplifiedGeometries;
  28. gsvc.areasAndLengths(areasAndLengthParams);
  29. });
  30. break;
  31. }
  32. }
  33. var graphic = new Graphic(geometry, getGeometrySymbol(geometry.type));
  34. map.graphics.add(graphic);
  35. }

根据geometry的类型,增加GeometryService的lengths-complete或者areas-and-lengths-complete事件:

  1. gsvc.on("lengths-complete",outputLength);
  2. function outputLength(evtObj){
  3. var result = evtObj.result;
  4. showmeasureInfo(showPt, result.lengths[0].toFixed(3), "千米");
  5. };
  6. gsvc.on("areas-and-lengths-complete",outputAreaAndLength);
  7. function outputAreaAndLength(evtObj){
  8. var result = evtObj.result;
  9. showmeasureInfo(showPt, result.areas[0].toFixed(3), "平方千米");
  10. };

最后,将返回的结果显示在地图上:

  1. /**
  2. * 显示测量结果
  3. * @param showPnt
  4. * @param data
  5. * @param unit
  6. */
  7. function measureInfo(showPnt,data,unit){
  8. var measureDiv=$("#measure");
  9. var isShow = false;
  10. var screenPnt=map.toScreen(showPnt);
  11. measureDiv.css("left",screenPnt.x+"px");
  12. measureDiv.css("top",screenPnt.y+"px");
  13. measureDiv.css("position","absolute");
  14. measureDiv.css("height","20px");
  15. measureDiv.css("display","block");
  16. isShow = true;
  17. measureDiv.css("z-index","999");
  18. if(unit==="千米"){
  19. measureDiv.css("width","90px");
  20. }
  21. else{
  22. measureDiv.css("width","130px");
  23. }
  24. $("#result").html(data+unit);
  25. $("#infoclose").click(function(){
  26. map.graphics.clear();
  27. measureDiv.css("display","none");
  28. isShow = false;
  29. });
  30. map.on("pan-start", function(){
  31. measureDiv.css("display","none");
  32. });
  33. map.on("pan-end", function(panend){
  34. if(isShow == true){
  35. screenPnt=map.toScreen(showPnt);
  36. measureDiv.css("left",screenPnt.x+"px");
  37. measureDiv.css("top",screenPnt.y+"px");
  38. measureDiv.css("position","absolute");
  39. measureDiv.css("height","20px");
  40. measureDiv.css("display","block");
  41. }
  42. });
  43. map.on("zoom-start", function(){
  44. measureDiv.css("display","none");
  45. });
  46. map.on("zoom-end", function(){
  47. if(isShow == true){
  48. screenPnt=map.toScreen(showPnt);
  49. measureDiv.css("left",screenPnt.x+"px");
  50. measureDiv.css("top",screenPnt.y+"px");
  51. measureDiv.css("position","absolute");
  52. measureDiv.css("height","20px");
  53. measureDiv.css("display","block");
  54. }
  55. });
  56. };

结果的显示我是通过一个div来显示的,并且做了缩放和地图移动的处理。

(转)Arcgis for Js之GeometryService实现测量距离和面积的更多相关文章

  1. Arcgis for Js之GeometryService实现测量距离和面积

    距离和面积的测量时GIS常见的功能,在本节,讲述的是通过GeometryService实现测量面积和距离.先看看实现后的效果:                                  距离 ...

  2. ArcGIS Runtime SDK for WPF之测量距离和面积

    bu不多说,上代码 using System.Windows; using ESRI.ArcGIS.Client; using ESRI.ArcGIS.Client.Tasks; using ESRI ...

  3. OpenLayers测量距离和面积

    <!DOCTYPE html> <html> <head> <title>测量距离和面积</title> <meta http-equ ...

  4. Arcgis for Js之GeometryService实现測量距离和面积

    距离和面积的測量时GIS常见的功能.在本节,讲述的是通过GeometryService实现測量面积和距离.先看看实现后的效果: watermark/2/text/aHR0cDovL2Jsb2cuY3N ...

  5. OpenLayers动态测量距离和面积,并可自定义测量的线样式

    全局操作变量 /** * @description 标注弹出框 */ HtmlPopup = null; /** * @description 临时图层类数据源 */ VectorSource = n ...

  6. CAD图在线Web测量工具代码实现(测量距离、面积、角度等)

    CAD如今在各个领域均得到了普遍的应用并大大提高了工程技术人员的工作效率.在桌面端,AutoCAD测量工具已经非常强大:然后在Web端,如何准确.快速的对CAD图在Web进行测量呢? 功能 能Web在 ...

  7. (转)Arcgis for JS之对象捕捉

    http://blog.csdn.net/gisshixisheng/article/details/44098615 在web操作,如绘制或者测量的时候,为了精确,需要捕捉到某一图层的对象,在此,讲 ...

  8. Arcgis for JS之Cluster聚类分析的实现(基于区域范围的)

    原文:Arcgis for JS之Cluster聚类分析的实现(基于区域范围的) 咱们书接上文,在上文,实现了基于距离的空间聚类的算法实现,在本文,将继续介绍空间聚类之基于区域范围的实现方式,好了,闲 ...

  9. Arcgis for JS之Cluster聚类分析的实现

    原文:Arcgis for JS之Cluster聚类分析的实现 在做项目的时候,碰见了这样一个问题:给地图上标注点对象,数据是从数据库来 的,包含XY坐标信息的,通过graphic和graphicla ...

随机推荐

  1. 【codeforces 527D】Clique Problem

    [题目链接]:http://codeforces.com/contest/527/problem/D [题意] 一维线段上有n个点 每个点有坐标和权值两个域分别为xi,wi; 任意一对点(i,j) 如 ...

  2. 最小堆的两种实现及其STL代码

    #include<cstdio> #include<iostream> #include<algorithm> #include<vector> boo ...

  3. fork me on github 彩带设置无效

    挑选彩带地址: https://github.com/blog/273-github-ribbons 发现代码复制粘贴过来,但是在自己博客园上无效,如粘贴如下代码 <a href="h ...

  4. js 实现栈的结构

    js实现一个栈的数据结构 首先了解一下什么是栈,栈是一个后进先出的一种数据结构,执行起来效率比较高. 对于栈主要包括一些方法,弹出栈pop(),弹出栈顶元素,并删除该元素:压入栈push(),向栈中压 ...

  5. PHP array_diff_ukey()

    定义和用法 array_diff_ukey() 返回一个数组,该数组包括了所有出现在 array1 中但是未出现在任何其它参数数组中的键名的值.注意关联关系保留不变.与 array_diff() 不同 ...

  6. JS 缓冲运动 带运动的留言本 小案例

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  7. 『Spring.NET+NHibernate+泛型』框架搭建之Model(二)

    依照搭建项目的顺序来比較好描写叙述一些,我一般先搭建实体层,本节内容纯属于NHibernate范畴.先上图和代码,然后对着图和代码逐一解说,以角色表为例:   T_Role表: 数据库表设计非常eas ...

  8. double型转换成string型

    double型转换成string型 题目描写叙述: 如有一个函数.其可接受一个long double參数,并将參数转换为字符串.结果字符串应保留两位小数,比如,浮点值123.45678应该生成&quo ...

  9. C++第11周(春)项目3 - 点类派生直线类

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 [项目3 - 点类派生直线类]定义点类Poin ...

  10. 浅谈EL与JSTL

    讲道理,自己在博大精深的Java世界里还只是一个很小很小的菜鸟.处于成长与学习之中,但学习一个漫长的过程.尤其对于那些知识点我觉得总结是尤为重要的.反正在我看来这段时间里虽然过了很多知识但却是一脸懵逼 ...