Gdal是用来读写栅格与矢量数据的,在Gdal官网,可以下载相关的资源进行平台的编译。其实Arcgis底层也是用Gdal来读取shp文件的,那在Android中可以直接读写shp文件吗,是可以的。这里已经有人编译了Android端的so ,下载地址。也可以自己尝试编译相关so。

新建项目,将下载的so 与相关资源导入,相关目录结构如下:

注意gdal的相关包名不要修改,避免so读取不到相应的类。
简单写个shp,注意导包,要导入org.gdal下面相关的类:

  1. private void writeShp() throws UnsupportedEncodingException {
  2. //存放路径
  3. String shpPath = basePath + "/my_line.shp";
  4. ogr.RegisterAll();
  5. gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");
  6. // 不支持中文
  7. gdal.SetConfigOption("SHAPE_ENCODING", "");
  8. String strDriverName = "ESRI Shapefile";
  9. org.gdal.ogr.Driver oDriver = ogr.GetDriverByName(strDriverName);
  10. if (oDriver == null) {
  11. System.out.println(" 驱动不可用!\n");
  12. return;
  13. }
  14. // 创建数据源
  15. DataSource oDS = oDriver.CreateDataSource(shpPath, null);
  16. if (oDS == null) {
  17. return;
  18. }
  19. // 创建一个84坐标系的图层
  20. org.gdal.osr.SpatialReference sap = new org.gdal.osr.SpatialReference();
  21. sap.SetWellKnownGeogCS("WGS84");
  22. Layer oLayer = oDS
  23. .CreateLayer("TestPolygon", sap, ogr.wkbPolygon, null);
  24. if (oLayer == null) {
  25. System.out.println("图层创建失败!\n");
  26. return;
  27. }
  28. // 下面创建属性表
  29. // 先创建一个叫FieldID的整型属性
  30. FieldDefn oFieldID = new FieldDefn("ID", ogr.OFTInteger);
  31. oLayer.CreateField(oFieldID, 1);
  32.  
  33. // 再创建一个叫FeatureName的字符型属性,字符长度为50
  34. FieldDefn oFieldName = new FieldDefn("name", ogr.OFTString);
  35. oFieldName.SetWidth(100);
  36. oLayer.CreateField(oFieldName, 1);
  37.  
  38. FeatureDefn oDefn = oLayer.GetLayerDefn();
  39.  
  40. // 创建要素
  41. Feature oFeatureTriangle = new Feature(oDefn);
  42. oFeatureTriangle.SetField(0, 0);
  43. oFeatureTriangle.SetField(1, "test");
  44. Geometry geomTriangle = Geometry
  45. .CreateFromWkt("POLYGON ((112 45,112 30,140 30))");
  46. oFeatureTriangle.SetGeometry(geomTriangle);
  47.  
  48. oLayer.CreateFeature(oFeatureTriangle);
  49. //同步到文件中,一定要写
  50. oLayer.SyncToDisk();
  51. }

用Arcgis MapView加载shp文件效果:

Gdal Java相关Api

