首页 > 解决方案 > 使用arcgis API在esri地图中查找是否在线

问题描述

我正在尝试找出该点是否在线上,如下所示

 function identifyFeatures(evt){
     var extentGeom = pointToExtent(map,evt.mapPoint,10);
     var filteredGraphics = dojo.filter(testLayer.graphics, function(gg) {
         if(extentGeom.contains(gg.geometry.getExtent())){
             return extentGeom.contains(gg.geometry.getExtent());
         } else {
             return gg.geometry.getExtent().contains(extentGeom);
         } 
      });
      var content = "";
      content = "<i>Total Features: " + filteredGraphics.length + "</i>";
      map.infoWindow.setContent(content);
      map.infoWindow.setTitle("Identify Results");
      var anchor = map.getInfoWindowAnchor(evt.screenPoint);
      map.infoWindow.show(evt.screenPoint,anchor);
 };

我正在使用包含范围的方法并尝试检查单击的点范围是否落在线范围上或线范围是否落在单击的点范围上。但是如果我单击线的中心,那么只有我得到功能。你可以看到代码小提琴

任何人都可以建议我是否有其他方法来检查点是否在线?

标签: javascriptarcgis-js-apiesri-maps

解决方案


如果点的范围(用您的extentToPoint()函数填充)intersects()与线的几何形状,您应该只过滤图形。

  function identifyFeatures(evt){
      var extentGeom = pointToExtent(map,evt.mapPoint,10);
      var filteredGraphics = dojo.filter(testLayer.graphics, function(gg) {
        return extentGeom.intersects(gg.geometry);
      });
      var content = "<i>Total Features: " + filteredGraphics.length + "</i>";
      map.infoWindow.setContent(content);
      map.infoWindow.setTitle("Identify Results");
      map.infoWindow.show(evt.screenPoint,map.getInfoWindowAnchor(evt.screenPoint));
  };

看一个工作演示:https ://jsfiddle.net/q68rzde2/1/


推荐阅读