Google Maps - пользователь может точно определить местоположение - PullRequest
1 голос
/ 02 января 2011

Можно ли разрешить пользователям моего веб-сайта отмечать места на карте, которые я отображаю, с помощью API Карт Google? Затем мне нужно сохранить координаты этого местоположения в БД.

Я просматривал API Google Maps и обнаружил, что могу использовать веб-сервис для таких поисков:

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

Но я не уверен, что он работает на уровне номера дома (который мне нужен), и я не уверен, как отобразить «Вы имели в виду?» пользователю, когда он неправильно пишет адрес ..

У кого-нибудь есть идея?

Спасибо

Ответы [ 3 ]

2 голосов
/ 02 января 2011

Есть хороший пример того, что вы хотите

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

Должно быть то, что вы ищете.

0 голосов
/ 03 января 2011

Я недавно написал и открыл исходный код SDK для Google Geocoding API , который должен немного упростить работу с API.

Обратите внимание, что это для v3 API, тогда как в приведенном выше коде вы ссылаетесь на API v2 (который сейчас устарел)

Сам 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)

0 голосов
/ 02 января 2011

Я создал сайт, который использует Maps API для отображения событий по всему миру (более 300 спортивных событий), так что да, это возможно. В общем, геокодирование работает очень хорошо (так же, как на сайте Карт). Я использовал его с отображением карты, где пользователь может перетащить маркер, чтобы отрегулировать точное местоположение, а затем сохранить координаты. Таким образом, вам действительно не понадобится поле типа «Вы имели в виду?».

...