#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({
...
...
}),
})
]