osmdroid 加载天地图在线矢量和影像数据

本文介绍如何使用osmdroid加载天地图的在线矢量和影像数据,包括代码实现和效果展示。通过自定义OnlineTileSourceBase类,实现影像地图和矢量地图的加载,同时提供了定位和缩放级别的设置。
摘要由CSDN通过智能技术生成

osmdroid 加载天地图在线矢量和影像数据

转载 加载天地图在线矢量和影像数据

Osmdroid下载地址 Osmdroid github

效果图

在这里插入图片描述

代码展示

影像地图

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
 
import com.osmdroid.sample.R;
import com.osmdroid.sample.util.CustomsOsmdroidMapConfig;
 
import org.osmdroid.tileprovider.MapTileProviderBasic;
import org.osmdroid.tileprovider.tilesource.OnlineTileSourceBase;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.util.MapTileIndex;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.TilesOverlay;
/**
 * 天地图
 *
 * 在6.0以上版本去掉了MapTile这个类,所以在线加载瓦片地图的TileURL有点改变
 */
public class TiandituTitleSouceTestActivity extends AppCompatActivity implements View.OnClickListener {
    private MapView mapView;
    CustomsOsmdroidMapConfig config = new CustomsOsmdroidMapConfig();
 
    //影像地图 _W是墨卡托投影  _c是国家2000的坐标系
    OnlineTileSourceBase tianDiTuImgTileSource = new OnlineTileSourceBase("Tian Di Tu Img", 1, 18, 256, "",
            new String[]{"http://t1.tianditu.com/DataServer?T=img_w",
                    "http://t2.tianditu.com/DataServer?T=img_w",
                    "http://t3.tianditu.com/DataServer?T=img_w",
                    "http://t4.tianditu.com/DataServer?T=img_w",
                    "http://t5.tianditu.com/DataServer?T=img_w",
                    "http://t6.tianditu.com/DataServer?T=img_w"}) {
        @Override
        public String getTileURLString(final long pMapTileIndex) {
            return getBaseUrl() + "&X=" + MapTileIndex.getX(pMapTileIndex) + "&Y=" + MapTileIndex.getY(pMapTileIndex)
                    + "&L=" + MapTileIndex.getZoom(pMapTileIndex);
        }
    };
 
    //影像标注 _W是墨卡托投影  _c是国家2000的坐标系
    OnlineTileSourceBase tianDiTuCiaTileSource = new OnlineTileSourceBase("Tian Di Tu Cia", 1, 18, 256, "",
            new String[]{"http://t1.tianditu.com/DataServer?T=cia_w",
                    "http://t2.tianditu.com/DataServer?T=cia_w",
                    "http://t3.tianditu.com/DataServer?T=cia_w",
                    "http://t4.tianditu.com/DataServer?T=cia_w",
                    "http://t5.tianditu.com/DataServer?T=cia_w",
                    "http://t6.tianditu.com/DataServer?T=cia_w"}) {
        @Override
        public String getTileURLString(final long pMapTileIndex ){
            return getBaseUrl() + "&X=" + MapTileIndex.getX(pMapTileIndex) + "&Y=" + MapTileIndex.getY(pMapTileIndex)
                    + "&L=" + MapTileIndex.getZoom(pMapTileIndex);
        }
    };
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_title_source);
 
        initView();
 
    }
 
    private void initView() {
        findViewById(R.id.button).setOnClickListener(this);
        mapView = (MapView) findViewById(R.id.mymapview);
        config.InitMapOverlays(mapView,this);
        mapView.setDrawingCacheEnabled(true);
        mapView.setMultiTouchControls(true);// 触控放大缩小
        mapView.setMaxZoomLevel(18.0);
        mapView.setMinZoomLevel(6.0);
        mapView.getController().setZoom(12.0);
        //mMapView
        mapView.setTileSource(tianDiTuImgTileSource);
        TilesOverlay tilesOverlay = new TilesOverlay(new MapTileProviderBasic(this,tianDiTuCiaTileSource),this);
        mapView.getOverlayManager().add(tilesOverlay);
 
    }
 
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                //定位当前的位置,并设置缩放级别
                mapView.getController().setZoom(18.0);
                mapView.getController().setCenter(new GeoPoint(23.12648183, 113.365548756));
                break;
            default:
                break;
 
        }
    }
}

矢量地图

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
 
import com.osmdroid.sample.R;
import com.osmdroid.sample.util.CustomsOsmdroidMapConfig;
 
import org.osmdroid.tileprovider.MapTileProviderBasic;
import org.osmdroid.tileprovider.tilesource.OnlineTileSourceBase;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.util.MapTileIndex;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.TilesOverlay;
 
/**
 * 天地图
 */
