Как получить ближайший маркер к известной точке в видимой области карты с помощью Google Maps API v.3? - PullRequest
2 голосов
/ 28 марта 2011

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

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

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

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

Есть ли способ поиска только между маркерами ввидимая область карты?

Ответы [ 2 ]

1 голос
/ 29 марта 2011

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

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

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

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

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

0 голосов
/ 28 марта 2011

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

if (yourPointLatitude > southWestBoundLatitude && yourPointLatitude < northWestBoundLatitude && yourPointLongitude > northWestBoundLongitude && yourPointLongitude < southEastBoundLongitude)
{
    //take some action, the point is in the map bounds
}

Примечание: этот случай только для определенного географического местоположения -> он будет работать только для северо-восточного квартала мира (например, для Европы). Если вы хотите использовать другое местоположение, используйте другую логику в операторе if и все ...

Редактировать: подробности смотрите по этим ссылкам: Карта LatLngBounds

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