Shapefile代码示例

1. 读取Shapefile文件

1.1 实现思路

graph TD
A[查找必要文件] --> B[获取文件编码]
B --> C[打开图层]
C --> D[获取要素集]
D --> G[关闭图层]

1.2 代码示例


public static SimpleFeatureCollection readShp(String shpPath) {
List<String> bys = CollUtil.newArrayList(".shp",".shx",".dbf",".prj");
for (String by : bys) {
String path = CharSequenceUtil.replaceLast(shpPath, ".shp", by,true);
if(!FileUtil.exist(path)){
throw new RuntimeException(by+"类型的文件不存在");
}
} Charset shpCharset = null;
String cpgPath = CharSequenceUtil.replaceLast(shpPath, ".shp", ".cpg",true);
if(FileUtil.exist(cpgPath)){
File cpgFile = FileUtil.file(cpgPath);
Charset cpgCharset = CharsetDetector.detect(cpgFile);
String cpgString = FileUtil.readString(cpgFile, cpgCharset);
try {
shpCharset = Charset.forName(cpgString.trim());
} catch (Exception e) {
throw new RuntimeException("CPG文件保存的编码格式错误");
}
} if (shpCharset == null) {
String dbfPath = CharSequenceUtil.replaceLast(shpPath, ".shp", ".dbf",true);
if(FileUtil.exist(dbfPath)){
byte[] bs = FileUtil.readBytes(dbfPath);
if (bs != null && bs.length >= 30) {
byte b = bs[29];
if (b == 0x4d) {
shpCharset = Charset.forName("GBK");
}
}
}
} if(shpCharset == null){
shpCharset = StandardCharsets.UTF_8;
} try {
File file = new File(shpPath);
ShapefileDataStore shpDataStore = new ShapefileDataStore(file.toURI().toURL());
shpDataStore.setCharset(shpCharset);
String typeName = shpDataStore.getTypeNames()[0];
SimpleFeatureSource source = shpDataStore.getFeatureSource(typeName);
shpDataStore.dispose();
return source.getFeatures();
} catch (IOException e) {
throw new RuntimeException(e);
}
}

Shapefile文件编码参考文档

2. 写入Shapefile文件

2.1 实现思路

graph TD
A[构建图层结构] --> B[写入要素]
B --> C[关闭图层]
C --> D[写入编码]

2.2 代码示例


public static void writeShp(String shpPath, SimpleFeatureCollection featureCollection){
try {
File shapeFile = new File(shpPath);
Map<String, Serializable> params = new HashMap<>();
params.put(ShapefileDataStoreFactory.URLP.key, shapeFile.toURI().toURL()); ShapefileDataStore ds = (ShapefileDataStore) new ShapefileDataStoreFactory().createNewDataStore(params);
SimpleFeatureType featureType = featureCollection.getSchema();
ds.createSchema(featureType);
Charset charset = StandardCharsets.UTF_8;
ds.setCharset(charset); String typeName = ds.getTypeNames()[0];
FeatureWriter<SimpleFeatureType, SimpleFeature> writer = ds.getFeatureWriterAppend(typeName, Transaction.AUTO_COMMIT); try (FeatureIterator<SimpleFeature> features = featureCollection.features()) {
while (features.hasNext()) {
SimpleFeature feature = features.next();
writer.hasNext();
SimpleFeature writefeature = writer.next();
writefeature.setDefaultGeometry(feature.getDefaultGeometry()); for (PropertyDescriptor d : featureType.getDescriptors()) {
if (!(feature.getAttribute(d.getName()) instanceof Geometry)) {
Name name = d.getName();
Object value = feature.getAttribute(name);
writefeature.setAttribute(name, value);
}
} writer.write();
}
} writer.close();
ds.dispose(); String cpgPath = shpPath.substring(0, shpPath.lastIndexOf(".")) + ".cpg";
FileUtil.writeString("UTF-8", cpgPath, StandardCharsets.UTF_8);
}catch (Exception e){
throw new RuntimeException(e);
}
}

3. Shapefile代码操作的原则

  • 默认使用UTF-8编码格式,根据实际情况处理编码问题

