Как получить ближайший маркер к известной точке в видимой области карты с помощью Google Maps API V. 3?
Я уже читал этот вопрос , но у меня есть некоторые сожаления, чтобы применить в моей ситуации, потому что у меня есть много маркеров (atm ~5000, растет каждый день).
В моем приложении пользователь помещает свой маркер (назовем его маркером а), щелкая по карте или через геокод по адресу; я должен знать, есть ли маркер в определенном радиусе маркера А.
Как я уже сказал, Я не могу перебирать все маркеры, это, вероятно, убьет браузер пользователя, и если возможно, я буду рад избежать ajax запросы на поиск в моей базе данных.
На самом деле я вставляю маркеры на карту через MarkerManager
Существует ли способ поиска только между маркерами в видимой области карты?
2 ответа:
После многих исследований я закончил итерационным решением (демонстрация здесь ).
Чтобы уменьшить количество элементов для итерации, я делю в базе состояния (на данный момент достаточно), возможно, в будущем я смогу добавить дополнительные деления.
Если это может быть полезно кому-то еще, мое "решение" подразумевает массив, подобный:
places = { "it":[ "Rome", "Venice" ], "fr":[ "Paris", "Lyon" ], "es":[ "Madrid", "Barcelona", "Girona" ] }
И геокод google с пользовательским маркером coords, чтобы получить состояние ('fr', 'it'), где искать места.
Можно использовать метод
getBounds()
, который извлекает объектLatLngBounds
. С помощью этого объекта вы можете вызвать методыgetNorthEast(); getSouthWest()
, которые извлекут Северо-Западную и Юго-Восточную границы вашей карты соответственно. Зная эти границы, вы можете выполнять вычисления в своем приложении (псевдокод):Примечание: этот случай относится только к определенному географическому положению - > он будет работать только для северо-восточной четверти мира (например, Европы). Если вы хотите для другого местоположения, используйте другое логика в утверждении if, и это все...if (yourPointLatitude > southWestBoundLatitude && yourPointLatitude < northWestBoundLatitude && yourPointLongitude > northWestBoundLongitude && yourPointLongitude < southEastBoundLongitude) { //take some action, the point is in the map bounds }
Edit: посмотрите на эти ссылки для получения подробной информации: Map LatLngBounds