按多边形和 Return 县 ID/Name 中的点过滤

Filter by Point in Polygon and Return County ID/Name

我重做了这个方法,但还是没用。这次我有一个非常简短的工作示例,完美地说明了问题:

https://bl.ocks.org/diggetybo/raw/6d35e5ecd17992650d0a23896e649b25/

在上面的块中,您将看到一张县地图。另外,我有用户输入的纬度和经度,如下所示:

var lat = d3.select('#lat_input').node();

var long = d3.select('#long_input').node();

这些坐标可以在美国境内的任何地方。我想要做的是创建一个查询用户输入坐标和 returns 县的 FIPS id 的函数。

   var containing_county = us.objects.counties.geometries.filter(function(polygon) {
       return d3.polygonContains(polygon, [long.value, lat.value]);
   });
   console.log(containing_county)
 });

但是它并没有按照我期望的方式进行过滤,而是说无法读取未定义的 属性 0。

这里应该做些什么不同的事情?

也尝试过:

    var containing_county = topojson.feature(us, us.objects.counties).features.filter(function(d) { 
return d3.polygonContains(d.geometry, [long.value, lat.value]);
    });

我检查了你链接的数据。
objects.counties.geometries 的元素 0 不是 'Polygon' 类型,而是 'MultiPolygon'.
d3.polygonContains 的第一个参数需要多边形,不能处理多边形。也许你应该在不同的几何体上使用不同的方法。