本文将重点介绍基于Java和Geotools来解析shap文件,并打印解析内容的过程。

环境:jdk 1.8

maven 3.3

第一步、pom.xml 设置

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.yelang</groupId><artifactId>geotools-demo1</artifactId><version>0.0.1-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><geotools.version>24.0</geotools.version></properties><repositories><repository><id>osgeo</id><name>OSGeo Release Repository</name><url>https://repo.osgeo.org/repository/release/</url><snapshots><enabled>false</enabled></snapshots><releases><enabled>true</enabled></releases></repository><repository><id>osgeo-snapshot</id><name>OSGeo Snapshot Repository</name><url>https://repo.osgeo.org/repository/snapshot/</url><snapshots><enabled>true</enabled></snapshots><releases><enabled>false</enabled></releases></repository></repositories><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.1</version><scope>test</scope></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-shapefile</artifactId><version>${geotools.version}</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-swing</artifactId><version>${geotools.version}</version></dependency></dependencies></project>

提示:geotools依赖包在中央仓库中不存在,如果不设置私有仓库,jar会无法下载。解决办法有两种:第一种是在pom中设置私有仓库地址;第二种是在maven的setttings.xml中设置私服镜像。需要注意的是,镜像的设置mirrorOf一定不要设置*,否则无法下载依赖。推荐如下

<mirror>    <id>nexus-aliyun</id>    <mirrorOf>central</mirrorOf>    <name>Nexus aliyun</name>    <url>http://maven.aliyun.com/nexus/content/groups/public</url>  </mirror> 

第二步、解析shap文件

