关于Java配置GDAL库参考之前的博文。

在Java中使用OGR读写矢量数据时,需要导入ogr库,如果需要对中文路径的支持还有空间参考的支持,需要导入gdal和osr库,代码如下:

importorg.gdal.osr.*;
importorg.gdal.ogr.*;
importorg.gdal.gdal.*;

1.读取矢量

staticvoid ReadVectorFile()
{String strVectorFile = "F:\\Work\\OGR测试数据\\beijing.shp";// 注册所有的驱动ogr.RegisterAll();// 为了支持中文路径,请添加下面这句代码gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES");// 为了使属性表字段支持中文,请添加下面这句gdal.SetConfigOption("SHAPE_ENCODING","");//打开数据DataSource ds = ogr.Open(strVectorFile,0);if (ds == null){System.out.println("打开文件【"+ strVectorFile + "】失败!" );return;}System.out.println("打开文件【"+ strVectorFile + "】成功!" );// 获取该数据源中的图层个数,一般shp数据图层只有一个,如果是mdb、dxf等图层就会有多个int iLayerCount = ds.GetLayerCount();// 获取第一个图层Layer oLayer = ds.GetLayerByIndex(0);if (oLayer == null){System.out.println("获取第0个图层失败!\n");return;}// 对图层进行初始化,如果对图层进行了过滤操作,执行这句后,之前的过滤全部清空oLayer.ResetReading();// 通过属性表的SQL语句对图层中的要素进行筛选,这部分详细参考SQL查询章节内容//oLayer.SetAttributeFilter("\"NAME99\"LIKE \"北京市市辖区\"");// 通过指定的几何对象对图层中的要素进行筛选//oLayer.SetSpatialFilter();// 通过指定的四至范围对图层中的要素进行筛选//oLayer.SetSpatialFilterRect();// 获取图层中的属性表表头并输出System.out.println("属性表结构信息:");FeatureDefn oDefn =oLayer.GetLayerDefn();int iFieldCount =oDefn.GetFieldCount();for (int iAttr = 0; iAttr <iFieldCount; iAttr++){FieldDefn oField =oDefn.GetFieldDefn(iAttr);System.out.println(oField.GetNameRef()+ ": " +oField.GetFieldTypeName(oField.GetFieldType())+ "(" +oField.GetWidth()+"."+ oField.GetPrecision() + ")");}// 输出图层中的要素个数System.out.println("要素个数 = " + oLayer.GetFeatureCount(0));Feature oFeature = null;// 下面开始遍历图层中的要素while ((oFeature =oLayer.GetNextFeature()) != null){System.out.println("当前处理第" + oFeature.GetFID() + "个:\n属性值:");// 获取要素中的属性表内容for (int iField = 0; iField< iFieldCount; iField++){FieldDefn oFieldDefn= oDefn.GetFieldDefn(iField);int type =oFieldDefn.GetFieldType();switch (type){caseogr.OFTString:System.out.println(oFeature.GetFieldAsString(iField)+ "\t");break;caseogr.OFTReal:System.out.println(oFeature.GetFieldAsDouble(iField)+ "\t");break;caseogr.OFTInteger:System.out.println(oFeature.GetFieldAsInteger(iField)+ "\t");break;default:System.out.println(oFeature.GetFieldAsString(iField)+ "\t");break;}}// 获取要素中的几何体Geometry oGeometry =oFeature.GetGeometryRef();// 为了演示,只输出一个要素信息break;}System.out.println("数据集关闭!");
}

2.写入矢量

