使用java转换腾讯地图,百度地图坐标问题。

本文介绍了如何使用Java解决将腾讯地图坐标转换为百度地图坐标的难题,包括理解坐标加密标准如GCJ-02和BD-09,以及通过墨卡托投影坐标进行转换的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java转换手机腾讯地图和百度地图坐标

最近项目中有这样一个需求,需要将安卓手机app腾讯地图,百度地图备份后,把tar压缩文件复制到pc端解压,使用java连接sqlite数据库,取出腾讯地图和百度地图上的坐标数据。需要将坐标转换为百度坐标,类似这样的经度和纬度(116.383859,39.940387),才能供前端愉快的使用。


然而

在我国,使用的坐标系不能为地球坐标(WGS84),这是国际标准坐标。

所以我国采用的坐标必须至少采用GCJ-02对地理位置进行加密,火星坐标(GCJ-02)也叫国测局坐标系,经过查找大量资料,腾讯地图和百度地图都是使用的(GCJ-02)标准。这下我以为很舒服了。But 我们的百度同学需要皮一下。
这里写图片描述
百度地图在(GCJ-02)的基础上再来一次加密,就有了自己的一套百度坐标 (BD-09),是不是很独树一帜呀!嘿嘿。

再一次,然而。

我在sqlite中取出的数据,给你们看一下。
腾讯地图的:(104057556,30615478)我去这是啥玩意儿。怎么转换!
然后我去腾讯地图坐标拾取系统随便点了一个点看了标准坐标。长这样(30.611618,104.063530)前面的为纬度,后面的为经度。

说下我的思路。把这个坐标经纬度同时除以1000000(104057556,30615478)得到
(104.057556,30.615478)这下标准坐标和我的坐标长的是不是就很相似啦。没错除以100万后腾讯地图确实得到了GCJ-02坐标。只是经纬度坐标相反,我想你们用代码转换一下这两个坐标的位置,应该没问题的。

但是项目需要将腾讯的坐标转换为百度坐标BD-09。下面直接上代码,把我们除以100万的坐标(30.615478,104.057556)扔进去,跑起来。就好了

public static double[] map_tx2bd(double lat, double lon){
double bd_lat;
double bd_lon;
double x_pi=3.14159265358979324;
double x = lon, y = lat;
double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
bd_lon = z * Math.cos(theta) + 0.0065;
bd_lat = z * Math.sin(theta) + 0.006;

    double[] doubles = new double[2];
    doubles[0]= bd_lat;
    doubles[1] =bd_lon;
    return doubles;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值