【问题标题】:Google Maps - user to pinpoint a location谷歌地图 - 用户查明位置
【发布时间】:2011-06-02 12:39:03
【问题描述】:

是否可以允许我网站的用户在我使用 Google Maps API 显示的地图上标记地点?然后我需要将该位置坐标保存到数据库中。

我一直在浏览 google maps API,我发现我可以使用网络服务进行如下搜索:

http://maps.google.com/maps/geo?q=Maine,+United+States&output=json&oe=utf8\&sensor=false&key=my_key

但我不确定它是否适用于门牌号级别(我需要它),我不确定如何显示“您的意思是?”当用户拼错地址时发给用户..

有人有想法吗?

谢谢,

【问题讨论】:

    标签: php mysql google-maps mapping geolocation


    【解决方案1】:

    有你想要的很好的例子

    http://digitalinspiration.com/community/location.html

    使用这样的代码:

    var map = null;
    var geocoder = null;
    
    function initialize() {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
     map.addControl(new GLargeMapControl()); 
     map.addControl(new GMapTypeControl()); 
     map.setCenter(new GLatLng(37.4419, -122.1419), 14);
     map.enableScrollWheelZoom();
        geocoder = new GClientGeocoder();
        GEvent.addListener(map, "click", clicked);
      }
    }
    
    function showAddress(address) {
      if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              alert("We're sorry but '" + address + "' cannot be found on Google Maps. Please try again.");
            } else {
             map.panTo(point); 
        }
      });
    }
    }
    
    function clicked(overlay, latlng) {
      if (latlng) {
        geocoder.getLocations(latlng, function(addresses) {
          if(addresses.Status.code != 200) {
            alert("reverse geocoder failed to find an address for " + latlng.toUrlValue());
          }
          else {
            address = addresses.Placemark[0];
            var myHtml = address.address;
            map.openInfoWindow(latlng, myHtml);
          }
        });
      }
    }
    

    应该是你要找的。​​p>

    【讨论】:

    • 看起来棒极了,虽然我在以色列找不到任何街道,例如,我知道谷歌地图正在提供街道地图。无论如何以允许我的方式加载地图查看街道地图?
    • 好吧,这真的很奇怪,我可以在我看过的所有其他地方(使用您给我的顶部链接)看到街道层面的所有内容,但在以色列看不到。可以吗?
    • 我在 maps.google.com 上看到了一张以色列街道地图,您可能需要找到正确的叠加层 ID。
    【解决方案2】:

    我已经建立了一个网站,它使用 Maps API 来显示全球范围内的事件(超过 300 项体育赛事),所以是的,这是可能的。一般来说,地理编码工作得很好(就像在地图网站上一样)。我将它与地图显示一起使用,用户可以在其中拖动标记来调整确切位置,然后保存坐标。这样一来,您就不再需要“您的意思是?”类型的框了。

    【讨论】:

      【解决方案3】:

      我最近编写并开源了一个 SDK for Google's Geocoding API,它应该会使 API 的使用变得更容易一些。

      请注意,这是针对 v3 API,而在上面的代码中,您引用的是 v2 API(现已弃用)

      API 本身会自动更正输入中的拼写错误。因此,如果您想确保用户输入的位置实际上是街道地址,您可以这样做(使用我的 SDK)

      $service = new GoogleGeocodeServiceV3( new CurlCommunicator() );
      
      $response = $service->geocode( '123 Any Street, USA' );
      
      if ( $response->isValid() && $response->hasResults() )
      {
        // Is it a street-level result?
        if ( $response->assertType( GoogleGeocodeResponseV3::ACT_STREET_ADDRESS ) )
        {
          // Street-level address found
        } else {
          // Not a street-level address
        }
      }
      

      如果他们的拼写错误太严重以至于 API 找不到任何东西,那么 $response->hasResults() 将返回 false(或者,count( $response ) 将是 0

      【讨论】:

      • 你的SDK看起来很不错,它是否也绘制了地图并精确定位了请求的地址?从我可以看到它只是“自动更正”并检查该位置是否有效,我错了吗?谢谢!
      • 纬度/经度信息也是响应的一部分,可通过 SDK 获得。文档有更多信息。
      猜你喜欢
      • 1970-01-01
      • 2012-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      相关资源
      最近更新 更多