Клуб API Карт

Оптимизация точек полилинии

vshameev
18 мая 2011, 08:14

Кто может объяснить, как в действительности оптимизируется полилиния при создании объекта из файла XML? То, что совпадающие идущие подряд точки переходят в одну, я уже знаю. Но если в файле записана LineString, состоящая из многих чередующихся точек, она тоже переходит в объект из двух точек. Почему?

А в объекте GPX такое тоже происходит? Кто-нибудь экспериментировал с ним?

11 комментариев
Подписаться на комментарии к посту

смысл алгоритма - убрать незначимые точки.

если у вас если ровная линия из 1000 точек - на самом деле нужно только две.

Если у вас круг из 100000 точек - тут сложенее но понятнее - на каждом зуме требуется столько точек, сколько пикселей будет в отрисованной кривой. Больше вы просто не заметите.

В итоге оптимизатор кушает не совпадаюшие точки - если у вас есть точки 1,2,3 то он смотрит на отклонение точки 2 от прямой 1-3.

Если нужен сам агоритм - посмотрите сюда

И что, на разных зумах число считанных точек разное?

в этом один из смыслов

А обойти эту оптимизацию можно? В рамках Яндекса? Или надо писать что-нибудь свое?

Если грузите через YML\GPX - никак. Данные прийдут уже обработанные

А зачем вам ее обходить?
Какую задачу вам это мешает решить?

Я сам хочу решать, какую часть этих данных отображать на карте, а какую - нет. Предполагалось, что это будет массив точек за определенное время с интервалом в минуту. И из них надо выбирать и показывать куски в соответствии с заданным временем.

Оптимизация происходит только в рамках LineString и LinearRing, что в принципе позволяет решать задачу в рамках xml структуру, описав каждую точку в виде отдельного GeoObject. Что правда приведет к разрастанию объема и потребует пост-обработку в виде обхода этих объектов и построения по их координатам полилинии.

Альтерантивой действительно может быть что-то свое. Тут вы уже вольны сами описать в подходящей вашим данным форме.

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

Да, вопрос объема присутствует.

А  трек в GPX оптимизируется? Там ведь присутствует время, что позволяет различать точки?

* теги rte преобразуются в ломаные, вершинами которых выступают rtept
* теги trkseg преобразуются в ломаные, вершинами которых выступают trkpt
* gpxStartTime и gpxEndTime - добавляются для rte и trkseg, значения полей берутся из первой и последней точки маршрута (отрезка), время промежуточных точек игнорируется

http://api.yandex.ru/maps/jsapi/doc/ref/reference/gpx.xml

Все понятно, спасибо.