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

之前项目中集成的是百度地图,然后后面需求改了换成腾讯地图了,个人感觉腾讯地图比百度地图更容易集成,但是腾讯的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
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio是一款用于开发Android应用程序的集成开发环境(IDE)。要在Android Studio中显示地图定位,可以使用Google Maps API来实现。 以下是一种实现地图定位的方法: 1. 在Android Studio中创建一个新的Android项目。 2. 在项目的build.gradle文件中添加Google Maps API的依赖项。例如: ``` implementation 'com.google.android.gms:play-services-maps:17.0.0' ``` 3. 在AndroidManifest.xml文件中添加以下权限: ``` <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> ``` 4. 在布局文件中添加一个MapView控件,用于显示地图。例如: ```xml <com.google.android.gms.maps.MapView android:id="@+id/mapView" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 5. 在Activity中,初始化MapView并获取GoogleMap对象。例如: ```java private MapView mapView; private GoogleMap googleMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mapView = findViewById(R.id.mapView); mapView.onCreate(savedInstanceState); mapView.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(GoogleMap map) { googleMap = map; // 在这里可以进行地图相关的操作,如显示定位等 } }); } @Override protected void onResume() { super.onResume(); mapView.onResume(); } @Override protected void onPause() { super.onPause(); mapView.onPause(); } @Override protected void onDestroy() { super.onDestroy(); mapView.onDestroy(); } ``` 6. 在代码中使用GoogleMap对象进行地图相关的操作,如定位。例如: ```java // 获取定位权限 if (Context.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { // 显示定位按钮 googleMap.setMyLocationEnabled(true); // 获取最新的定位信息 FusedLocationProviderClient fusedLocationClient = LocationServices.getFusedLocationProviderClient(this); fusedLocationClient.getLastLocation().addOnSuccessListener(new OnSuccessListener<Location>() { @Override public void onSuccess(Location location) { if (location != null) { // 在地图上显示当前位置 LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); googleMap.addMarker(new MarkerOptions().position(latLng).title("My Location")); googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15)); } } }); } ``` 这样,你就可以在Android Studio中显示地图定位了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值