1、百度地图
地图调起API | 百度地图API SDKhttps://lbs.baidu.com/faq/api?title=webapi/uri/andriod例:反向地址解析
//反向地址解析URI
private final String BAIDU_MAP_NAVI_URI = "baidumap://map/geocoder?location=";
/**
* 跳转百度地图
*/
private void jumpBaiDuMap(Context context,String lat, String lon) {
Intent intent = new Intent();
intent.setData(Uri.parse(BAIDU_MAP_NAVI_URI + lat+","+lon+"&src="+ AppUtils.getPackageName(getContext())));
context.startActivity(intent);
}
2、高德地图
//逆地址编码
private final String GAODE_MAP_NAVI_URI = "androidamap://viewReGeo?sourceApplication=";
/**
* 高德地图
* @param lat 纬度
* @param lon 经度
* @param dev 是否偏移(0:lat 和 lon 是已经加密后的,不需要国测加密; 1:需要国测加密)
*/
private void createGaoDeIntent(Context context,String lat, String lon, String dev) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
//将功能Scheme以URI的方式传入data
Uri uri = Uri.parse(GAODE_MAP_NAVI_URI +
AppUtils.getPackageName(getContext())
+ "&lat=" + lat
+ "&lon=" + lon
+ "&dev=" + dev);
intent.setData(uri);
intent.setPackage("com.autonavi.minimap");
context.startActivity(intent);
}
3.腾讯地图
//反向地址解析URI
private final String QQ_MAP_NAVI_URI = "qqmap://map/geocoder?coord=";
/**
* 跳转百度地图
*/
private void jumpBaiDuMap(Context context,String lat, String lon) {
Intent intent = new Intent();
intent.setData(Uri.parse(QQ_MAP_NAVI_URI + lat+","+lon+"&referer="+ appKey));
context.startActivity(intent);
}
注:地图坐标系不一样,坐标会有偏差
三大主流坐标系:
WGS84:大地坐标系
GCJ02:国测局坐标系(如高德地图、腾讯地图、谷歌中国地图)
BD09:百度坐标系
以下是一个坐标系转化工具:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 常用地图转换工具类(各个地图API采用的坐标系(WGS84坐标系:即地球坐标系,国际上通用的坐标系。谷歌地图用此坐标))
* 百度地图API 百度坐标 (BD09坐标系:即百度坐标系,GCJ02坐标系经加密后的坐标系。)
* 腾讯搜搜地图API 火星坐标 (GCJ02坐标系:即火星坐标系,WGS84坐标系经加密后的坐标系。)
* 阿里云地图API 火星坐标 (GCJ02坐标系:即火星坐标系,WGS84坐标系经加密后的坐标系。)
* 高德MapABC地图API 火星坐标 (GCJ02坐标系:即火星坐标系,WGS84坐标系经加密后的坐标系。)
*/
public class MapUtils {
public static final double r2d = 57.2957795131;
public static final double PI = 3.1415926535897932384626433832795;
public static final double rearth = 6371006.84;
/**
* wgs84坐标转上海城市坐标
* @param lat 维度
* @param lon 经度
* @return
*/
public static Map<String, Double> wgs84Tosh(Double lat, Double lon) {
double tolat = (31 + (14.0 + 7.55996 / 60.0) / 60.0) / r2d;