安卓 将 百度坐标 转换成 GCJ02
时间: 2023-09-11 10:08:38 浏览: 165
在Android中,您可以使用以下代码将百度坐标转换成GCJ02坐标:
```
public static final double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) {
double x = bd_lon - 0.0065;
double y = bd_lat - 0.006;
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);
double gg_lon = z * Math.cos(theta);
double gg_lat = z * Math.sin(theta);
return new double[] { gg_lon, gg_lat };
}
```
其中,$bd\_lon$ 和 $bd\_lat$ 分别为百度坐标的经度和纬度,返回值为长度为2的double数组,第一个元素是GCJ02坐标的经度,第二个元素是GCJ02坐标的纬度。
需要注意的是,上述代码只是将百度坐标转换成GCJ02坐标,如果您需要将GCJ02坐标转换成WGS84坐标或者其他坐标系,还需要使用相应的转换算法。
相关问题
Android 百度地图如何WGS-84坐标转换为GCJ-02坐标
在Android上,百度地图通常使用的坐标系统是百度自定义的GCJ-02坐标系,而GPS定位得到的是国际标准的WGS-84坐标。如果你需要将WGS-84坐标转换为GCJ-02坐标,可以借助百度提供的坐标转换API或者第三方库,例如BMapUtils类。
以下是一个简单的步骤:
1. 首先,你需要导入百度地图的坐标转换工具包,这通常在`com.baidu.mapapi.model`包下找到。
2. 调用`BaiduMapManager.getConverter()`获取一个`GeoConverter`实例,这是负责坐标系转换的工具。
```java
GeoConverter converter = BaiduMapManager.getInstance().getGeoConverter();
```
3. 使用`convertFromWgs84ToGCJ02(LatLng wgs84LatLng)`方法进行转换,传入WGS-84的经纬度:
```java
LatLng gcj02LatLng = converter.convertFromWgs84ToGCJ02(new LatLng(wgs84Latitude, wgs84Longitude));
```
4. `gcj02LatLng`就是转换后的GCJ-02坐标了。
需要注意的是,这个过程可能会涉及到网络请求,因为百度地图API有时会校验权限或进行地理位置的反查。
Android 如何WGS-84坐标转换为GCJ-02坐标完整代码
Android 中将 WGS-84 坐标转换为 GCJ-02 坐标的完整代码通常涉及到经纬度的地理编码库,如第三方库 `Geocoding` 或者 `LocationUtils`。然而,由于涉及到API的具体实现以及版权问题,这里给出的是一个简化的伪代码示例,你需要在实际项目中使用合适的开源库来完成转换:
```java
// 首先,需要导入支持地理编码转换的库
import com.amap.api.location.AMapGeoCodeUtil;
import com.amap.api.location.GeoCodeResult;
public class CoordinateConverter {
// 使用AMap提供的工具类进行转换,假设你已经初始化了 AMapContext
private static final int COORDINATE_FORMAT = AMapGeoCodeUtil.GEOCODING_DETAIL;
public static GeoCodeResult convertToGCJ02(double lon, double lat) {
// 创建坐标点对象
AMapGeoCodePoint point = new AMapGeoCodePoint(lat, lon);
// 调用地理编码API进行转换,设置返回详细信息
GeoCodeResult result = AMapGeoCodeUtil.getFromLocation(point, COORDINATE_FORMAT);
if (result != null && result.regeocode != null) {
return result;
} else {
return null; // 如果转换失败,返回null
}
}
// 示例用法
public static void main(String[] args) {
double wgs84Lon = 116.404; // 北京经度
double wgs84Lat = 39.915; // 北京纬度
GeoCodeResult gcj02Result = convertToGCJ02(wgs84Lon, wgs84Lat);
if (gcj02Result != null) {
// 获取转换后的GCJ-02坐标
String address = gcj02Result.regeocode.addressComponent;
double gcj02Lon = gcj02Result.regeocode.location.getLongitude();
double gcj02Lat = gcj02Result.regeocode.location.getLatitude();
System.out.println("转换后的GCJ-02坐标: (" + gcj02Lon + ", " + gcj02Lat + ")");
} else {
System.err.println("坐标转换失败");
}
}
}
```
请注意,这个例子基于AMAP SDK,如果你使用的不是AMAP或其他类似服务,转换过程可能会有所不同。实际使用时请查阅相应文档或第三方库的说明。
阅读全文