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

原创 2016年08月30日 09:52:59

之前项目中集成的是百度地图,然后后面需求改了换成腾讯地图了,个人感觉腾讯地图比百度地图更容易集成,但是腾讯的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




版权声明:本文为博主原创文章,未经博主允许不得转载。

如何在腾讯地图绘制自己的坐标

1.页面直接引入 //http://map.qq.com/api/js?v=2.exp 网址是API文件的位置,v2.0 指当前使用的API的版本标识。2.在html页面插入地图模板3.我们需要的经纬...
  • Amy_cloud
  • Amy_cloud
  • 2017年12月29日 16:56
  • 59

腾讯地图画出区域获取该区域的范围坐标

腾讯地图画出区域获取该区域的范围坐标
  • q383965374
  • q383965374
  • 2014年11月27日 14:55
  • 3578

腾讯地图实现多点标注

function init() { var center = new qq.maps.LatLng(39.916527,116.397128); var map = new qq.ma...
  • cleverlzc
  • cleverlzc
  • 2014年08月07日 10:09
  • 10692

腾讯地图获取所选区域坐标

帮朋友做的,顺便记录下来,以后使用,主要是在腾讯地图上点选、主要是在屏幕点选坐标,线选坐标,多边形坐标,代码写的优点乱,也没时间整理了,下面是图,觉得适合自己了,再向后看代码...
  • GISuuser
  • GISuuser
  • 2017年09月27日 08:20
  • 300

地图:腾讯地图集成过程及开发建议

一、服务简介 腾讯地图API包含构建地图的基本接口,还提供了诸如地图定位、地址编码,地址反编码,实时路况,POI搜索,周边搜索,公交路线搜索,驾车路线搜索,公交线搜索等数据服务,你可以根据自己的...
  • c1782746138
  • c1782746138
  • 2014年10月29日 15:20
  • 1166

Android使用腾讯定位SDK显示当前地址

照着书上例子准备做个定位小程序,使用例子中的聚合数据接口发现有次数限制,然后准备换到百度地图SDK,准备先做出定位再完善成LBS,没想到百度注册为开发者太麻烦,还要手持身份证拍照,于是换到腾讯地图。 ...
  • coder_weiyi
  • coder_weiyi
  • 2015年06月27日 15:32
  • 2600

html5腾讯地图api应用(javascript一)

第一次写博客,之后的学习也会通过这种方式巩固。 最近在学JavaScript和HTML5,所以近期的内容皆是关于这些知识的。 1.HTML5支持地理定位,可以获取用户的经纬度信息。 在js中可以...
  • M4Code4Mer
  • M4Code4Mer
  • 2018年01月16日 22:34
  • 41

微信小程序使用腾讯地图sdk

腾讯地图提供了供小程序使用的SDK,可结合地图组件和api进行快速调用,访问地址为http://lbs.qq.com/qqmap_wx_jssdk/index.html。首次使用需要申请秘钥,下载sd...
  • u011330225
  • u011330225
  • 2017年06月24日 13:19
  • 1111

安卓定位Google+Google Play services location APIs

功能介绍:加载googleMap并知道定位到当前位置,当位置改变,定位的mark也随之改变public class MainActivity extends AppCompatActivity imp...
  • abfdada
  • abfdada
  • 2016年08月11日 11:22
  • 2862

android跳转手机百度高德腾讯谷歌地图、地图传坐标、坐标偏移、base64解码相关

调起百度的native app http://developer.baidu.com/map/uri-introandroid.htm#idmykey47 坐标转换 http://api.map.b...
  • wjyyxzzjnws
  • wjyyxzzjnws
  • 2015年12月29日 17:55
  • 1778
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:androidstudio腾讯地图集成定位绘制行走过的路线
举报原因:
原因补充:

(最多只允许输入30个字)