文档章节

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

gis之家
 gis之家
发布于 2016/06/23 11:41
字数 721
阅读 40
收藏 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
广州
前端工程师
用Tomcat8.5做Arcgis API for javascript的本地部署

step1:1从arcgis官网上下载Arcgis api for JavaScript 4.3 https://developers.arcgis.com/javascript/latest/guide/release-notes/ ps:前提是你需要有一个esri开发者账户否则不能下载。 st......

duxiuxiu
2017/05/18
0
0
ArcGIS API for Javascript 2.X 离线部署(以2.6为例)

先在官网上ArcGIS API for JavaScript download page(需要有账户)下载最新的API:arcgisjsv26_api.zip( 点击直接下载)和 SDK: arcgisjsv26_sdk.zip(直接下载); 2. 将下载下来的 arcg...

回忆在昨天
2012/10/24
0
0
2017第十五届esri用户大会观感(二)——大会整体

上文初步介绍了大会的盛况以及笔者负责的Web App Builder for ArcGIS,本篇来讲讲大会整体观感。总体来说,我觉得本次大会的两大亮点可能不在产品技术本身。而是此次宣布的两大关于产品销售的...

胖胖雕
2017/10/31
0
0
ArcGIS Maritime Server 开发教程(九)二三维水深服务

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

liyuanxiang1984
05/24
0
0
arcgis server安装心得总结

从毕业一来,一直都是使用开源的解决方案,离开arcgis太久都开始怀念了,决定抽时间将手上几个产品的demo基于arcgis来实现,先从js做起,然后转向flex。 第一步就是吧arcgis server装上,我选...

土匪强
2012/10/31
0
1

没有更多内容

加载失败,请刷新页面

加载更多

区块链教程以太坊源码分析core-state源码分析(一)

兄弟连区块链教程以太坊源码分析core-state源码分析,core/state 包主要为以太坊的state trie提供了一层缓存层(cache) database主要提供了trie树的抽象,提供trie树的缓存和合约代码长度的缓...

兄弟连区块链入门教程
17分钟前
0
0
使用putty上传文件

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: 使用putty上传文件 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::linux 用户名 set linux_us......

shzwork
18分钟前
1
0
摹客首家发布Adobe XD插件

10月19日,摹客iDoc发布了支持Adobe XD的插件,这是中国国内首款基于Adobe XD 正式API的插件。 设计师在Adobe XD 中安装并使用此插件,可以将设计稿上传到摹客iDoc,并使用iDoc的全部协作设计...

mo311
18分钟前
0
0
MetInfo最新网站漏洞如何修复以及网站安全防护

metinfo漏洞于2018年10月20号被爆出存在sql注入漏洞,可以直接拿到网站管理员的权限,网站漏洞影响范围较广,包括目前最新的metinfo版本都会受到该漏洞的攻击,该metinfo漏洞产生的主要原因是...

网站安全
18分钟前
0
0
git统计代码行数

$ npm install -g cloc$ cloc . 2193 text files. 1533 unique files. 760 files ignored.github.com/AlDanial/cloc v 1.78 ......

moon888
19分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部