必须的文件:

  • .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文件的解析相关推荐

  1. java对xml文件的解析_Java对XML文件的解析

    XML简介 围绕XML涉及到四方面的技术: 1.数据定义Schema.DTD 2.数据解析DOM.SAX两种解析模型 3.样式风格XSTL,使用XSTL可以将XML文件中存放的内容按照指定的样式显示为 ...

  2. java 输出xml文件_java解析xml文件并输出

    使用java解析xml文件,通过dom4j,代码运行前需先导入dom4j架包. ParseXml类代码如下: import java.io.File; import java.util.ArrayLi ...

  3. Java中Xml文件的解析

    开发中比较常见的解析方式有三种,如下: 1. DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象. a) 优点:元素与元素之间保留结构关系,故可以进行增删改查操作. b)  ...

  4. Java实现eml文件的解析

    最近在做邮件归档,然后需要解析邮件导出的eml,记录每封邮件的归档时间,发件人.标题.发件时间.归档的目录 以下是一个demo示例:待完成此功能后再优化后续代码 import java.io.File ...

  5. java guava json文件_Json解析文件位置的问题

    有这么一段Json { "name": "java3d:vecmath:1.3.1" }, { "name": "net.sf.t ...

  6. Java边读文件变解析

    我需要解决的问题 每条数据用分隔符号隔开.使用时读取内容.没有换行. 数据格式 123333333333;456546546546; private List<String> getSNF ...

  7. Java导入Excel文件日期解析成了中文问题解决

    Excel文件日期为2018-12-12,在解析出来的时候变成了 12-十二月-2018 cell.setCellType(Cell.CELL_TYPE_STRING);//根据不同类型转化成字符串 ...

  8. java 读取ppt文件_解析Java的InputStream类并借助其读取ppt文件

    1. 关于InputStream.read()     在从数据流里读取数据时,为图简单,经常用InputStream.read()方法.这个方法是从流里每次只读取读取一个字节,效率会非常低.     ...

  9. java 读取.sql文件_java解析sql文件

    packagecom.athena.ckx.util;importjava.io.FileInputStream;importjava.io.InputStream;importjava.sql.Co ...

最新文章

  1. HTTP和SOAP完全就是两个不同的协议
  2. 银行家算法回顾[JAVA实现]
  3. WCF三种通信模式(转)
  4. “RuntimeWarning: overflow encountered in ubyte_scalars像素加减运算溢出异常”原因以及解决办法
  5. [html] 如果一个标签元素同时出现两个class属性,两个class都会生效吗?为什么?
  6. python3 在线加密_Python3对称加密算法AES、DES3实例详解
  7. “刚毕业1年,做Python能挣多少?”网友:吹的不多...
  8. java的排序方法在哪个类里_Java排序(一)实现类的排序
  9. java 格式化日期 星期_java 日期格式化
  10. 虹科解决方案 | 如何快速解决CAN与CAN FD之间通信的问题
  11. 史上最全的程序员常用英语词汇 珍藏版
  12. win10系统内置PDF虚拟打印机不能用了怎么办
  13. 形式化方法课程学习笔记(一)|Cop的安装以及简单使用
  14. 大数据专业找工作分析
  15. 初学Flutter 环境搭建
  16. 阿维塔6000+交付量再创新高,持续聚焦“悦己”诉求
  17. 程序员漫画-加油啊!
  18. python如何调用自己写的matlab函数和mat数据
  19. sourceforge空间搭建wordpress个人博客
  20. 【软考】系统集成项目管理工程师(十四)项目合同管理

热门文章

  1. python爬虫汽车之家全车型及基本参数入数据库(截止50524个数据)(详解)
  2. 杨幂穿搭有三宝:露腿,收腰,配饰亮点,赶快马起来
  3. PPT处理控件Aspose.Slides功能演示:使用 C# 在 PowerPoint 演示文稿中创建 SmartArt
  4. 什么是ARP?ARP作用和使用场景
  5. php 国外手机号,国内外手机号码正则表达式
  6. Python平板电脑数据分析-课程大作业-部分源码
  7. NVIDIA Jetson之GPIO引脚设置
  8. RSA加密及AES对称加密代码实现
  9. 从 PC 卸载 Office
  10. Linux分布式缓存系统——memcached+LAMP环境搭建+监控