d3.polygonContains 始终返回 false

Nul*_*ter 5 javascript point-in-polygon d3.js

在我的中react application,我使用一些点绘制了polygon,然后我试图找出鼠标当前位置是否在多边形内部。我正在使用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)));
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

有人能告诉我我在这里做错了什么吗?

Ger*_*ado 6

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

let testPoint = [42.33288, -71.05835];
Run Code Online (Sandbox Code Playgroud)

不幸的是,文档并没有明确说明这一点,它只是说:

d3.polygonContains(多边形, 点)

当且仅当指定点位于指定多边形内部时返回 true。

但人们总是可以检查源代码

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
Run Code Online (Sandbox Code Playgroud)

这是经过更改的代码:

let testPoint = [42.33288, -71.05835];
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)