我有一个应用程序,我可以上传csv,kml,geojson等...文件太多,我应该画的特点,是包括在这个文件的Map。
我验证了文件内容是有效的,并且所有点的投影都是全局投影“EPSG:4326”;
现在我有了这个React代码。
import { useContext, useEffect } from "react";
import MapContext from "../Map/MapContext";
import { GeoJSON } from "ol/format";
import { Vector as OlVectorLayer } from "ol/layer";
import { Vector as VectorSource } from "ol/source";
const VectorLayer = ({ featureCollection, style, zIndex = 0 }) => {
const { map } = useContext(MapContext);
useEffect(() => {
if (!map || !featureCollection || !style) return;
const geoJsonFormat = new GeoJSON();
const features = geoJsonFormat.readFeatures(featureCollection);
const vectorLayer = new OlVectorLayer({
source: new VectorSource({
features: features,
}),
style: (feat) => {
const geomType = feat.getGeometry().getType();
if (geomType === "Point") return style.Icon;
if (geomType === "Polygon") return style.Polygon;
if (geomType === "MultiPolygon") return style.MultiPolygon;
},
zIndex: zIndex,
});
//zoom to extent
map.getView().fit(vectorLayer.getSource().getExtent(), map.getSize());
map.addLayer(vectorLayer);
vectorLayer.setZIndex(zIndex);
return () => {
if (map) {
map.removeLayer(vectorLayer);
}
};
}, [map, featureCollection, style]);
return null;
};
export default VectorLayer;
这段代码只需要一个功能集合和一组ol样式
1 -将要素集合转换为要素数组
2 -创建新的OlVectorLayer
3 -使用我转换的要素创建新的VectorSource
4-基于要素类型应用样式
5-缩放到新添加图层的范围
6-将此图层添加到Map
问题是要素是在Map位置0,0附近添加的,而不是在其正确的几何体中添加的。
如何将它们放置在正确的位置?
1条答案
按热度按时间7vhp5slm1#
您需要将特征读入视图投影(可能是EPSG:3857,而不是EPSG:4326)。
或者可以使用数据URL,如https://stackoverflow.com/a/70778142/10118270中所示