Я хочу знать, получаю ли я полтора часа пользователя и хочу проверить, лежит ли он в любом из многоугольников, хранящихся в моем db (MongoDB). Как это можно достичь с помощью mongoDB. Например, у моего db будет 10 полигонов, хранящихся в объектах GeoJson. Я получаю lat-long и хочу проверить, находится ли этот lat-long в любом из 10 полигонов в моей БД. Можно ли это сделать в MongoDB?Найти, если заданная lat-long лежит в любом из многоугольников в MongoDB
ответ
Я не думаю, что ваш конкретный случай может быть достигнут в MongoDB. У MongoDB есть многоугольные вычисления с $polygon operator. Однако этот оператор берет многоугольник и подтверждает, если какие-либо документы находятся внутри него не наоборот.
Я написал этот код в 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;
}
}
Извините, только последние две ссылки, но я думаю, что это объясняет то, что должно быть сделано гораздо лучше, чем я бы:
[У меня есть ответил на этот вопрос здесь вместе с примером] (https://stackoverflow.com/questions/46795397/find-if-given-longitude-latitude-pair-lies-in-any-of-the-polygon -в-MongoDB) –