2013-06-28 55 views
3

我想知道如果我得到經緯度的用戶並且想檢查他是否位於存儲在我的數據庫中的任何多邊形( MongoDB的)。這怎麼能通過mongoDB來實現。 例如我的數據庫將有10個多邊形存儲爲GeoJson對象。我得到一個經緯度,並且想要檢查這個緯度長度是否在我DB中的10個多邊形中的任何一個。 這可以在MongoDB中實現嗎?查找是否給定經緯度位於MongoDB中的任何多邊形

+0

[我有在這裏回答這個問題連同一個例子](https://stackoverflow.com/questions/46795397/find-if-given-longitude-latitude-pair-lies-in-any-of-the-po萊貢合mongodb的) –

回答

0

我不認爲你的特定情況可以在MongoDB中實現。 MongoDB確實有$polygon operator的多邊形計算。但是,這個操作員需要一個多邊形並確認是否有文檔在其中,而不是相反。

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

}

相關問題