测距还在用尺子吗?快来学习ArcGis中如何测距
2023-04-18 14:51:59 时间
一、前言
ArcGis具有丰富的地图绘制功能,今天我们就来一起学习探讨如何在ArcGis中实现测距功能
二、效果图
三、LengthsParameters
引入ArcGis长度参数模块LengthsParameters
"esri/tasks/support/LengthsParameters", // 为GeometryService.lengths(几何服务)操作设置长度单位和其他参数
复制代码
Polyline绘制前实例化长度参数LengthsParameters
// 实例化长度单位
let params = new this.gisGz.LengthsParameters();
复制代码
四、GeometryService.UNIT_KILOMETER
引入GeometryService几何服务模块
"esri/tasks/GeometryService"
复制代码
定义几何服务模块长度单位
params.lengthUnit = this.gisGz.GeometryService.UNIT_KILOMETER;
复制代码
可定义的类型:feet(英尺) | kilometers(公里) | meters(米) | miles(英里) | nautical-miles(海里) | yards(码)
定义计算类型
官方解释:计算地球表面上几何体的面积或长度(对于在投影坐标系或地理坐标系中定义的几何体)。此方法将几何图形的形状保留在其坐标系中,这意味着将计算地图上显示的几何图形的真实面积或长度。
params.calculationType = "preserveShape";
复制代码
五、new Polyline
在 new Polyline之前需要先绘制两个点位,拿到这两个点位的x、y的坐标信息,如何绘制点位可以看我的这篇文章# ArcGis中Point方法应用
let one = 第一个点信息
let two = 第二个点信息
let polyline = new Polyline( // 线信息,起始点,空间参照物
[
[one.x, one.y],
[two.x, two.y],
],
this.mapView.spatialReference // 空间参照物
)
复制代码
六、获得ArcGis几何服务支持
引入ArcGis几何服务模块
"esri/tasks/GeometryService", // 几何服务 表示由 ArcGIS REST API 公开的几何服务资源
复制代码
创建几何服务实例
// 几何服务控制器
const geometry = new GeometryService("https://utility.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");
复制代码
七、计算长度
计算两点距离,将第二个点绘制在图层上并将测算出的距离文字信息绘制在点位下
let polyline = new Polyline( // 线信息,起始点,空间参照物
[
[one.x, one.y],
[two.x, two.y],
],
this.mapView.spatialReference
)
...
// 要计算其长度的折线数组
params.polylines = [polyline];
this.geometry.lengths(params).then((distance) => {
let les = distance.lengths[0] * 1;
let dis = 0;
// 小于一公里单位为米
if (les < 1) {
dis = Math.round(les * 1000) + "米";
} else {
dis = les.toFixed(2) + "千米";
}
// 点图形
let spot = new Graphic({ // 图形是现实世界地理现象的矢量表示。它可以包含几何图形、符号和属性
attributes: `自定义属性`,
geometry: two, // 第二个点的点位信息
symbol: { // 自定义样式
type: "simple-marker",
color: [255, 255, 255, 0.8],
size: 15,
text: point_id,
outline: {color: [255, 255, 255, 0]},
},
})
this.sketchViewModel.add(spot); // 绘制层添加当前第二个点
// 距离文字样式
let textSymbol = {
type: "text",
geometry: two,
color: [50, 50, 50, 1],
font: { size: 10, },
text: dis, // 距离
xoffset: 0,
yoffset: -20,
haloColor: [255, 255, 255, 1],
haloSize: 1,
};
let curPos = new Point(two.x, two.y, this.mapView.spatialReference)
let g = new Graphic(curPos, textSymbol);
this.rangingTextLayer.add(g); // 测距文字层
});
复制代码
写在最后
如有不足之处请指出,一起学习交流。
相关文章
- go-zero源码学习
- CVPR最有趣论文 | 再模糊的照片AI都可以可以恢复
- Michael Bronstein 最新几何深度学习综述:超越 WL 和原始消息传递的 GNN
- commanderJs与InquirerJs学习笔记
- 迭代器(Iterator)和生成器(Generator)-学习
- 腾讯研究院发布的《数字化转型指数报告2021》,内地企业数字化转型加速升级!
- 利用人工智能解决电网故障
- Kevin P. Murphy《概率机器学习:进阶》成书,还开放了PDF下载
- 从 CPU 切换到 GPU 进行纽约出租车票价预测
- 一文介绍机器学习中的三种特征选择方法
- 继平台后,模块化底盘会否成为主流?
- C++模拟面试:从数组“紧凑”操作说开来
- 研究人员利用人工智能实时发现隐藏在海量数据中的异常现象
- C++模拟面试:宏、lambda、智能指针闲谈
- HTML+CSS案例-学成在线首页
- 践行国家战略,“供”迎一体化国家大数据中心发展契机
- 苹果工程师揭露iOS不支持Flash的真正原因
- 机器学习会成为数据安全新威胁和后门吗?
- 关于机器学习这门炼丹术,理论基础到底有多可靠?
- 终于有人把监督学习讲明白了