Я рисую некоторые контуры из KML, которые предоставляются на стороне сервера. То, что я хотел бы сделать, это добавить метку для каждого контура вблизи края окна просмотра, в соответствии с приведенной ниже точки зрения:Маркировка контуров в открытых слоях 3.17.1
Мой текущий подход должен ходить вокруг каждого края карты и использования 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
Вы можете сделать это, используя 'jsts' lib. Запустите пересечение вашего текущего mbr с контурами и поместите метку в точках пересечения. Конечно, это означает, что вам нужно включить jsts library. Если вы предоставите свой код для создания контура, я сделаю скрипку для демонстрации. – pavlos
Большое спасибо за предложение! Я добавил ссылки на файлы источников KML для двух наборов контуров (зеленый и синий). Сценарий для любого набора с использованием JSTS был бы очень полезен. – ProfNimrod