1. 程式人生 > >osmdroid 載入天地圖線上向量和影像資料

osmdroid 載入天地圖線上向量和影像資料

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?