前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Arcgis Android API开发之离线地图

Arcgis Android API开发之离线地图

作者头像
lzugis
发布2018-10-23 16:03:28
1.2K0
发布2018-10-23 16:03:28
举报
文章被收录于专栏:跟牛老师一起学WEBGIS

最近一直在倒腾Arcgis Android API等相关的东西,想把自己的做的图放到地图上去,也就是离线地图,穷人一般是没有钱的,一个月好几十的流量是开不起的,所以就左捉摸,右思考,看着API里面有离线地图,始终没有弄明白是怎么回事,直到今天下午,想起来了就有试了试,结果成功了,那个激动啊,好半天那……

Arcgis Android API离线地图主要是通过ArcGISLocalTiledLayer实现的,下面是ArcGISLocalTiledLayer的相关内容:

代码语言:javascript
复制
java.lang.Object
  com.esri.android.map.Layer
      com.esri.android.map.TiledLayer
          com.esri.android.map.ags.ArcGISLocalTiledLayer

The ArcGISLocatlTiledLayer class is a type of tiled layer where the data is stored locally on the device, therefore this layer can function even when the device does not have any network connectivity. The data for this layer must be in an ArcGIS Compact Cache format. The typical compact cache structure is as follows:  <CacheName>      Layers           _allLayers, conf.cdi, conf.xml The path used in the constructor of the ArcGISLocalTiledLayer must point to the Layers folder e.g.  ArcGISLocalTiledLayer local = new ArcGISLocalTiledLayer("file:///mnt/sdcard/<CacheName>/Layers");

上面的内容是从帮助文档里面粘贴过来的,英文水平不高,就不翻译了,各位的水平肯定比我高。下面就把做的例子展示一下吧:

在做之前,需要把数据拷贝到手机的SD卡里面,我的在手机里是这样组织的:

所用的数据呢,是用Arcgis Server切片的数据。数据弄好之后,因为你要读取Sd卡上的内容,所以,你得在AndroidManifest.xml文件中添加用户权限:

代码语言:javascript
复制
<uses-permission android:name="android.permission.INTERNET" /><!-- 允许访问Internet -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 允许写入Sd卡 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

用户权限配置好之后,布局文件中加入mapview空间,布局文件main.xml的代码如下:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"
     android:orientation="vertical"
>

<com.esri.android.map.MapView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/map" android:layout_width="fill_parent" 
     android:layout_height="fill_parent">
 
</com.esri.android.map.MapView>
</LinearLayout>

Activity的代码如下:

代码语言:javascript
复制
/* Copyright 2012 ESRI
 *
 * All rights reserved under the copyright laws of the United States
 * and applicable international laws, treaties, and conventions.
 *
 * You may freely redistribute and use this sample code, with or
 * without modification, provided you include the original copyright
 * notice and use restrictions.
 *
 * See the �Sample code usage restrictions� document for further information.
 *
 */

package com.esri.arcgis.android.samples.localtiledlayer;

import android.app.Activity;
import android.os.Bundle;

import com.esri.android.map.MapView;
import com.esri.android.map.ags.ArcGISLocalTiledLayer;

/**
* This sample illustrates the use of ArcGISLocatlTiledLayer where the data is stored locally on the device, therefore 
* this layer can function even when the device does not have any network connectivity. The data for this layer must be 
* in an ArcGIS Compact Cache format or packaged as a Tile package (*.tpk).
* 
* The typical compact cache structure is as  follows:
*	<CacheName><br>
*		Layers<br>
*			_allLayers<br>
*				conf.cdi,conf.xml<br>
* The path used in the constructor of the ArcGISLocalTiledLayer must point to the Layers folder e.g. <br>
*  ArcGISLocalTiledLayer local = new ArcGISLocalTiledLayer("file:///mnt/sdcard/<CacheName>/Layers");
*  
*  A sample data set has been created and is available via ArcGIS Online:
*  http://www.arcgis.com/home/item.html?id=d2d263a280164a039ef0a02e26ee0501
*  1) In order to use the data, download it from the url above
*  2) Copy the data to your sdcard
*  3) Set the path to the data by replacing <Path-to-local-data> with file:///mnt/sdcard/Parcels/v101/Parcel Map
*     on line68 below.
*  
*  A sample Tile Map Package has been created and is available via ArcGIS Online:
*  http://www.arcgis.com/home/item.html?id=4497b7bb42e543b691027840d1b9092a
*  1) In order to use the data, download it from the url above
*  2) Copy the data to your device
*  3) Set the path to the *.tpk file by replacing <Path-to-local-data> on line 68 below
*  
*  You can also use your own data if it is in an ArcGIS Compact Cache format, for more information on 
*  this data format see this link: 
*  http://blogs.esri.com/Dev/blogs/arcgisserver/archive/2010/05/27/Introducing-the-compact-cache-storage-format.aspx
*  
**/

public class LocalTiledLayer extends Activity {

	MapView map = null;
	ArcGISLocalTiledLayer local;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		map = (MapView) findViewById(R.id.map);
		
		//the data is stored on the SDCARD
		//the data is created as a tiled cache
		//local = new ArcGISLocalTiledLayer("file:///mnt/sdcard/arcgis/Parcels/v101/Parcel Map");
		local = new ArcGISLocalTiledLayer("file:///mnt/sdcard/arcgis/neimeng/Layers");
		map.addLayer(local);
		
		
	}
}

完成后效果如下图:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013年12月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档