坐标转换
认识坐标
地理坐标、世界坐标、屏幕坐标。通常用地理坐标来进行位置表达,比如经纬度、弧度;世界坐标也就是笛卡尔坐标系来做一些空间位置变换,比如平移旋转和缩放;屏幕坐标用来和用户交互。
1.地理坐标
默认使用的是 WGS84 作为空间参考,分为弧度和经纬度两种表达方式,但是在 LSGlobe
中没有具体的经纬度对象。
弧度(Cartographic)
作用:LSGlobe 中的地理坐标单位默认是弧度制,用 Cartographic 变量表示。
获取:通过 new LSGlobe.Cartographic(longitude, latitude, height)创建,其中这里的参数是用弧度表示的经纬度弧度(Cartographic),计算方法:弧度= π/180× 经纬度角度。
这里的经纬度是用弧度表示的,经纬度其实就是角度。弧度即角度对应弧长是半径的倍数。
角度转弧度: π / 180 × 角度
弧度变角度: 180 / π × 弧度
经纬度(WGS84)
由于 作用:LSGlobe 中没有具体的经纬度对象,要得到经纬度首先需要计算为弧度,再进行转换。
地理坐标系,坐标原点在椭球的质心。
经度:参考椭球面上某点的大地子午面与本初子午面间的两面角。东正西负。
纬度:参考椭球面上某点的法线与赤道平面的夹角。北正南负。
WGS84(World Geodetic System 1984),是为 GPS 全球定位系统使用而建立的坐标系统,坐标原点为地球质心,其地心空间直角坐标系的 Z 轴指向 BIH (国际时间服务机构)1984.O 定义的协议地球极(CTP)方向,X 轴指向 BIH 1984.0 的零子午面和 CTP 赤道的交点,Y 轴与 Z 轴、X 轴垂直构成右手坐标系。我们平常手机上的指南针显示的经纬度就是这个坐标系下当前的坐标,进度范围[-180,180],纬度范围[-90,90]。
LSGlobe 目前支持两种坐标系 WGS84 和 WebMercator,但是在 LSGlobe 中没有实际的对象来描述 WGS84 坐标,都是以弧度的方式来进行运用的也就是 Cartographic 类。
2.世界坐标
是一个三维空间中的点,单位是米,原点在椭球中心。
三维笛卡尔空间坐标(Cartesian3),以椭球中心为原点的空间直角坐标系中的一个点的坐标。用来做空间位置的变化如平移、旋转和缩放等等。
获取:通过 new LSGlobe.Cartesian3(x, y, z)创建。
3.屏幕坐标(像素)
屏幕显示的二维坐标,原点在屏幕左上角,向右是 x 正方向,向下是 y 正方向。
二维笛卡尔平面坐标(Cartesian2),屏幕左上角为原点(0,0),单位为像素值,屏幕水平方向为 X 轴,向右为正,垂直方向为 Y 轴,向下为正。
获取:(1)通过鼠标点击直接获取的坐标就是屏幕坐标了,单位是像素值;(2)通过 new LSGlobe.Cartesian2(x, y)创建平面坐标系也就是平面直角坐标系,与 Cartesian3 相比少了一个 z 的分量;
认识坐标系
坐标系分为两类:
地理坐标系
:单位是度,WGS84、CGCS2000。在精度不高的要求下,CGCS2000 可以定义为 WGS84。
投影坐标系
:单位是米,按照投影带划分。
一份数据一定有坐标系,但不一定有投影。地理坐标系没有投影,只有投影坐标系有投影。
1.投影坐标系
1) 墨卡托投影(Mercator projection)
墨卡托投影以其创立者荷兰地图学家墨卡托命名,其学名为“正轴等角圆柱投影”,假设地球被包围在圆柱体中,地球的赤道与圆柱相接触,然后再假想地球中心有一个光源,光源把地球表面上的图像投影到圆柱体上,再将圆柱体展开,展开后的地图就是墨卡托投影的世界地图
2) UTM 投影(Universal Transverse Mercator)
UTM 投影,其全称为“通用横轴墨卡托投影”,UTM 投影与高斯-克吕格投影十分相似,但圆柱体并不是与地球相切,而是穿过地球
3)网络墨卡托投影(Web Mercator)
网络墨卡托投影由 Google Map 发明,借鉴于墨卡托投影,但在投影时并不是把地球当作一个椭球体,而是当作一个正球体。
4)高斯-克吕格投影(Gauss-Kruger)
高斯-克吕格投影以其创立者高斯和克吕格命名,其学名为“横轴墨卡托投影”,以中央经线与圆柱体相切,再进行投影
2.地理坐标系
1)3D 笛卡尔空间直角坐标系
2)2D 笛卡尔平面直角坐标系
3) WGS84 经纬度坐标弧度制
3.基于 WGS84 测量系统的坐标系为两种
1)4326
是基于 wgs84 椭球的经纬度坐标系,是地理坐标系。单位是度。
优点:利于存储,可读性高。
缺点:会导致页面变形。
2)3857
是基于球体的、web 墨卡托投影(伪墨卡托投影)的投影坐标系,把 WGS84 坐标系投影到正方形。单位是米。
优点:用于显示、分析数据。
缺点:可读性差,存储占内存。
通常使用 4326 存储数据,使用 3857 显示数据
4.常见的坐标系
WGS-84:gps 原始坐标系
GCJ-02:国测局坐标,火星坐标系,是一种对经纬度数据的加密算法
CGCS2000:国家大地坐标系
BD-09:百度中国地图采用的坐标系,在 GCJ-02 的基础上再加密得到
5.常见的地图使用的坐标系
天地图:全球统一 CGCS2000
百度地图:BD-09,在 GCJ-02 坐标系基础上再次加密
高德地图:GCJ-02
google 地图:GCJ-02,数据来自高德,两者互通
腾讯地图:GCJ-02
坐标转换
1.屏幕坐标和世界坐标转换
//屏幕坐标转世界坐标
var Pos=scene.pickGlobe(movement.position);
//movement.position 鼠标事件触发时返回的坐标
//世界坐标转屏幕坐标,pos世界坐标
var movement = LSGlobe.SceneTransforms.wgs84ToWindowCoordinates(scene, pos);
2.世界坐标和经纬度转换
//世界坐标转换为经纬度
var cartographic = LSGlobe.Cartographic.fromCartesian(Pos);
//Pos世界坐标对象
//经度
var currentClickLon = LSGlobe.Math.toDegrees(cartographic.longitude);
//纬度
var currentClickLat = LSGlobe.Math.toDegrees(cartographic.latitude);
//高度
var height= cartographic.height;
//经纬度换为世界坐标转
var ellipsoid=viewer.scene.globe.ellipsoid;
var cartographic=LSGlobe.Cartographic.fromDegrees(longitude,latitude,height);
//longitude经度 latitude维度 height高度
var cartesian3=ellipsoid.cartographicToCartesian(cartographic);
3.经纬度弧度相互转换
//经纬度转弧度
LSGlobe.Math.toRadians(degrees)
//弧度转经纬度
LSGlobe.Math.toDegrees (radians)
在线示例
请点击