关闭

androidstudio腾讯地图集成定位绘制行走过的路线

919人阅读 评论(0) 收藏 举报

之前项目中集成的是百度地图,然后后面需求改了换成腾讯地图了,个人感觉腾讯地图比百度地图更容易集成,但是腾讯的API文档看着费劲,下面就看一下腾讯地图的流程

一、首先肯定去官方申请key和下载官方demo,这个不多说

然后在配置文件中application下加上

<meta-data
    android:name="TencentMapSDK"
    android:value="申请到的key"/>
二,jar包和so文件

从腾讯地图开放平台下载的demo中获取到jar包和so文件,将jar包复制到libs文件夹下,然后add as Library..,so文件处理是在main文件夹下建一个jniLibs,so文件拷贝到文件夹下


三,添加权限

包括访问jps,网络,网络定位等

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

<!-- 通过GPS得到精确位置 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 通过网络得到粗略位置 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 修改WiFi状态. 发起WiFi扫描, 需要WiFi信息用于网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 访问网络的变化, 需要某些信息用于网络定位 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />


四.配置文件

这是xml文件中

<com.tencent.tencentmap.mapsdk.maps.MapView
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

这样的话在自己项目中就能看到地图可以显示了

五.下面看java文件中的代码


mMapView = (MapView) findViewById(R.id.map);
tencentMap = mMapView.getMap();
//设置地图类型为卫星图
tencentMap.setMapType(TencentMap.MAP_TYPE_SATELLITE);

看名字,mapview肯定是view控制器,而Tencentmap类是地图的主类

下面看定位然后把定位到的经纬度存储到集合中,然后将点的集合在地图上添加polyline画出路线



//定位资源
private DemoLocationSource locationSource;
/**
 *在地图中设置定位资源,保证定位参数传入地图中
 */
//设置显示缩放控件
tencentMap.getUiSettings().setZoomControlsEnabled(false);

locationSource = new DemoLocationSource(this);
//设置我的位置信息来源
tencentMap.setLocationSource(locationSource);
//设置是否显示我的位置
tencentMap.setMyLocationEnabled(true);

/**
 * 腾讯地图定位类,并定位到当前位置,保存时时定位到的点
 */
class DemoLocationSource implements LocationSource, TencentLocationListener {

    private Context mContext;
    private OnLocationChangedListener mChangedListener;
    private TencentLocationManager locationManager;
    private TencentLocationRequest locationRequest;

    public DemoLocationSource(Context context) {
        mContext = context;
        locationManager = TencentLocationManager.getInstance(mContext);
        locationRequest = TencentLocationRequest.create();
        locationRequest.setInterval(4000);        //请求周期
    }

    @Override
    public void onLocationChanged(TencentLocation tencentLocation, int i, String s) {
        if (i == TencentLocation.ERROR_OK && mChangedListener != null) {
            Log.e("maplocation", "location: " + tencentLocation.getCity() + " " + tencentLocation.getProvider());

            Log.e("当前的点坐标****", "aaaaaaaaaaaa: " + tencentLocation.getLatitude() + " " + tencentLocation.getLongitude());

            //当前点
            LatLng latLng = new LatLng(tencentLocation.getLatitude(),tencentLocation.getLongitude());


            Location location = new Location(tencentLocation.getProvider());
            location.setLatitude(tencentLocation.getLatitude());
            location.setLongitude(tencentLocation.getLongitude());
            location.setAccuracy(tencentLocation.getAccuracy());



            //定位到当前位置并且设置缩放级别
            tencentMap.animateCamera(CameraUpdateFactory.newLatLng(new LatLng(tencentLocation.getLatitude(),tencentLocation.getLongitude())));

            if(isStart) {
                if(lalangList.size() == 0) {
                    lalangList.add(latLng);
                }else {
                    if(lalangList.get(lalangList.size()-1).latitude == latLng.latitude && lalangList.get(lalangList.size()-1).longitude == latLng.longitude) {

                    }else {
                        lalangList.add(latLng);
                    }
                }
            }

            mChangedListener.onLocationChanged(location);
        }
    }

    @Override
    public void onStatusUpdate(String arg0, int arg1, String arg2) {

    }

    @Override
    public void activate(OnLocationChangedListener arg0) {
        mChangedListener = arg0;
        int err = locationManager.requestLocationUpdates(locationRequest, this);
        switch (err) {
            case 1:
                setTitle("设备缺少使用腾讯定位服务需要的基本条件");
                break;
            case 2:
                setTitle("manifest 中配置的 key 不正确");
                break;
            case 3:
                setTitle("自动加载libtencentloc.so失败");
                break;

            default:
                break;
        }
    }

    @Override
    public void deactivate() {
        // TODO Auto-generated method stub
        locationManager.removeUpdates(this);
        mContext = null;
        locationManager = null;
        locationRequest = null;
        mChangedListener = null;
    }

    public void onPause() {
        locationManager.removeUpdates(this);
    }

    public void onResume() {
        locationManager.requestLocationUpdates(locationRequest, this);
    }

}





获取到的定位点集合后就是画了,可以自己设置几秒绘制一次

if(lalangList.size() >= 2) {
    PolylineOptions polyline = new PolylineOptions();
    polyline.width(8).color(0xAAFF0000).setLatLngs(lalangList);
    tencentMap.addPolyline(polyline);
}



想要其他功能或具体细节请详细参考腾讯地图官方文档和API




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4097次
    • 积分:139
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类