zoukankan      html  css  js  c++  java
  • 跳转至第三方地图

    /** 判断手机中是否安装指定包名的软件 */
    public static boolean isInstallApk(String name) {
    List<PackageInfo> packages = App.instance.getPackageManager().getInstalledPackages(0);
    for (int i = 0; i < packages.size(); i++) {
    PackageInfo packageInfo = packages.get(i);
    if (packageInfo.packageName.equals(name)) {
    return true;
    } else {
    continue;
    }
    }
    return false;
    }

    一、高德地图

      打开高德地图API——>开发支持——>高德地图手机版(在其它这个分类里面)。直达链接:https://lbs.amap.com/api/amap-mobile/guide/android/route

      举例:   

        isInstallApk("com.autonavi.minimap")

                    Uri uri = Uri.parse("amapuri://route/plan/?dlat="+"目的地lat"+"&dlon="+"目的地lng"+"&dname="+"目的地名称"+"&dev=0&t=0");
                    Activity.startActivity(new Intent(Intent.ACTION_VIEW, uri));

                   可以额外拼的参数:

               

    二、百度地图

         百度地图API——>开发文档——>地图调起API(服务接口)——>android端——>2.3.2路线规划                           直达链接:http://lbsyun.baidu.com/index.php?title=uri/api/android

       举例:

         isInstallApk("com.baidu.BaiduMap")

          Uri uri = Uri.parse("baidumap://map/direction?destination=latlng:"+"目的地lat"+","+ "目的地lng"+"|name:"+"目的地名称"+"&mode=driving");

          Activity.startActivity(new Intent(Intent.ACTION_VIEW, uri));

          可额外拼的参数:

                                                    

    三、google地图  

    if (isInstallApk( "com.google.android.apps.maps")) {

      Uri gmmIntentUri = Uri.parse("google.navigation:q="+ mLatitude + "," + mLongitude+ ", + Sydney +Australia");
      Intent mapIntent = new Intent(Intent.ACTION_VIEW,gmmIntentUri);
      mapIntent.setPackage("com.google.android.apps.maps");
      context.startActivity(mapIntent);
    } else {
      Toast.makeText(context, "您尚未安装谷歌地图", Toast.LENGTH_LONG).show();
      Uri uri = Uri.parse("market://details?id=com.google.android.apps.maps");
      Intent intent = new Intent(Intent.ACTION_VIEW, uri);
      context.startActivity(intent);
    }

    四、腾讯地图

       腾讯开放平台——>开发文档——>web端——>URI API(地图调起)

      官方网址:http://lbs.qq.com/webApi/uriV1/uriGuide/uriWebRoute

    if (isInstallApk("com.tencent.map")){
    double[] gcjo2s=CoordinateTransformationUtil.bd09ToGcj02(Double.parseDouble(latitude),Double.parseDouble(longitude));
    Uri gmmIntentUri = Uri.parse("qqmap://map/routeplan?type=drive"+ "&to=" + poiname
    +"&tocoord=" + gcjo2s[0] + "," + gcjo2s[1]+ "&policy=0&referer="+WirelessZJ.getInstance().getResources().getString(R.string.app_name));
    Intent mapIntent = new Intent(Intent.ACTION_VIEW,gmmIntentUri);
    mapIntent.setPackage("com.tencent.map");
    mapIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(mapIntent);
    }else{}
    参数名必填说明示例
    type 路线规划方式参数:
    公交:bus
    驾车:drive
    步行:walk(仅适用移动端)
    type=bus
    type=drive
    type=walk
    from 二选一 起点名称 fromcoord=39.907380,116.388501
    fromcoord 起点坐标
    移动端如果起点名称和起点坐标均未传递,则使用当前定位位置作为起点
    to=奥林匹克森林公园
    to 终点名称 to=奥林匹克森林公园
    tocoord 终点坐标 tocoord=40.010024,116.392239
    coord_type 坐标类型,取值如下:
    1 GPtocoord=40.010024,116.392239S
    2 腾讯坐标(默认)
    如果用户指定该参数为非腾讯地图坐标系,则URI API自动进行坐标处理,以便准确对应到腾讯地图底图上。
    coord_type=1
    policy 本参数取决于type参数的取值
    公交:type=bus,policy有以下取值
    0:较快捷
    1:少换乘
    2:少步行
    3:不坐地铁
    驾车:type=drive,policy有以下取值
    0:较快捷
    1:无高速
    2:距离
    policy的取值缺省为0
    policy=1
    referer 调用来源,一般为您的应用名称,为了保障对您的服务,请务必填写! referer=您的应用名

    五、坐标转换。
      
    package com.secondui.util;

    public class CoordinateTransformationUtil {
    /*
    百度坐标转换成火星坐标,
    适用于将结果用于高德,腾讯,google非国际版使用。
    */
    public static double[] bd09ToGcj02(double lat,double lng){
    double x = lng - 0.0065;
    double y = lat - 0.006;
    double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * (Math.PI*3000.0/180.0));
    double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * (Math.PI*3000.0/180.0));
    double gg_lng = z * Math.cos(theta);
    double gg_lat = z * Math.sin(theta);
    return new double[] {gg_lat,gg_lng};
    }

    /**
    * GCJ-02 坐标转换成 BD-09 坐标
    */
    public static double[] Gcj02ToBd09(double lat,double lng) {
    double x = lng, y = lat;
    double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * (Math.PI*3000.0/180.0));
    double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * (Math.PI*3000.0/180.0));
    double tempLon = z * Math.cos(theta) + 0.0065;
    double tempLat = z * Math.sin(theta) + 0.006;
    return new double[] {tempLat,tempLon};
    }

    public static double[] wgs84ToGcj02(double lat,double lng){
    if (outOfChina(lat,lng)){
    return new double[]{lat,lng};
    }else{
    double dlat = transformlat(lng - 105.0, lat - 35.0);
    double dlng = transformlng(lng - 105.0, lat - 35.0);
    double radlat = lat / 180.0 * Math.PI;
    double magic = Math.sin(radlat);
    magic = 1 - 0.00669342162296594323 * magic * magic;
    double sqrtmagic = Math.sqrt(magic);
    dlat = (dlat * 180.0) / ((6378245.0 * (1 - 0.00669342162296594323)) / (magic * sqrtmagic) * Math.PI);
    dlng = (dlng * 180.0) / (6378245.0 / sqrtmagic * Math.cos(radlat) * Math.PI);
    double mglat = lat + dlat;
    double mglng = lng + dlng;
    return new double[]{mglat,mglng};
    }
    }

    public static double[] gcj02ToWgs84(double lat,double lng) {
    if (outOfChina(lng, lat)) {
    return new double[]{lat, lng};
    }else {
    double dlat = transformlat(lng - 105.0, lat - 35.0);
    double dlng = transformlng(lng - 105.0, lat - 35.0);
    double radlat = lat / 180.0 * Math.PI;
    double magic = Math.sin(radlat);
    magic = 1 - 0.00669342162296594323 * magic * magic;
    double sqrtmagic = Math.sqrt(magic);
    dlat = (dlat * 180.0) / ((6378245.0 * (1 - 0.00669342162296594323)) / (magic * sqrtmagic) * Math.PI);
    dlng = (dlng * 180.0) / (6378245.0 / sqrtmagic * Math.cos(radlat) * Math.PI);
    double mglat = lat + dlat;
    double mglng = lng + dlng;
    return new double[]{lng * 2 - mglng, lat * 2 - mglat};
    }
    }

    public static boolean outOfChina(double lat,double lng){
    return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false);
    }

    public static double transformlat(double lat,double lng) {
    double ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
    ret += (20.0 * Math.sin(6.0 * lng * Math.PI) + 20.0 * Math.sin(2.0 * lng * Math.PI)) * 2.0 / 3.0;
    ret += (20.0 * Math.sin(lat * Math.PI) + 40.0 * Math.sin(lat / 3.0 * Math.PI)) * 2.0 / 3.0;
    ret += (160.0 * Math.sin(lat / 12.0 * Math.PI) + 320 * Math.sin(lat * Math.PI / 30.0)) * 2.0 / 3.0;
    return ret;
    }

    public static double transformlng(double lat,double lng) {
    double ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
    ret += (20.0 * Math.sin(6.0 * lng * Math.PI) + 20.0 * Math.sin(2.0 * lng * Math.PI)) * 2.0 / 3.0;
    ret += (20.0 * Math.sin(lng * Math.PI) + 40.0 * Math.sin(lng / 3.0 * Math.PI)) * 2.0 / 3.0;
    ret += (150.0 * Math.sin(lng / 12.0 * Math.PI) + 300.0 * Math.sin(lng / 30.0 * Math.PI)) * 2.0 / 3.0;
    return ret;
    }
    }







    参考文献:

      https://blog.csdn.net/weimingjue/article/details/80493969

     https://blog.csdn.net/shaoyezhangliwei/article/details/77968566

     

          

  • 相关阅读:
    MySql 应用语句
    MySql 存储过程 退出
    MySql 存储过程 光标只循环一次
    MySql获取两个日期间的时间差
    VM VirtualBox 全屏模式 && 自动缩放模式 相互切换
    区分不同操作系统、编译器不同版本的宏
    debian下配置网络 安装无线网卡驱动 Broadcom BCMXX系列
    YII 主题设置
    Unix线程概念、控制原语、属性
    远程IPC种植木马
  • 原文地址:https://www.cnblogs.com/qynprime/p/12022929.html
Copyright © 2011-2022 走看看