高德地图帮助类

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;

import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.CameraPosition;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.model.PolylineOptions;

import java.util.List;

/**
 * 高德地图帮助类<br/><br/>
 * Note: 简化常见的操作
 */
public class AMapHelper {
    private static final String KEY_TAG = "AMapHelper";

    /**
     * 开启高德定位
     *
     * @param context  上下文
     * @param listener AMapLocationListener接口
     * @param isOnce   是否只定位一次
     */
    public static void startLocation(Context context, AMapLocationListener listener, Boolean isOnce) {
        AMapLocationClient mlocationClient = new AMapLocationClient(context);
        //初始化定位参数
        final AMapLocationClientOption mLocationOption = new AMapLocationClientOption();

        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
        if (isOnce) {
            // 设置仅成功定位一次
            mLocationOption.setOnceLocation(true);
        }
        // 定位间隔
        mLocationOption.setInterval(2000);
        mlocationClient.setLocationOption(mLocationOption);
        //设置定位监听
        mlocationClient.setLocationListener(listener);
        mlocationClient.startLocation();
    }

    /**
     * 绘制自定义点标记
     *
     * @param context       上下文
     * @param amap          AMap对象
     * @param title         标题
     * @param latlng        要绘制的点
     * @param resDrawableId 图片的资源id
     * @return 成功绘制的 Marker
     */
    public static Marker drawCustomMaker(Context context, AMap amap, String title, LatLng latlng, int resDrawableId) {
        MarkerOptions markerOption = new MarkerOptions();
        markerOption.title(title)
                .position(latlng)
                .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory
                        .decodeResource(context.getResources(), resDrawableId)));
        Marker marker = amap.addMarker(markerOption);
        return marker;
    }

    /**
     * 绘制自定义点标记
     *
     * @param context 上下文
     * @param amap    AMap对象
     * @param title   标题
     * @param latlng  要绘制的点
     * @param bitmap  位图
     * @return 绘制完成的Marker
     */
    public static Marker drawCustomMaker(Context context, AMap amap, String title, LatLng latlng, Bitmap bitmap) {
        MarkerOptions markerOption = new MarkerOptions();
        markerOption.title(title)
                .position(latlng)
                .icon(BitmapDescriptorFactory.fromBitmap(bitmap));
        Marker marker = amap.addMarker(markerOption);
        return marker;
    }


    /**
     * 绘制线
     *
     * @param amap      AMap对象
     * @param latLngs   经纬度坐标集合
     * @param lineWidth 绘制线的宽度
     * @param lineColor 绘制线的颜色 格式如:"#ff0000"
     */
    public static void drawPolyline(AMap amap, List<LatLng> latLngs, float lineWidth, String lineColor) {
        PolylineOptions options = new PolylineOptions()
                .addAll(latLngs)
                .width(lineWidth)
                .color(Color.parseColor(lineColor));
        amap.addPolyline(options);
    }


    /**
     * 移动地图中心到指定位置
     *
     * @param aMap
     * @param latLng    经纬度坐标
     * @param zoomLevel 缩放级别,地图的缩放级别一共分为 17 级,从 3 到 19。数字越大,展示的图面信息越精细。
     */
    public static void quickCam(AMap aMap, LatLng latLng, float zoomLevel) {
        CameraPosition postion = new CameraPosition(latLng, zoomLevel, 0, 0);
        aMap.moveCamera(CameraUpdateFactory.newCameraPosition(postion));
    }

    /**
     * 开启夜间模式
     *
     * @param aMap
     * @param isNightMode true表示开启
     */
    public static void enableNightMode(AMap aMap, boolean isNightMode) {

        if (isNightMode) {
            aMap.setMapType(AMap.MAP_TYPE_NIGHT);
        } else {
            aMap.setMapType(AMap.MAP_TYPE_NORMAL);
        }
    }


    /**
     * 跳转到高德进行导航
     *
     * @param context      上下文
     * @param targetLatLng 目标经纬度坐标
     */
    public static void openGaodeApp(Context context, LatLng targetLatLng) {
        if (targetLatLng == null) {
            //TODO 目标地址不存在
            return;
        }
        try {
            Intent intent = new Intent("android.intent.action.VIEW",
                    android.net.Uri.parse("androidamap://navi?sourceApplication=某某公司&lat=" + targetLatLng.latitude + "&lon=" + targetLatLng.longitude + "&dev=1&style=2"));
            intent.setPackage("com.autonavi.minimap");
            intent.addCategory("android.intent.category.DEFAULT");
            context.startActivity(intent);

        } catch (Exception e) {
            //TODO 地址解析错误
            e.printStackTrace();
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值