如何将随机标记添加到地图但避开大海?

时间:2009-06-13 06:46:02

标签: google-maps

Google 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位于海边(或者如果您使用的是另一个Zoomlevel而不是提供的示例),您如何确保您的标记避免被放置在海上?是否有一个标志,我可以用它来测试随机点的潜在LatLng是在海里还是陆地?

提前Txs。

休伯特

3 个答案:

答案 0 :(得分:5)

一种可能性是为您生成的每个点发送reverse geocode request。水上点将返回“G_GEO_UNKNOWN_ADDRESS”(602)状态代码。但是,您需要彻底测试它以确保它能够正常工作。陆地上的一些地点可能会被归还为未知。

答案 1 :(得分:2)

我不了解Google Earth API,但您可以通过另一种方式实现这一目标。下载美国国家航空航天局蓝色大理石bathymetry地图并创建海域位图。然后将这些坐标映射到long / lat,您就可以测试海洋和湖泊,可以与google maps api一起使用。

答案 2 :(得分:0)

我正在创建一个C#程序,它将用户输入视为他们想去的地方,然后根据它,将它们指向一个符合其规格的随机位置。

http://maps.google.com/maps/geo?q=29,-55”是我将用于确定它是否在陆地上的网页。请查看页面结果的特定“准确度:0”字符串。如果它的准确度为0那么它就在海洋中。如果它是1或更高,则它在陆地上。