java使用geotools解析矢量数据kml、geojson、shp文件
geotools解析kml、geojson
- geotools环境准备
- 公共获取属性方法
- 解析kml
- 解析geojson
- 解析shp
geotools环境准备
这里使用的是maven引用geotools包,引用geotools包需要添加maven仓库,pom.xml文件如下:
<properties><!-- geotools版本 --><geotools-version>28.2</geotools-version>
</properties><!-- geotools-->
<dependency><groupId>org.geotools</groupId><artifactId>gt-main</artifactId><version>${geotools-version}</version>
</dependency>
<dependency><groupId>org.geotools</groupId><artifactId>gt-geojson</artifactId><version>${geotools-version}</version>
</dependency><!-- geotools-geojson核心包 -->
<dependency><groupId>org.geotools</groupId><artifactId>gt-geojson-core</artifactId><version>${geotools-version}</version>
</dependency>
<dependency><groupId>org.geotools.xsd</groupId><artifactId>gt-xsd-kml</artifactId><version>${geotools-version}</version>
</dependency><!-- geotools仓库-->
<repositories><repository><id>osgeo</id><name>Open Source Geospatial Foundation Repository</name><url>https://repo.osgeo.org/repository/release/</url></repository><repository><id>osgeo-snapshot</id><name>OSGeo Snapshot Repository</name><url>https://repo.osgeo.org/repository/snapshot/</url></repository>
</repositories>
公共获取属性方法
@Slf4j
public class AnalysisUtil {public static void readProperty(SimpleFeature simpleFeature) {Collection<Property> properties = simpleFeature.getProperties();Iterator<Property> iterator = properties.iterator();int index = 0;while (iterator.hasNext()) {Property property = iterator.next();//kml拿到属性值会有自带的9个属性if (index++ > 8) {log.info("GeoJSONReader解析geojson -->> 属性名:【{}】,属性值:【{}】,属性类型:【{}】", property.getName().toString(),property.getValue(), property.getType().getBinding());}}Object defaultGeometry = simpleFeature.getDefaultGeometry();//wkt格式geometryGeometry geometry = (Geometry) defaultGeometry;log.info("wkt格式geometry:{}", geometry);}
}
解析kml
KML(Keyhole Markup Language,Keyhole 标记语言)是一种基于XML 的标记语言,利用XML 语法格式描述地理空间数据(如点、线、面、多边形和模型等)。
public class AnalysisKml {public static void main(String[] args) {String fileUrl = "D:\\workspace\\vector\\vector\\KML.kml";try (FileInputStream fileInputStream = new FileInputStream(fileUrl)) {PullParser parser = new PullParser(new KMLConfiguration(), fileInputStream, SimpleFeature.class);SimpleFeature simpleFeature = (SimpleFeature) parser.parse();//kml文件声明了坐标系才能获取到,没声明获取就是nullCoordinateReferenceSystem coordinateReferenceSystem = simpleFeature.getFeatureType().getCoordinateReferenceSystem();log.info("解析kml获取坐标系:{}", coordinateReferenceSystem);readKml(simpleFeature, parser);} catch (XMLStreamException | IOException | SAXException e) {throw new UtilException(e.getMessage());}}//递归方式获取每个地块信息public static void readKml(SimpleFeature simpleFeature, PullParser parser) throws XMLStreamException, IOException,SAXException {//读取属性AnalysisUtil.readProperty(simpleFeature);//获取下一个simpleFeaturewhile (simpleFeature != null && simpleFeature.getDefaultGeometry() != null) {simpleFeature = (SimpleFeature) parser.parse();readKml(simpleFeature, parser);}}
}
解析geojson
GeoJSON 是一种用于编码各种地理数据结构的格式。
GeoJSON 支持以下几何类型:Point、LineString、Polygon、MultiPoint、MultiLineString 和 MultiPolygon。 具有附加属性的几何对象是特征对象。 要素集包含在FeatureCollection 对象中。
下面介绍2种解析geojson的方法:
- org.geotools.data.geojson.GeoJSONReader解析给geojson,但是它不会读取坐标系,所以不管什么坐标系的geojson文件读出来都是默认的坐标系WGS84.
- org.geotools.geojson.feature.FeatureJSON解析geojson可以读到文件对应的坐标系。
@Slf4j
public class GeoJsonAnalysis {public static void main(String[] args) {String fileUrl = "D:\\workspace\\vector\\vector\\福田路网geojson.geojson";geoJSONReader(fileUrl);featureJson(fileUrl);}public static void featureJson(String fileUrl) {// 指定GeometryJSON构造器,15位小数FeatureJSON featureJson = new FeatureJSON(new GeometryJSON(15));try {FeatureCollection featureCollection = featureJson.readFeatureCollection(new FileInputStream(fileUrl));//获取坐标系CoordinateReferenceSystem coordinateReferenceSystem =featureCollection.getSchema().getCoordinateReferenceSystem();log.info("解析geojson获取坐标系:{}", coordinateReferenceSystem);FeatureIterator featureIterator = featureCollection.features();while (featureIterator.hasNext()) {SimpleFeature simpleFeature = (SimpleFeature) featureIterator.next();AnalysisUtil.readProperty(simpleFeature);}} catch (IOException e) {e.printStackTrace();}}public static void geoJSONReader(String fileUrl) {GeoJSONReader reader = null;try {reader = new GeoJSONReader(new FileInputStream(fileUrl));SimpleFeatureCollection featureCollection = reader.getFeatures();//创建图层数据迭代器FeatureIterator<SimpleFeature> simpleFeatureFeatureIterator = featureCollection.features();while (simpleFeatureFeatureIterator.hasNext()) {AnalysisUtil.readProperty(simpleFeatureFeatureIterator.next());}} catch (IOException e) {e.printStackTrace();} finally {if (reader != null) {try {reader.close();} catch (IOException e) {e.printStackTrace();}}}}
}
解析shp
shp文件解析请看往期文章:geotoolsu解析shp文件
相关文章:
java使用geotools解析矢量数据kml、geojson、shp文件
geotools解析kml、geojson geotools环境准备公共获取属性方法解析kml解析geojson解析shp geotools环境准备 这里使用的是maven引用geotools包,引用geotools包需要添加maven仓库,pom.xml文件如下: <properties><!-- geotools版本 -…...
原生 JS DOM 常用操作大全
DOM DOM文档对象模型 又称为DOM树 DOM树 由文档、元素、节点 组成文档:一个页面就是一个文档,元素:文档中的所有标签都称为元素。DOM中使用Element表示节点:文档中的所有内容,在文档中都是节点(标签、属性…...
昇腾CANN 7.0 黑科技:DVPP硬件加速训练数据预处理,友好解决Host CPU预处理瓶颈
在NPU/GPU上进行模型训练计算,为了充分使用计算资源,一般采用批量数据处理方式,因此一般情况下为提升整体吞吐率,batch值会设置的比较大,常见的batch数为256/512,这样一来,对数据预处理处理速度…...
Aria2 任意文件写入漏洞复现
漏洞描述 Aria2 是一款轻量级、多协议、多源下载工具(支持 HTTP/HTTPS、FTP、BitTorrent、Metalink),内置 XML-RPC 和 JSON-RPC 接口。 我们可以使用 RPC 接口来操作 aria2 并将文件下载到任意目录,从而造成任意文件写入漏洞。 …...
思维模型 多看效应
本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。越熟悉,越喜欢。 1 多看效应的应用 1.1 多看效应在广告和营销领域的应用 1 可口可乐之歌 可口可乐公司在 20 世纪 60 年代推出了“可口可乐之歌”广告,这个广告通…...
持续集成交付CICD:Jenkins Pipeline与远程构建触发器
目录 一、实验 1.Jenkins Pipeline本地构建触发器 2.Jenkins Pipeline与远程构建触发器(第一种方式) 3.Jenkins Pipeline与远程构建触发器(第二种方式) 4.Jenkins Pipeline与远程构建触发器(第三种方式࿰…...
【无标题(PC+WAP)花卉租赁盆栽绿植类pbootcms站模板
(PCWAP)花卉租赁盆栽绿植类pbootcms网站模板 PbootCMS内核开发的网站模板,该模板适用于盆栽绿植网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可; PCWAP,同一个后台,数据即时同步&…...
pytorch 学习率衰减策略
##学习率衰减策略 import torch.nn.functional as F import torch import torch.nn as nn import matplotlib.pyplot as plt#初始化模型 class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 = nn.Conv2d(1, 10, kernel_size=5)self.conv2 = nn.Co…...
Flink SQL -- 概述
1、Flink SQL中的动态表和连续查询 1、动态表: 因为Flink是可以做实时的,数据是在不断的变化的,所以动态表指的是Flink中一张实时变换的表,表中会不断的有新的数据。但是这张表并不是真正的物理表。 2、连续查询: 连续…...
Spring RabbitMQ那些事(1-交换机配置消息发送订阅实操)
目录 一、序言二、配置文件application.yml三、RabbitMQ交换机和队列配置1、定义4个队列2、定义Fanout交换机和队列绑定关系2、定义Direct交换机和队列绑定关系3、定义Topic交换机和队列绑定关系4、定义Header交换机和队列绑定关系 四、RabbitMQ消费者配置五、RabbitMQ生产者六…...
C++动态库
C动态库 动态库文件(Dynamic Link Library,DLL)是程序在运行时所需要调用的库。静态库文件是程序在编译时所需要调用的库。 1 环境介绍 VS版本:VS2017 编程语言:C 2 功能介绍 使用VS2017项目模板创建C动态库生成…...
【教3妹学编程-算法题】2923. 找到冠军 I
3妹:2哥2哥,你看到新闻了吗?襄阳健桥医院院长 公然“贩卖出生证明”, 真是太胆大包天了吧。 2哥 : 我也看到新闻了,7人被采取刑事强制措施。 就应该好好查查他们, 一查到底! 3妹:真的…...
矢量图形编辑软件Boxy SVG mac中文版软件特点
Boxy SVG mac是一款基于Web的矢量图形编辑器,它提供了一系列强大的工具和功能,可帮助用户创建精美的矢量图形。Boxy SVG是一款好用的软件,并且可以在Windows、Mac和Linux系统上运行。 Boxy SVG mac软件特点 简单易用:Boxy SVG的用…...
神经网络遗传算法函数极值寻优
大家好,我是带我去滑雪! 对于未知的非线性函数,仅仅通过函数的输入和输出数据难以寻找函数极值,这一类问题可以通过神经网络结合遗传算法求解,利用神经网络的非线性拟合能力和遗传算法的非线性寻优能力寻找函数极值。 …...
剑指JUC原理-16.读写锁
👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码🔥如果感觉博主的文章还不错的话,请👍三连支持&…...
文件改名:避免繁琐操作,利用筛选文件批量重命名技巧优化文件管理
在我们的日常生活和工作中,我们经常需要处理大量的文件,从文档、图片到音频和视频等。在这些情况下,一个高效的文件管理策略至关重要。文件重命名的必要性主要体现在两个方面。首先,对于大量文件,手动进行重命名不仅费…...
【CocoaPods安装环境和流程以及各种情况】
CocoaPods 环境HomebrewRubyrbenvRubyGems 和 Bundler安装Ruby管理Ruby更新Ruby替换Ruby镜像方式1方式2 CocoaPods安装CocoaPodsCocoaPods使用安装的一些问题单元测试引用问题 参考的链接 环境 Homebrew $ brew --config *可以发现打印有下面一行: Homebrew Ruby: …...
canvas与svg区别与实际应用
Canvas和SVG都是HTML5中的绘图技术。但是两者的实现方式和使用场景有所不同。 Canvas是HTML5中的绘图API,它提供了一套基于像素的绘图工具,可以通过JavaScript来实现动态的图形和动画。Canvas提供的绘图功能强大,可以绘制出复杂的图像和动画…...
rasa train nlu详解:1.1-train_nlu()函数
本文使用《使用ResponseSelector实现校园招聘FAQ机器人》中的例子,主要详解介绍train_nlu()函数中变量的具体值。 一.rasa/model_training.py/train_nlu()函数 train_nlu()函数实现,如下所示: def train_nlu(config: Text,nlu_data: Op…...
使用ResponseSelector实现校园招聘FAQ机器人
本文主要介绍使用ResponseSelector实现校园招聘FAQ机器人,回答面试流程和面试结果查询的FAQ问题。FAQ机器人功能分为业务无关的功能和业务相关的功能2类。 一.data/nlu.yml文件 与普通意图相比,ResponseSelector训练数据中的意图采用group/intent格…...
工业现场总线 (PROFINET/Modbus) 工控主板怎么选?协议适配与通信稳定性详解
工业现场总线是连接工业现场设备和控 制 系统的桥梁,是工业自动化系统的重要组成部分。目前,市场上存在多种工业现场总线标准,其中 PROFINET 和 Modbus 是应用很广泛的两种。PROFINET 作为新一代的工业以太网总线,以其高速、实时、…...
不止于预览:用docx-preview + Vue2打造一个可搜索、可高亮的简易在线文档阅读器
不止于预览:用docx-preview Vue2打造企业级文档阅读器 在数字化办公场景中,Word文档的在线预览已成为基础需求,但大多数解决方案仅停留在静态展示层面。当我们需要在合同管理系统、知识库平台或内部文档中心实现精准定位关键条款、快速检索业…...
【SCI仿真】一种改进的适应性步长PO MPPT方法,用于带有电池站的独立光伏系统附Simulink仿真
✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…...
从期末考题到实战:聊聊计算机视觉在农业里的那些‘接地气’应用(附霍夫变换、RANSAC代码)
计算机视觉如何重塑现代农业:从算法原理到田间代码实践 当无人机掠过郁郁葱葱的苹果园,摄像头捕捉到的不仅是美丽的田园风光,更是数以万计待分析的图像数据点。这些看似普通的果园巡检画面,背后隐藏着霍夫变换对果梗的精准定位、R…...
[FPGA]Spartan6 Uart固定波特率读写JY901P惯导模块
这版本是固定波特率,无法修改串口波特率,无法恢复出厂设置(出厂设置会更改波特率到9600,除非固定波特率一开始设置为9600,其他写命令都可以成功写入)。 1. JY901P交互协议 这个是JY901P惯导模块串口的交互…...
当AI搜索引擎开始替用户做消费决策,品牌的媒介宣发逻辑也正在被彻底改写
去年年底,联合利华CEO在内部会上说了句话,传出来后不少品牌人都在转。他说“懒惰营销的时代已经结束了”,一年只拍几条广告、围绕几个新品做营销的传统打法,已经彻底失效。这话放在2026年的媒介宣发语境下,几乎是一份判…...
TortoiseSVN与BeyondCompare高效协作:从配置到实战的完整指南
1. 为什么需要TortoiseSVN与BeyondCompare集成 如果你经常使用TortoiseSVN进行版本控制,肯定遇到过内置差异查看器不够直观的问题。默认的diff工具只能显示简单的文本对比,对于代码变更的识别效率很低。而BeyondCompare作为专业的文件对比工具࿰…...
深入剖析UVM Sequence机制:从基础使用到源码实现
1. UVM Sequence机制基础入门 第一次接触UVM Sequence时,我完全被它复杂的机制搞懵了。直到在实际项目中踩过几次坑后,才真正理解它的精妙之处。Sequence机制是UVM验证平台中最核心的激励生成方式,它就像是一个智能的"激励工厂"&am…...
突破某音新版SSL Pinning:无需Frida的SO层Patch方案
1. 为什么传统方法失效了? 最近不少做逆向分析的朋友都在抱怨,某音新版突然抓不到包了。明明已经配置好了抓包环境,甚至用上了Frida和JustTrustMe这类工具,结果发现这次某音压根没走系统SSL库,而是自己实现了一套校验机…...
致远OA A8 htmlofficeservlet 漏洞深度剖析:从原理到实战利用链还原
1. 漏洞背景与影响范围 致远OA A8系统作为国内广泛使用的企业协同办公平台,其htmlofficeservlet组件曝出的任意文件上传漏洞堪称近年来最具破坏力的漏洞之一。我在实际渗透测试中发现,攻击者无需任何身份认证,仅需发送特制POST请求就能在目标…...
