在MongoDB中查找给定的经纬度是否属于任何一个多边形

3

我想知道如何使用MongoDB,在获取用户的经纬度后,检查他是否位于存储在我的数据库中的任何多边形内。例如,我的数据库将有10个作为GeoJson对象存储的多边形。我获取一个经纬度并想检查此经纬度是否位于我的数据库中的10个多边形中的任何一个中。MongoDB可以实现这一点吗?


我在这里回答了这个问题,并提供了一个示例:https://stackoverflow.com/questions/46795397/find-if-given-longitude-latitude-pair-lies-in-any-of-the-polygon-in-mongodb - Dheemanth Bhat
3个回答

0

我用JavaScript编写了这段代码,对我来说运行得很好。

var polygonData = "43.64486433588385,-79.3791389465332;43.64508171979899,-79.3930435180664;43.63682057801007,-79.38437461853027;43.63946054004705,-79.36819553375244;43.652720712083266,-79.37201499938965;43.65793702655821,-79.39111232757568;43.64927396999741,-79.37222957611084";

var lat='43.64927396999741'; var lng='-79.37222957611084';

polySearch(polygonData,lat,lng);

function polySearch(polygonData,lat,lng){ var lat_long=lat+","+lng;

var longitude_x = lng;  
var latitude_y = lat;

var is_in_polygon=false;



var vertices_x=[];
var vertices_y=[];

var arr=polygonData.split(';');

for(var j=0; j<arr.length; j++){
    var arr1=arr[j].split(',');
        vertices_x.push(arr1[1]);
        vertices_y.push(arr1[0]);
    }

var points_polygon = vertices_x.length;

var isIn=isInPolygon(points_polygon, vertices_x, vertices_y, longitude_x, latitude_y);
    if (isIn==1)
        console.log('Which is in polygon');
        else
        console.log('Which is not in polygon');

function isInPolygon(points_polygon, vertices_x, vertices_y, longitude_x, latitude_y)
{
    var i = 0;
    var j = 0;
    var c = 0;
    for (i = 0, j = points_polygon-1 ; i < points_polygon; j = i++) {

    var val="((("+vertices_y[i]+" > "+latitude_y+") != ("+vertices_y[j]+" > "+latitude_y+")) && ("+longitude_x+" < ("+vertices_x[j]+" - "+vertices_x[i]+") * ("+latitude_y+" - "+vertices_y[i]+") / ("+vertices_y[j]+" - "+vertices_y[i]+") + "+vertices_x[i]+"))";

    if(eval(val))c=!c;

  }
  return c;
}       

}


0

0

我觉得在MongoDB中无法实现你的特定情况。MongoDB确实有多边形计算功能,使用$polygon operator操作符可以进行计算。然而,该操作符是用来确定是否有文档位于给定多边形内部,而不是反过来。


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