- 浏览: 1153550 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
RebeccaZhong:
严重: StandardWrapper.Throwableco ...
三步发布java方式的rest服务 -
RebeccaZhong:
严重: StandardWrapper.Throwableco ...
三步发布java方式的rest服务 -
冷酷月光:
楼主。请教一下。arcgis for android 有提供地 ...
ArcGIS API For Android离线地图的实现 -
winney117:
请问如何GET已有网页上的指定内容?比如百度文库中的某一篇文章 ...
三步发布java方式的rest服务 -
zige1012:
您好,我想问问我想换个自己地图的切片,也有4层(L0-L3), ...
ArcGIS API For Android离线地图的实现
今天搞了一个ArcGIS API For Android离线地图的实现。
效果如下:
Android的版本是2.1
main.xml,这里要说明的,初始化范围一定要有,不然会不能显示的。
AgsLOD.java
AgsOfflineTiledLayer.java
AgsOfflineTiledLayerModel.java
AgsOfflineTiles.java
在SD卡的瓦片数据的路径
源码和测试数据在附件中
呵呵,这个你要找esri中国了,不然有侵权的嫌疑了
这个是瓦片的算法,建议你看一下关于esri的瓦片生成原理
有一些包你在eclipse里提示可以找到
自己做的呀,arcgis server的切图呀,要不数据不大的话,我就上传了,方便大家的
用arcgis server切的图,可以附上自己的图不?
自己做的呀,arcgis server的切图呀,要不数据不大的话,我就上传了,方便大家的
你需要自己根据自己的地图文件修改一下里面固定参数呀,例如:4326
没有离线安装包,可能是eclipse的版本问题吧,第一次我也有这样的问题,多试几次就好了,个人感觉,ArcGIS for Android的API发布的比较着急,并没有很好的定位
没有
在线安装挺容易的,是不是eclipse的版本不对呀
效果如下:
Android的版本是2.1
main.xml,这里要说明的,初始化范围一定要有,不然会不能显示的。
<?xml version="1.0" encoding="utf-8"?> <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" initExtent="120.64101459999999 31.280566089 120.6769494 31.303135911"> <com.esri.arcgis.sample.AgsOfflineTiledLayer android:id="@+id/layer"/> </com.esri.android.map.MapView>
AgsLOD.java
package com.esri.arcgis.sample; import com.esri.core.internal.d.c; public class AgsLOD extends c { private static final long serialVersionUID = 4341699179151728883L; private int level; private double resolution; private double scale; public AgsLOD(int level, double scale, double resolution) { super(); this.level = level; this.scale = scale; this.resolution = resolution; } public int a() { return this.level; } public double b() { return this.resolution; } public double c() { return this.scale; } }
AgsOfflineTiledLayer.java
package com.esri.arcgis.sample; import java.io.File; import java.util.ArrayList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import com.esri.android.map.TiledLayer; import com.esri.core.geometry.Envelope; import com.esri.core.geometry.Point; import com.esri.core.geometry.SpatialReference; import com.esri.core.internal.d.c; import com.esri.core.internal.d.k; import com.esri.core.map.TiledLayerModel; public class AgsOfflineTiledLayer extends TiledLayer { //瓦片文件的路径呀 private String location = "/sdcard/BaseMap/Layers"; //REST里面的空间参考 private SpatialReference spatialReference = SpatialReference.create(4326); //全图范围 private Envelope fullExtent = new Envelope(120.64101459999999, 31.280566089, 120.6769494, 31.303135911); private k tileInfo; public AgsOfflineTiledLayer(Context context, AttributeSet attrs) { super(context, attrs); try { init(); } catch (Exception ex) { ex.printStackTrace(); } } @Override protected TiledLayerModel initModel() throws Exception { return new AgsOfflineTiledLayerModel(location, spatialReference, fullExtent, tileInfo); } private void init() { String confPath = location + File.separator + "conf.xml"; Log.i("conf", confPath); try { tileInfo = new k(); DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory .newInstance(); DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); File file = new File(confPath); Document doc = docBuilder.parse(file); NodeList nsX = doc.getElementsByTagName("X"); double originX = Double.valueOf(nsX.item(0).getFirstChild() .getNodeValue()); NodeList nsY = doc.getElementsByTagName("Y"); double originY = Double.valueOf(nsY.item(0).getFirstChild() .getNodeValue()); tileInfo.f = new Point(originX, originY); NodeList nsTileRows = doc.getElementsByTagName("TileRows"); tileInfo.a = Integer.valueOf(nsTileRows.item(0).getFirstChild() .getNodeValue()); NodeList nsTileCols = doc.getElementsByTagName("TileCols"); tileInfo.b = Integer.valueOf(nsTileCols.item(0).getFirstChild() .getNodeValue()); NodeList nsLODInfos = doc.getElementsByTagName("LODInfos"); tileInfo.h = new ArrayList<c>(); NodeList lodInfos = nsLODInfos.item(0).getChildNodes(); for (int j = 0, jcount = lodInfos.getLength(); j < jcount; j++) { Node lod = lodInfos.item(j); NodeList list = lod.getChildNodes(); int level = Integer.valueOf(list.item(0).getFirstChild() .getNodeValue()); double scale = Double.valueOf(list.item(1).getFirstChild() .getNodeValue()); double resolution = Double.valueOf(list.item(2).getFirstChild() .getNodeValue()); tileInfo.h.add(new AgsLOD(level, scale, resolution)); } } catch (Exception e) { e.printStackTrace(); } } }
AgsOfflineTiledLayerModel.java
package com.esri.arcgis.sample; import java.io.File; import java.io.FileInputStream; import android.util.Log; import com.esri.core.geometry.Envelope; import com.esri.core.geometry.SpatialReference; import com.esri.core.internal.d.k; import com.esri.core.map.TiledLayerModel; public class AgsOfflineTiledLayerModel extends TiledLayerModel { private static final long serialVersionUID = 7726567118839553087L; private String location; public AgsOfflineTiledLayerModel(String location, SpatialReference sr, Envelope full, k tileInfo) { super(sr, full, tileInfo); this.location = location; } @Override public byte[] getTile(int level, int row, int col) throws Exception { byte[] result = null; try { String bundlesDir = location + File.separator + "_alllayers"; Log.i("location", bundlesDir); String l = "0" + level; int lLength = l.length(); if (lLength > 2) { l = l.substring(lLength - 2); } l = "L" + l; int rGroup = 128 * (row / 128); String r = "000" + Integer.toHexString(rGroup); int rLength = r.length(); if (rLength > 4) { r = r.substring(rLength - 4); } r = "R" + r; int cGroup = 128 * (col / 128); String c = "000" + Integer.toHexString(cGroup); int cLength = c.length(); if (cLength > 4) { c = c.substring(cLength - 4); } c = "C" + c; String bundleBase = String .format("%s/%s/%s%s", bundlesDir, l, r, c); String bundlxFileName = bundleBase + ".bundlx"; String bundleFileName = bundleBase + ".bundle"; int index = 128 * (col - cGroup) + (row - rGroup); FileInputStream isBundlx = new FileInputStream(bundlxFileName); isBundlx.skip(16 + 5 * index); byte[] buffer = new byte[5]; isBundlx.read(buffer); long offset = (long) (buffer[0] & 0xff) + (long) (buffer[1] & 0xff) * 256 + (long) (buffer[2] & 0xff) * 65536 + (long) (buffer[3] & 0xff) * 16777216 + (long) (buffer[4] & 0xff) * 4294967296L; FileInputStream isBundle = new FileInputStream(bundleFileName); isBundle.skip(offset); byte[] lengthBytes = new byte[4]; isBundle.read(lengthBytes); int length = (int) (lengthBytes[0] & 0xff) + (int) (lengthBytes[1] & 0xff) * 256 + (int) (lengthBytes[2] & 0xff) * 65536 + (int) (lengthBytes[3] & 0xff) * 16777216; result = new byte[length]; isBundle.read(result); } catch (Exception ex) { ex.printStackTrace(); } return result; } }
AgsOfflineTiles.java
package com.esri.arcgis.sample; import com.esri.android.map.MapView; import android.app.Activity; import android.os.Bundle; public class AgsOfflineTiles extends Activity { MapView map = null; AgsOfflineTiledLayer layer = null; /** 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); layer = (AgsOfflineTiledLayer) findViewById(R.id.layer); } }
在SD卡的瓦片数据的路径
源码和测试数据在附件中
- BaseMap.rar (1.5 MB)
- 下载次数: 2045
- AgsOfflineTiles.rar (2.4 MB)
- 下载次数: 2059
评论
17 楼
Virgo_S
2011-09-17
眼高手低 写道
您能给我提供一个ArcGIS Server 10的下载地址吗?我在网上找了好几天也没找到。
呵呵,这个你要找esri中国了,不然有侵权的嫌疑了
16 楼
眼高手低
2011-09-16
您能给我提供一个ArcGIS Server 10的下载地址吗?我在网上找了好几天也没找到。
15 楼
眼高手低
2011-09-16
我是个新手,不太明白您说的“有一些包你在eclipse里提示可以找到”。您指的是"import com.esri.core.internal.d.k;",然后将光标放在上面后给出的那个提示吗?我的Eclipse给出的是"Note: This element has no attached source and the Javadoc could not be found in the attached Javadoc"。这应该是没有相关信息的意思吧?
14 楼
Virgo_S
2011-09-14
眼高手低 写道
AgsOfflineTiledLayerModel.java部分从int index = 128 * (col - cGroup) + (row - rGroup);开始我就没看懂,您能给解释一下吗?
这个是瓦片的算法,建议你看一下关于esri的瓦片生成原理
13 楼
Virgo_S
2011-09-14
眼高手低 写道
您好,我想请教一个问题。就是com.esri.core.internal.d.c和com.esri.core.internal.d.k是什么类啊?我看到工程目录中有很多这样后面是简单字母的包及类。这些在参考中又查不到。当然除了这些之外还有许多查不到的包及类。我能不能知道您是通过什么渠道学习那些参考中查不到的包及类的?我是个新人,刚刚接触ArcGIS API for Android,手上只有一个《ArcGIS API for Android+案例教程》,您能不能给推荐一些资料?我万分感谢!
有一些包你在eclipse里提示可以找到
12 楼
眼高手低
2011-09-08
AgsOfflineTiledLayerModel.java部分从int index = 128 * (col - cGroup) + (row - rGroup);开始我就没看懂,您能给解释一下吗?
11 楼
眼高手低
2011-09-08
您好,我想请教一个问题。就是com.esri.core.internal.d.c和com.esri.core.internal.d.k是什么类啊?我看到工程目录中有很多这样后面是简单字母的包及类。这些在参考中又查不到。当然除了这些之外还有许多查不到的包及类。我能不能知道您是通过什么渠道学习那些参考中查不到的包及类的?我是个新人,刚刚接触ArcGIS API for Android,手上只有一个《ArcGIS API for Android+案例教程》,您能不能给推荐一些资料?我万分感谢!
10 楼
anndaming
2011-08-31
Virgo_S 写道
anndaming 写道
请问一下,你这个离线地图,是自己做的么,怎么做的?
自己做的呀,arcgis server的切图呀,要不数据不大的话,我就上传了,方便大家的
用arcgis server切的图,可以附上自己的图不?
9 楼
Virgo_S
2011-08-31
anndaming 写道
请问一下,你这个离线地图,是自己做的么,怎么做的?
自己做的呀,arcgis server的切图呀,要不数据不大的话,我就上传了,方便大家的
8 楼
anndaming
2011-08-31
请问一下,你这个离线地图,是自己做的么,怎么做的?
7 楼
helloandroid
2011-08-25
呵呵,真在搞android离线地图,谢过
6 楼
Virgo_S
2011-08-17
hjh811 写道
级别有问题 放大的时候会有问题 放大图调用不了
你需要自己根据自己的地图文件修改一下里面固定参数呀,例如:4326
5 楼
hjh811
2011-08-15
级别有问题 放大的时候会有问题 放大图调用不了
4 楼
Virgo_S
2011-05-25
trojantale 写道
楼主有ArcGIS for Android的离线安装包吗?为什么我在线安装老是出现错误?
没有离线安装包,可能是eclipse的版本问题吧,第一次我也有这样的问题,多试几次就好了,个人感觉,ArcGIS for Android的API发布的比较着急,并没有很好的定位
3 楼
sjrhero
2011-05-11
我哥们儿说你很牛X:特别让我来给你送句祝福的话儿。祝你天天开心。。。他说对你顶礼膜拜 !!!!过两天他就来亲自找你了。。嘿嘿。。。
2 楼
Virgo_S
2011-04-25
trojantale 写道
楼主有ArcGIS for Android的离线安装包吗?为什么我在线安装老是出现错误?
没有
在线安装挺容易的,是不是eclipse的版本不对呀
1 楼
trojantale
2011-04-23
楼主有ArcGIS for Android的离线安装包吗?为什么我在线安装老是出现错误?
发表评论
-
Java中使用Sqlite数据库
2011-03-24 00:04 3600Sqlite数据库第三方java扩展包下载地址:http:// ... -
Android SDK 2.2 离线安装
2011-03-19 21:14 4165Android各版本的市场份额 android的普通安装 ... -
ACOD:如何在eclipse中使用离线文档中的中文Javadoc
2011-03-19 21:08 25430、下载ACOD(Android Chinese Offlin ... -
Android RatingBar 评分条
2011-03-18 00:31 2995RatingBar评分条是SeekBar拖动条的子类。现阶段系 ... -
Android SeekBar 拖动条 滑动条
2011-03-18 00:29 9463SeekBar可以作为音乐播放器的进度指示和调整工具,音量调整 ... -
Android ProgressBar 进度条
2011-03-18 00:25 3303在某项延续性工作的进 ... -
Android Menu
2011-03-17 23:08 1833本讲内容:菜单 menu (Android 2.1) 1、选项 ... -
Activity之间的相互调用与传递参数
2011-03-16 22:25 5191Activity之间是如何调用的 Activity与Activ ...
相关推荐
《ArcGIS API for Android离线文档》是一款专为Android开发者设计的工具,它包含了使用Esri公司的ArcGIS系统在Android平台上开发地图应用所需的所有技术文档。这个离线文档旨在帮助开发者在没有网络连接的情况下,也...
### ArcGIS for Android 离线地图缓存制作教程 #### 一、ArcGIS地图缓存制作概述 ArcGIS是一款广泛应用于地理信息系统(GIS)领域的软件,它支持地图的创建、管理和分享。随着移动设备的普及和技术的发展,越来越多...
arcgis for android api 离线 版本 下载
ArcGIS API for Android 1.0 支持在线地图访问,同时也允许用户下载地图数据进行离线使用,这对于网络不稳定或者无网络环境下的应用非常重要。 总的来说,ArcGIS API for Android 1.0 提供了全面的GIS功能,让...
**ArcGIS API for Android(10.2版本)** ArcGIS API for Android 是Esri公司为Android平台开发的一款强大的地理信息系统(GIS)开发工具。它允许开发者构建具有地图展示、地理编码、空间分析等功能的移动应用程序...
**ArcGIS Android 2.0 API 离线文档** ArcGIS Android API 是Esri公司提供的一个强大的地理信息系统(GIS)开发工具,专为在Android平台上构建地图应用而设计。这个2.0版本的API引入了一系列增强功能和优化,旨在...
ArcGIS Runtime for Android 2.0 强化了离线地图的功能,用户可以下载地图包并在无网络环境下使用。这极大地拓展了GIS应用的场景,特别是在野外作业、应急响应等领域。 **7. 自定义图层和符号系统** 开发者可以...
ArcGIS Runtime for Android API 10.1.1离线文档
通过使用 ArcGIS API for Android,开发者可以访问丰富的地图服务、地理数据处理能力以及与 ArcGIS Server 的集成等功能。 ##### 1.1 发布时间与版本 - **测试版**: 已于 2011 年 2 月发布。 - **正式版**: 计划于 ...
《加载本地离线瓦片数据在ArcGIS for JavaScript中的实现》 在GIS应用开发中,尤其是在没有网络连接或者网络环境不稳定的情况下,加载本地离线瓦片数据显得尤为重要。ArcGIS for JavaScript API提供了一种有效的...
《ArcGIS API for Android教程》是一本专注于在Android平台上利用Esri的ArcGIS技术进行地图应用开发的专业指南。ArcGIS是地理信息系统(Geographic Information System)的缩写,它为开发者提供了一整套用于创建、...
总之,ArcGIS API for Android 1.01 是开发者构建地理信息系统应用的强大工具,结合提供的案例教程和相关资源,可以助力开发者快速掌握并应用这项技术,为Android用户提供丰富的地图服务和地理信息应用。
ArcGIS Android API 是Esri公司为开发者提供的一款强大的地理信息系统开发工具,它允许开发者在Android平台上构建地图应用,实现地理空间数据的展示、分析和处理。版本10.1.1是这个API的一个特定版本,可能包含了...
在“ArcGIS for Android 距离、面积测量(手动打点、自动轨迹)”这个主题中,我们将深入探讨如何利用ArcGIS API实现距离和面积的测量功能,包括手动打点和自动轨迹测量。 1. **手动打点测量距离**: - **添加地图...
7. **自定义开发**:ArcGIS for Android提供了丰富的API和SDK,开发者可以依据项目需求进行二次开发,实现特定功能或界面定制。 在压缩包中,`AndroidMap.apk`是ArcGIS for Android应用的安装文件,用户可以将其...
ArcGIS API for Android 是Esri公司提供的一款强大的地图服务开发工具,专为在Android平台上构建地理信息系统(GIS)应用而设计。本教程将带你深入理解和掌握如何利用这个API进行Android应用的开发。 ### 1. 环境...
基于ArcGIS Runtime SDK for Android的离线编辑功能,可以实现对地图数据的精细操作,包括添加、删除、修改地理要素,以及执行复杂的几何编辑任务。 例如,文章提到了“面修形算法”,这是一种用于处理复杂地理形状...