使用 PHP 地图坐标转换
- 坐标系说明
- WGS84:为一种大地坐标系,也是目前广泛使用的 GPS 全球卫星定位系统使用的坐标系;
- GCJ02:表示经过国测局加密的坐标;
- BD09:为百度坐标系,其中 bd09ll 表示百度经纬度坐标,bd09mc 表示百度墨卡托米制坐标;
- 当前互联网地图的坐标系现状
地球坐标 (WGS84)- 国际标准,从专业 GPS 设备中取出的数据的坐标系
- 国际地图提供商使用的坐标系
火星坐标 (GCJ-02) 也叫国测局坐标系
- 中国标准:从国行移动设备中定位获取的坐标数据使用这个坐标系
- 国家规定:国内出版的各种地图系统(包括电子形式),必须至少采用 GCJ-02 对地理位置进行首次加密。
百度坐标 (BD-09)
- 百度标准,百度 SDK,百度地图,Geocoding 使用(本来就乱了,百度又在火星坐标上来个二次加密)。
- 开发注意事项
- 从设备获取经纬度(GPS)坐标
如果使用的是百度 sdk 那么可以获得百度坐标(bd09)或者火星坐标(GCJ02),默认是 bd09 如果使用的是 ios 的原生定位库,那么获得的坐标是 WGS84 如果使用的是高德 sdk,那么获取的坐标是 GCJ02
- 互联网在线地图使用的坐标系
火星坐标系: iOS 地图(其实是高德) Gogole 地图 搜搜、阿里云、高德地图、腾讯地图 百度坐标系: 当然只有百度地图 WGS84 坐标系: 国际标准,谷歌国外地图、osm 地图等国外的地图一般都是这个
- 从设备获取经纬度(GPS)坐标
- GCJ02 <–> BD09
<?php /** * 中国正常 GCJ02 坐标---->百度地图 BD09 坐标 * 腾讯地图用的也是 GCJ02 坐标 * @param double $lat 纬度 * @param double $lng 经度 */ function Convert_GCJ02_To_BD09($lng,$lat){ $x_pi = 3.14159265358979324 * 3000.0 / 180.0; $x = $lng; $y = $lat; $z =sqrt($x * $x + $y * $y) + 0.00002 * sin($y * $x_pi); $theta = atan2($y, $x) + 0.000003 * cos($x * $x_pi); $lng = $z * cos($theta) + 0.0065; $lat = $z * sin($theta) + 0.006; return array('lng'=>$lng,'lat'=>$lat); } /** * 百度地图 BD09 坐标---->中国正常 GCJ02 坐标 * 腾讯地图用的也是 GCJ02 坐标 * @param double $lat 纬度 * @param double $lng 经度 * @return array(); */ function Convert_BD09_To_GCJ02($lng,$lat){ $x_pi = 3.14159265358979324 * 3000.0 / 180.0; $x = $lng - 0.0065; $y = $lat - 0.006; $z = sqrt($x * $x + $y * $y) - 0.00002 * sin($y * $x_pi); $theta = atan2($y, $x) - 0.000003 * cos($x * $x_pi); $lng = $z * cos($theta); $lat = $z * sin($theta); return ['lng'=>$lng,'lat'=>$lat]; }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 6. PHP 面向对象
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论