使用arcgis js API判断点是否在保护区多边形内
"利用arcgis js api 4.15进行地图图层开发,需求:判断用户定位的一个点是否在保护区内" 在ArcGIS JavaScript API 4.15中,开发地图应用时,有时我们需要判断一个特定点是否位于地图上某一多边形图层的区域内。这个需求通常出现在需要对特定区域进行限制或者提醒用户其位置是否符合规定的情况,例如判断用户定位是否在保护区。以下是如何使用API实现这个功能的详细步骤。 首先,我们需要创建一个`FeatureLayer`对象来加载包含多边形数据的图层。在这个例子中,图层的URL是`$.arcgisUrl + "/AiAlert/MapServer/8"`,这代表了保护区的图层。我们将其设置为不可见(`visible: false`)和较低的透明度(`opacity: 0.1`),以便在地图上不显眼: ```javascript var bhqfLayer = new FeatureLayer({ id: "hjyp", url: $.arcgisUrl + "/AiAlert/MapServer/8", visible: false, opacity: 0.1 }); map.add(bhqfLayer); ``` 然后,我们需要等待图层加载完成,通过`view.when()`方法确保图层的数据已经加载完毕。一旦加载成功,我们可以调用`queryFeatures()`方法获取图层中的所有特征(多边形): ```javascript view.when(function() { bhqfLayer.queryFeatures().then(function(results) { for (var i = 0; i < results.features.length; i++) { var polygon = results.features[i].geometry; if (polygon.contains(selCoodGeometry)) { // 判断点是否在多边形内 console.log('定位在保护区内,请注意'); break; } } }); }); ``` 在循环中,我们遍历所有查询到的特征,并使用`contains()`方法检查每个多边形是否包含`selCoodGeometry`,这是一个表示用户定位的几何对象。如果找到匹配项,`contains()`会返回`true`,并在控制台输出提示信息。 此外,`promiseUtils.debounce()`函数被用来限制`dwRunQuery`的执行频率,防止频繁触发查询。在实际应用中,你可能还需要其他的业务逻辑,比如`ychjLayer()`方法,它可以在查询完成后执行。最后,为了保持地图的整洁,你可以在业务方法完成或不再需要时删除新增的图层: ```javascript promiseUtils.eachAlways([ychjLayer()]).then(function() { // 在业务方法里面等需求调用完后,删除新加的多边形图层。 map.remove(bhqfLayer); }); ``` 这个示例展示了如何使用ArcGIS JavaScript API 4.15结合地图图层数据来判断用户定位是否在特定多边形区域内,同时考虑了性能优化和业务流程的集成。这在地理信息系统(GIS)应用中是非常常见的需求,对于环境监控、安全预警等领域具有重要的实用价值。
btn_ts.addEventListener("click", function () {
if (!!selCoodGeometry) {
dwRunQuery();
}
else {
jAlert("请先进行定位。");
}
});
//用于判断,promiseUtils来执行
var dwRunQuery = promiseUtils.debounce(function () {
var bhqfLayer = new FeatureLayer({
id:"hjyp",
url:
$.arcgisUrl + "/AiAlert/MapServer/8",//多边形图层
visible: false,
opacity: 0.1
});
map.add(bhqfLayer);
view.when(function () {
bhqfLayer.queryFeatures().then(function (results) {
//console.log("r:", results.features)
for (var i = 0; i < results.features.length; i++) {
var polygon = results.features[i].geometry;
if (polygon.contains(selCoodGeometry)) { //判断点是否在多边形内,返回值为Boolean
console.log('定位在保护区内,请注意')
break;
}
}
});
下载后可阅读完整内容,剩余1页未读,立即下载
- 粉丝: 54
- 资源: 12
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 十种常见电感线圈电感量计算公式详解
- 军用车辆:CAN总线的集成与优势
- CAN总线在汽车智能换档系统中的作用与实现
- CAN总线数据超载问题及解决策略
- 汽车车身系统CAN总线设计与应用
- SAP企业需求深度剖析:财务会计与供应链的关键流程与改进策略
- CAN总线在发动机电控系统中的通信设计实践
- Spring与iBATIS整合:快速开发与比较分析
- CAN总线驱动的整车管理系统硬件设计详解
- CAN总线通讯智能节点设计与实现
- DSP实现电动汽车CAN总线通讯技术
- CAN协议网关设计:自动位速率检测与互连
- Xcode免证书调试iPad程序开发指南
- 分布式数据库查询优化算法探讨
- Win7安装VC++6.0完全指南:解决兼容性与Office冲突
- MFC实现学生信息管理系统:登录与数据库操作