Cesium定义并使用国家2000坐标系

前言

  自从2017年自然资源部发文要求使用国家2000坐标系以来,各地区各部门已经逐渐开始使用国家2000坐标系(CGCS2000),并逐步实现将已有的北京54、西安80坐标系转换到国家2000坐标系。但是目前最火爆的三维地理信息框架Cesium,其中使用的默认坐标系仍然是WGS84坐标系。为了方便使用,下文中皆称为2000坐标系和84坐标系。本文正是基于此,将坐标系修改为2000坐标系,并对比修改前后的效果。当然,修改坐标系并不是简单的将椭球参数改为2000参数即可,需将对应的一整套数据、服务,全部转为2000。本文正是在这一实践过程中总结而来。

1 常用椭球参数

坐标系椭球长半轴(a)短半轴(b)扁率 (a-b) / a
北京54克拉索夫斯基椭球63782456356863.01877304730.0033523298692592
西安801975国际椭球63781406356755.2881575280.003352813177897
WGS84WGS84椭球体63781376356752.31424517950.0033528106647476
国家2000国家2000坐标系椭球63781376356752.31414035580.0033528106811825

2 Cesium中定义CGCS2000椭球

  Cesium中通过Ellispoid类定义椭球的,该类中定义了一个常量Ellipsoid.WGS84

/**
 * An Ellipsoid instance initialized to the WGS84 standard.
 *
 * @type {Ellipsoid}
 * @constant
 */
Ellipsoid.WGS84 = Object.freeze(
  new Ellipsoid(6378137.0, 6378137.0, 6356752.3142451793)
);

  照猫画虎,我们新增一个Ellipsoid.CGCS2000常量即可

/**
* An Ellipsoid instance initialized to the CGCS2000 standard.
*
*
* @type {Ellipsoid}
* @constant
*/
Ellipsoid.CGCS2000 = Object.freeze(
 new Ellipsoid(6378137.0, 6378137.0, 6356752.3141403558)
);

  为了方便测试,我们直接将Ellipsoid.WGS84的参数修改为2000的值,这样其他的地方调用WGS84常量的地方我们就不用修改了。

/**
* An Ellipsoid instance initialized to the WGS84 standard.
*
* @type {Ellipsoid}
* @constant
*/
Ellipsoid.WGS84 = Object.freeze(
 // new Ellipsoid(6378137.0, 6378137.0, 6356752.3142451793)
 new Ellipsoid(6378137.0, 6378137.0, 6356752.3141403558)
);

3 空间服务CGCS2000化

  好了,现在来到了最关键的地方了。Cesium只是用来加载数据的,它决定不了数据源的坐标系,因此我们需要将数据源改为2000的坐标系。那么有哪些数据需要需要转为2000坐标系呢?自然是影像和地形。

3.1 影像服务的2000化

  第一步自然是栅格影像数据转2000坐标系,很多人都用的ArcGIS转2000坐标系,使用投影栅格工具,但是可能会遇到无效的投影变换错误。而在自定义地理变换时,对着一堆方法及其对应的参数又很无奈,一脸懵逼,不知道是什么意思。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  在此,我想说的是,这个错误通过上面的方法一般都是能成功的。比如作者使用ArcGIS10.3成功了,使用ArcGIS10.8却遇到了无效的地理变换错误。因此我可以肯定这是一个ArcGISBug。也有可能是因为我们使用的破解版…
  那么还有其他解决方案吗?那当然,使用QGIS进行坐标转换!

3.2 使用QGIS进行坐标转换

  在QGIS中的很多操作都比ArcGIS要简单很多,而且QGIS使用起来非常简单,QGIS的安装也很简单,绿色版安装包只占了100多兆,真是不可思议。我知道很多GISer都是从ArcGIS起步的,对QGIS一无所知,因此我建议广大GISer可以试试QGIS,你会发现新大陆的。
在这里插入图片描述
在这里插入图片描述

3.3 地形服务的2000化

  地形服务的2000化其实和影像服务的2000化是类似的,因为DEM也是tif文件,也需要通过ArcGISQGIS转为2000的坐标系,唯一不同的是,转换完毕之后需要进行terrain文件的制作,可以使用开源的CesiumTerrainBuilderCesiumLab封装好的工具,此处过于简单,我们直接略过。

4 对比

  在一切工作准备完毕后,就开始使用GeoServer进行服务的发布,由于我之前已经修改了GeoServer的源码,使得GeoServer可以发布terrain文件了,而影像数据本来GeoServer就是支持的,现在已经一切具备,是时候发布2000服务并加载测试。首先要说明的是,我们对比的方式是,将地图缩放到最大的层级上,直到地图放不大为止,找一个固定的点来查看经度、纬度和高程的值。

4.1 Cesium使用2000坐标系和84坐标系加载84服务

  首先可以得出的结论是,Cesium使用2000坐标系时,也可以加载WGS84的服务(影像和地形),Cesium使用2000坐标系和84坐标系加载84服务,通过拾取坐标,得到的差异很小,仅在高程上有一些差别。
在这里插入图片描述
在这里插入图片描述

4.2 Cesium使用2000坐标系和84坐标系加载2000服务

  类似的,Cesium使用2000坐标系和84坐标系加载2000服务,通过拾取坐标,得到的差异也很小,也仅在高程上有一些差别。
在这里插入图片描述
在这里插入图片描述

4.3 Cesium使用2000坐标系加载2000服务和84坐标系加载84服务

  前面两个都是服务不变,仅更改Cesium中的坐标系时的对比效果,现在我们来试试服务和Cesium同时改动,看看是什么效果,首先是Cesium使用84坐标系加载84服务
在这里插入图片描述
然后是Cesium使用2000坐标系加载2000服务
在这里插入图片描述
  可以看出,其实和之前两次的对比结果是类似的,同一个位置的得到的经纬度信息是相同的,仅仅是在高程方面显示了微小的差异。

5 总结

  本文通过梳理在Cesium中使用2000椭球和84椭球的相关参数,最终通过修改默认椭球,实现了在Cesium中定义并使用2000坐标系,并通过修改GIS数据、服务的坐标系,对比了在Cesium中使用2000坐标系和84坐标系时,分别加载2000和84的服务,得出了以下结论:

  1. Cesium中默认使用的是WGS84椭球的长短半轴参数,即WGS84坐标系。
  2. Cesium中可以定义并使用国家2000坐标系。
  3. Cesium中使用国家2000坐标系和WGS84坐标系加载WGS84服务,拾取到的经纬度相同,高程偏差在毫米级
  4. Cesium中使用国家2000坐标系和WGS84坐标系加载国家2000服务,拾取到的经纬度相同,高程偏差在毫米级
  5. Cesium中使用国家2000坐标系加载 国家2000服务 和使用WGS84坐标系加载WGS84服务,拾取到的经纬度相同,高程偏差在毫米级
  6. 在对高程精度要求不是很高的情况下,国家2000服务和WGS84服务可以相互替代。

注:本文中提及到的国家2000服务和WGS84服务皆指的是地理坐标系,即球面坐标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AIGIS.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值