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) {
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) {
e.printStackTrace();
}
}
}