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]]
在处理 Shapefile 文件并将其转换为 GeoJSON 时,你遇到的错误消息是关于投影坐标系统 (PROJCS) 的。这说明你的 Shapefile 使用了一个特定的投影系统,而在转换过程中,这个信息没有正确处理。
以下是一些步骤,帮助你解决这个问题:
确认数据文件和投影信息:确保 Shapefile 文件中的投影信息是正确的,且 .prj 文件存在并与其他文件配套。
.prj
使用 Proj4js 进行投影转换:如果 Shapefile 使用的投影系统不是 WGS84(EPSG:4326),你需要将其转换为 WGS84。你可以使用 Proj4js 库来实现这一点。
处理 Shapefile 数据并转换为 GeoJSON:通过 shp 库加载 Shapefile,并在必要时使用 Proj4js 进行投影转换。
shp
以下是一个示例代码,展示如何实现这些步骤:
首先,安装必要的库:
npm install shpjs proj4
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
proj4
proj4.defs
这种方法可以帮助你将 Shapefile 数据正确转换为 GeoJSON,并处理坐标系信息,确保数据在全球坐标系下正确显示。根据具体数据格式和需求,可以对代码进行相应调整。