当前位置: 首页 > news >正文

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

目录

  • 前言
  • 1 常用椭球参数
  • 2 Cesium中定义CGCS2000椭球
  • 3 空间服务CGCS2000化
    • 3.1 影像服务的2000化
    • 3.2 使用QGIS进行坐标转换
    • 3.3 地形服务的2000化
  • 4 对比
    • 4.1 Cesium使用2000坐标系和84坐标系加载84服务
    • 4.2 Cesium使用2000坐标系和84坐标系加载2000服务
    • 4.3 Cesium使用2000坐标系加载2000服务和84坐标系加载84服务
  • 5 总结

前言

  自从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服务皆指的是地理坐标系,即球面坐标。


http://www.mrgr.cn/news/5770.html

相关文章:

  • echarts图表网站
  • redis支持的数据结构
  • 直播美颜API与视频美颜SDK的开发指南:构建高效实时美颜工具
  • 超越IP-Adapter!阿里提出UniPortrait,可通过文本定制生成高保真的单人或多人图像。
  • Xenu 网站死链接检测工具下载以及使用指南
  • 压测工具哪个好?LoadRunner、Jmeter、Locust、Wrk 全方位对比....
  • MySQL 数据库知识总结
  • eNSP Pro安装
  • 前程无忧搜索接口 JS 逆向:阿里系acw_sc__v2和Sign加密
  • 你是一个搬运工还是一个业务?
  • 基于单片机的信号发生器设计
  • C++内存管理
  • YOLOv10改进 | 独家创新- 注意力篇 | YOLOv10结合全新多尺度线性注意力机制DSLAM和C2f_DSLAM(全网独家创新)
  • 445端口是啥?445端口怎么关闭?
  • Isaac Sim 12 帧率
  • OpenCV Lesson 2: 如何使用OpenCV扫描图像、查找表和时间测量
  • 【图像处理】在图像处理算法开发中,有哪些常见的主观评价指标和客观评价指标?
  • 数据结构----树
  • K8S - Java微服务配置之ConfigMap
  • go 系列实现websocket