public class TiandituTitleSouceTestActivity2 extends AppCompatActivity implements View.OnClickListener {
    private MapView mapView;
    CustomsOsmdroidMapConfig config = new CustomsOsmdroidMapConfig();
 
    //地图 _W是墨卡托投影  _c是国家2000的坐标系
    OnlineTileSourceBase tianDiTuImgTileSource = new OnlineTileSourceBase("Tian Di Tu Img", 1, 22, 256, "",
            new String[]{"http://t1.tianditu.com/DataServer?T=vec_W",
                    "http://t2.tianditu.com/DataServer?T=vec_w",
                    "http://t3.tianditu.com/DataServer?T=vec_w",
                    "http://t4.tianditu.com/DataServer?T=vec_w",
                    "http://t5.tianditu.com/DataServer?T=vec_w",
                    "http://t6.tianditu.com/DataServer?T=vec_w"}) {
        @Override
        public String getTileURLString(final long pMapTileIndex) {
            return getBaseUrl() + "&X=" + MapTileIndex.getX(pMapTileIndex) + "&Y=" + MapTileIndex.getY(pMapTileIndex)
                    + "&L=" + MapTileIndex.getZoom(pMapTileIndex);
        }
    };
 
    //标注 _W是墨卡托投影  _c是国家2000的坐标系  cva_c
    //(首字母中国Chinese  英文English) cva cia是代表中文   eia eva是英文
    OnlineTileSourceBase tianDiTuCiaTileSource = new OnlineTileSourceBase("Tian Di Tu Cia", 1, 22, 256, "",
            new String[]{"http://t1.tianditu.com/DataServer?T=cva_w",
                    "http://t2.tianditu.com/DataServer?T=cva_w",
                    "http://t3.tianditu.com/DataServer?T=cva_w",
                    "http://t4.tianditu.com/DataServer?T=cva_w",
                    "http://t5.tianditu.com/DataServer?T=cva_w",
                    "http://t6.tianditu.com/DataServer?T=cva_w"}) {
        @Override
        public String getTileURLString(final long pMapTileIndex) {
            return getBaseUrl() + "&X=" + MapTileIndex.getX(pMapTileIndex) + "&Y=" + MapTileIndex.getY(pMapTileIndex)
                    + "&L=" + MapTileIndex.getZoom(pMapTileIndex);
        }
    };
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_title_source);
 
        initView();
 
    }
 
    private void initView() {
        findViewById(R.id.button).setOnClickListener(this);
        mapView = (MapView) findViewById(R.id.mymapview);
        config.InitMapOverlays(mapView,this);
        mapView.setMaxZoomLevel(22.0);
        mapView.setMinZoomLevel(6.0);
        mapView.getController().setZoom(12.0);
        //mMapView
        mapView.setTileSource(tianDiTuImgTileSource);
        TilesOverlay tilesOverlay = new TilesOverlay(new MapTileProviderBasic(this,tianDiTuCiaTileSource),this);
        mapView.getOverlayManager().add(tilesOverlay);
 
    }
 
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                //定位当前的位置,并设置缩放级别
                mapView.getController().setZoom(18.0);
                mapView.getController().setCenter(new GeoPoint(23.12648183, 113.365548756));
                break;
            default:
                break;
 
        }
    }
}

记得自已加载网络以及存储权限

之前网上搜集的资料

我们看到的天地图其实是由一个个瓦片拼接而成的,而这些瓦片存储在天地图的服务上,并且每一个瓦片都有自己的URI,
天地图上由四种类型的瓦片,
分别是:vec(矢量底图瓦片)、cva(矢量注记瓦片)、img(影像底图瓦片)、cia(影像注记瓦片),他们对应的URI分别是:
矢量底图:http://t0.tianditu.com/DataServer?T=vec_c&x=0&y=0&l=1
矢量注记:http://t0.tianditu.com/DataServer?T=cva_c&x=0&y=0&l=1
影像底图:http://t0.tianditu.com/DataServer?T=img_c&x=0&y=0&l=1
影像注记:http://t0.tianditu.com/DataServer?T=cia_c&x=0&y=0&l=1
其中每个URI包含四个参数,分别是:
T=vec_c ; x = ? ; y = ? ; l = ?;
T代表底图类型,x代表瓦片的列号(起始位0),y代表瓦片的行号(起始位0),l代表底图的级别(起始位1,最大为20)。

天地图共有 8 个服务地址,子域名分别从 t0 到 t7,如下列表所示。获取的方法和上一篇中获取百度地图服务地址是一样的,F12 查看了浏览器的通信信息:
http://t0.tianditu.com/DataServer?
http://t1.tianditu.com/DataServer?
http://t2.tianditu.com/DataServer?
http://t3.tianditu.com/DataServer?
http://t4.tianditu.com/DataServer?
http://t5.tianditu.com/DataServer?
http://t6.tianditu.com/DataServer?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值