孚睿科技·ANDROID知识总结

调用第三方地图导航

2016-09-12  本文已影响96人  安卓小生

一、调用第三方地图之前

首先我们需要了解有哪些坐标系

二、坐标转换

因为我要用的的百度地图和高德地图,所以我在这就获取他们对应的经纬度

//将BD-09转化为GCJ-02
private final double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
private void fromBDtoGcJ(double bd_lat, double bd_lon) {
double x = bd_lon - 0.0065, 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);
longitude = z * Math.cos(theta);
latitude = z * Math.sin(theta);
}

获取的latitude和longitude就是GCJ-02的纬度和经度

三、判断是否安转地图客户端

if (isInstallByread("com.baidu.BaiduMap")) {
//百度
if (mapPop != null && mapPop.isShowing()) {
mapPop.dismiss();
mapPop = null;
} else {
selectMapPop(1, "百度地图");
}
} else if (isInstallByread("com.autonavi.minimap")) {
//高德
if (mapPop != null && mapPop.isShowing()) {
mapPop.dismiss();
mapPop = null;
} else {
selectMapPop(1, "高德地图");
} ```
#### 四、调用相关API
1. 百度地图
```java
private void openBaiduMap() {
try {
String intentStr = "intent://map/marker?" + "location=" + latitude + "," + longitude + "&title=目的位置" + "&content=" + detailAddress + "&coord_type=gcj02&src=thirdapp.marker.yourCompanyName.yourAppName#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end";
Intent intent = Intent.getIntent(intentStr);
//"intent://map/marker?location=39.972691,116.336313&title=目的位置& content=双天大厦&coord_type=gcj02& src=thirdapp.marker.yourCompanyName.yourAppName#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end"
startActivity(intent); //启动调用
} catch (URISyntaxException e) {
e.printStackTrace();
}
}

其中latitude、longgitude、detailAddress是从服务端传来的数据,分别是维度、经度、地址名称

  1. 高德地图
    private void openGaodeMap() {
    try {
    String intentStr = "androidamap://viewMap?sourceApplication=ACCA Helper&poiname=" + detailAddress + "&lat=" + latitude + "&lon=" + longitude + "&dev=0";
    Intent intent = Intent.getIntent(intentStr);
    //"androidamap://viewMap?sourceApplication=ACCA Helper&poiname=双天大厦&lat=39.972691&lon=116.336313&dev=0"
    startActivity(intent); //启动调用
    } catch (URISyntaxException e) {
    e.printStackTrace();
    }
    }
    其中latitude、longgitude、detailAddress是从服务端传来的数据,分别是维度、经度、地址名称
上一篇下一篇

猜你喜欢

热点阅读