查找给定的lat-long是否位于MongoDB中的任何多边形中

时间:2013-06-28 00:45:04

标签: mongodb geolocation latitude-longitude geojson

我想知道我是否得到了一个用户的长期,并想检查他是否位于我的数据库(MongoDB)中存储的任何多边形中。如何使用mongoDB实现这一目标。 例如,我的数据库将有10个多边形存储为GeoJson对象。我得到一个lat-long,想要检查这个lat-long是否位于我的DB中的10个多边形中的任何一个。 这可以在MongoDB中实现吗?

3 个答案:

答案 0 :(得分:0)

我不认为您的特定情况可以在MongoDB中实现。 MongoDB确实使用$polygon operator进行多边形计算。但是,此运算符采用多边形并确认是否有任何文档在其中,而不是相反。

答案 1 :(得分: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,纬度,经度);

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;
}       

}

答案 2 :(得分:0)

很抱歉只有过去的两个链接,但我认为这些解释了应该做的更好,然后我会:

A SO answer in the same subject

An excellent tutorial how to use mongodb geospatial indexes