文档章节

arcgis api for js共享干货系列之一自写算法实现地图量算工具

gis之家
 gis之家
发布于 2016/06/23 11:41
字数 721
阅读 38
收藏 0
点赞 0
评论 0

众所周知,使用arcgis api for js实现地图的量算工具功能,无非是调用arcgisserver的Geometry服务(http://localhost:6080/arcgis/rest/services/Utilities/Geometry/GeometryServer)提供的Areas and Lengths以及Lengths,如图:

但是我这里提供另一种实现的思路,就是自己写算法来实现距离以及面积的量算,这样的好处是不依赖arcgisserver几何服务,有些项目不排除有些奇特的客户不用Geometry服务的,最终的实现效果图如下:

具体实现思路:创建一个独立的js文件,里面有量算工具类DCIMeature,DCIMeature类构造函数传入地图对象map

construct: function (map) {

this._dciMap = map;

this._onClickHandler = dojo.hitch(this, this._onClickHandler);

this._onMouseMoveHandler = dojo.hitch(this, this._onMouseMoveHandler);

this._onDrawEndHandler = dojo.hitch(this, this._onDrawEndHandler);

this._onExtentChangeHandler = dojo.hitch(this, this._onExtentChangeHandler);

this._onGraphicClearHandler = dojo.hitch(this, this._onGraphicClearHandler);

this._graphicsLayer = new esri.layers.GraphicsLayer({ id: "DciMeatureGLyr" });

}

核心算法测距:

DUtil.getDistanceInEarth = function (point1, point2) {

var d = new Number(0);

//1度等于0.0174532925199432957692222222222弧度

//var radPerDegree=0.0174532925199432957692222222222;

var radPerDegree = Math.PI / 180.0;

if (DCI.Measure.map.spatialReference.wkid == "4326") {

var latLength1 = Math.abs(this.translateLonLatToDistance({ x: point1.x, y: point2.y }).x - this.translateLonLatToDistance({ x: point2.x, y: point2.y }).x);

var latLength2 = Math.abs(this.translateLonLatToDistance({ x: point1.x, y: point1.y }).x - this.translateLonLatToDistance({ x: point2.x, y: point1.y }).x);

var lonLength = Math.abs(this.translateLonLatToDistance({ x: point1.x, y: point2.y }).y - this.translateLonLatToDistance({ x: point1.x, y: point1.y }).y);

d = Math.sqrt(Math.pow(lonLength, 2) - Math.pow(Math.abs(latLength1 - latLength2) / 2, 2) + Math.pow(Math.abs(latLength1 - latLength2) / 2 + Math.min(latLength1, latLength2), 2));

}

else {

var len_prj = Math.pow((point2.x - point1.x), 2) + Math.pow((point2.y - point1.y), 2);

d = Math.sqrt(len_prj);

}

d = Math.ceil(d);

return d;

};

DUtil.translateLonLatToDistance = function (point) {

var d = new Number(0);

//1度等于0.0174532925199432957692222222222弧度

//var radPerDegree=0.0174532925199432957692222222222;

var radPerDegree = Math.PI / 180.0;

var equatorialCircumference = Math.PI * 2 * 6378137;

return {

x: Math.cos(point.y * radPerDegree) * equatorialCircumference * Math.abs(point.x / 360),

y: equatorialCircumference * Math.abs(point.y / 360)

};

};

1

这里测距的算法有基于地理坐标系以及投影坐标系不同,有不同的计算公式来计算的;

测面的核心算法:

//******求三角形面积****

DUtil.getTriangleArea = function (point1, point2, point3) {

var area = 0;

if (!point1 || !point2 || !point3) {

return 0;

}

if (DCI.Measure.map.spatialReference.wkid == "4326") {

point1 = this.translateLonLatToDistance(point1);

point2 = this.translateLonLatToDistance(point2);

point3 = this.translateLonLatToDistance(point3);

}

area = ((point1.x * point2.y - point2.x * point1.y) + (point2.x * point3.y - point3.x * point2.y) + (point3.x * point1.y - point1.x * point3.y)) / 2;

return area;

};

测面算法也是类似,基于地理坐标系以及投影坐标系不同,有不同的计算公式来计算的;

完整的量算工具js文件下载点击打开链接

GIS作品展示地址:百度搜索:GIS之家(https://shop116521643.taobao.com/shop/view_shop.htm);

gis百度贴吧:gis开发联盟;

GIS毕业设计&项目承接群:238339408

© 著作权归作者所有

共有 人打赏支持
gis之家
粉丝 8
博文 48
码字总数 47386
作品 0
广州
前端工程师
ArcGIS Maritime Server 开发教程(九)二三维水深服务

ArcGIS Maritime Server 开发教程(九)二三维水深服务 本章导读:ArcGIS 软件体系是使用 ArcGIS Bathymetry 桌面扩展构建和管理水深数据库,并且利用 Image Server 对水深产品进行发布。本章...

liyuanxiang1984 ⋅ 05/24 ⋅ 0

ArcGIS API for JavaScript Remove powered by ESRI logo

ArcGIS API for JavaScript 3.x map = new esri.Map("map", { extent: initExtent, logo:false }); ArcGIS API for JavaScript 4.x var view = new MapView({ ... }); view.ui._removeCompon......

神勇小白鼠 ⋅ 04/23 ⋅ 0

CSDN日报180524——《一个合格的程序员,需要哪些必备技能?》

程序人生 | 一个合格的程序员,需要哪些必备技能? 作者:hollischuang 本文,主要来简单介绍一下,作为一个合格的 Java 开发,除了自身技术成长之外,还有哪些方面可以提升。 点击阅读全文 ...

blogdevteam ⋅ 05/24 ⋅ 0

ArcGIS API for JavaScript 4.6 版本加载高德地

ArcGIS API for JavaScript 4.X 版本升级后,API发生了很大的变化。 其中就支持了WebEarth展示,主要是通过 esri/views/SceneView 实现的。 在新版本中,默认都是加载Esri自己的地图。 若想加...

hui1788 ⋅ 04/15 ⋅ 0

GeoServer与ArcServer对比

一、GeoServer与ArcServer简介 1、 GeoServer简介 GeoServer是OpenGIS Web服务器规范的J2EE实现的社区开源项目,利用GeoServer可以方便的发布地图数据,允许用户对特征数据进行更新、删除、插...

HarleyZhuge ⋅ 05/08 ⋅ 0

3dmax 模型导入ArcGIS Pro后发布场景服务【二】

3D模式导入的一般流程。 a)使用3ds max软件将模型导出。格式为3ds。 ArcGIS Pro 支持的3D格式: 3D Studio Max (.3ds)、SketchUp (.skp)、VRML 和 GeoVRML (.wrl)、OpenFlight (.flt) 以及 ...

stu_20052369 ⋅ 04/12 ⋅ 0

第一届对象存储技术及应用大会:Esri中国周宁——万物互联时代,云存储技术的变革与展望

目前,对象存储正在寻找除了云以外的应用案列,这使得对象存储更加广泛地为人们所接受。将于11月16日举办的“第一届对象存储技术及应用大会”活动即将围绕对象存储技术展开全面讨论。此前,让...

玄学酱 ⋅ 05/10 ⋅ 0

ArcGIS for Android 10.2.9(8):计算距离,周长,面积

GeometryEngine是Arcgis的重要工具类,利用此工具类,可以计算地图上的距离、面积,将点、线、面转化为Json数据,将Json转化为点线面,坐标转换作用非常强大。 1.计算距离:...

qq_36699930 ⋅ 04/19 ⋅ 0

postgresql版sde(10.4.1)安装说明

从ArcGIS 10.3开始,彻底没有了sde的安装包,安装sde数据库需要先安装arcgis desktop,通过arccatalog建数据库,同时也不能建sde服务,只能使用直连 以下演示在sde 10.4.1版在pg数据库中首次...

canneljls ⋅ 05/13 ⋅ 0

新疆自治区谷歌地球高程DEM等高线下载

一、概述 新疆维吾尔自治区,简称新,位于中国西北边陲,首府乌鲁木齐,是中国五个少数民族自治区之一,也是中国陆地面积最大的省级行政区,面积166万平方公里,占中国国土总面积六分之一。 ...

mrib ⋅ 05/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JPA入门,配置文件的设置

<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http......

码农屌丝 ⋅ 15分钟前 ⋅ 0

Java基础——面向对象和构造器

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 静态成员介绍 为什么要有静态成员?静态成员用来...

凯哥学堂 ⋅ 17分钟前 ⋅ 0

vmware中Centos 7 linux的LVM磁盘扩容

系统是RHEL7(centos7差不多一样) 关闭系统,在vmware、设置、硬盘、扩展、输入数字大于当前系统内存、点击扩展。 开机再查看磁盘信息 fdisk -l 注意:可以看出sda磁盘增加了,但是根目录还...

gugudu ⋅ 28分钟前 ⋅ 0

JAVA线程sleep和wait方法区别

昨天面试,突然被问到sleep 和 wait的区别,一下子有点蒙,在这里记一下,以示警戒。 首先说sleep,sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过去后,cpu...

徐玉强 ⋅ 29分钟前 ⋅ 0

vuex学习--模块

随着项目复杂性增加,共享状态也越来越多。需要对转态操作进行分组,分组后在进行分组编写。学习一下module:状态管理器的模块组操作。 首先是声明: const moduleA={ state,mutations,g...

大美琴 ⋅ 32分钟前 ⋅ 0

Selenium 简单入门

安装 pip install selenium 驱动下载 https://chromedriver.storage.googleapis.com/index.html 下载最新的驱动,放入path中,可以放入Python的scripts目录下,也可以放入Chrome安装目录,并...

阿豪boy ⋅ 33分钟前 ⋅ 0

292. Nim Game - LeetCode

Question 292. Nim Game Solution 思路:试着列举一下,就能发现一个n只要不是4的倍数,就能赢。 n 是否能赢1 true2 true3 true4 false 不论删除几,对方都能一把赢5 t...

yysue ⋅ 今天 ⋅ 0

6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩

zip压缩工具 zip命令可以压缩目录和文件,-r 压缩目录。 zip使用方法 zip 1.txt.zip 1.txt //压缩文件 zip -r 123.zip 123/ //压缩目录 unzip 1.txt.zip //解压 unzip 123.zip -d /root/456...

Linux_老吴 ⋅ 今天 ⋅ 0

react-loadable使用跳坑

官方给react-loadable的定义是: A higher order component for loading components with dynamic imports. 动态路由示例 withLoadable.js import React from 'react'import Loadable fro......

pengqinmm ⋅ 今天 ⋅ 0

记录工作中遇到的坑

1、ios safari浏览器向下滚动会触发window resize事件

端木遗风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部