2009-06-13 76 views
3

在谷歌的Ajax API操場(http://code.google.com/apis/ajax/playground/?exp=maps#map_markers)提供了一個很好爲例隨機標記添加到任何地圖:如何將隨機標記添加到地圖,但避免海?

function initialize() { 
    if (GBrowserIsCompatible()) { 
    var map = new GMap2(document.getElementById("map_canvas")); 
    map.setCenter(new GLatLng(37.4419, -122.1419), 9); 

    // Add 10 markers to the map at random locations 
    var bounds = map.getBounds(); 
    var southWest = bounds.getSouthWest(); 
    var northEast = bounds.getNorthEast(); 
    var lngSpan = northEast.lng() - southWest.lng(); 
    var latSpan = northEast.lat() - southWest.lat(); 
    for (var i = 0; i < 10; i++) { 
     var point = new GLatLng(southWest.lat() + latSpan * Math.random(), 
           southWest.lng() + lngSpan * Math.random()); 
     map.addOverlay(new GMarker(point)); 
    } 
    } 
} 

但如果你的經緯度是毗鄰大海(或者,如果你使用其他縮放級別比提供的爲例) ,你如何確保你的標記避免被放置在海中?有沒有一個標誌可以用來測試隨機點的潛在LatLng是在海里還是在陸地?

提前發送。

休伯特

回答

5

一種可能性是爲您生成的每個點發送reverse geocode request。水上的點將返回一個「G_GEO_UNKNOWN_ADDRESS」(602)狀態碼。但是,您需要徹底測試以確保它能正常工作。可能有幾個地方的地點可能會以未知的方式返回。

1

我不知道谷歌地球API,但你可以做到這一點的另一種方式。下載美國國家航空航天局藍色大理石bathymetry地圖並創建一個海域位圖。然後將這些座標映射到長/緯度,並且您有辦法測試您可以與Google地圖API一起使用的海洋和湖泊。

+0

感謝您的回答,但如果沒有比這更簡單的方法,我會感到驚訝嗎? LatLng上的某種「屬性」或函數返回一個布爾值(YES),如果在陸地上? 我在Google參考文獻(http://code.google.com/intl/fr-FR/apis/maps/documentation/reference.html)中搜索了「land」,「sea」等,但無法找到任何事......仍然在進一步尋找 – Hubert 2009-06-13 07:03:25

+0

也許有,但因爲編寫谷歌地圖API的主要原因是在地圖上標記企業,所以我不得不說,基於高程隨機標記區域的概念可能超出了API功能的範圍。 在那個筆記上,可能有一種方法可以根據一個點來查詢標高,如果是的話,你的答案就在那裏。據我所知,海平面一般(但並非總是)非常接近「平均海平面」(所有海洋的平均高度)。如果你建立的位置低於「平均海平面」可能足夠好。 – SpliFF 2009-06-13 07:59:59

0

我創建了一個C#程序,它將用戶輸入作爲他們想要去的地方,然後基於它,它將它們指向一個隨機位置,以匹配它們的規範。

http://maps.google.com/maps/geo?q=29,-55」是我用來確定它是否在陸地上的網頁。查看頁面結果的特定「準確度:0」字符串。如果它的精度爲0,那麼它在海洋中。如果它是1或更高,那麼它在陸地上。

相關問題