2014-04-30 43 views
1

在具有地理特徵(國家邊界,如此複雜的多邊形)的OpenLayers地圖中,我想確定用戶主要查看的內容。(相對)可見多邊形區域的數量? (OpenLayers中的地理特徵)

基礎上中心點這個「重要性」計算是不是一個好主意海事組織,因爲它可以很容易地失敗了很多浮現在腦海中國家邊界。

取而代之,我想計算可見區域的粗略近似值或可視區域如何相關的相對值。

Relative area amounts

有什麼辦法,而不是切出的可見多邊形區域(使用視口邊界),並做可視區域的精確的計算速度更快?一個可能的JavaScript解決方案應該在客戶端運行,所以它不應該是一個廣泛和精確的算法。

我不想使用反向查找來得到附近的國家名稱,只是如果你想知道。

回答

0

使用的OpenLayers map.getExtent可以判斷當前視口的邊框。然後簡單地遍歷你的多邊形以確定哪個與該視口相交。

var mapExtent = map.getExtent().toGeometry(); 
var featuresOnScreen = []; 
for (var i = 0, i < myFeatures.features.length;; i+=1) { 
    var poly = myFeatures.features[i]; 
    if (mapExtent.intersects(poly.geometery) { 
     featuresOnScreen.push(poly); 
    } 
} 

編輯:的OpenLayers不會幫助你找到重疊的領域,因爲它具有用於確定交叉口的幾何結構沒有功能,只用是否有一個路口。

在這種情況下,您可能會探索JSTS Topology Suite。這個客戶端庫有一個intersection函數,它返回相交區域的幾何圖形。

Here is an example of JSTS integrated with OpenLayers

+0

我可以使用內置的'.onScreen()',但那不是重點。我需要知道**多邊形的可見部分在視口中佔用了多少區域**。 – CoDEmanX

+0

哦。 OpenLayers不執行此操作。更新答案與附加信息... – sfletche

+0

謝謝,我已經檢查jsts,它可以明確相交等。但我仍然希望有一個不同的解決方案,只接近該區域,所以我可以避免繁重的計算。 – CoDEmanX

0

你是對的質心不是一個很好的代理。我跑一國以下的PostGIS查詢接壤的數據集,

select name from countries where st_intersects(geom, st_centroid(geom))='f' order by st_area(geom) desc; 

和不少於49個國家進行數據集中的246的對該國的邊界之外重心,其中,第幾,整理按降序或地區排序爲:印度尼西亞,索馬里,日本,英國,越南,馬來西亞,菲律賓。話雖如此,其中有幾個是島嶼組,這使得質心很可能會落入海中,即使這些組合恰好整齊地進入邊界框內,就像印度尼西亞一樣。

根據邊界框和質心(即NW,NW,SW和SE塊)將每個國家劃分爲4個區段並計算每個區塊中國家的百分比並且它的位置並將此客戶端存儲在字典中。然後,您可以檢查一個國家邊界框的任何角點是否在視口中(便宜的計算),使用質心和每個角點計算每個框在視圖中的百分比,並提出加權平均值。

我沒有試過,但它是最好的,廉價的解決方案,如果你想避免JSTS計算,這大概會涉及到存儲國界客戶端的開銷,我能想到的。這顯然不是確切的,但會很快,並且具有最小的存儲開銷,這就是您要求的。