写入的结果如下图所示。
staticvoid WriteVectorFile()
{String strVectorFile ="E:\\TestPolygon.shp";// 注册所有的驱动ogr.RegisterAll();// 为了支持中文路径,请添加下面这句代码gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","NO");// 为了使属性表字段支持中文,请添加下面这句gdal.SetConfigOption("SHAPE_ENCODING","");//创建数据,这里以创建ESRI的shp文件为例String strDriverName = "ESRIShapefile";org.gdal.ogr.Driver oDriver =ogr.GetDriverByName(strDriverName);if (oDriver == null){System.out.println(strVectorFile+ " 驱动不可用!\n");return;}// 创建数据源DataSource oDS = oDriver.CreateDataSource(strVectorFile,null);if (oDS == null){System.out.println("创建矢量文件【"+ strVectorFile +"】失败!\n" );return;}// 创建图层,创建一个多边形图层,这里没有指定空间参考,如果需要的话,需要在这里进行指定Layer oLayer =oDS.CreateLayer("TestPolygon", null, ogr.wkbPolygon, null);if (oLayer == null){System.out.println("图层创建失败!\n");return;}// 下面创建属性表// 先创建一个叫FieldID的整型属性FieldDefn oFieldID = newFieldDefn("FieldID", ogr.OFTInteger);oLayer.CreateField(oFieldID, 1);// 再创建一个叫FeatureName的字符型属性,字符长度为50FieldDefn oFieldName = newFieldDefn("FieldName", ogr.OFTString);oFieldName.SetWidth(100);oLayer.CreateField(oFieldName, 1);FeatureDefn oDefn =oLayer.GetLayerDefn();// 创建三角形要素Feature oFeatureTriangle = newFeature(oDefn);oFeatureTriangle.SetField(0, 0);oFeatureTriangle.SetField(1, "三角形");Geometry geomTriangle =Geometry.CreateFromWkt("POLYGON ((0 0,20 0,10 15,0 0))");oFeatureTriangle.SetGeometry(geomTriangle);oLayer.CreateFeature(oFeatureTriangle);// 创建矩形要素Feature oFeatureRectangle = newFeature(oDefn);oFeatureRectangle.SetField(0, 1);oFeatureRectangle.SetField(1, "矩形");Geometry geomRectangle =Geometry.CreateFromWkt("POLYGON ((30 0,60 0,60 30,30 30,30 0))");oFeatureRectangle.SetGeometry(geomRectangle);oLayer.CreateFeature(oFeatureRectangle);// 创建五角形要素Feature oFeaturePentagon = newFeature(oDefn);oFeaturePentagon.SetField(0, 2);oFeaturePentagon.SetField(1, "五角形");Geometry geomPentagon =Geometry.CreateFromWkt("POLYGON ((70 0,85 0,90 15,80 30,65 15,700))");oFeaturePentagon.SetGeometry(geomPentagon);oLayer.CreateFeature(oFeaturePentagon);System.out.println("\n数据集创建完成!\n");
}

3.矢量数据管理

staticvoid VectorDelete(String strVectorFile)
{// 注册所有的驱动ogr.RegisterAll();File file = newFile(strVectorFile); org.gdal.ogr.Driver oDriver = null;{//打开矢量DataSource oDS =ogr.Open(strVectorFile, 0);if (oDS == null){file.delete();return;}oDriver = oDS.GetDriver();if (oDriver == null){file.delete();return;}}if(oDriver.DeleteDataSource(strVectorFile) == ogr.OGRERR_NONE)return;elsefile.delete();
}staticvoid VectorRename(String strOldFile, String strNewFile)
{// 注册所有的驱动ogr.RegisterAll();File file = new File(strOldFile); org.gdal.ogr.Driver oDriver = null;{//打开矢量DataSource oDS =ogr.Open(strOldFile, 0);if (oDS == null){file.renameTo(newFile(strNewFile));return;}oDriver = oDS.GetDriver();if (oDriver == null){file.renameTo(newFile(strNewFile));return;}DataSource oDDS =oDriver.CopyDataSource(oDS, strNewFile, null);if (oDDS == null){file.renameTo(newFile(strNewFile));return;}}if(oDriver.DeleteDataSource(strOldFile) == ogr.OGRERR_NONE)return;elsefile.renameTo(newFile(strNewFile));
}

