Как получить ближайший маркер к известной точке в видимой области карты с помощью Google Maps API V. 3?


Я уже читал этот вопрос , но у меня есть некоторые сожаления, чтобы применить в моей ситуации, потому что у меня есть много маркеров (atm ~5000, растет каждый день).

В моем приложении пользователь помещает свой маркер (назовем его маркером а), щелкая по карте или через геокод по адресу; я должен знать, есть ли маркер в определенном радиусе маркера А.

Как я уже сказал, Я не могу перебирать все маркеры, это, вероятно, убьет браузер пользователя, и если возможно, я буду рад избежать ajax запросы на поиск в моей базе данных.

На самом деле я вставляю маркеры на карту через MarkerManager

Существует ли способ поиска только между маркерами в видимой области карты?

2 2

2 ответа:

После многих исследований я закончил итерационным решением (демонстрация здесь ).

Чтобы уменьшить количество элементов для итерации, я делю в базе состояния (на данный момент достаточно), возможно, в будущем я смогу добавить дополнительные деления.

Если это может быть полезно кому-то еще, мое "решение" подразумевает массив, подобный:

places = {
    "it":[
        "Rome",
        "Venice"
    ],
    "fr":[
        "Paris",
        "Lyon"
    ],
    "es":[
        "Madrid",
        "Barcelona",
        "Girona"
    ]
}

И геокод google с пользовательским маркером coords, чтобы получить состояние ('fr', 'it'), где искать места.

Можно использовать метод getBounds(), который извлекает объект LatLngBounds. С помощью этого объекта вы можете вызвать методы getNorthEast(); getSouthWest() , которые извлекут Северо-Западную и Юго-Восточную границы вашей карты соответственно. Зная эти границы, вы можете выполнять вычисления в своем приложении (псевдокод):

if (yourPointLatitude > southWestBoundLatitude && yourPointLatitude < northWestBoundLatitude && yourPointLongitude > northWestBoundLongitude && yourPointLongitude < southEastBoundLongitude)
{
    //take some action, the point is in the map bounds
}
Примечание: этот случай относится только к определенному географическому положению - > он будет работать только для северо-восточной четверти мира (например, Европы). Если вы хотите для другого местоположения, используйте другое логика в утверждении if, и это все...

Edit: посмотрите на эти ссылки для получения подробной информации: Map LatLngBounds