javascript 开放图层仅绘制0,0左右的要素

4sup72z8  于 2023-05-05  发布在  Java
关注(0)|答案(1)|浏览(154)

我有一个应用程序,我可以上传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附近添加的,而不是在其正确的几何体中添加的。

如何将它们放置在正确的位置?

7vhp5slm

7vhp5slm1#

您需要将特征读入视图投影(可能是EPSG:3857,而不是EPSG:4326)。

const features = geoJsonFormat.readFeatures(featureCollection, {
  dataProjection: 'EPSG:4326',
  featureProjection: map.getView().getProjection()
});

或者可以使用数据URL,如https://stackoverflow.com/a/70778142/10118270中所示

相关问题