Клуб API Карт

Вычисление координат отображаемой области

Пост в архиве.

Доброго времени суток!

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

 

Карта отображается на странице. В базе есть несколько десятков тысяч объектов, которые надо нанести на неё. Однако подгружать их все пользователю было бы рпосто бесчеловечно, поэтому я хочу производить запрос к серверу с указанием географических координат отображаемой карты, а тот в свою очередь выберет только необходимые объекты. Каким образом можно получить коорждинаты отображаемого в данный момент участка?

6 комментариев

 

Каким образом можно получить коорждинаты отображаемого в данный момент участка?

 

map.getBounds()

Вообще тот алгоритм что вы описали далеко не самый оптимальный (хотя и самый распространенный)

При такой реализации даже минимальный сдвиг карты (на 1пх) будет приводить к отправке новой области на сервер и перезагрузке всех объектов на карте.

поэтому лучше реализовать 1 из 2-х других вариантов

1. Грузить объекты с запасом (для области в 2-раза больше видимого вьюпорта карты) и при сдвиге крты проверять вышел ли вьюпорт за область для которой загружены объекты (если да, грузить и кешировать объекты для новой области, если нет - ничего не делать)

2. Грузить и кешировать объекты привязав их к тайлам (кусочкам изображения карты, видимым в данный момент времени) см. Слои активных областей

 

1 способ легче в реализации, но тоже не самый оптимальный, 2-й - самый оптимальный, но не самый простой в реализации.

getBounds даёт координаты рямоугольника. А как совемесить прямоугольник с граицами отображаемого участка?

 

2-й способ мне очень нравится, но здесь нет примеров серверной части. Например прозрачная картинка генерируется PHP скриптом. В картинку передаётся номер тайла и увеличение.

В субд содержаться объекты с заданными координатами lon, lat

Каким образом на серверной стороне выполнить запрос из базы нужных только нужных координат для тайла? И каким образо зная номер тайла x,y,z определить пиксельные координаты отрисовки объекта по его lon, lat?

отображаемый участок и есть прямоугольник

если не знаете как выбрать попадающие в него объекты из базы можно почитать про spatial indexes в mysql

 

примеров серверной части у нас нет тк это решение не всем подойдет

(к счастью не все пишут на php =))

 

но вы можете ее сделать и поделиться с остальными участниками клуба

Для серверной части важе не столько пример кода, сколько алгоритм. Портировать почти всегда можно.

 

1) Как перевести номер тайла в географические координаты на стороне сервера?

2) Каким образом перевести координаты пикесела внутри тайла в географические координаты?

 

Sergey Konstantinov
28 января 2016, 06:01

Вот код на php:

https://github.com/twirl/hsTiler/blob/master/include/Point.class.php

Собственно, можете воспользоваться программкой - https://github.com/twirl/hsTiler

С её помощью можно YMapsML с иконками нарезать на тайлы.

Спасибо - то, что надо. Только не нашёл механизма обратного преобразования - пиксель и номер тайла -> гео координата.