2013-02-20 59 views
2

我在學習如何使用Javascript庫leaflet以及d3來創建各種地圖可視化。LatLong屬於D3 +小冊子中給定的多邊形內

我一直在關注this tutorial,它創建了一個具有一定交互性的美國全州地圖。這提供了我需要的一些東西,但我想要的主要功能是根據它們屬於哪個區域來分類經緯度座標列表。

這意味着,在教程地圖中,例如,如果我有一個落在亞利桑那州多邊形狀態下的lat長值(55,-3),程序可以將此點歸類爲屬於亞利桑那州。

傳單(或d3)庫中是否有一個函數,它允許我輸入lat long座標作爲參數並返回它所屬的特徵的名稱?上面的教程允許您通過onEveryFeature屬性將功能附加到每個功能,並且可以在每個功能懸停時觸發鼠標懸停事件。當然有一種方法可以將此功能擴展爲數字輸入的數據而不是鼠標點?

+0

lat,lon = 55,-3然而,不屬於亞利桑那州的狀態 – flup 2013-02-20 17:21:56

+0

@flup這是我的懶惰。 55,-3只是一個虛擬值 – 2013-02-20 17:23:23

+1

請參閱: http://stackoverflow.com/questions/15652424/identify-wh- ss-the-polygon-from-latitude-and -longitude/15656197#15656197 – Sudha 2013-03-27 10:12:52

回答

5

如果您希望這樣做,小冊子將需要一些調整。它將鼠標點擊的處理留給瀏覽器,因此不需要用於確定點是否位於多邊形內的邏輯。

我對d3並不是很瞭解,但對於我來說這並不明顯。看着多邊形代碼,我確實找到了一個裁剪算法和無窮線的交集。

但是,如果添加第三個庫,它應該相當簡單。 OpenLayers幾何庫can determine if a point lies inside a polygon

編輯:我得到這個工作,也見http://jsfiddle.net/VaY3E/4/

var parser = new OpenLayers.Format.GeoJSON(); 
var vectors = parser.read(statesData); 
var lat = 36; 
var lon = -96; 
var point = new OpenLayers.Geometry.Point(lon, lat); 
for(var i = 0; i< vectors.length; i++){ 
    if(vectors[i].geometry.intersects(point)){ 
     alert(vectors[i].attributes['name']); 
    } 
} 

或者你可以使用https://github.com/maxogden/geojson-js-utils,更具體一點的庫。它看起來像知道如何閱讀GeoJSON,它有一個方法gju.pointInPolygon。我還沒有測試過它。

相關問題