您的位置:首页 > 其它

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

2017-05-10 20:21 435 查看
官方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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: