问题是我有一个带区域列表的DB,它们存储在数据类型为“ geometry”列的表中。所以我想加载一些区域,然后在地图上显示它们。我设法加载区域并在地图上显示它们,但它们不在我想要的位置,它们始终出现在几内亚湾中,这是非投影地图的中心。在尝试加载某些区域之前,地图使用geoServer图层同时加载了所有区域。 所以我的问题是,如何为vectorLayer设置自定义投影?如果我做不到,如何使用de DB的指定部分自动创建图层?
我正在将postgres DB与Postgis一起使用。
这是我之前的代码:
ar wmsSource = new ImageWMS({
url: 'URL TO GEOSERVER',
params: {
Layers: "LAYER IN GEOSERVER" ,
SRS: 'EPSG:4258'
},
ratio: 2,
serverType: 'geoserver'
});
var mainMap = new ImageLayer({
opacity: 0.3,
source: wmsSource,
maxResolution: 500
});
this.map = new Map({
layers: [
new TileLayer({
preload: Infinity,
source: new OSM()
}),
mainMap
]
,
target: 'map',
});
这是我正在尝试的代码:
var vectorSource = new VectorSource({
params: {
CRS: 'EPSG:4258'
},
ratio: 2,
serverType: 'geoserver'
});
var z;
for(z of nextProps.zoneState.zona){
var f = new Feature({
geometry: new MultiPolygon(z.geom.coordinates)
});
vectorSource.addFeature(f);
}
var vectorLayer = new VectorLayer({
source: vectorSource, style:new Style({
stroke: new Stroke({
color: 'red',
width: 3
})
})
});
var map = new Map({
layers: [
new TileLayer({
source: new OSM()
}),
vectorLayer
],
target: 'map'
});
答案 0 :(得分:0)
如果您将VectorSource
与url
和format
选项一起使用,则可以将某些格式(例如GeoJSON)转换为在加载投影时查看投影。但是,如果要在自己的代码中添加功能,则还需要变换几何形状
geometry: new MultiPolygon(z.geom.coordinates).transform('EPSG:4258', 'EPSG:3857')