Как я могу получить маркер места в Google Map API V3? - PullRequest
0 голосов
/ 02 февраля 2012

Я использовал Google Map Apis v2 в моем проекте. Теперь я хочу изменить версию API карты Google на v3. В старом коде я разбирал строку json следующим образом

 JSONObject placemark =  json.getJSONArray("Placemark").getJSONObject(0);       
                    AddressDetail address = new AddressDetail();
                    address.setFullAddress(placemark.getString("address"));
                    JSONObject area = placemark.getJSONObject("AddressDetails").getJSONObject("Country").getJSONObject("AdministrativeArea");
                    address.setCounty(area.getString("AdministrativeAreaName"));
                    JSONObject subArea = area.getJSONObject("SubAdministrativeArea"); 
                    address.setTown(subArea.getString("SubAdministrativeAreaName"));
                    JSONObject locality = subArea.getJSONObject("Locality");
                    address.setLocalityName(locality.getString("LocalityName"));
                    address.setPostCode(locality.getJSONObject("PostalCode").getString("PostalCodeNumber"));
                    address.setStreet(locality.getJSONObject("Thoroughfare").getString("ThoroughfareName"));

, но когда я меняю версию карты Google на v3 и генерирую URL-адрес на

http://maps.google.com/maps/api/geocode/json?sensor=false&latlng=51.520205,-0.1379954

и отправьте запрос на сервер. Получение json без метки.

как я могу получить метку на карте Google API v3?

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

Структура ответа изменена в V3 веб-службы геокодирования.Вам нужно будет изменить свой код, чтобы переназначить новую структуру.Хотя это не так сложно.

Например, FullAddress в вашем коде основан на formatted_address и Street = route.И так далее.Вы можете увидеть полный список элементов здесь:

http://code.google.com/apis/maps/documentation/geocoding/#Types

0 голосов
/ 03 февраля 2012

Посмотрите на код в Google Maps API v3 Geocoder Tool , он, вероятно, имеет то, что вам нужно.

Одна вещь: генерация запросов непосредственно к API на http://maps.google.com/maps/api/geocode/json - это , а не , что нужно делать в JavaScript.Это работает, потому что API находится в том же домене, но вы никогда не должны этого делать.Вместо этого вы всегда должны использовать Сервис геокодирования , который является частью API Карт JavaScript V3.

Используя этот сервис, вам вообще не нужно анализировать ответ JSON, APIсделает это за вас, и тогда у вас будет массив Geocoding Results .Там results[0] заменит json.getJSONArray("Placemark").getJSONObject(0);

Чтобы увидеть, как вы перевели бы весь код извлечения адреса, посмотрите на исходный код вышеупомянутого инструмента геокодера.Вместо дерева объектов V3 предоставляет плоский массив (address_component).Каждый компонент имеет short_name, long_name и массив (types) Типы компонентов адреса .Эти типы объясняют, как компоненты связаны друг с другом.

Кроме того, вы никогда не должны предполагать, что всегда будет компонент любого данного типа.Ваш текущий код слепо полагается на наличие locality в ответе, но это не всегда так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...