Cesium出现Unknown crs name: urn:ogc:def:crs:EPSG:xxxx

Cesium出现Unknown crs name: urn:ogc:def:crs:EPSG:xxxx

1. 问题描述

  1. 问题描述, Cesium支持的默认坐标系是WGS 84也就是EPSG 4326, 国内一般的CGCS2000也就是EPSG 4490需要转换, 因此就会出现Unknown crs name: urn:ogc:def:crs:EPSG:xxxx的问题
  2. 如何确认文件是哪个类型的, 可以打开提供的geojson或者json文件, 查找"name": "urn:ogc:def:crs:EPSG::4490"相似的字段名称
    在这里插入图片描述

2. 问题解决

2.1 安装proj4依赖模块

yarn add proj4

2.2 打开网址epsg(可能需要科学上网)

在这里插入图片描述

搜索需要转换的EPSG格式,这里以EPSG:4490为例子, 注意直接搜索后面的数字即可, 比如4490
在这里插入图片描述
下滑到最底端, 选择GeoServer

在这里插入图片描述
复制后面的文本, 从4490=之后开始复制
在这里插入图片描述

GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]]

到这里EPSG 4490的准备完成, WGS 84的也需要按照上面一样操作, 下面的字符串就是WGS84GeoServer, 直接复制即可

GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]

2.3 代码部分

主要使用了CesiumCesium.GeoJsonDataSource.crsNamesAPI
注意: 坐标转换方法必须要放在加载 geoJson 文件之前
JS代码

import { default as proj4 } from 'proj4'
export default class MapClass {
	viewer = null
	Cesium = window.Cesium
	constructor(container) {
	    this.init(container)
	 }
	 init() {
		this.tranformCoordinate()
		// 加载geoJson文件
	}
	...
	...
	// 坐标系转换方法
	tranformCoordinate() {
	  Cesium.GeoJsonDataSource.crsNames['urn:ogc:def:crs:EPSG::4490'] =
	    Cesium.GeoJsonDataSource.crsNames['EPSG:4490'] = coordinates => {
	      const fromProjection = `GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]]`
	
	      const toProjection = `GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]`
	
	      const x = coordinates[0]
	      const y = coordinates[1]
	
	      const newCoordinates = proj4(fromProjection, toProjection, [x, y])
	      return Cesium.Cartesian3.fromDegrees(
	        newCoordinates[0],
	        newCoordinates[1],
	        0
	      )
	    }
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值