package com.yelang;import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;import org.geotools.data.FileDataStore;
import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource;
import org.junit.Test;
import org.opengis.feature.Property;
import org.opengis.feature.simple.SimpleFeature;public class ReadShapTest {@Testpublic void readShap() throws IOException {long startTime=System.currentTimeMillis();//加载文件String filePath = "D:/cesium code/数据/矢量数据/0319点.shp";File file = new File(filePath);if (!file.exists()) {System.out.println("文件不存在");return;}//map记录shapefile key-value数据List<Map<String,Object>> list = new ArrayList<Map<String, Object>>();//通过store获取featurecollectionFileDataStore store = FileDataStoreFinder.getDataStore(file);SimpleFeatureSource featureSource = store.getFeatureSource();SimpleFeatureCollection simpleFeatureCollection=featureSource.getFeatures();SimpleFeatureIterator itertor = simpleFeatureCollection.features();//遍历featurecollectionwhile (itertor.hasNext()){Map<String,Object> data  = new HashMap<String, Object>();SimpleFeature feature = itertor.next();Collection<Property> p = feature.getProperties();Iterator<Property> it = p.iterator();//遍历feature的propertieswhile(it.hasNext()) {Property pro = it.next();if(null != pro && null != pro.getValue()) {String field = pro.getName().toString();String value = pro.getValue().toString();field = field.equals("the_geom")?"wkt":field;byte[]bytes=value.getBytes("iso8859-1");value=new String(bytes, "gbk");System.out.println(new String(field.getBytes("iso8859-1"),"gbk") + "==" + value);data.put(field, value);}}list.add(data);}long endTime=System.currentTimeMillis();System.out.println("当前程序耗时:"+(endTime-startTime)+"ms");}}

第三步、查看输出结果

第四步、使用GUI工具查看结果

代码如下:

package com.yelang;import java.io.File;
import java.io.IOException;import org.geotools.data.FileDataStore;
import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.map.FeatureLayer;
import org.geotools.map.Layer;
import org.geotools.map.MapContent;
import org.geotools.styling.SLD;
import org.geotools.styling.Style;
import org.geotools.swing.JMapFrame;
import org.geotools.swing.data.JFileDataStoreChooser;public class ReadShapGui {public static void main(String[] args) throws IOException {// display a data store file chooser dialog for shapefilesFile file = JFileDataStoreChooser.showOpenFile("shp", null);if (file == null) {return;}FileDataStore store = FileDataStoreFinder.getDataStore(file);SimpleFeatureSource featureSource = store.getFeatureSource();// Create a map content and add our shapefile to itMapContent map = new MapContent();map.setTitle("Quickstart");Style style = SLD.createSimpleStyle(featureSource.getSchema());Layer layer = new FeatureLayer(featureSource, style);map.addLayer(layer);// Now display the mapJMapFrame.showMap(map);}}

通过以上几步,可掌握通过geotools读取数据,并进行展示的方法。

干货!使用Geotools解析shap数据实例相关推荐

  1. Okhttp源码分析以及Google Gson解析json数据实例

    Okhttp Github的Okhttp OkHttp是一个高效的HTTP客户端,它有以下默认特性: 支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接 透明的GZIP压缩减少响 ...

  2. 错过必定后悔的干货!深入解析大数据行业的集群架构方案

    随着大数据的日益普及,很多人对大数据越来越感兴趣,有些程序开发者也跃跃欲试,但是苦于不会搭建集群环境,而常常被拦在大数据的门槛之外. 通过这次疫情,我相信各位也看见了,大数据真的很重要.从患者数字地图 ...

  3. 解析XML格式数据实例

    前言: 网络数据传输时,最常用的格式有两种:XML和JSON,下面我们就研究如何使用Pull解析和Sex解析来实现对XML格式文件数据的解析. 实例流程: 1.创建服务器:Apache服务器(用于模拟 ...

  4. php jquery ajax xml,jquery Ajax解析XML数据代码实例

    jquery Ajax解析XML数据(同步及异步调用)简单实例 $.ajax({ async: true, // 默认true(异步请求) cache: true, // 默认true,设置为 fal ...

  5. java jsoup解析开彩网api接口json数据实例

    https://www.cnblogs.com/zdz8207/p/7288830.html 开彩网apiJava技术学习 https://www.itkc8.com json-lib-2.4-jdk ...

  6. python 报文解析_python解析DNS数据包实例代码

    例子,python解析DNS数据包. 代码示例: ###file QueryDNS.py## -*- coding: utf-8 -*- #Get DNS answer #详情见RFC 1035 im ...

  7. 解析jsonarra_使用JSONReader或JSONObject / JSONArray解析JSON数据

    我有一些JSON(如下所示),我试图解析整个JSON,每个对象将是一个声明下面变量的类的新实例.做这个的最好方式是什么?我应该使用JSONReader还是使用JSONObject和JSONArray. ...

  8. 每日一练:Python爬虫爬取全国新冠肺炎疫情数据实例详解,使用beautifulsoup4库实现

    Python 爬虫篇 - 爬取全国新冠肺炎疫情数据实例详解 效果图展示 第一章:疫情信息的下载与数据提取 ① 爬取页面数据到本地 ② json 字符串正则表达式分析 ③ 提取数据中的 json 字符串 ...

  9. 干货!表达式树解析框架(3)

    最新设计请移步 轻量级表达式树解析框架Faller http://www.cnblogs.com/blqw/p/Faller.html 这应该是年前最后一篇了,接下来的时间就要陪陪老婆孩子了 关于表达 ...

最新文章

  1. 【网络流24题】飞行员配对方案问题
  2. 用计算机制作演示文稿教案博客,制作演示文稿 教学反思
  3. 【POJ2387】Til the Cows Come Home (最短路)
  4. 物理数据模型(PDM)-概念数据模型 (CDM)-面向对象模型 (OOM):适用于已经设计好数据库表结构了。...
  5. HDFS查看异常:Operation category READ is not supported in state standby. Visit
  6. java 高德地图数据库_【爬虫】Java关于高德地图爬取数据
  7. 美团与饿了么“鸡同鸭讲”后,又可以通过设置继续使用支付宝了?
  8. 从SQL Server生成文档
  9. buuct 假如给我三天光明 misc_【习作园地】假如给我三天光明读后感
  10. RS232 DB9 计算机接口定义
  11. 白菜萝卜的做法 - 凉拌菜
  12. 河北安新复合型水稻 国稻种芯·中国水稻节:雄安生态示范区
  13. github 下载慢下载失败?不存在的!!!
  14. 奈何心是安定心,命总是流浪命
  15. IPFS如何冲击我们熟知的网络世界
  16. java中 continue outer, break inner 简解
  17. HashMap中hash(Object key)原理,为什么(hashcode >>> 16)。
  18. Django框架实现在线考试系统
  19. 【Scala】学习笔记三——面向对象
  20. 关于pip安装virtualenv虚拟环境出现的Permission denied问题及虚拟环境安装步骤

热门文章

  1. AXI总线技术简介——ZYNQ PS和PL的互联技术
  2. chart.js画图
  3. Contest-49-E PinkRabbit写情书
  4. Fatal error: Uncaught Error: Call to undefined function mysqli_content() in D:\phpstudy_pro\WWW\user
  5. 25.位运算(位与)进阶
  6. 如何切换不同的python环境
  7. 德勤2022技术趋势:IT自我颠覆、技术跨界融合创新
  8. 图片放大不影响画质怎么做?这样放大不失真
  9. [error] Vivado代码仿真时错误提示:ERROR: [Common 17-39] ‘launch_simulation‘ failed due to earlier errors.
  10. 典型webservice(c#)例程序-提取数据库数据