11

Цель: Я хочу иметь функцию пользовательского поиска (геокодирования) и иметь возможность перечислять и нажимать каждый результат и отображать его на карте.Google Maps API v3 - выпуск результатов геокодирования с ограничениями

Требуется: Настройка карты границ/уровня масштабирования, т.е. поиска для «MA, США» должен увеличить карту, чтобы позволить мне увидеть весь штат Массачусетс, в поисках «Бостон, штат Массачусетс, США» следует увеличить на в районе Бостона. При перечислении нескольких результатов то же самое следует применять при нажатии на результат.

выпуск: Я могу использовать объект geometry.bounds с fitBounds - но - некоторые результаты, которые вы получаете с помощью геокодера, не имеют этого объекта geometry.bounds.

Быстрый пример: поиск "Бостоном" возвращает

Boston, MA, USA
Бостон, Индиана, США
Бостон, штат Кентукки, США
Boston, GA 31626, США
Бостон, Salem , VA 22713, USA
Boston, NY 14025, USA

Оба «Бостон, Кентукки» и «Бостон Нью-Йорк 14025» не имеют границ.

Вопрос: Есть ли надежный способ отображения любого результата геокодирования на карте с соответствующим увеличением уровня?

Сейчас я использую что-то подобное, но я нахожу это некрасиво и это не решает этот вопрос трансфокации

if (results[0].geometry.bounds) { 

    map.fitBounds(results[0].geometry.bounds); 

} else { 

    map.setCenter(results[0].geometry.location); 
    // eventually set zoom here to some middle-range value (ugly) 
} 
+0

Вы пытались использовать объект 'viewport'. – andresf

+1

Какие значения следует искать в объекте viewport? Кажется, в нем нет никаких границ. Благодарю. – MrUpsidown

ответ

15

Право. После попытки обоих методов и тестирования, речь идет о том, что:

  1. geometry.bounds объект «optionnaly возвращается», как док говорит
  2. мы точно не знаем, что geometry.bounds объект основан на
  3. geometry.bounds «может не соответствовать рекомендуемому окну просмотра» и часто не
  4. geometry.bounds возвращает квадрат или прямоугольник любого размера и формы, в то время как функции видового экрана всегда возвращают прямоугольник с тем же соотношением сторон (около 1,43), независимо от размеров вашего картографического контейнера насколько я проверял.

Ниже приведен пример Сан-Франциско, Калифорния, упомянутого в документе.
В красном цвете с использованием geometry.bounds и синим цветом с использованием функций видового экрана.

San Francisco, CA

Решение достаточно проста и надежна.

var resultBounds = new google.maps.LatLngBounds(

    results[0].geometry.viewport.getSouthWest(), 
    results[0].geometry.viewport.getNorthEast() 
); 

map.fitBounds(resultBounds); 
+0

Знаете ли вы, сохраняются ли эти свойства? А именно соотношение сторон на соотношении сторон экрана просмотра? Также источник информации? –

+0

Вы не можете проверить это? Я не думаю, что у меня была скрипка. – MrUpsidown

1

Объект видовой экран имеет информацию, которую нужно сделать границах объекта. Что-то вроде этого:

var bounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(results[0].geometry.viewport.southwest.lat, results[0].geometry.viewport.southwest.lng), 
    new google.maps.LatLng(results[0].geometry.viewport.northeast.lat, results[0].geometry.viewport.northeast.lng) 
); 

Затем вы можете использовать fitBounds на этом объекте новых границ, так же, как вы делаете для возвращенного объекта границ. Пример:

map.fitBounds(bounds); 
+0

Я проведу это через минуту, но, если я хорошо пойму, все результаты будут иметь эти 4 значения вида просмотра. Поэтому, если они есть, почему некоторые результаты приходят с объектом geometry.bounds, а некоторые нет? Странно, я думаю ... – MrUpsidown

+0

Я не совсем уверен, но вот объяснение Google взято из http://code.google.com/apis/maps/documentation/geocoding/#Results: «bounds (необязательно возвращено) сохраняет Обратите внимание, что эти границы могут не соответствовать рекомендуемому видовому экрану (например, Сан-Франциско включает острова Фараллон, которые являются технически частью города, но, вероятно, не должны возвращаться в окне просмотра.) " –

+0

Mmhh ... интересно! Я собираюсь попробовать в обоих направлениях, нарисовать несколько прямоугольников на моей карте, проверить различия, если они есть, и отчитаться здесь. – MrUpsidown

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