2016-07-26 2 views
1

Я рисую некоторые контуры из KML, которые предоставляются на стороне сервера. То, что я хотел бы сделать, это добавить метку для каждого контура вблизи края окна просмотра, в соответствии с приведенной ниже точки зрения:Маркировка контуров в открытых слоях 3.17.1

enter image description here

Мой текущий подход должен ходить вокруг каждого края карты и использования forEachFeatureAtPixel, чтобы определить, найден ли контур/функция в [x, y]. Если контур найден, метка добавляется относительно текущего пикселя, и свойство hasLabel для этой функции добавляется (и устанавливается в true), так что только одна метка добавляется в контур/функцию.

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

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

Мой вопрос: есть ли более быстрый способ расчета позиций этикеток? (Некоторые встроенные функции OpenLayers, в котором перечислены все функции, выходящие за пределы текущего вида возможно?)

Дополнение:

Я сделал источник KML для двух наборов контуров, доступных по адресу:

https://lqsts.blob.core.windows.net/temp/DayContours.kml https://lqsts.blob.core.windows.net/temp/MinuteContours.kml

+0

Вы можете сделать это, используя 'jsts' lib. Запустите пересечение вашего текущего mbr с контурами и поместите метку в точках пересечения. Конечно, это означает, что вам нужно включить jsts library. Если вы предоставите свой код для создания контура, я сделаю скрипку для демонстрации. – pavlos

+0

Большое спасибо за предложение! Я добавил ссылки на файлы источников KML для двух наборов контуров (зеленый и синий). Сценарий для любого набора с использованием JSTS был бы очень полезен. – ProfNimrod

ответ

2

Для решения, которое я предоставляю, вам необходимо использовать библиотеку jsts. Для этого просто включите файл jsts.js. Это последняя версия, и, честно говоря, это первый раз, когда я тестирую ее и, похоже, отлично себя ведет.

Ваш fiddle Его не последнее, но большая часть работы выполнена, поэтому вы можете проверить, быстрее ли это решение, которое у вас уже есть.

+0

Это ТОЧНО, что мне нужно. Я только что закончил реализацию этого решения, и он определенно работает быстрее, чем мой подход. Большое спасибо! – ProfNimrod

+0

рад помочь моему другу !!!!!! – pavlos

Смежные вопросы