AMapUtils

本文介绍了一个用于高德地图API的工具类AMapUtils,该工具类提供了多种实用的方法,包括计算两点之间的距离、计算面积、打开高德地图进行导航、搜索周边兴趣点等功能。文章深入解析了这些方法的具体实现细节。
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.amap.api.maps;

import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import com.amap.api.mapcore.util.ex;
import com.amap.api.mapcore.util.ey;
import com.amap.api.mapcore.util.fa;
import com.amap.api.mapcore.util.fh;
import com.amap.api.mapcore.util.g;
import com.amap.api.maps.AMapException;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.NaviPara;
import com.amap.api.maps.model.PoiPara;
import com.amap.api.maps.model.RoutePara;

public class AMapUtils {
    public static final int DRIVING_DEFAULT = 0;
    public static final int DRIVING_SAVE_MONEY = 1;
    public static final int DRIVING_SHORT_DISTANCE = 2;
    public static final int DRIVING_NO_HIGHWAY = 3;
    public static final int DRIVING_AVOID_CONGESTION = 4;
    public static final int DRIVING_NO_HIGHWAY_AVOID_SHORT_MONEY = 5;
    public static final int DRIVING_NO_HIGHWAY_AVOID_CONGESTION = 6;
    public static final int DRIVING_SAVE_MONEY_AVOID_CONGESTION = 7;
    public static final int DRIVING_NO_HIGHWAY_SAVE_MONEY_AVOID_CONGESTION = 8;
    public static final int BUS_TIME_FIRST = 0;
    public static final int BUS_MONEY_LITTLE = 1;
    public static final int BUS_TRANSFER_LITTLE = 2;
    public static final int BUS_WALK_LITTLE = 3;
    public static final int BUS_COMFORT = 4;
    public static final int BUS_NO_SUBWAY = 5;

    public AMapUtils() {
    }

    public static float calculateLineDistance(LatLng var0, LatLng var1) {
        if(var0 != null && var1 != null) {
            double var2 = 0.01745329251994329D;
            double var4 = var0.longitude;
            double var6 = var0.latitude;
            double var8 = var1.longitude;
            double var10 = var1.latitude;
            var4 *= 0.01745329251994329D;
            var6 *= 0.01745329251994329D;
            var8 *= 0.01745329251994329D;
            var10 *= 0.01745329251994329D;
            double var12 = Math.sin(var4);
            double var14 = Math.sin(var6);
            double var16 = Math.cos(var4);
            double var18 = Math.cos(var6);
            double var20 = Math.sin(var8);
            double var22 = Math.sin(var10);
            double var24 = Math.cos(var8);
            double var26 = Math.cos(var10);
            double[] var28 = new double[3];
            double[] var29 = new double[3];
            var28[0] = var18 * var16;
            var28[1] = var18 * var12;
            var28[2] = var14;
            var29[0] = var26 * var24;
            var29[1] = var26 * var20;
            var29[2] = var22;
            double var30 = Math.sqrt((var28[0] - var29[0]) * (var28[0] - var29[0]) + (var28[1] - var29[1]) * (var28[1] - var29[1]) + (var28[2] - var29[2]) * (var28[2] - var29[2]));
            return (float)(Math.asin(var30 / 2.0D) * 1.27420015798544E7D);
        } else {
            try {
                throw new AMapException("非法坐标值");
            } catch (AMapException var32) {
                var32.printStackTrace();
                return 0.0F;
            }
        }
    }

    public static float calculateArea(LatLng var0, LatLng var1) {
        if(var0 != null && var1 != null) {
            double var2 = 6378137.0D;
            double var4 = Math.sin(var0.latitude * 3.141592653589793D / 180.0D) - Math.sin(var1.latitude * 3.141592653589793D / 180.0D);
            double var6 = (var1.longitude - var0.longitude) / 360.0D;
            if(var6 < 0.0D) {
                ++var6;
            }

            return (float)(6.283185307179586D * var2 * var2 * var4 * var6);
        } else {
            try {
                throw new AMapException("非法坐标值");
            } catch (AMapException var8) {
                var8.printStackTrace();
                return 0.0F;
            }
        }
    }

    public static void getLatestAMapApp(Context var0) {
        try {
            String var1 = "http://wap.amap.com/";
            Intent var2 = new Intent("android.intent.action.VIEW");
            var2.addFlags(276824064);
            var2.addCategory("android.intent.category.DEFAULT");
            var2.setData(Uri.parse(var1));
            AMapUtils.a var3 = new AMapUtils.a("glaa", var0);
            var3.start();
            var0.startActivity(var2);
        } catch (Throwable var4) {
            var4.printStackTrace();
        }

    }

    public static void openAMapNavi(NaviPara var0, Context var1) throws AMapException {
        if(a(var1)) {
            if(var0.getTargetPoint() != null) {
                try {
                    Intent var2 = new Intent("android.intent.action.VIEW");
                    var2.addFlags(276824064);
                    var2.addCategory("android.intent.category.DEFAULT");
                    var2.setData(Uri.parse(a(var0, var1)));
                    var2.setPackage("com.autonavi.minimap");
                    AMapUtils.a var3 = new AMapUtils.a("oan", var1);
                    var3.start();
                    var1.startActivity(var2);
                } catch (Throwable var4) {
                    throw new AMapException("移动设备上未安装高德地图或高德地图版本较旧");
                }
            } else {
                throw new AMapException("非法参数");
            }
        } else {
            throw new AMapException("移动设备上未安装高德地图或高德地图版本较旧");
        }
    }

