按点在多边形中过滤并返回县ID /名称

时间:2017-02-22 06:02:35

标签: javascript d3.js topojson

我已经重做了这种方法,但仍然没有使用它。这次我有一个非常简短的工作示例,并完美地说明了问题:

https://developer.android.com/google/play/billing/billing_promotions.html#workflow

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

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

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

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

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

然而,它没有按照我期望的方式过滤,它说不能读取undefined的属性0。

这里应该做些什么?

也尝试过:

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

1 个答案:

答案 0 :(得分:1)

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