2011-01-02 4 views
1

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

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

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

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

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

Спасибо,

ответ

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

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

+0

кажется удивительным, хотя я не могу найти улицы в Израиле, например, где я знаю, Google Maps предоставляет отображение уровня улицы .. есть так или иначе, чтобы загрузить карты таким образом, чтобы я мог видеть карточку уличного уровня? – JohnB

+0

http://code.google.com/intl/cs-CZ/apis/maps/documentation/javascript/reference.html#MapTypeId –

+0

Хорошо, это действительно странно, я вижу все на уровне улицы на каждом другом месте i «Посмотрел (используя верхнюю ссылку, которую вы мне дали), но не видит ее в Израиле. Ты можешь? – JohnB

0

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

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)

+0

Ваш SDK выглядит очень хорошо, он также рисует карту и точно определяет запрошенный адрес? Из того, что я вижу, это просто «autocorrects» и проверяет, действительно ли это место, я ошибаюсь? Благодаря! –

+0

Данные lat/lng также являются частью ответа и доступны через SDK. В документации есть дополнительная информация. –

Смежные вопросы