腾讯地图api(1):定位添加覆盖物以及步行路线

最近因为项目的需求,需要将项目中的百度地图替换为腾讯地图。我不去抱怨这两种地图优劣。
在原有的项目中,地图的功能主要包括定位,添加覆盖物,坐标反编码(左边转地址),以及路线规划等功能,为了在项目重构时能快速修改,所以开始学习下腾讯的地图相关api。

和百度地图差不多,都需要用户申请key以及在项目中配置sdk,这方面不过多介绍,我还是直接看相应的功能api吧.

1定位与添加覆盖物功能:

private TencentLocation mLocation;
private TencentLocationManager mLocationManager;
private MapView mMapView;
private TencentMap mTencentMap;



mTencentMap = mMapView.getMap();
        mTencentMap.setZoom(16);//设置缩放级别
TencentLocationRequest request = TencentLocationRequest.create();
request.setInterval(5000);//设置定位时间间隔
request.setAllowGPS(true)  //当为false时,设置不启动GPS。默认启动
request.setAllowIndoorLocation(true)  //设置启动室内定位,默认不启动
request.setQQ("10001")
.setRequestLevel(mLevel); // 设置定位level  当设置level为poi可以直接获取他的商圈名字


mLocationManager = TencentLocationManager.getInstance(this);
        // 设置坐标系为 gcj-02, 缺省坐标为 gcj-02, 所以通常不必进行如下调用
        mLocationManager.setCoordinateType(TencentLocationManager.COORDINATE_TYPE_GCJ02);
mLocationManager.requestLocationUpdates(request, this);//开启定位,其中的实现函数是TencentLocationListener,

然后定位信息会在重写函数中返回

//停止定位
private void stopLocation() {
        mLocationManager.removeUpdates(this);
    }
    @Override
    public void onStatusUpdate(String name, int status, String desc) {
        // ignore
    }

//主要定位回调
    @Override
    public void onLocationChanged(TencentLocation location, int i, String s) {

 if (location.ERROR_OK == error) {
        // 定位成功
//构建坐标
     LatLng latLngLocation = new LatLng(location.getLatitude(),         location.getLongitude());

//可以在某个坐标上添加一个新的覆盖物
 mLocationMarker = mTencentMap.addMarker(new MarkerOptions().
                                position(latLngLocation).               icon(BitmapDescriptorFactory.fromResource(R.drawable.mark_location)));
           // 或者可以修改已有的marker的坐标
            mLocationMarker.setPosition(latLngLocation);
           //还可以获取当前地图页面的中心点坐标
           double lat = mTencentMap.getMapCenter().getLatitude();
           double lng = mTencentMap.getMapCenter().getLongitude();
            //将地图位置移到中心坐标
            mMapView.getController().animateTo(Utils.of(location));
         //修改 mapview 中心点
        mMapView.getController().setCenter(Utils.of(location));
        //获取poi商圈,其中tencentpoi对象包含 名字,地址,坐标,方向,距离
        List poiList = location.getPoiList();
    } else {
        // 定位失败
    }                       
    }

2 路线规划功能
//步行路线
TencentSearch tencentSearch = new TencentSearch(this);
        WalkingParam walkingParam = new WalkingParam();
        walkingParam.from(locations[0]);
        walkingParam.to(locations[1]);
        //需要实现的函数是HttpResponseListener
    tencentSearch.getDirection(walkingParam,directionResponseListener);

//路线规划回调
HttpResponseListener directionResponseListener = 
            new HttpResponseListener() {    
                @Override
                public void onSuccess(int arg0, BaseObject arg1) {
                    // TODO Auto-generated method stub
                    if (arg1 == null) {
                        return;
                    }
                    RoutePlanningObject obj = (RoutePlanningObject)arg1;
                    WalkingResultObject walkObj = (WalkingResultObject) obj;

                    WalkingResultObject.Route route=walkObj.result.routes.get(0);
                    //路线
                    drawSolidLine(route.polyline);
                }

                @Override
                public void onFailure(int arg0, String arg1, Throwable arg2) {
                    // TODO Auto-generated method stub
                    Toast.makeText(RoadPlanActivity.this, arg1, Toast.LENGTH_SHORT).show();
                }
            };


/**
     * 将路线以实线画到地图上
     * @param locations
     */
    protected void drawSolidLine(List locations) {
        tencentMap.addPolyline(new PolylineOptions().
                addAll(getLatLngs(locations)).
                color(0xff2200ff));
    }

    /**
     * 将路线以虚线画到地图上,用于公交中的步行
     * @param locations
     */
    protected void drawDotLine(List locations) {
        tencentMap.addPolyline(new PolylineOptions().
                addAll(getLatLngs(locations)).
                color(0xff2200ff).
                setDottedLine(true));
    }
    //获取路线的坐标
    protected List getLatLngs(List locations) {
        List latLngs = new ArrayList();
        for (Location location : locations) {
            latLngs.add(new LatLng(location.lat, location.lng));
        }
        return latLngs;
    }

你可能感兴趣的:(V鸟)