如何强制 OpenLayers 加载源代码?
How to force OpenLayers to load source?
我注意到 OpenLayers 不会“加载”source 除非它被分配给 layer 分配给 map.
此代码对 KML 图层中的 个要素 执行 console.log()
:
const layer = new Heatmap({
source: new VectorSource({
url: file,
format: new KML({
extractStyles: false,
}),
}),
});
layer.getSource().on('change', function (evt: any) {
var source = evt.target;
if (source.getState() === 'ready') {
var numFeatures = source.getFeatures().length;
console.log('Count after change: ' + numFeatures);
}
});
this.map.addLayer(layer);
如果我删除这一行:
this.map.addLayer(layer);
它没有输出任何东西。我有一种感觉 OpenLayers 会忽略它,因为它没有被使用。有没有办法强制 OpenLayers 加载它?
(context - 我想将来自多个 sources 的 features 合并为一个,因此我不想直接加载它们到 map。我希望加载它们,这样我就可以获得 features,然后合并这些 features 成一个数组,然后在 map)
上显示这个数组
您可以通过获取 url 并使用格式的 readFeatures()
方法
来组合来自多个文件和格式的特征
const vectorSource = new VectorSource();
const layer = new Heatmap({
source: vectorSource,
});
function loadFromUrl (url, format) {
fetch(url).then(function (response) {
response.text().then(function (result) {
vectorSouce.addFeatures(
format.readFeatures(result, {
dataProjection: 'EPSG:4326',
featureProjection: map.getView().getProjection(),
})
}
});
}
loadFromUrl(kmlFile, new KML({extractStyles: false}));
loadFromUrl(geojsonFile, new GeoJSON());
我注意到 OpenLayers 不会“加载”source 除非它被分配给 layer 分配给 map.
此代码对 KML 图层中的 个要素 执行 console.log()
:
const layer = new Heatmap({
source: new VectorSource({
url: file,
format: new KML({
extractStyles: false,
}),
}),
});
layer.getSource().on('change', function (evt: any) {
var source = evt.target;
if (source.getState() === 'ready') {
var numFeatures = source.getFeatures().length;
console.log('Count after change: ' + numFeatures);
}
});
this.map.addLayer(layer);
如果我删除这一行:
this.map.addLayer(layer);
它没有输出任何东西。我有一种感觉 OpenLayers 会忽略它,因为它没有被使用。有没有办法强制 OpenLayers 加载它?
(context - 我想将来自多个 sources 的 features 合并为一个,因此我不想直接加载它们到 map。我希望加载它们,这样我就可以获得 features,然后合并这些 features 成一个数组,然后在 map)
上显示这个数组您可以通过获取 url 并使用格式的 readFeatures()
方法
const vectorSource = new VectorSource();
const layer = new Heatmap({
source: vectorSource,
});
function loadFromUrl (url, format) {
fetch(url).then(function (response) {
response.text().then(function (result) {
vectorSouce.addFeatures(
format.readFeatures(result, {
dataProjection: 'EPSG:4326',
featureProjection: map.getView().getProjection(),
})
}
});
}
loadFromUrl(kmlFile, new KML({extractStyles: false}));
loadFromUrl(geojsonFile, new GeoJSON());