2013-06-28 4 views
3

Я хочу знать, получаю ли я полтора часа пользователя и хочу проверить, лежит ли он в любом из многоугольников, хранящихся в моем db (MongoDB). Как это можно достичь с помощью mongoDB. Например, у моего db будет 10 полигонов, хранящихся в объектах GeoJson. Я получаю lat-long и хочу проверить, находится ли этот lat-long в любом из 10 полигонов в моей БД. Можно ли это сделать в MongoDB?Найти, если заданная lat-long лежит в любом из многоугольников в MongoDB

+0

[У меня есть ответил на этот вопрос здесь вместе с примером] (https://stackoverflow.com/questions/46795397/find-if-given-longitude-latitude-pair-lies-in-any-of-the-polygon -в-MongoDB) –

ответ

0

Я не думаю, что ваш конкретный случай может быть достигнут в MongoDB. У MongoDB есть многоугольные вычисления с $polygon operator. Однако этот оператор берет многоугольник и подтверждает, если какие-либо документы находятся внутри него не наоборот.

0

Я написал этот код в JavaScript это работает хорошо для меня

уаг 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);

функция 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; 
}  

}