2017-09-17 62 views

回答

0

我不建議您採用這種封裝形式,它不是最新的,最後的提交是很久以前的事,而不是它,我用下面的算法來計算,一個點在我的多邊形或不。我的功能如下:

point = {latitude: 0, longitude: 0} // example of point 
polygonArray = [ 
    { 
    'latitude': 35.787184, 
    'longitude': 51.348038, 
    }, 
    { 
    'latitude': 35.792754, 
    'longitude': 51.383057, 
    } 
] // example of polygonArray 

_isInPolygon = (point, polygonArray) => { 

    let x = point.latitude 
    let y = point.longitude 

    let inside = false 
    for (let i = 0, j = polygonArray.length - 1; i < polygonArray.length; j = i++) { 
     let xLat = polygonArray[i].latitude 
     let yLat = polygonArray[i].longitude 
     let xLon = polygonArray[j].latitude 
     let yLon = polygonArray[j].longitude 

     let intersect = ((yLat > y) !== (yLon > y)) && (x < (xLon - xLat) * (y - yLat)/(yLon - yLat) + xLat) 
     if (intersect) inside = !inside 
    } 
    return inside 
    } 

如果點在plygon這個函數將返回true,否則其返回fasle。你也可以看到算法here的來源。

+0

是不是對你有用嗎? –

+0

那是有用的,但我的問題更多的是找出一種有效的方法來檢測地理柵欄。該方法這段代碼是設置,我將不得不遍歷了很多不同的多邊形來檢測我在籬笆上。如果是有道理的? – skipper