谷歌地图 - 用户精确定位的位置

时间:2011-01-02 16:09:25

标签: php mysql google-maps mapping geolocation

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

我一直在浏览谷歌地图API,我发现我可以使用网络服务进行这样的搜索:

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

但我不确定它是否正在处理门牌号码(我需要它),而且我不确定如何显示“你的意思是什么?”当他拼错地址时给用户..

有人有想法吗?

谢谢,

3 个答案:

答案 0 :(得分:2)

有你想要的好例子

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);
      }
    });
  }
}

应该是你想要的。

答案 1 :(得分:0)

我建立了一个使用Maps API在全球范围内展示活动的网站(300多个体育赛事),所以是的,这是可能的。地理编码通常非常有效(就像在地图站点上一样)。我已经将它用于地图显示,用户可以拖动标记来调整确切的位置,然后保存坐标。通过这种方式,你真的不需要'你的意思吗?' - 打字盒。

答案 2 :(得分:0)

我最近编写并开源了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