如何在为 OpenLayers VectorlLayer 加载 GeoJSON 对象时转换坐标?

问题描述 投票:0回答:1

我有一个带有 X Y 坐标的图像地图,并从 GeoJSON 源加载对象。 JSON 文件中的坐标需要使用 X 和 Y 偏移进行转换。 为此,获取并转换几何图形:

geometry.translate(162, 435)
,如下面的示例所示。但是,平移(添加偏移量)不是一次平移对象的坐标,而是无限循环,直到对象移出地图。

objectsLayer = new VectorLayer({
    visible: true,
    source: new VectorSource({
      url: 'assets/objects.json',
      format: new GeoJSON(),
    }),
    style: function (feature) {
      console.log('style: function');
      let geometry = feature.getGeometry();
      if (geometry instanceof Geometry) {
        geometry.translate(162, 435);
      }
      return new Style({
        image: new CircleStyle({
          radius: 5,
          stroke: new Stroke({ color: 'cyan', width: 1 }),
          fill: new Fill({ color: 'magenta' }),
        }),
      });
    },
  });

如何对每个对象仅应用一次翻译功能?

typescript openlayers geojson
1个回答
0
投票

要么

objectsLayer = new VectorLayer({
    visible: true,
    source: new VectorSource({
      url: 'assets/objects.json',
      format: new GeoJSON(),
    }),
    style: function (feature) {
      let geometry = feature.getGeometry();
      if (geometry instanceof Geometry) {
        geometry = geometry.clone();
        geometry.translate(162, 435);
      }
      return new Style({
        geometry: geometry,
        image: new CircleStyle({
          radius: 5,
          stroke: new Stroke({ color: 'cyan', width: 1 }),
          fill: new Fill({ color: 'magenta' }),
        }),
      });
    },
  });

objectsLayer = new VectorLayer({
    visible: true,
    source: new VectorSource({
      url: 'assets/objects.json',
      format: new GeoJSON(),
    }),
    style: new Style({
      geometry: function (feature) {
        let geometry = feature.getGeometry();
        if (geometry instanceof Geometry) {
          geometry = geometry.clone();
          geometry.translate(162, 435);
        }
        return geometry;
      },
      image: new CircleStyle({
        radius: 5,
        stroke: new Stroke({ color: 'cyan', width: 1 }),
        fill: new Fill({ color: 'magenta' }),
      }),
    }),
  });

应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.