    public static void openAMapPoiNearbySearch(PoiPara var0, Context var1) throws AMapException {
        if(a(var1)) {
            if(var0.getKeywords() != null && var0.getKeywords().trim().length() > 0) {
                try {
                    Intent var2 = new Intent("android.intent.action.VIEW");
                    var2.addFlags(276824064);
                    var2.addCategory("android.intent.category.DEFAULT");
                    var2.setData(Uri.parse(a(var0, var1)));
                    var2.setPackage("com.autonavi.minimap");
                    AMapUtils.a var3 = new AMapUtils.a("oan", var1);
                    var3.start();
                    var1.startActivity(var2);
                } catch (Throwable var4) {
                    throw new AMapException("移动设备上未安装高德地图或高德地图版本较旧");
                }
            } else {
                throw new AMapException("非法参数");
            }
        } else {
            throw new AMapException("移动设备上未安装高德地图或高德地图版本较旧");
        }
    }

    public static void openAMapDrivingRoute(RoutePara var0, Context var1) throws AMapException {
        a(var0, var1, 2);
    }

    public static void openAMapTransitRoute(RoutePara var0, Context var1) throws AMapException {
        a(var0, var1, 1);
    }

    public static void openAMapWalkingRoute(RoutePara var0, Context var1) throws AMapException {
        a(var0, var1, 4);
    }

    private static void a(RoutePara var0, Context var1, int var2) throws AMapException {
        if(a(var1)) {
            if(a(var0)) {
                try {
                    Intent var3 = new Intent("android.intent.action.VIEW");
                    var3.addFlags(276824064);
                    var3.addCategory("android.intent.category.DEFAULT");
                    var3.setData(Uri.parse(b(var0, var1, var2)));
                    var3.setPackage("com.autonavi.minimap");
                    AMapUtils.a var4 = new AMapUtils.a("oan", var1);
                    var4.start();
                    var1.startActivity(var3);
                } catch (Throwable var5) {
                    throw new AMapException("移动设备上未安装高德地图或高德地图版本较旧");
                }
            } else {
                throw new AMapException("非法参数");
            }
        } else {
            throw new AMapException("移动设备上未安装高德地图或高德地图版本较旧");
        }
    }

    private static boolean a(RoutePara var0) {
        return var0.getStartPoint() != null && var0.getEndPoint() != null && var0.getStartName() != null && var0.getStartName().trim().length() > 0 && var0.getEndName() != null && var0.getEndName().trim().length() > 0;
    }

    private static String a(NaviPara var0, Context var1) {
        return String.format("androidamap://navi?sourceApplication=%s&lat=%f&lon=%f&dev=0&style=%d", new Object[]{ey.b(var1), Double.valueOf(var0.getTargetPoint().latitude), Double.valueOf(var0.getTargetPoint().longitude), Integer.valueOf(var0.getNaviStyle())});
    }

    private static String b(RoutePara var0, Context var1, int var2) {
        String var3 = String.format("androidamap://route?sourceApplication=%s&slat=%f&slon=%f&sname=%s&dlat=%f&dlon=%f&dname=%s&dev=0&t=%d", new Object[]{ey.b(var1), Double.valueOf(var0.getStartPoint().latitude), Double.valueOf(var0.getStartPoint().longitude), var0.getStartName(), Double.valueOf(var0.getEndPoint().latitude), Double.valueOf(var0.getEndPoint().longitude), var0.getEndName(), Integer.valueOf(var2)});
        if(var2 == 1) {
            var3 = var3 + "&m=" + var0.getTransitRouteStyle();
        } else if(var2 == 2) {
            var3 = var3 + "&m=" + var0.getDrivingRouteStyle();
        }

        return var3;
    }

    private static String a(PoiPara var0, Context var1) {
        String var2 = String.format("androidamap://arroundpoi?sourceApplication=%s&keywords=%s&dev=0", new Object[]{ey.b(var1), var0.getKeywords()});
        if(var0.getCenter() != null) {
            var2 = var2 + "&lat=" + var0.getCenter().latitude + "&lon=" + var0.getCenter().longitude;
        }

        return var2;
    }

    private static boolean a(Context var0) {
        PackageInfo var1 = null;

        try {
            var1 = var0.getPackageManager().getPackageInfo("com.autonavi.minimap", 0);
        } catch (NameNotFoundException var3) {
            var1 = null;
            return false;
        }

        return var1 != null;
    }

    static class a extends Thread {
        String a = "";
        Context b;

        public a(String var1, Context var2) {
            this.a = var1;
            if(var2 != null) {
                this.b = var2.getApplicationContext();
            }

        }

        public void run() {
            if(this.b != null) {
                try {
                    fh var1 = (new com.amap.api.mapcore.util.fh.a(this.a, "4.1.2", g.d)).a(new String[]{"com.amap.api.maps"}).a();
                    fa.a(this.b, var1);
                    this.interrupt();
                } catch (ex var2) {
                    var2.printStackTrace();
                }
            }

        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值