外观
坐标系
1555字约5分钟
2024-07-01
只要涉及到地图开发,无论如何关于坐标系的概念是逃不掉的,谁让地球它是个球呢。
地球就像个橘子 不同的坐标系就是不同的剝橘子的方法
这里就不列举国内常用的坐标系及转换方法,大家可以自行百度。
相关GIS的学习资料(含坐标系): GIS基础知识-文档、 GIS基础知识-培训视频
平台内目前支持坐标系类型可以访问 CRS类了解详情。
1. 目前常用GIS坐标系
EPSG:4326
坐标系:目前最通用的标准坐标系,平时我们常说的经度纬度多少多少、从GPS 设备、智能手机中取出的数据的坐标系、国际地图提供商使用的坐标系 都是这个坐标系。WGS-84坐标系(World Geodetic System)是一种国际上采用的地心坐标系。坐标原点为地球质心,其地心空间直角坐标系的Z轴指向国际时间局(BIH)1984.0定义的协议地极(CTP)方向,X轴指向BIH1984.0的协议子午面和CTP赤道的交点,Y轴与Z轴、X轴垂直构成右手坐标系,称为1984年世界大地坐标系。这是一个国际协议地球参考系统(ITRS),是目前国际上统一采用的大地坐标系。GPS广播星历是以WGS-84坐标系为根据的。【wgs84需要保证坐标误差最小】
EPSG:3857
坐标系:Web Mercator(墨卡托)投影坐标系,该坐标系是由Google 最先发明的。在投影过程中,将表示地球的参考椭球体近似的作为正球体处理(正球体半径 R = 椭球体半长轴 a)。由于墨卡托投影当纬度接近两极时,y值趋向于无穷大,那些“懒惰的工程师”为了方便,就把Y轴的取值范围也限定在X轴相同范围,搞个正方形地图,而形成了Web Mercator 投影。 目前在互联网上,大部分全国公众地图网站均采用此坐标系。【墨卡托最早用来航海,要保证方向误差最小】
EPSG:4490
坐标系:2000国家大地坐标系,是我国当前最新的国家大地坐标系,英文名称为China Geodetic Coordinate System 2000,英文缩写为CGCS2000。2000国家大地坐标系是全球地心坐标系在我国的具体体现,其原点为包括海洋和大气的整个地球的质量中心。Z轴指向BIH1984.0定义的协议极地方向(BIH国际时间局),X轴指向BIH1984.0定义的零子午面与协议赤道的交点,Y轴按右手坐标系确定。
- CGCS2000 高斯平面投影坐标系(
EPSG:4491
至EPSG:4554
):支持CGCS2000 Gauss-Kruger Zone 和 CGCS2000 Gauss-Kruger CM 的3度带和6度带平面投影。【各种投影坐标系为了本区域的面积、长度的测量误差最小】
- CGCS2000 高斯平面投影坐标系(
上面的
EPSG:
后面的数字,是WKID,由EPSG组织统一管理(这样避免重复,也具备唯一性),可以在http://epsg.io/网站进行查询了解详情。
👉 CGCS2000 与 WGS84 相差几个厘米,对于一般工程测量,可以认为二者是一致的。
👉 坐标系的更详细讲解可以参阅:GIS基础知识培训
1.1 栅格瓦片图层坐标系的设置
瓦片图层支持配置crs参数来设置坐标系的EPSG值,如crs:"EPSG:4490"
const tdtLayer = new mars3d.layer.TdtLayer({
name: "天地图注记图层",
layer: "img_z",
crs: mars3d.CRS.EPSG4326, // 标识GIS坐标系
})
map.addLayer(tdtLayer)
2. 国内的偏移坐标系
通常国外使用的是WGS84的坐标系统,中国使用CGCS2000坐标系统以经纬度的形式来表示地球平面上的某一个位置,这应该是国际共识。 在我国,出于国家安全考虑,国内所有导航电子地图必须使用国家测绘局制定的加密坐标系统,即将一个真实的经纬度坐标加密成一个不正确的经纬度坐标,我们在业内将前者称之为地球坐标,后者称之为火星坐标(GCJ-02)。 当我们使用的数据和服务不同时,就产生了我们时常说的偏移和纠偏的问题。
国内偏移坐标系的分类,我们定义在 ChinaCRS类
WGS84
坐标系:地球坐标系,目前国际通用的标准坐标系,通常称呼为标准无偏坐标系。
GCJ02
坐标系:在我国,出于国家安全考虑,国内所有导航电子地图必须使用国家测绘局制定的加密坐标系统,即将一个真实的经纬度坐标加密成一个不正确的经纬度坐标,我们在业内将前者称之为地球坐标,后者称之为火星坐标(GCJ-02)。。
BAIDU
坐标系:百度(BD09) 偏移坐标系,百度在国测局坐标基础二次加密后形成的坐标系。
2.1 栅格瓦片图层偏移坐标系的设置
瓦片图层支持配置chinaCRS参数来设置ChinaCRS,如chinaCRS:"GCJ02"
const tileLayer = new mars3d.layer.XyzLayer({
name: "电子地图",
type: "xyz",
url: "https://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
chinaCRS: mars3d.ChinaCRS.GCJ02 // 标识国内偏移坐标系
})
map.addLayer(tileLayer)
2.2 矢量数据坐标的加偏或纠偏转换
const graphicLayer = new mars3d.layer.GeoJsonLayer({
name: "纠偏后",
url: "https://data.mars3d.cn/file/geojson/areas/340303.json",
chinaCRS: mars3d.ChinaCRS.GCJ02, // 标识数据坐标,内部会纠偏
flyTo: true
})
map.addLayer(graphicLayer)
- 也提供了PointTrans类 ,可以对 百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、WGS84坐标系 的坐标 进行互相转换,在加载Graphic数据前按需转换坐标。
const wgsPoint = mars3d.PointTrans.gcj2wgs([point.lng, point.lat]) // 转换为WGS84坐标
const graphic = new mars3d.graphic.BillboardEntity({
position: [wgsPoint[0], wgsPoint[1], point.alt],
style: {
image: "https://data.mars3d.cn/img/marker/lace-blue.png"
}
})
graphicLayer.addGraphic(graphic)