javascript - d3.polygonContains 总是返回 false

标签 javascript d3.js point-in-polygon

在我的 react 应用程序 中,我使用一些点绘制了一个多边形,然后我试图找出鼠标当前位置是否在多边形内或不是。我正在使用 d3.polygonContains并将包含当前位置点的点数组传递给它,但它总是返回 false,尽管点在多边形内。

这是一个例子;

let points = [
            [ 42.34624, -71.06024 ],
            [ 42.33558, -71.06616 ],
            [ 42.32632, -71.05835 ],
            [ 42.32987, -71.05428 ],
            [ 42.34732, -71.05432 ],
            [ 42.34618, -71.05973 ],
            [ 42.34624, -71.06024 ]
        ];
        
let testPoint = [
    [42.33288, -71.05835]

];
alert(d3.polygonContains(points, testPoint));

alert(d3.polygonContains(points, (42.33288, -71.05835)));
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

谁能告诉我我做错了什么??

最佳答案

testPoints 本身必须是一个包含 2 个元素的简单数组,xy 位置按此顺序排列,而不是具有内部元素的数组数组:

let testPoint = [42.33288, -71.05835];

不幸的是docs对此没有明确说明,它只是说:

d3.polygonContains(polygon, point)

Returns true if and only if the specified point is inside the specified polygon.

但是我们总是可以检查 source code :

export default function(polygon, point) {
  var n = polygon.length,
      p = polygon[n - 1],
      x = point[0], y = point[1],
      //^-- here we see that 'point' is an array with 2 elements

下面是修改后的代码:

let points = [
  [42.34624, -71.06024],
  [42.33558, -71.06616],
  [42.32632, -71.05835],
  [42.32987, -71.05428],
  [42.34732, -71.05432],
  [42.34618, -71.05973],
  [42.34624, -71.06024]
];

let testPoint = [42.33288, -71.05835];

console.log(d3.polygonContains(points, testPoint));
console.log(d3.polygonContains(points, [42.33288, -71.05835]));
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

关于javascript - d3.polygonContains 总是返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58056453/

相关文章:

javascript - CSS:jQuery:将 margin-right 应用于 li 元素,除了每个第 4 个子元素(仅适用于 display:block 的元素)

javascript - 如何将键盘箭头与 jCarousel 集成 - 使用 Keynav jQuery 插件?

javascript - 如何在 Javascript D3 的固定坐标 (x,y) 处显示文本

python - 多边形中的 geopandas 点

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

javascript - 将一个 RxJS observable 的结果传递到下一个连续的 observable

javascript - jQuery ajax 成功响应中的调用函数工作一次但不是两次

javascript - 如何在循环中从起始位置进行转换?

javascript - 使用 D3.js 从 MySQL 数据库绘制条形图

algorithm - 点在带分区的任意多边形内