Строки строк OpenLayer для отображения текста метки на самой большой строке строки

#javascript #angular7 #openlayers #openlayers-3

#javascript #angular7 #openlayers #openlayers-3

Вопрос:

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

 var rulerObject = olFeature({
  geometry: rulerGeometry //this is the geometry for all the linestrings.
});
rulerObject.setProperties({
  'labelText': "My Label"
});
  

Но это рендеринг «Моей метки» для всех сегментов.

Как я могу установить стиль (метку) только для самого большого сегмента?

Ответ №1:

Для текстовой части стиля вам понадобится функция геометрии, которая находит самый длинный сегмент и возвращает его как геометрию для стилизации текста

 style: [
  new Style({
    stroke: new Stroke({
      ...
      ...
    }),
  }),
  new Style({
    geometry: function(feature) {
      let maxStart, maxEnd;
      let maxSquareLength = -1;
      feature.getGeometry().forEachSegment(function(start, end) {
        const dx = end[0] - start[0];
        const dy = end[1] - start[1];
        const squareLength = dx * dx   dy * dy;
        if (squareLength > maxSquareLength) {
          maxStart = start;
          maxEnd = end;
          maxSquareLength = squareLength;
        }
      });
      return new LineString([maxStart, maxEnd]);
    },
    text: mew Text({
      ...
      ...
    }),
  })
]