Shapefile代码示例
Shapefile代码示例
1. 读取Shapefile文件
1.1 实现思路
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);
}
}
2. 写入Shapefile文件
2.1 实现思路
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代码示例的更多相关文章
- 高级渲染技巧和代码示例 GPU Pro 7
下载代码示例 移动设备正呈现着像素越来越高,屏幕尺寸越来越小的发展趋势. 由于像素着色的能耗非常大,因此 DPI 的增加以及移动设备固有的功耗受限环境为降低像素着色成本带来了巨大的压力. MSAA 有 ...
- Java8-Function使用及Groovy闭包的代码示例
导航 定位 概述 代码示例 Java-Function Groovy闭包 定位 本文适用于想要了解Java8 Function接口编程及闭包表达式的筒鞋. 概述 在实际开发中,常常遇到使用模板模式的场 ...
- [IOS 开发] 懒加载 (延迟加载) 的基本方式,好处,代码示例
懒加载的好处: 1> 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 2> 每个属性的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 ...
- SELECT控件操作的JS代码示例
SELECT控件操作的JS代码示例 1 检测是否有选中 if(objSelect.selectedIndex > -1) { //说明选中 } else { //说明没有选中 } 2.动态创建s ...
- 转:HIBERNATE一些_方法_@注解_代码示例---写的非常好
HIBERNATE一些_方法_@注解_代码示例操作数据库7步骤 : 1 创建一个SessionFactory对象 2 创建Session对象 3 开启事务Transaction : hibernate ...
- Python实现各种排序算法的代码示例总结
Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...
- C#与数据库访问技术总结(十五)之 DataAdapter对象代码示例
DataAdapter对象代码示例 下面的代码将说明如何利用DataAdapter对象填充DataSet对象. private static string strConnect=" data ...
- C#与数据库访问技术总结(六)之Command对象创建SQl语句代码示例
Command对象创建SQl语句代码示例 说明:前面介绍了 Command 对象的方法和一些属性,回顾一下 Command对象主要用来执行SQL语句.利用Command对象,可以查询数据和修改数据. ...
- 领域驱动开发推荐代码示例 — Microsoft NLayerApp
简介: Microsoft NLayerApp是由微软西班牙团队出品的基于.NET 4.0的“面向领域N层分布式架构”代码示例,在codeplex上的地址是:http://microsoftnlaye ...
- Zeller公式推导及C#代码示例(待完善)
Zeller公式用于计算给定日期是星期几. 该方法可以用数论知识进行证明. 假设给定日期Date为Year-Month-Day,求解该日期是星期几的问题实际上就是以之前某个确定星期几的日期作为参考点, ...
随机推荐
- HTML标签 b 和 strong 的区别
<b>标签和<strong>标签都表示加粗,效果通常是一样的: <b>:义演丁真<strong>:义演丁真 类似的还有<em>和<i& ...
- css画三角形,对角 √ 勾形
.selected{ border-color: #5FB878; } .selected:after { content: ""; position: absolute; top ...
- 高性能的Reactor和Proactor模式学习
0.引言 在上一篇的笔记中,我们学习了操作系统提供的高效I/O管理技术,主要用于解决服务器在高并发场景下的资源浪费和瓶颈问题.但是在实际的代码编写中,要是我们都全部调用底层的I/O多路复用接口来编写网 ...
- 2023NOIP A层联测32 T3 sakuya
2023NOIP A层联测32 T3 sakuya 虚伪的期望,彬彬赛时都能 A 的数学题. 思路 考虑算出来总的花费,再除以 \(m!\) 求期望. 对于某个排列的花费为:\(\sum\limits ...
- Windows Terminal中使用GitBash
简要说明 我喜欢终端操作,喜欢Git,Microsoft出了一款工具叫做Windows Terminal,在Windows Terminal中使用Git的体验感是极佳的,本博客将教你如何让这体验舒服到 ...
- 2025年前端面试准备css篇
1.css 盒子模型 css包含了内容(content) ,内边距(padding),边框(border),外边距(margin) 等因素. css 标准盒子模型宽包括:margin+border+p ...
- (Python基础教程之四)Python中的变量的使用
Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...
- 使用SpringSecurity3实现RBAC权限管理
1. What? 什么是权限管理? 具体可参见百度:http://baike.baidu.com/view/2108713.htm 名词备注: 数据级权限:百科内的权限管理一文解释的比较不错,但其中的 ...
- qnap nas 下的 nasconfig_fs.img.tgz 及相关的一点记录
QNAP NAS 已安装EntWare(先前的Optware已废弃,不适用),可以使用 opkg 命令安装软件包(如想利用arp命令查看局域网的IP地址及对应物理网卡地址,可使用opkg instal ...
- 从零开始学java(第二天)
------------恢复内容开始------------ 今天是学习了一些基础的知识 1.注释 //行注释 /*多行注释*/ /**文档注释*/ 2.标识符和关键字 标识符就是名字,类名方法名变量 ...