是否可以使用JavasScript确定GeoJSON点是否在GeoJSON多边形内?

时间:2015-11-19 11:07:42

标签: javascript d3.js geojson topojson point-in-polygon

是否可以使用JavaScript(通过d3,topojson或任何其他方式)确定给定纬度,lon中的GeoJSON点是否位于给定的GeoJSON多边形内?

例如,我可以根据教程here绘制一张显示英国国家/地区的地图。

然后,我有一些点有坐标,但没有迹象表明它们在哪个国家。

我想显示每个国家/地区的总点数。

我可以确定哪个国家/地区包含浏览器中的每个点,或者我是否需要使用PostGIS或类似工具在服务器上预处理我的点数据?

3 个答案:

答案 0 :(得分:10)

似乎d3涵盖了https://github.com/d3/d3-geo#geoContains

  

d3.geoContains(object,point)

     

当且仅当指定的GeoJSON对象包含指定的点时返回true,如果对象不包含该点,则返回false。必须将该点指定为以度为单位的双元素数组[经度,纬度]。对于Point和MultiPoint几何,使用精确测试;对于一个球体,总是返回true;对于其他几何,应用epsilon阈值。

答案 1 :(得分:0)

扩展 @thedude 答案,如果您需要在给定的GeoJSON上多次检查,也可以使用geojson-lookup

答案 2 :(得分:0)

Turf.js 提供了一个名为 boolean-point-in-polygon

的函数

例如:

var pt = turf.point([-77, 44]);

var poly = turf.polygon([[
  [-81, 41],
  [-81, 47],
  [-72, 47],
  [-72, 41],
  [-81, 41]
]]);

turf.booleanPointInPolygon(pt, poly);
//= true