前言

本文为大家分享arcgis android 中shapefile的加载,默认你有java环境,懂一定的android基础知识,默认你已经安装android studio。如缺乏以上环境和知识,请自行补充。

开发环境配置

参考这篇文章

http://www.cnblogs.com/wangcan/p/4538022.html

当然你愿意使用eclipse开发也行,arcgis android对shapefile的支持是从10.2.4版本开始的(http://www.cnblogs.com/wangcan/p/4010629.html

ShapeFile的加载

Shapefile准备

Shapefile的准备可以有2种方法来实现,一种是直接拷贝到android调试设备,一种是走网络下载的方式。此处我们采用第一种,拷贝shapefile到平板上。

这里我们选取一个全国的行政区划的shapefile作为测试数据。

测试的shapefile数据下载地址:

http://download.csdn.net/detail/a1c2n3g4w5/8750769

获取文件路径

这里注意不要写成绝对路径,类似下面这种

private String folder = "/sdcard/DCIM/Camera/";

因为每种手机上的路径都会有所不同的,我们可以使用下面这段代码来获取SD卡路径

  1. public String getSDPath(){
  2. File sdDir = null;
  3. boolean sdCardExist = Environment.getExternalStorageState()
  4. .equals(android.os.Environment.MEDIA_MOUNTED); //判断sd卡是否存在
  5. if (sdCardExist)
  6. {
  7. sdDir = Environment.getExternalStorageDirectory();//获取跟目录
  8. }
  9. return sdDir.toString();
  10.  
  11. }

然后我们的shapefile放在download文件夹下

  1. String shpPath=getSDPath()+ "/download/bou2_4p.shp";
  2.  
  3. try {
  4.  
  5. ShapefileFeatureTable shapefileFeatureTable=new ShapefileFeatureTable(shpPath);
  6.  
  7. featureLayer=new FeatureLayer(shapefileFeatureTable);
  8.  
  9. mMapView.addLayer(featureLayer);
  10.  
  11. } catch (FileNotFoundException e) {
  12.  
  13. e.printStackTrace();
  14.  
  15. }

然而我运行代码,发现报错“无法找到shapefile文件”,发现我只拷贝了一个*.shp文件到手机里。

这里注意,shapefile的4个文件都要复制到手机sd卡里,如果只是复制一个bou2_4p.shp文件,会报错,无法找到shapefile文件。

好吧,4个文件都复制过去吧,再次运行。

这是还是不显示shapfile,为什么呢?

来来来,我们把bou2_4p.prj文件用文本编辑器打开看看,

  1. GEOGCS["GCS_China_Geodetic_Coordinate_System_2000",DATUM["D_China_2000",SPHEROID["CGCS2000",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]

这里面显示了它的坐标系为国家2000坐标系。

然后再看看我们mapview的坐标系,直接直观的show出来吧

  1. Toast.makeText(this,mMapView.getSpatialReference().getID(),Toast.LENGTH_LONG).show();

或者我们可以思路更简单一点,我们的mapview用了arcgisonline的底图,ok,我们把底图的服务地址在浏览器打开看看

http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer

最下面显示了它的坐标系,可以发现它与我们要加载的shapefile的坐标系是不一样的,自然无发添加了撒。

这个也简单,我们来添加下国家天地图好了。

添加天地图

怎么加载天地图,在另外一片博客里再写吧。

添加完天地图之后,再跑一下,发现还是无法显示shapefile啊,这是为什么呢?

仔细一想,我们是获取到了shapefile,但是shapefile是矢量数据啊,arcgis android怎么知道它改如何渲染出来呢,我们只是把featurelayer加上去了,但是没有设置featurelayer的渲染方式啊。

找到问题就好办了,我们写一个渲染吧,写个简单的renderer好了

  1. Symbol symbol=new SimpleFillSymbol(Color.BLUE);
  2.  
  3. Renderer renderer=new SimpleRenderer(symbol);
  4. featureLayer.setRenderer(renderer);

然后设置给featurelayer

再运行一下,大功告成了。

这里我只是采取了简单的渲染方式,你大可以根据自己的需求来渲染shapefile,具体的可以参考api。下面放一张图

里面有几个不同renderer,大家有兴趣可以去试试,renderer是可以根据属性来渲染的,这样就可以让shapefile的显示效果提升一个层次了。

代码打包下载地址:

http://download.csdn.net/detail/a1c2n3g4w5/8750761

测试的shapefile数据下载地址:

http://download.csdn.net/detail/a1c2n3g4w5/8750769

写了半天累死了,如果你感觉本文对你有帮助,或者本文有什么错误不当之处,欢迎留言指出。

原创博文免费分享,走过路过,好歹支持下咯,留个言,点个赞咯。

ps:说下载的压缩包无法解压的,自己用新版本的rar解压,因为csdn上传大小有限制,采取了新的压缩方式,旧版本可能会打不开。

pps:shapefile的支持需要arcgis android 10.2.4或更高版本的支持。原因猛击此处。下载链接:10.2.4分卷1,1.0.2.4分卷2

10.2.5分卷110.2.5分卷2采用了分卷压缩,2个都下载后再解压。

ppps:10.2.5及更高版本不再支持eclipse插件安装,官方改推荐android studio了,使用方法猛击此处。如果还是要用eclipse开发,需要手工搭建环境,具体方法猛击此处(暂无)

  1. 出处:http://www.cnblogs.com/wangcan/p/4538104.html
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

arcgis android 中shapefile的加载的更多相关文章

  1. Android中的动态加载机制

    在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优势.本 ...

  2. Android中ListView异步加载图片错位、重复、闪烁问题分析及解决方案

    我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图片错位.重复.闪烁等问题,其实这些问题总结起来就是一个问题,我们需要对这些问题进行ListView的优化. 比如L ...

  3. Android中的Glide加载图片

    注意:在Android Studio的项目的build.gradle中添加: compile 'com.github.bumptech.glide:glide:3.6.1' 然后同步一下 目录: 使用 ...

  4. Android中的分页加载

    //----------------------MainActivity中--------------------------------------------------- package com ...

  5. Android中ListView动态加载数据

    1. 引言: 为了提高ListView的效率和应用程序的性能,在Android应用程序中不应该一次性加载ListView所要显示的全部信息,而是采取分批加载策略,随着用户的滑动,动态的从后台加载所需的 ...

  6. ArcGIS Engine中数据的加载 (转)

    1.加载Shapefile数据 1 IWorkspaceFactory pWorkspaceFactory; 2 IFeatureWorkspace pFeatureWorkspace; 3 IFea ...

  7. Android中一张图片加载后所占用内存大小的获取与测试

    Android程序中一旦加载的图片比较多,就有可能出现Out of Memory而导致程序崩溃.这个一方面是因为Android系统本身对于每个单独的进程有内存大小的限制(有16M,64M,128M,2 ...

  8. Android中使用POI加载与显示word文档

    最近打算实现一个功能:在Android中加载显示Word文档,当然这里不是使用外部程序打开.查看一些资料后,打算采用poi实现,确定了以下实现思路: 将ftp中的word文档下载到本地. 调用poi将 ...

  9. Android中ListView分页加载数据

    public class MainActivity extends Activity { private ListView listView=null; //listview的数据填充器 privat ...

随机推荐

  1. mysql 里的 ibdata1 文件不断的增长

    我们在 Percona 支持栏目经常收到关于 MySQL 的 ibdata1 文件的这个问题.当监控服务器发送一个关于 MySQL 服务器存储的报警时,恐慌就开始了 —— 就是说磁盘快要满了.一番调查 ...

  2. html——网页高度

    确定浏览器窗口的尺寸(浏览器的视口,不包括工具栏和滚动条) var w=window.innerWidth || document.documentElement.clientWidth || doc ...

  3. leetcode451

    public class Solution { public string FrequencySort(string s) { var dic = new Dictionary<char, in ...

  4. 【原】Coursera—Andrew Ng机器学习—Week 8 习题—聚类 和 降维

    [1]无监督算法 [2]聚类 [3]代价函数 [4] [5]K的选择 [6]降维 Answer:本来是 n 维,降维之后变成 k 维(k ≤ n) [7] [8] Answer: 斜率-1 [9] A ...

  5. sql解决主键冲突

    在数据插入的时候,假设主键对应的值已经存在,则插入失败!这就是主键冲突.当主键存在冲突(duplicate key)的时候,可以选择性的进行处理,即忽略.更新或者替换. 1.忽略 insert ign ...

  6. 快速上手Runtime(一)之消息机制

    Runtime简介 Runtime简称运行时.OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制. 对于C语言,函数的调用在编译的时候会决定调用哪个函数. 对于OC的函数,属于动态 ...

  7. radio后的input框数据传递

    <input type="radio" name="limit_type" value="total">活动期间,每个手机号可抽 ...

  8. go语言的特殊变量 iota

    iota,是go语言的特殊常量,可以认为是一个可以被编译器修改的常量. 在每一个const关键字出现时,被重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字会自动增加1. 来 ...

  9. [Jenkins] 全局变量

    http://www.360doc.com/content/14/1110/10/7811581_423993429.shtml https://wiki.jenkins.io/display/JEN ...

  10. c#反射优化 表达式树

    using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...