java实现shapefile文件的解析
必须的文件:
.shp— 图形格式,用于保存元素的几何实体。
.shx— 图形索引格式。几何体位置索引,记录每一个几何体在shp文件之中的位置,能够加快向前或向后搜索一个几何体的效率。
.dbf— 属性数据格式,以dBase IV的数据表格式存储每个几何形状的属性数据。
其他可选的文件:
.prj— 投帧式,用于保存地理坐标系统与投影信息,是一个存储well-known text投影描述符的文本文件。
.sbnand.sbx— 几何体的空间索引
.fbnand.fbx— 只读的Shapefiles的几何体的空间索引
.ainand.aih— 列表中活动字段的属性索引。
.ixs— 可读写Shapefile文件的地理编码索引
.mxs— 可读写Shapefile文件的地理编码索引(ODB格式)
.atx—.dbf文件的属性索引,其文件名格式为shapefile.columnname.atx(ArcGIS 8及之后的版本)
.shp.xml— 以XML格式保存元数据。
.cpg— 用于描述.dbf文件的代码页,指明其使用的字符编码。
将shapefile文件放进一个文件夹
<dependency><groupId>org.geotools</groupId><artifactId>gt-shapefile</artifactId><version>19.1</version></dependency>
方法奉上,该方法可指定要获取的字段
参数filePath为shapefile文件路径,任意文件均可
参数mapping为要查询的字段,key为字段别名,value为查询的字段
public static List<Map<String, Object>> getShpData(String filePath, Map<String, String> mapping) throws IOException {File f = new File(filePath);ShapefileDataStore shpDataStore = new ShapefileDataStore(f.toURI().toURL());
// shpDataStore.setCharset(StandardCharsets.UTF_8);shpDataStore.setCharset(Charset.forName("GBK"));String typeName = shpDataStore.getTypeNames()[0];FeatureSource<SimpleFeatureType, SimpleFeature> featureSource = shpDataStore.getFeatureSource(typeName);FeatureCollection<SimpleFeatureType, SimpleFeature> features = featureSource.getFeatures();List<Map<String, Object>> data = new ArrayList<>();try (FeatureIterator<SimpleFeature> itertor = features.features()) {while (itertor.hasNext()) {SimpleFeature feature = itertor.next();Geometry geometry = (Geometry) feature.getDefaultGeometry();String json = CoordinateConversion.geometryToGeojson(geometry);Map<String, Object> o = new HashMap<>();o.put("geom", GsonUtil.GsonToMaps(json));for (Map.Entry<String, String> entry : mapping.entrySet()) {String k = entry.getKey();String v = entry.getValue();o.put(k, feature.getAttribute(v));}data.add(o);}} catch (Exception e) {e.printStackTrace();} finally {shpDataStore.dispose();}return data;}
但有的时候我们不知道都有哪些字段,我想获取所有字段,那就参考下面的方法
public static Map<String, List<Map<String, Object>>> readSHP(File SHPFile) throws Exception {// 一个数据存储实现,允许从Shapefiles读取和写入ShapefileDataStore shpDataStore = null;System.out.println();shpDataStore = new ShapefileDataStore(SHPFile.toURI().toURL());shpDataStore.setCharset(Charset.forName("GBK"));// 获取这个数据存储保存的类型名称数组// getTypeNames:获取所有地理图层String typeName = shpDataStore.getTypeNames()[0];// 通过此接口可以引用单个shapefile、数据库表等。与数据存储进行比较和约束FeatureSource<SimpleFeatureType, SimpleFeature> featureSource = null;featureSource = (FeatureSource<SimpleFeatureType, SimpleFeature>) shpDataStore.getFeatureSource(typeName);// 一个用于处理FeatureCollection的实用工具类。提供一个获取FeatureCollection实例的机制FeatureCollection<SimpleFeatureType, SimpleFeature> result = featureSource.getFeatures();FeatureIterator<SimpleFeature> iterator = result.features();// 迭代int stop = 0;Map<String, List<Map<String, Object>>> map = new HashMap<>();List<Map<String, Object>> entity = new ArrayList<>();List<Map<String, Object>> datas = new ArrayList<>();while (iterator.hasNext()) {SimpleFeature feature = iterator.next();Collection<Property> p = feature.getProperties();Iterator<Property> it = p.iterator();// 构建实体// 特征里面的属性再迭代,属性里面有字段String name;Map<String, Object> data = new HashMap<>();while (it.hasNext()) {Property pro = it.next();name = pro.getName().toString();if (stop == 0) {Map<String, Object> et = new HashMap<>();PropertyType propertyType = pro.getType();Class cls = propertyType.getBinding();String className = cls.getName();String tName = className.substring(className.lastIndexOf(".") + 1);Filter filter = propertyType.getRestrictions().isEmpty() ? null : propertyType.getRestrictions().get(0);String typeLength = filter != null ? filter.toString() : "0";Pattern pattern = Pattern.compile("[^0-9]");Matcher matcher = pattern.matcher(typeLength);String tLength = matcher.replaceAll("").trim();et.put("name", name);et.put("type", tName);et.put("length", tLength);entity.add(et);}data.put(name, pro.getValue().toString());} // end 里层whiledatas.add(data);stop++;} // end 最外层 whilemap.put("entity", entity);map.put("datas", datas);iterator.close();return map;}
java实现shapefile文件的解析相关推荐
- java对xml文件的解析_Java对XML文件的解析
XML简介 围绕XML涉及到四方面的技术: 1.数据定义Schema.DTD 2.数据解析DOM.SAX两种解析模型 3.样式风格XSTL,使用XSTL可以将XML文件中存放的内容按照指定的样式显示为 ...
- java 输出xml文件_java解析xml文件并输出
使用java解析xml文件,通过dom4j,代码运行前需先导入dom4j架包. ParseXml类代码如下: import java.io.File; import java.util.ArrayLi ...
- Java中Xml文件的解析
开发中比较常见的解析方式有三种,如下: 1. DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象. a) 优点:元素与元素之间保留结构关系,故可以进行增删改查操作. b) ...
- Java实现eml文件的解析
最近在做邮件归档,然后需要解析邮件导出的eml,记录每封邮件的归档时间,发件人.标题.发件时间.归档的目录 以下是一个demo示例:待完成此功能后再优化后续代码 import java.io.File ...
- java guava json文件_Json解析文件位置的问题
有这么一段Json { "name": "java3d:vecmath:1.3.1" }, { "name": "net.sf.t ...
- Java边读文件变解析
我需要解决的问题 每条数据用分隔符号隔开.使用时读取内容.没有换行. 数据格式 123333333333;456546546546; private List<String> getSNF ...
- Java导入Excel文件日期解析成了中文问题解决
Excel文件日期为2018-12-12,在解析出来的时候变成了 12-十二月-2018 cell.setCellType(Cell.CELL_TYPE_STRING);//根据不同类型转化成字符串 ...
- java 读取ppt文件_解析Java的InputStream类并借助其读取ppt文件
1. 关于InputStream.read() 在从数据流里读取数据时,为图简单,经常用InputStream.read()方法.这个方法是从流里每次只读取读取一个字节,效率会非常低. ...
- java 读取.sql文件_java解析sql文件
packagecom.athena.ckx.util;importjava.io.FileInputStream;importjava.io.InputStream;importjava.sql.Co ...
最新文章
- HTTP和SOAP完全就是两个不同的协议
- 银行家算法回顾[JAVA实现]
- WCF三种通信模式(转)
- “RuntimeWarning: overflow encountered in ubyte_scalars像素加减运算溢出异常”原因以及解决办法
- [html] 如果一个标签元素同时出现两个class属性,两个class都会生效吗?为什么?
- python3 在线加密_Python3对称加密算法AES、DES3实例详解
- “刚毕业1年,做Python能挣多少?”网友:吹的不多...
- java的排序方法在哪个类里_Java排序(一)实现类的排序
- java 格式化日期 星期_java 日期格式化
- 虹科解决方案 | 如何快速解决CAN与CAN FD之间通信的问题
- 史上最全的程序员常用英语词汇 珍藏版
- win10系统内置PDF虚拟打印机不能用了怎么办
- 形式化方法课程学习笔记(一)|Cop的安装以及简单使用
- 大数据专业找工作分析
- 初学Flutter 环境搭建
- 阿维塔6000+交付量再创新高,持续聚焦“悦己”诉求
- 程序员漫画-加油啊!
- python如何调用自己写的matlab函数和mat数据
- sourceforge空间搭建wordpress个人博客
- 【软考】系统集成项目管理工程师(十四)项目合同管理
热门文章
- python爬虫汽车之家全车型及基本参数入数据库(截止50524个数据)(详解)
- 杨幂穿搭有三宝:露腿,收腰,配饰亮点,赶快马起来
- PPT处理控件Aspose.Slides功能演示:使用 C# 在 PowerPoint 演示文稿中创建 SmartArt
- 什么是ARP?ARP作用和使用场景
- php 国外手机号,国内外手机号码正则表达式
- Python平板电脑数据分析-课程大作业-部分源码
- NVIDIA Jetson之GPIO引脚设置
- RSA加密及AES对称加密代码实现
- 从 PC 卸载 Office
- Linux分布式缓存系统——memcached+LAMP环境搭建+监控