地图坐标系

目前国内在用的主要地图坐标系有以下几种:

  • WGS84:大地坐标系,也就是 GPS 标准坐标系,国外用的比较多。
  • GCJ02:火星坐标系,由中国国家测绘局制订的地理信息系统的坐标系统。由 WGS84 坐标系加密后所得,常用的有高德地图腾讯地图
  • BD09:百度坐标系,在 GCJ02 坐标系基础上再次加密所得。其中 BD09LL 表示百度经纬度坐标,BD09MC 表示百度墨卡托米制坐标。

坐标系转换

这边介绍两种通过百度地图 API 进行坐标系转换的方案。

注意:要使用百度地图接口前提,必须先申请开发者密钥(AK)【传送门

通过百度 Web 服务 API 转换

接口访问:

请求:

https://api.map.baidu.com/geoconv/v1/?coords=经度,纬度;经度,纬度&from=源坐标类型&to=目标坐标类型&ak=你的密钥 // GET 请求

响应:

{"status":访问状态,"result":[{"x":经度,"y":纬度},{"x":经度,"y":纬度}]}

请求参数:

参数说明类型可选值默认值是否必填
coords需转换的源坐标(经度,纬度),多组坐标以“;”分隔string
from源坐标类型int1:GPS标准坐标;
2:搜狗地图坐标;
3:火星坐标(gcj02),即高德地图、腾讯地图和MapABC等地图使用的坐标;
4:3中列举的地图坐标对应的墨卡托平面坐标;
5:百度地图采用的经纬度坐标(bd09ll);
6:百度地图采用的墨卡托平面坐标(bd09mc);
7:图吧地图坐标;
8:51地图坐标;
1
to目标坐标类型int3:火星坐标(gcj02),即高德地图、腾讯地图及MapABC等地图使用的坐标;
5:百度地图采用的经纬度坐标(bd09ll);
6:百度地图采用的墨卡托平面坐标(bd09mc);
5
ak开发者密钥,申请string

返回数据:

参数说明类型
status访问状态,成功返回 0,其他为失败int
result转换结果数组array
 x经度float
 y纬度float

通过 JS API 转换

引入 JS 库:

<script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=你的密钥"></script>

使用示例(GPS 转 BD09LL):

let pointArr = []
pointArr.push(new BMap.Point(116.32715863448607, 39.990912172420714))
new BMap.Convertor().translate(pointArr, 1, 5, data => {
  console.info(data)
})

输出:

{
    "status": 0,
    "points": [
        {
            "lng": 116.33993794567915,
            "lat": 39.99790821949972
        }
    ]
}

知识点:

  • Convertor():创建一个坐标转换的实例;
  • translate(points: Array<BMap.Point>, from: number, to: number, callback: function):对指定的点数组进行坐标转换,转换规则为从 from 到 to,转换完成后调用 callback。一次最多 10 个点;

注意:根据相关法律规定,不支持将任何一种坐标系坐标转换为 GPS 标准坐标。

参考文档:
1、https://lbsyun.baidu.com/index.php?title=webapi/guide/changeposition
2、https://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference_3_0.html#a7b55

如果觉得我的文章对你有用,请点个赞