欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android 天地图定位

程序员文章站 2022-07-02 09:48:43
...

定位工具类
注意请先依赖对应天地图的jar文件之后再使用此类。天地图资源包下载

import android.content.Context;
import android.location.Location;
import com.tianditu.android.maps.GeoPoint;
import com.tianditu.android.maps.MapView;
import com.tianditu.android.maps.MyLocationOverlay;
import javax.microedition.khronos.opengles.GL10;

/**
 * 天地图定位
 */
public class SkyLandMapLocation {

    /**
     * 上下文对象
     */
    private Context context;

    /**
     * 地图对象
     */
    private MapView mapView;

    /**
     * 定位辅助对象
     */
    private LocationOverlay overlay;

    /**
     * 是否开启一次性定位
     */
    private boolean onceLocation = true;


    /**
     * 构造函数
     * @param context
     * @param mapView
     */
    public SkyLandMapLocation(Context context, MapView mapView) {
        this.context = context;
        this.mapView = mapView;
    }


    /**
     * 获取定位覆盖物
     * @return
     */
    public LocationOverlay getOverlay() {
        return overlay;
    }

    /**
     * 设置定位覆盖物
     * @param overlay
     */
    public void setOverlay(LocationOverlay overlay) {
        this.overlay = overlay;
    }

    /**
     * 是否一次性定位
     * @return
     */
    public boolean isOnceLocation() {
        return onceLocation;
    }

    /**
     * 是否一次性定位
     * @param onceLocation
     */
    public void setOnceLocation(boolean onceLocation) {
        this.onceLocation = onceLocation;
    }

    /**
     * 获取定位监听
     * @return
     */
    public OnSkyLangLocationChangedListener getListener() {
        return listener;
    }

    /**
     * 设置定位监听
     * @param listener
     */
    public void setListener(OnSkyLangLocationChangedListener listener) {
        this.listener = listener;
    }

    /**
     * 开始定位
     */
    public void start() {
        overlay = new LocationOverlay(context, mapView);
        mapView.addOverlay(overlay);
        overlay.enableCompass();
        overlay.enableMyLocation();
        overlay.setGpsFollow(true);
        overlay.setVisible(true);
    }

    /**
     * 停止定位
     */
    public void stop() {
        if (overlay != null) {
            if (overlay.isCompassEnabled()) {
                overlay.disableCompass();
            }
            if (overlay.isMyLocationEnabled()) {
                overlay.disableMyLocation();
            }
        }
    }

    private class LocationOverlay extends MyLocationOverlay {

        public LocationOverlay(Context context, MapView mapView) {
            super(context, mapView);
        }

        @Override
        public void onLocationChanged(Location location) {
            super.onLocationChanged(location);
            if (listener != null) {
                listener.onSkyLangLocationChanged(location);
            }
            if (onceLocation) {
                stop();
            }
        }
    }

    /**
     * 定位监听接口
     */
    public OnSkyLangLocationChangedListener listener;

    public interface OnSkyLangLocationChangedListener {
        void onSkyLangLocationChanged(Location location);
    }

}

使用
注意6.0以上的权限问题
Manifest.permission.WRITE_EXTERNAL_STORAGE
Manifest.permission.READ_EXTERNAL_STORAGE
Manifest.permission.ACCESS_FINE_LOCATION
Manifest.permission.ACCESS_COARSE_LOCATION

   SkyLandMapLocation location = new SkyLandMapLocation(this, mapView);
   location.setListener(this);
   location.setOnceLocation(true);
   location.start();


    @Override
    protected void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
        if (location != null) {
            location.stop();
        }
    }