计算点坐标是否位于具有凹角和凸角的多边形内?Javascript

计算点坐标是否位于具有凹角和凸角的多边形内?Javascript,javascript,arrays,geometry,point-in-polygon,Javascript,Arrays,Geometry,Point In Polygon,对不起我的英语,但我是意大利人。。。 我想创建一个代码来计算点(有两个坐标)是否位于具有凹角和凸角的多边形内。我尝试了一些代码,因为太难了 var polygon = [ [71.99999994,38.999999714], [71.000000057,38.999999714], [69.999999998,38.999999714], [69.999999998,38.000000007], [68.999999939,38.000000007], [67.99

对不起我的英语,但我是意大利人。。。 我想创建一个代码来计算点(有两个坐标)是否位于具有凹角和凸角的多边形内。我尝试了一些代码,因为太难了

 var polygon = [ 
  [71.99999994,38.999999714],
  [71.000000057,38.999999714],
  [69.999999998,38.999999714],
  [69.999999998,38.000000007],
  [68.999999939,38.000000007],
  [67.99999988,38.000000007],
  [67.99999988,38.999999714],
  [67.99999988,39.999999597],
  [68.999999939,39.999999597],
  [68.999999939,41.000000008],
  [69.999999998,41.000000008],
  [71.000000057,41.000000008],
  [71.99999994,41.000000008],
  [71.99999994,39.999999597],
  [71.99999994,38.999999714]
 ];

  var point= [68,38.5];
我希望你能帮助我


非常感谢

该算法基于以下网站:
它是超高速的,可以处理各种多边形类型。我已经将它调整为javascript和您的数据结构

    function IsPointInPolygon(poly_array, test_point) {
        var inside = false;
        var test_x = test_point[0];
        var test_y = test_point[1];
        for(var i=0; i<(poly_array.length-1); i++) {
            var p1_x = poly_array[i][0];
            var p1_y = poly_array[i][1];
            var p2_x = poly_array[i+1][0];
            var p2_y = poly_array[i+1][1];
            if((p1_y<test_y && p2_y>=test_y) || (p2_y<test_y && p1_y>=test_y)) { // this edge is crossing the horizontal ray of testpoint
                if((p1_x+(test_y-p1_y)/(p2_y-p1_y)*(p2_x-p1_x)) < test_x) { // checking special cases (holes, self-crossings, self-overlapping, horizontal edges, etc.)
                    inside=!inside;
                }
            }
        }
        return inside;
    }

它的可能复制品工作得很好。。。。我只怀疑“test_point[0]”和“poly_array[i][0]”是经度,而不是另一个([1])纬度……是真的吗?您在数组中编写了坐标,比如
testpoint=[68,38.5]所以测试点[0]将是68,测试点[1]将是38.5,我不知道这些值是什么意思。无论如何,即使交换坐标,多边形包含也会起作用。只需在0索引中使用其中一个(例如经度),而另一个(纬度)将在索引1中
    if(IsPointInPolygon(polygon, point)) {
        alert('Inside');
    }
    else {
        alert('Outside');
    }