Получите стиль KML в OpenLayers 5

У меня есть код в приложении, которое обращается к стилю выбранной функции в слое KML. Он работал в OpenLayers 3.1. Я обновился до версии 5.3.0, и она перестала работать. См. Соответствующие строки ниже:

var featStyle = feature.getStyleFunction().call(feature, map.getView().getResolution());
var strokeWidth = featStyle[0].getStroke().getWidth();
var strokeColor = featStyle[0].getStroke().getColor();
var fillColor = featStyle[0].getFill().getColor();
var fillOpacity = (Math.round(fillColor[3] * 100));

Линия:

var featStyle = feature.getStyleFunction().call(feature, map.getView().getResolution());

Выдает ошибку, видимую в консоли разработчика:

TypeError: o.getGeometry is not a function[Learn More] KML.js:943
    a KML.js:943
    myFunctionName file.php:5371
    onclick file.php:1

Я не могу найти ничего в документации или примерах, которые показывают, как правильно получить доступ к данным стиля KML для данной функции (а не всего слоя / источника). Есть ли новый способ сделать это или я что-то пропустил?

Может ли это быть связано с этим ?: https://github.com/IGNF/geoportal-sdk/issues/2 Подключено к Google Translate, кажется, что-то говорится о том, что свойства стиля больше не хранятся внутри каждой функции, но, похоже, не говорится, где они хранятся ...

KML действителен и правильно отображается на карте. Я просто не могу больше найти способ получить доступ к данным стиля.


person user2395126    schedule 07.02.2019    source источник
comment
Я думаю, что это должно быть var featStyle = feature.getStyleFunction().call(map.getView().getResolution()); Функция должна передаваться только функциям стиля слоя.   -  person Mike    schedule 08.02.2019
comment
Просто попробовал, по-прежнему выдает ту же ошибку, но ваш код имеет больше смысла, поскольку к этой функции не нужно обращаться дважды.   -  person user2395126    schedule 08.02.2019
comment
Это был код, который я успешно использовал до обновления: github.com/openlayers/openlayers/issues/ 3262   -  person user2395126    schedule 08.02.2019
comment
Да, функция является аргументом .call, а не самой функцией стиля. Я только что протестировал регистрацию стилей функций из этой демонстрации openlayers.org/en/ v4.6.5 / examples / kml.htm В OL4 ему требуется feature.getStyleFunction().call(feature, map.getView().getResolution());, который также можно закодировать как feature.getStyleFunction().bind(feature)(map.getView().getResolution()); Я перешел на полную сборку OL5, и теперь ему требуется feature.getStyleFunction()(feature, map.getView().getResolution());, поэтому кажется, что код больше не использует this, и функция должна передается в основную функцию.   -  person Mike    schedule 08.02.2019
comment
@ Майк, ты же палочка-выручалочка! Отправьте, пожалуйста, ответ, и я приму его. Работает отлично!   -  person user2395126    schedule 08.02.2019


Ответы (1)


В OpenLayers 3 и 4 функция стиля функции принимает только аргумент разрешения, но внутренне использует this, поэтому функция или вызов должны быть привязаны к функции:

feature.getStyleFunction().bind(feature)(map.getView().getResolution());

or

feature.getStyleFunction().call(feature, map.getView().getResolution());

В OpenLayers 5 функции стиля объекта аналогичны функциям стиля слоя и требуют передачи объекта в качестве аргумента:

feature.getStyleFunction()(feature, map.getView().getResolution());
person Mike    schedule 07.02.2019