高德地图开发(二)加载瓦片数据

来源:互联网 发布:苏州有mac专柜吗 编辑:程序博客网 时间:2024/04/30 02:30
官方Demo中给我们提供了加载在线瓦片数据的功能。我们在上一节的基础上进行演示。话不多说先上图。

在线瓦片数据

离线瓦片数据

清除

布局文件如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"   >    <com.amap.api.maps.MapView        android:id="@+id/map"        android:layout_width="match_parent"        android:layout_height="match_parent"/>     <Button        android:id="@+id/btn_tile"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/tile_data"        /></RelativeLayout>
MainActivity中都是按照Demo写的,就不多说了。
package com.example.maptest;import android.app.Activity;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import com.amap.api.maps.AMap;import com.amap.api.maps.MapView;import com.amap.api.maps.model.TileOverlay;import com.amap.api.maps.model.TileOverlayOptions;import com.amap.api.maps.model.UrlTileProvider;import java.net.URL;public class MainActivity extends Activity implements View.OnClickListener {    private MapView mMapView;    private Button btn_tile;    private AMap aMap;    private TileOverlay mtileOverlay;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mMapView = (MapView) findViewById(R.id.map);        btn_tile = (Button) findViewById(R.id.btn_tile);        //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图        mMapView.onCreate(savedInstanceState);        if (aMap == null) {            aMap = mMapView.getMap();        }         //移动中心点到西安        aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(34.341568, 108.940174), 10));        btn_tile.setOnClickListener(this);    }    @Override    protected void onDestroy() {        super.onDestroy();        //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图        mMapView.onDestroy();    }    @Override    protected void onResume() {        super.onResume();        //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图        mMapView.onResume();    }    @Override    protected void onPause() {        super.onPause();        //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制        mMapView.onPause();    }    @Override    protected void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);        //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),        //保存地图当前的状态        mMapView.onSaveInstanceState(outState);    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.btn_tile:                if (mtileOverlay != null){                    mtileOverlay.remove();                }                //在线瓦片数据                useOMCMap();                break;        }    }    /**     * 加载在线瓦片数据     */    private void useOMCMap() {        final String url = "http://tile.opencyclemap.org/cycle/%d/%d/%d.png";        TileOverlayOptions tileOverlayOptions =         new TileOverlayOptions().tileProvider(new UrlTileProvider(256, 256) {            @Override            public URL getTileUrl(int x, int y, int zoom) {                try {                    return new URL(String.format(url, zoom, x, y));                } catch (Exception e) {                    e.printStackTrace();                }                return null;            }        });        tileOverlayOptions.diskCacheEnabled(true)                .diskCacheDir("/storage/emulated/0/amap/OMCcache")                .diskCacheSize(100000)                .memoryCacheEnabled(true)                .memCacheSize(100000)                .zIndex(-9999);        mtileOverlay = aMap.addTileOverlay(tileOverlayOptions);    }}
官方介绍的是在线加载瓦片数据。下面我们来学习一下如何加载离线瓦片数据。首先需要离线tiles文件,有兴趣的可以下载尝试。

tiles离线瓦片数据

然后将其复制到手机的根目录下。和加载在线瓦片数据比较相似,只是路径变成了本地路径。
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"   >    <com.amap.api.maps.MapView        android:id="@+id/map"        android:layout_width="match_parent"        android:layout_height="match_parent"/>    <Button        android:id="@+id/btn_tile"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/tile_data"        />    <Button        android:layout_below="@+id/btn_tile"        android:id="@+id/btn_offline_tile"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/offline_tile"        />    <Button        android:layout_below="@+id/btn_offline_tile"        android:id="@+id/btn_clear"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/clear"        /></RelativeLayout>
MainActivity代码
package com.example.maptest;import android.app.Activity;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import com.amap.api.maps.AMap;import com.amap.api.maps.MapView;import com.amap.api.maps.model.TileOverlay;import com.amap.api.maps.model.TileOverlayOptions;import com.amap.api.maps.model.UrlTileProvider;import java.net.URL;public class MainActivity extends Activity implements View.OnClickListener {    private MapView mMapView;    private Button btn_tile;    private Button btn_offline_tile;    private Button btn_clear;    private AMap aMap;    private TileOverlay mtileOverlay;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mMapView = (MapView) findViewById(R.id.map);        btn_tile = (Button) findViewById(R.id.btn_tile);        btn_offline_tile = (Button) findViewById(R.id.btn_offline_tile);        btn_clear = (Button) findViewById(R.id.btn_clear);        //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图        mMapView.onCreate(savedInstanceState);        if (aMap == null) {            aMap = mMapView.getMap();        }         //移动中心点到西安        aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(34.341568, 108.940174), 10));        btn_tile.setOnClickListener(this);        btn_offline_tile.setOnClickListener(this);        btn_clear.setOnClickListener(this);    }    @Override    protected void onDestroy() {        super.onDestroy();        //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图        mMapView.onDestroy();    }    @Override    protected void onResume() {        super.onResume();        //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图        mMapView.onResume();    }    @Override    protected void onPause() {        super.onPause();        //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制        mMapView.onPause();    }    @Override    protected void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);        //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),        //保存地图当前的状态        mMapView.onSaveInstanceState(outState);    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.btn_tile:                if (mtileOverlay != null){                    mtileOverlay.remove();                }                //在线瓦片数据                useOMCMap();                break;            case R.id.btn_offline_tile:                if (mtileOverlay != null){                    mtileOverlay.remove();                }                //离线瓦片数据                useOfflineTile();                break;            case R.id.btn_clear:                //清除所有瓦片                if (mtileOverlay != null){                    mtileOverlay.remove();                }                break;        }    }    /**     * 加载在线瓦片数据     */    private void useOMCMap() {        final String url = "http://tile.opencyclemap.org/cycle/%d/%d/%d.png";        TileOverlayOptions tileOverlayOptions =         new TileOverlayOptions().tileProvider(new UrlTileProvider(256, 256) {            @Override            public URL getTileUrl(int x, int y, int zoom) {                try {                    return new URL(String.format(url, zoom, x, y));                } catch (Exception e) {                    e.printStackTrace();                }                return null;            }        });        tileOverlayOptions.diskCacheEnabled(true)                .diskCacheDir("/storage/emulated/0/amap/OMCcache")                .diskCacheSize(100000)                .memoryCacheEnabled(true)                .memCacheSize(100000)                .zIndex(-9999);        mtileOverlay = aMap.addTileOverlay(tileOverlayOptions);    }    /**     * 加载离线瓦片数据     */    private void useOfflineTile() {        final String url = "file:///storage/emulated/0/tiles/tiles/%d/%d/%d.jpg";        TileOverlayOptions tileOverlayOptions =         new TileOverlayOptions().tileProvider(new UrlTileProvider(256, 256) {            @Override            public URL getTileUrl(int x, int y, int zoom) {                try {                    return new URL(String.format(url, zoom, x, y));                } catch (Exception e) {                    e.printStackTrace();                }                return null;            }        });        tileOverlayOptions.diskCacheEnabled(true)                .diskCacheDir("/storage/emulated/0/amap/tilecache")                .diskCacheSize(100000)                .memoryCacheEnabled(true)                .memCacheSize(100000)                .zIndex(-9999);        mtileOverlay = aMap.addTileOverlay(tileOverlayOptions);    }}
1 0
原创粉丝点击