• arcgis android 中shapefile的加载


    前言

    本文为大家分享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卡路径

    public String getSDPath(){ 
           File sdDir = null; 
           boolean sdCardExist = Environment.getExternalStorageState()   
                               .equals(android.os.Environment.MEDIA_MOUNTED);   //判断sd卡是否存在 
           if   (sdCardExist)   
           {                               
             sdDir = Environment.getExternalStorageDirectory();//获取跟目录 
          }   
           return sdDir.toString(); 
           
    }

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

    String shpPath=getSDPath()+ "/download/bou2_4p.shp";
    
    try {
    
        ShapefileFeatureTable shapefileFeatureTable=new ShapefileFeatureTable(shpPath);
    
        featureLayer=new FeatureLayer(shapefileFeatureTable);
    
        mMapView.addLayer(featureLayer);
    
    } catch (FileNotFoundException e) {
    
        e.printStackTrace();
    
    }

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

     

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

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

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

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

    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出来吧

    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好了

    Symbol symbol=new SimpleFillSymbol(Color.BLUE);
    
    Renderer renderer=new SimpleRenderer(symbol);
    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开发,需要手工搭建环境,具体方法猛击此处(暂无)

    出处:http://www.cnblogs.com/wangcan/p/4538104.html
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
  • 相关阅读:
    Vue 中动态添加class(使用v-bind:class)
    Vue 过滤器的使用
    Huxley 是一个用于Web应用 UI 测试的工具
    showmessage函数里
    [Php] PHPExcel读取Excel文件(或来自客户端上传的)并返回二维数组
    async-validator -- git地址
    Antd Upload组件上传文件至php后端, php拿到对应的文件名(二: vue实现)
    Antd Upload组件上传文件至php后端, php拿到对应的文件名
    对数据库中一个timestamp类型字段时间上作加减
    小学生作文怎么辅导?
  • 原文地址:https://www.cnblogs.com/wangcan/p/4538104.html
Copyright © 2020-2023  润新知