d3.polygonContains函数总是返回false。

5
在我的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>

有人能告诉我这里错在哪里吗??


1
let testPoint = [42.33288, -71.05835]; and alert(d3.polygonContains(points, [42.33288, -71.05835])); - user5734311
关于当前的关闭投票:这不是一个拼写错误问题,因为d3.polygonContains的第一个参数文档远非清晰明了。 - Gerardo Furtado
确切地说,我没有找到任何与这个数组问题相关的问题/答案。 - Naila Akbar
1个回答

6

testPoints 必须是一个简单的数组,其中包含两个元素,按顺序分别是 xy 位置,而不是一个带有内部数组的数组:

let testPoint = [42.33288, -71.05835];

非常抱歉,关于此问题,文档并没有明确说明,它只是简单地表示:

d3.polygonContains(polygon, point)

如果指定的点在指定的多边形内部,则返回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

这是已经进行修改的代码:

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>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接