使用加载程序时,Openlayers 不会在图层中显示功能
Openlayers wont show features in a layer when using loader
所以我已经开始了:loadingstrategy bbox,所以当我平移或缩放时,加载程序会获取功能。但问题是,即使我从 http 请求中获得了功能,它也不会以某种方式显示。
我的逻辑是:
source = new VectorSource({
loader: (extent, resolution, projection) => {
let url ='api_url'
let xhr = new XMLHttpRequest();
xhr.open('GET', url);
let onError = () => {
source.removeLoadedExtent(extent);
console.log('error');
};
xhr.onerror = onError;
xhr.onload = () => {
if (xhr.status === 200) {
let features = new GeoJSON({
featureProjection: 'EPSG:32633',
}).readFeatures(xhr.responseText);
source.addFeatures(features);
source.changed();
console.log(
this.Map.getLayers().getArray(),
(this.Map.getLayers()
.getArray()
.find(
(l) => l.get('name') === 'propertyLayer'
) as VectorLayer)
.getSource()
.getFeatures()
);
} else {
console.log('error');
}
};
xhr.send();
},
strategy: bbox,
format: new GeoJSON({
featureProjection: GetProjection('EPSG:32633'),
dataProjection: GetProjection('EPSG:32633'),
}),
});
const styles = [
new Style({
stroke: new Stroke({
color: 'blue',
width: 3,
}),
fill: new Fill({
color: 'rgba(0, 0, 255, 0.1)',
}),
}),
new Style({
image: new CircleStyle({
radius: 6,
fill: new Fill({
color: '#3399CC',
}),
stroke: new Stroke({
color: '#fff',
width: 2,
}),
}),
}),
];
let vLayer = new VectorLayer({
source: source,
style: styles,
});
this.Map.addLayer(vLayer);
我在 onload 函数内部的 console.log 显示了很多功能,所以我知道它正在获取。
第一个日志以数组格式列出层。而获取特征的层是最后一层,会不会是其他层的z-index值更高的东西?或者我可能需要 refresh/redraw 添加所有功能的图层?
而不是
let features = new GeoJSON({
featureProjection: 'EPSG:32633',
}).readFeatures(xhr.responseText);
也包括 dataProjection
,或者如果两个投影相同,则不指定任何一个。
所以我已经开始了:loadingstrategy bbox,所以当我平移或缩放时,加载程序会获取功能。但问题是,即使我从 http 请求中获得了功能,它也不会以某种方式显示。
我的逻辑是:
source = new VectorSource({
loader: (extent, resolution, projection) => {
let url ='api_url'
let xhr = new XMLHttpRequest();
xhr.open('GET', url);
let onError = () => {
source.removeLoadedExtent(extent);
console.log('error');
};
xhr.onerror = onError;
xhr.onload = () => {
if (xhr.status === 200) {
let features = new GeoJSON({
featureProjection: 'EPSG:32633',
}).readFeatures(xhr.responseText);
source.addFeatures(features);
source.changed();
console.log(
this.Map.getLayers().getArray(),
(this.Map.getLayers()
.getArray()
.find(
(l) => l.get('name') === 'propertyLayer'
) as VectorLayer)
.getSource()
.getFeatures()
);
} else {
console.log('error');
}
};
xhr.send();
},
strategy: bbox,
format: new GeoJSON({
featureProjection: GetProjection('EPSG:32633'),
dataProjection: GetProjection('EPSG:32633'),
}),
});
const styles = [
new Style({
stroke: new Stroke({
color: 'blue',
width: 3,
}),
fill: new Fill({
color: 'rgba(0, 0, 255, 0.1)',
}),
}),
new Style({
image: new CircleStyle({
radius: 6,
fill: new Fill({
color: '#3399CC',
}),
stroke: new Stroke({
color: '#fff',
width: 2,
}),
}),
}),
];
let vLayer = new VectorLayer({
source: source,
style: styles,
});
this.Map.addLayer(vLayer);
我在 onload 函数内部的 console.log 显示了很多功能,所以我知道它正在获取。
第一个日志以数组格式列出层。而获取特征的层是最后一层,会不会是其他层的z-index值更高的东西?或者我可能需要 refresh/redraw 添加所有功能的图层?
而不是
let features = new GeoJSON({
featureProjection: 'EPSG:32633',
}).readFeatures(xhr.responseText);
也包括 dataProjection
,或者如果两个投影相同,则不指定任何一个。