GDAL读写矢量文件——Java相关推荐

  1. GDAL读写矢量文件——C#

    在C#中使用OGR读写矢量数据时,需要引用"using OSGeo.OGR;".同时为了处理中文路径和中文字段,需要在开始设置下面两个属性,代码如下: //为了支持中文路径,请添加 ...

  2. GDAL读写矢量文件——Python

    在Python中使用OGR时,先要导入OGR库,如果需要对中文的支持,还需要导入GDAL库,具体代码如下.Python创建的shp结果如图1所示. 图1 Python创建矢量结果 #-*- codin ...

  3. Java开发环境中,使用GDAL进行矢量叠加,并计算面积

    GDAL与Springboot的集成可参考Springboot 集成GDAL开发环境配置 Java开发环境下,GDAL的相关学习和使用的案例还是非常少的,并且部分函数的使用方式和Python.C环境下 ...

  4. Java+GeoTools工具包+读写shapfile文件

    本篇所用到的测试shapfile文件下载地址: 链接: https://pan.baidu.com/s/1S-TrFp_r8zyf_d0oBUeWqg GeoTools英文帮助文档地址: Geotoo ...

  5. Java gdal .mif/.mid文件读取

    上一篇研究了 Windows10 64位 Python读取.mif/.mid文件并转成txt 今天研究一下Java读取MIF. 俩种解决办法: (1)Python程序读取.mif/.mid转成txt, ...

  6. java如何读写json文件

    java如何读写json文件 在实际项目开发中,有时会遇到一些全局的配置缓存,最好的做法是配置redis数据库作为数据缓存,而当未有配置redis服务器时,读取静态资源文件(如xml.json等)也是 ...

  7. JAVA编程TXT文件_java开发之读写txt文件操作的实现

    项目结构: 运行效果: ======================================================== 下面是代码部分: ====================== ...

  8. java怎样读txt文件_【后端开辟】java怎样读写txt文件?

    java怎样读取txt文件? 1.运用FileInputStream完成读取txt文件内容 2.运用FileOutputStream完成写入txt文件内容 package cn.xiaobing.ut ...

  9. JAVA编程TXT文件_java读写txt文件的方法

    java读写txt文件的方法 发布时间:2020-06-26 15:54:02 来源:亿速云 阅读:111 作者:Leah 本篇文章为大家展示了java读写txt文件的方法,代码简明扼要并且容易理解, ...

最新文章

  1. 机器学习Tips:关于Scikit-Learn的 10 个小秘密
  2. 从字符串中删除所有出现的char
  3. C# 8的新提案:new关键字类型推断
  4. 23种设计模式C++实现
  5. SpringBoot启动流程是怎样的
  6. 【Elasticsearch】使用两阶段提交在 Elasticsearch 中模拟事务功能
  7. 使用 SYSENTER 和 SYSEXIT 指令执行对系统过程的快速调用
  8. VB一个可以改变箭头方向的气泡提示
  9. 安卓手机管理软件_日程管理软件哪个好?
  10. 2.1 px30驱动移植-DRM驱动框架简介
  11. 02【需求调研】的概念,包括那些内容,有哪些方法?
  12. HTML网引入插件时出现网页下面部分内容不显示解决方案
  13. DSP CCS12.00 芯片:TMS320F28335 外部中断 XINT1, 和映射区域的 k1 -- k4 按键的功能实现
  14. 论文|完整空间多任务模型(Entire Space Multi-Task Model)
  15. 如何用TortoiseSVN将项目代码提交到SVN
  16. 加州大学伯克利分校计算机科学硕士,加州大学伯克利分校计算机硕士申请条件是什么?...
  17. 什么是对齐,为什么要对齐
  18. 【沐风老师】3DMAX实线转虚线插件DashedShape使用教程
  19. 2021年起重机司机(限桥式起重机)最新解析及起重机司机(限桥式起重机)考试试卷
  20. 用 Python 压缩文件方法汇总

热门文章

  1. mycat-sublun数据库分片
  2. 计算机科学与技术python方向_专业解读丨计算机科学与技术
  3. mysql 5.7参数配置_MySQL 5.7-新增配置参数
  4. 【mysql处理远程登陆授权及数据库迁移备份问题】
  5. Android零基础入门第86节:探究Fragment生命周期
  6. 【汇编语言与计算机系统结构笔记05】汇编的系统结构,从C代码生产汇编代码,一个具体的、经典的数据传送指令(mov)实例与分析
  7. python基础: day4作业计算器
  8. android支付宝开放平台开发,支付宝开放平台支付更新升级全解析
  9. Reset Password Windows Server 2008 r2
  10. linux检测是否安装eclipse,肿么看linux中eclipse是否安装成功