Shapefile代码示例的更多相关文章

  1. 高级渲染技巧和代码示例 GPU Pro 7

    下载代码示例 移动设备正呈现着像素越来越高,屏幕尺寸越来越小的发展趋势. 由于像素着色的能耗非常大,因此 DPI 的增加以及移动设备固有的功耗受限环境为降低像素着色成本带来了巨大的压力. MSAA 有 ...

  2. Java8-Function使用及Groovy闭包的代码示例

    导航 定位 概述 代码示例 Java-Function Groovy闭包 定位 本文适用于想要了解Java8 Function接口编程及闭包表达式的筒鞋. 概述 在实际开发中,常常遇到使用模板模式的场 ...

  3. [IOS 开发] 懒加载 (延迟加载) 的基本方式,好处,代码示例

    懒加载的好处: 1> 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 2> 每个属性的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 ...

  4. SELECT控件操作的JS代码示例

    SELECT控件操作的JS代码示例 1 检测是否有选中 if(objSelect.selectedIndex > -1) { //说明选中 } else { //说明没有选中 } 2.动态创建s ...

  5. 转:HIBERNATE一些_方法_@注解_代码示例---写的非常好

    HIBERNATE一些_方法_@注解_代码示例操作数据库7步骤 : 1 创建一个SessionFactory对象 2 创建Session对象 3 开启事务Transaction : hibernate ...

  6. Python实现各种排序算法的代码示例总结

    Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...

  7. C#与数据库访问技术总结(十五)之 DataAdapter对象代码示例

    DataAdapter对象代码示例 下面的代码将说明如何利用DataAdapter对象填充DataSet对象. private static string strConnect=" data ...

  8. C#与数据库访问技术总结(六)之Command对象创建SQl语句代码示例

    Command对象创建SQl语句代码示例 说明:前面介绍了 Command 对象的方法和一些属性,回顾一下 Command对象主要用来执行SQL语句.利用Command对象,可以查询数据和修改数据. ...

  9. 领域驱动开发推荐代码示例 — Microsoft NLayerApp

    简介: Microsoft NLayerApp是由微软西班牙团队出品的基于.NET 4.0的“面向领域N层分布式架构”代码示例,在codeplex上的地址是:http://microsoftnlaye ...

  10. Zeller公式推导及C#代码示例(待完善)

    Zeller公式用于计算给定日期是星期几. 该方法可以用数论知识进行证明. 假设给定日期Date为Year-Month-Day,求解该日期是星期几的问题实际上就是以之前某个确定星期几的日期作为参考点, ...

随机推荐

  1. Machine Learning week_2 Environment Setup Instructions

    PerFace 第二周会使用矩阵来扩充之前的线性回归和梯度下降. 第二周一开始,吴恩达老师在课程开始前,引导我们做 MATLAB 和 Octave 的前期准备工作.这两个都可以完成编程作业.给了Oct ...

  2. Robust Loop Closure by Textual Cues in Challenging Environments

    arxiv | 南洋理工大学开源 基于文本线索实现复杂环境中的鲁棒闭环检测 [Robust Loop Closure by Textual Cues in Challenging Environmen ...

  3. 【题解笔记】PTA基础6-7:统计某类完全平方

    题目地址:https://pintia.cn/problem-sets/14/problems/739 前言 咱目前还只能说是个小白,写题解是为了后面自己能够回顾.如果有哪些写错的/能优化的地方,也请 ...

  4. 全中国有多少公网IP地址?

    之前为了准备CTF比赛,搞了一个云服务器,顺便申请了一个公网IP. 看着申请到的IP地址,我突然想到了一个问题:不是早就说IP地址已经耗尽了吗,为什么我随便就能申请到,是谁在负责IP地址的管理分配,咱 ...

  5. LLM应用实战: AI资讯的自动聚合及报告生成

    1.背景 花了整整两天时间,本qiang~开发了一个关于AI新闻资讯的自动聚合及报告生成工具. 本篇记录一下整体的框架和实现原理,并且本着它山之石可以攻玉,本qiang~开放了所有的源码,源码可见如下 ...

  6. 关于免费笔记软件Obsidian和免费同步,长文,保存观看

    前言 这段可以略过 最早使用的笔记软件(应该说是网页摘录软件)是网文快捕 CyberArticle ,但不停换电脑后当年保存的资料基本都遗失了,那可是我翻阅众多涩涩网站的精华文章. 后来网文快捕推出了 ...

  7. 域渗透之初识Kerberos认证过程

    目录 Kerberos协议中的角色 关键名词 Kerberos协议的工作流程 AS_REQ & AS_REP TGS_REQ & TGS_REP AP_REQ PAC 总结 Kerbe ...

  8. Python通过requests模块处理form-data请求格式

    1.安装 requests_toolbelt 模块,引入该模块下的 MultipartEncoder 2.在 请求体 中使用该模块函数,请求头中增加对应参数值 from requests_toolbe ...

  9. Java线程中断的本质和编程原则

    在历史上,Java试图提供过抢占式限制中断,但问题多多,例如前文介绍的已被废弃的Thread.stop.Thread.suspend和 Thread.resume等.另一方面,出于Java应用代码的健 ...

  10. JAVA WEB和Tomcat各组件概念

    概述 本篇文章是https://juejin.cn/post/7055306172265414663,这篇文章的再总结,剔除了与Java安全研究没太大关系的内容,对JAVAWEB中的Servlet.F ...