Android GIS开发系列-- 入门季(13)Gdal简单写个shp文件的更多相关文章

  1. Android GIS开发系列-- 入门季(14)FeatureLayer之范围查询

    Android GIS开发系列-- 入门季(5),这篇文章中,我们知道如何去查找要素.现在有一个需求,查找某点5000米范围的要素,那如何来做呢?首先我们需要在地图上画个5000米半径的圆,然后根据Q ...

  2. Android GIS开发系列-- 入门季(2) MapView与图层介绍

    一.MapView MapView是Arcgis中的最基本的类,与高德地图SDK的MapView的重要性一样.MapView的创建有两种方法,一种是在Layout文件中直接写控件.一种是实例化,Map ...

  3. Android GIS开发系列-- 入门季(5) FeatureLayer加载本地shp文件与要素查询

    FeatureLayer是要素图层,也是Arcgis的主要图层.用这个图层可以加载本地的shp文件.下面我们看怎样加载shp文件到MapView中.查看ArcGis API可知FeatureLayer ...

  4. Android GIS开发系列-- 入门季(1) 起点

    前言 这个系列,待最终完成更新,大家体谅点,第一版本全部是参考的网络教程,最近会逐步的细化更新为可以直接使用的情况. 本系列的开发基于AS (  Android Studio ), 和ArcGIS 的 ...

  5. Android GIS开发系列-- 入门季(3) GraphicsLayer添加点、线、面

    GraphicsLayer是图形图层,可以自定义图形添加到地图上.调用GraphicsLayer的addGraphic方法就能添加图形,此方法要一个Graphic对象,此对象的构造方法是Graphic ...

  6. Android GIS开发系列-- 入门季(12) 显示载天地图

    在项目中可以经常需要动态加载一些图层,像投影地图服务.投影地图服务器.其实网上有大量这样的服务,比如天地图官网, . 随便点开一个服务,里面有相关的信息.那如何加载这样图层服务呢. 一.首先感谢这篇博 ...

  7. Android GIS开发系列-- 入门季(9) 定位当前的位置

    利用MapView定位当前的位置 这里要用到Arcgis中的LocationDisplayManager这个类,由于比较简单.直接上代码: LocationDisplayManager locatio ...

  8. Android GIS开发系列-- 入门季(8) Json与Geometry的相互转换

    在Android中json数据十分普遍,也很实用,在Arcgis中也同样支持Json数据,Json与Geometry可以相互转换,达到我们想要的数据. 一.Geometry转换成Json数据 这个实现 ...

  9. Android GIS开发系列-- 入门季(15) 网络图层加载

    一.首先我们来看一个网络图层: http://services.arcgisonline.com/arcgis/rest/services/World_Street_Map/MapServer,这是全 ...

随机推荐

  1. iOS Programming Introduction to Auto Layout 自动布局

    iOS Programming Introduction to Auto Layout   自动布局 A single application that runs natively on both t ...

  2. comm - 逐行比较两个已排序的文件

    总览 (SYNOPSIS) ../src/comm [OPTION]... LEFT_FILE RIGHT_FILE 描述 (DESCRIPTION) 逐行比较 已排序的 文件 LEFT_FILE 和 ...

  3. react router activeclassName 没有显示

    import React, {Component} from 'react' import {NavLink, Switch, Route, Redirect} from 'react-router- ...

  4. viewer && ImageFlow 图片滚动组件 图片点击放大 可以滚轮放大缩小 viewer

    ImageFlow https://finnrudolph.com/products/imageflow https://github.com/countzero/ImageFlow http://w ...

  5. JAVA学习笔记16——控制线程

    Java的线程支持提供了一些便捷的工具方法,通过这些便捷的工具方法可以很好地控制线程执行.   join线程 Thread提供了让一个线程等待另一个线程完成的方法——join().当在某个线程执行流中 ...

  6. 【C语言】控制台窗口图形界面编程(八):键盘事件

    目录 00. 目录 01. INPUT_RECORD结构 02. KEY_EVENT_RECORD结构 03. ReadConsoleInput函数 04. 示例程序 00. 目录 01. INPUT ...

  7. java关于时间的相关操作

    /** * 获取当天时间零点 * @return */ public Date gettoday(){ SimpleDateFormat sdf = new SimpleDateFormat(&quo ...

  8. Libjingle 库

    Libjingle 是google talk voice(语音聊天) 和 p2p interoperability(点对点操作)库,是提供了google talk,p2p文件共享和语音呼叫能力的组件集 ...

  9. centos7安装kvm虚拟机

    一 centos7安装kvm虚拟机 1.验证CPU是否支持KVM 结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的. [root@centos ~]# egrep '(vmx| ...

  10. 用ffmpeg切割音频文件

    ffmpeg -i audio.wav -f segment -segment_time -c copy audio%02d.wav "-segment_time 60" 表示每6 ...