天地图之定位信息详解

移动开发 作者: 2024-08-21 23:55:01
最近的项目涉及到百度地图的使用,项目组通知使用天地图替代百度地图,一个原因是天地图是国家测绘地理信息局建设的,企业可以使用其公众版本进行开发以提供相关的地图信息服务,较其他地图具有权威性,当然天地图提
  1. 引入天地图 SDK
  2. 地图显示
  3. 我的位置
  4. 定位图标的修改
  5. 获取位置信息
  6. 显示效果

引入天地图 SDK

sourceSets {
    main {
        //指定so文件的查找目录是libs目录
        jniLibs.srcDir 'libs'
    }
}
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

地图显示

<com.tianditu.android.maps.MapView
    android:id="@+id/mapView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
private void initMapView() {
    //启用内置的缩放组件
    mapView.setBuiltInZoomControls(true);
    //得到MapView的控制权,可以用它控制和驱动平移和缩放
    mMapController = mapView.getController();
    //用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
    GeoPoint point = new GeoPoint((int) (39.915 * 1E6),(int) (116.404 * 1E6));
    //设置地图中心点
    mMapController.setCenter(point);
    //设置地图缩放级别
    mMapController.setZoom(12);
}

我的位置

//创建MyLocationOverlay
myLocationOverlay = new MyLocationOverlay(this,mapView);
//启用指南针位置更新
myLocationOverlay.enableCompass();
//启用我的位置
myLocationOverlay.enableMyLocation();
mapView.addOverlay(myLocationOverlay);
//获得当前位置
mPoint = myLocationOverlay.getMyLocation();
//动画移动到当前位置
mMapController.animateTo(mPoint);

定位图标修改

  1. 在项目路径中找到默认定位图标;
  2. 在关键类中找到设置该默认图标的位置;
  3. 继承关键类,重写相关代码,替换原有的定位图标为新的定位图标;
  4. 使用新的类替换 MyLocationOverlay 类。
@Override
protected void drawMyLocation(GL10 gl,MapView mapView,Location lastFix,GeoPoint myLocation,long when) {
    //获得屏幕坐标
    Point point = new Point();
    mapView.getProjection().toPixels(myLocation,point);
    //默认精度
    float accuracy = getAccuracy();
    //指定精度
    float accuracy = 500;
    //获得实际误差距离
    float distance = mapView.getProjection().metersToEquatorPixels(accuracy);
    AndroidJni.OpenglFillRound(point.x,point.y,(int)distance,0,360,137,170,213,77);
    //创建Drawable
    UtilTextureDrawable drawable = new UtilTextureDrawable(mContext,R.drawable.ic_location,BOUND_TYPE_CENTER);
    drawable.DrawTexture(gl,point,0.0F);
}

获取位置信息

/**
 * 逆地理编码回调结果监听
 */
class OnGeoResultListener implements TGeoDecode.OnGeoResultListener {

    @Override
    public void onGeoDecodeResult(TGeoAddress tGeoAddress,int errorCode) {

        if (TErrorCode.OK == errorCode) {
            // 查询点相关信息
            String str = "最近的 poi 名称:" + tGeoAddress.getPoiName() + "\n";
            str += "查询点 Poi 点的方位:" + tGeoAddress.getPoiDirection() + "\n";
            str += "查询点 Poi 点的距离:" + tGeoAddress.getPoiDistance() + "\n";
            str += "查询点行政区名称:" + tGeoAddress.getCity() + "\n";
            str += "查询点地理描述全称:" + tGeoAddress.getFullName() + "\n";
            str += "查询点的地址:" + tGeoAddress.getAddress() + "\n";
            str += "查询点的方位:" + tGeoAddress.getAddrDirection() + "\n";
            str += "查询点的距离:" + tGeoAddress.getAddrDistance() + "\n";
            str += "查询点道路名称:" + tGeoAddress.getRoadName() + "\n";
            str += "查询点与最近道路的距离:" + tGeoAddress.getRoadDistance();
            tvAddress.setText(tGeoAddress.getFullName());
            System.out.println(str);
        } else {
            System.out.println("查询出错:" + errorCode);
        }
    }
}
//逆地理编码类,根据输入的点坐标,返回相应的地理信息
TGeoDecode tGeoDecode = new TGeoDecode(new OnGeoResultListener());
tGeoDecode.search(mPoint);

显示效果

原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_66364.html