高德地图开发(二)加载瓦片数据
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); } }
相关文章推荐
- openlayers 3 加载地图瓦片数据
- 高德地图之实例开发(一)加载地图
- OpenLayers学习--加载指定等级指定范围的高德地图数据
- [置顶] arcgis api for js入门开发系列二十一 用HTML5 canvas绘制地图 瓦片加载平移缩放
- 高德地图之实例开发(一)加载地图
- Ruby on rails开发从头来(四十九)- ActiveRecord基础(行数和再加载数据)
- 加载地图数据的几种方法(AE + C#)
- 信息系统开发平台OpenExpressApp - 数据懒加载
- BingMaps学习笔记(一):控制自己加载瓦片地图显示区域和缩放级数
- Asp.Net 开发之(1) ---如何自动加载数据到页面或更新数据到数据容器中(基础控件)
- asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
- C# +AE加载shp、栅格、地图文档数据
- Ruby on rails开发从头来(四十九)- ActiveRecord基础(行数和再加载数据)
- FGMap加载天地图地图数据
- Windows Phone开发之 listbox分页加载数据
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十七)地图自适应区域加载
- GeoServer地图开发解决方案(二):地图数据处理篇
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十七)地图自适应区域加载
- 加载地图数据的几种方法
- GeoServer地图开发解决方案(二):地图数据处理篇 推荐