目前地图开发离不开定位,定位又离不开坐标系的选取和转换,所以有必要简单说一下啦。
世界大地坐标(WGS84)
1.国际上采用的标准,是为GPS全球定位系统使用而建立的坐标系统,可从专业GPS设备中获取数据。
2.国际地图使用的坐标系。
3.谷歌国外地图、osm地图
火星坐标(GCJ-02)
1.中国采用的标准,准确是叫国测局坐标系,可从国行移动设备定位获得数据
2.国内出版的各类地图都至少采用GCJ-02对地理位置进行加密偏移
3.高德地图、天地图、搜搜地图等
百度坐标(BD-09)
1.百度地图自己采用的坐标标准。
2.百度坐标是在GCJ-02的基础上再次加密
3.百度地图
二、各大坐标系间的转换
通用实体
1 /// <summary> 2 /// 经度和纬度 3 /// </summary> 4 public class StationGps 5 { 6 /// <summary> 7 /// 经度 8 /// </summary> 9 public double longitude { get; set; } 10 /// <summary> 11 /// 纬度 12 /// </summary> 13 public double latitude { get; set; } 14 }
1、火星坐标转百度
1 private static double x_pi = 3.14159265358979324 * 3000.0 / 180.0; 2 3 public static StationGps HxToBd(double lon, double lat) 4 { 5 var result = new StationGps(); 6 double x = lon, y = lat; 7 var z = Math.Sqrt(x * x + y * y) + 0.00002 * Math.Sin(y * x_pi); 8 var theta = Math.Atan2(y, x) + 0.000003 * Math.Cos(x * x_pi); 9 result.longitude = z * Math.Cos(theta) + 0.0065; 10 result.latitude = z * Math.Sin(theta) + 0.006; 11 return result; 12 }