#javascript #openlayers
#javascript #openlayers
Вопрос:
Я пытаюсь добавить пользовательское свойство к своим векторным слоям при инициализации слоев, потому что в источнике нет всех данных, которые мне нужны.
Если я правильно понял документы API, это должно быть возможно, но я не знаю, как вернуть значение пользовательского свойства при выборе объекта на векторном уровне на карте.
Я инициализирую векторный слой следующим кодом:
const someVectorLayer = new VectorLayer({
source: new VectorSource({
format: new GeoJSON(),
url: "https://example.com/api/v1/foobar",
}),
customProperty: 'foobar'
});
И я пытаюсь получить доступ к этому свойству, чтобы задать свой URL-адрес выборки, чтобы получать данные из нужного места при нажатии на функцию:
function onSelect(e) {
const featureValues = e.target.getFeatures().getArray()[0];
const featureId = featureValues.get('id');
const featureCustomProperty = featureValues.get("customProperty");
const fetchUrl = `https://example.com/api/v1/${featureCustomProperty}/${featureId}`;
fetch(fetchUrl)
.then((response) => response.json())
.then((data) => console.log(data));
}
Я ценю любую помощь, которую я могу получить по этому вопросу. Очевидно, я еще не эксперт Openlayers. 🙂
Ответ №1:
Используйте loader
для установки свойств перед добавлением объектов на карту.
var vectorSource = new Vector({
format: new GeoJSON(),
loader: function (extent, resolution, projection) {
var url = '***'
fetch(url).then(data => {
// format data to features , this step depends on your actual situation
const features = new GeoJSON().readFeatures(data)
features.forEach((feature, index) => {
// add a custom properties to feature
feature.setProperties({
index
})
});
vectorSource.addFeatures(features)
})
},
strategy: bbox,
})
function onSelect(e) {
'''
const props = selectedFeature.getProperties()
'''
}
Комментарии:
1. Кажется, это помогает в моем случае, спасибо! 🙂
Ответ №2:
Похоже, вы используете неправильную переменную для доступа к своему пользовательскому свойству property.
selectedFeatureValues должно быть someVectorLayer