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格…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
