小能豆

shapefile-js无法读取zip包

javascript

code:

shp(‘http://192.168.1.8:8081/Productions/demo/demo.zip')
.then((geojson: any) => {
console.log(geojson);
// Do something with the GeoJSON object
})
.catch((error: any) => {
console.log(error);
});
error:

PROJCS[“CGCS2000_3_Degree_GK_CM_123E”,GEOGCS[“GCS_China_Geodetic_Coordinate_System_2000”,DATUM[“D_China_2000”,SPHEROID[“CGCS2000”,6378137.0,298.257222101]],PRIMEM[“Greenwich”,0.0],UNIT[“Degree”,0.0174532925199433]],PROJECTION[“Gauss_Kruger”],PARAMETER[“False_Easting”,500000.0],PARAMETER[“False_Northing”,0.0],PARAMETER[“Central_Meridian”,123.0],PARAMETER[“Scale_Factor”,1.0],PARAMETER[“Latitude_Of_Origin”,0.0],UNIT[“Meter”,1.0]]


阅读 56

收藏
2024-06-13

共1个答案

小能豆

在处理 Shapefile 文件并将其转换为 GeoJSON 时,你遇到的错误消息是关于投影坐标系统 (PROJCS) 的。这说明你的 Shapefile 使用了一个特定的投影系统,而在转换过程中,这个信息没有正确处理。

以下是一些步骤,帮助你解决这个问题:

  1. 确认数据文件和投影信息:确保 Shapefile 文件中的投影信息是正确的,且 .prj 文件存在并与其他文件配套。

  2. 使用 Proj4js 进行投影转换:如果 Shapefile 使用的投影系统不是 WGS84(EPSG:4326),你需要将其转换为 WGS84。你可以使用 Proj4js 库来实现这一点。

  3. 处理 Shapefile 数据并转换为 GeoJSON:通过 shp 库加载 Shapefile,并在必要时使用 Proj4js 进行投影转换。

以下是一个示例代码,展示如何实现这些步骤:

安装必要的依赖项

首先,安装必要的库:

npm install shpjs proj4

加载和转换 Shapefile

import shp from 'shpjs';
import proj4 from 'proj4';

// 定义 CGCS2000_3_Degree_GK_CM_123E 投影系统
proj4.defs("EPSG:4549","+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +datum=WGS84 +units=m +no_defs");

shp('http://192.168.1.8:8081/Productions/demo/demo.zip')
  .then((geojson) => {
    // 假设数据中的坐标系是 EPSG:4549
    const sourceProjection = 'EPSG:4549';
    const destProjection = 'EPSG:4326';

    geojson.features.forEach((feature) => {
      if (feature.geometry.type === 'Point') {
        const [x, y] = feature.geometry.coordinates;
        feature.geometry.coordinates = proj4(sourceProjection, destProjection, [x, y]);
      } else if (feature.geometry.type === 'Polygon' || feature.geometry.type === 'MultiPolygon') {
        feature.geometry.coordinates = feature.geometry.coordinates.map((polygon) =>
          polygon.map((ring) => ring.map((coord) => proj4(sourceProjection, destProjection, coord)))
        );
      }
      // 可以根据需要处理其他几何类型
    });

    console.log(geojson);
  })
  .catch((error) => {
    console.error(error);
  });

解释

  • 安装依赖shpjs 用于读取 Shapefile,proj4 用于进行投影转换。
  • 定义投影系统:使用 proj4.defs 定义 CGCS2000_3_Degree_GK_CM_123E 投影系统(EPSG:4549)。
  • 加载 Shapefile:使用 shp 函数加载 Shapefile 文件。
  • 投影转换:将加载的数据转换为目标坐标系 WGS84(EPSG:4326)。

这种方法可以帮助你将 Shapefile 数据正确转换为 GeoJSON,并处理坐标系信息,确保数据在全球坐标系下正确显示。根据具体数据格式和需求,可以对代码进行相应调整。

2024-06-13