Google Map или Mapquest API для отслеживания видимой области - PullRequest
0 голосов
/ 15 декабря 2011

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

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

Есть в любом случае, чтобы сделать это. Я тоже в порядке с картами Google.

Вот ссылка, которой я хочу достичь. http://oobgolf.com/courses/finder/

Ответы [ 2 ]

1 голос
/ 16 декабря 2011

В основном ... бизнес-логика выглядит так:

Вам необходимо получить границы от объекта карты, а затем передать их как параметры через AJAX в SQL-запрос, который выбирает записи, например, minLat / maxLat & minLng / maxLng ... они переходят в условие WHERE. Это «вырезает прямоугольник» из ваших геоданных. Вы можете изменить эти значения на 5-10%, чтобы точки, расположенные очень близко к границам, не отображались на карте (это просто косметическое исправление).

Только что нашел пример кода JS на моем диске для API Карт Google (он использует jQuery):

function loadViewport() {
    var b = map.getBounds();
    $.minY = b.getNorthEast().lng();
    $.maxY = b.getSouthWest().lng();
    $.minX = b.getSouthWest().lat();
    $.maxX = b.getNorthEast().lat();
    $.url = "http://www.somehost.com/data.php?mode=viewport&minX="+$.minX+"&maxX="+$.maxX+"&minY="+$.minY+"&maxY="+$.maxY;
    $.ajax({type:"GET",url:$.url,dataType:"json",success: parseJSON});
}

Заполнение списка слева должно быть выполнено в функции parseJSON () ...

Условие WHERE для SQL будет выглядеть примерно так:

    WHERE
        (`location`.`latitude` BETWEEN ".(float)$minX." AND ".(float)$maxX.") 
    AND
        (`location`.`longitude` BETWEEN ".(float)$maxY." AND ".(float)$minY.")

Конечно, столбцы в таблице должны иметь тип данных с плавающей точкой - иначе это точно не сработает.

Как видите, я преобразую строку в число с плавающей точкой - чтобы включить сравнение ...

Надеюсь, это поможет, код для MapQuest может отличаться - но логика должна быть такой же.

Источник

0 голосов
/ 20 декабря 2011

Эта логика работает и для API MapQuest.Вам нужно будет передать текущий экстент вашей карты в запрос, чтобы вы могли запрашивать базу данных на основе экстента карты.Результаты запроса будут затем заполнять ваше раскрывающееся меню, поэтому все POI, отображаемые в настоящее время на карте, будут иметь соответствующий пункт в раскрывающемся меню.

Если вы используете JavaScript API MapQuest, взгляните на метод MQA.TileMap.getBounds , который возвращает текущую ограничивающую рамку экстента карты.Я обнаружил, что форумы на веб-сайте MapQuest Developer Network чрезвычайно полезны, когда у меня есть вопросы, поэтому не стесняйтесь публиковать там вопросы или примеры кода, если вам нужна помощь или необходимы дополнительные разъяснения.Вот ссылка: http://developer.mapquest.com/web/products/forums/

...