springboot中使用gdal将表中的空间数据转shapefile文件

devtools/2024/12/24 9:39:35/

springboot中使用gdal将表中的空间数据转shapefile文件

代码:

java">// 样本导出-将样本表导出为shapefile,复制样本shp文件到临时目录下  sampleDir是文件夹pathpublic void setYbShapeFile(Yb yb, File sampleDir) {// 创建 前时项 和 后时项 文件夹File ybDir = new File(sampleDir, "样本");ybDir.mkdirs();String tableName = yb.getLabelLayerName();boolean isYbLabelName = tableName != null && !tableName.equals("");String shapefileName = new File(ybDir, tableName + ".shp").getAbsolutePath();if (isYbLabelName) {// 查询数据SqlRowSet resultSet = jdbcTemplate.queryForRowSet("SELECT objectid, ST_AsText(shape) AS shape FROM " + tableName);// 使用GDAL库将查询到的数据转换为Shapefileogr.RegisterAll();Driver driver = ogr.GetDriverByName("ESRI Shapefile");if (driver == null) {throw new RuntimeException("GDAL 驱动加载失败: ESRI Shapefile");}DataSource ds = null;Layer layer = null;try {ds = driver.CreateDataSource(shapefileName);if (ds == null) {throw new RuntimeException("无法创建 Shapefile 数据源: " + shapefileName);}// 定义坐标参考系统(以 WGS 84 为例)SpatialReference srs = new SpatialReference();srs.ImportFromEPSG(4326);// 创建图层并指定参考系统layer = ds.CreateLayer(tableName, srs, ogr.wkbUnknown);if (layer == null) {throw new RuntimeException("无法创建图层: " + tableName);}// 定义字段,根据实际数据库字段调整layer.CreateField(new FieldDefn("objectid", ogr.OFTInteger));// 遍历结果集,添加要素到图层while (resultSet.next()) {Feature feature = new Feature(layer.GetLayerDefn());feature.SetField("objectid", resultSet.getInt("objectid"));// 获取几何数据并设置String wktGeometry = resultSet.getString("shape");if (wktGeometry != null && !wktGeometry.isEmpty()) {Geometry geom = ogr.CreateGeometryFromWkt(wktGeometry);if (geom == null) {throw new RuntimeException("无效的WKT几何: " + wktGeometry);}feature.SetGeometry(geom);}// 添加Feature到图层if (layer.CreateFeature(feature) != 0) {throw new RuntimeException("无法创建要素");}feature.delete(); // 释放资源}// 同步数据到磁盘layer.SyncToDisk();} catch (Exception e) {e.printStackTrace();throw new RuntimeException("导出Shapefile时发生错误: " + e.getMessage(), e);} finally {if (ds != null) {ds.delete(); // 确保数据源关闭}if (layer != null) {layer.delete(); // 显式释放图层资源}}}}

示例表:
在这里插入图片描述
转为shp文件后:
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/devtools/144943.html

相关文章

《探秘 QT 5.14.1 类库的奇妙世界》

《探秘 QT 5.14.1 类库的奇妙世界》 一、QT 5.14.1 类库简介1.1 跨平台特性1.2 整体框架构成 二、核心特点剖析2.1 元对象系统2.2 信号与槽的关联方式2.3 全局定义2.3.1 数据类型定义2.3.2 函数2.3.3 宏定义 三、常用类库功能展示3.1 QWidget 类库3.2 其他重要类库(…

【YashanDB知识库】jdbc查询st_geometry类型的数据时抛出YAS-00101错误

本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7802956.html?templateId1718516 问题现象 某客户的业务在通过YashanDB jdbc驱动查询含有st_geometry列的数据时,报如下异常:YAS-00101 cannot allocate 0 byte…

Python知识分享第三十四天-Pandas进阶

Pandas pandas读写sql表 import pandas import pandas as pd from sqlalchemy import create_engine import json import os os.chdir(rD:\code\ai_22_work\My_Numpy\day03) # 读取csv文件 df pd.read_csv(./data/csv示例文件.csv,encodinggbk,index_col0)# pandas读写sql表…

V900新功能-电脑不在旁边,通过手机给PLC远程调试网关配置WIFI联网

您使用BDZL-V900时,是否遇到过以下这种问题? 去现场配置WIFI发现没带电脑,无法联网❌ 首次配置WIFI时需使用网线连电脑,不够快捷❌ 而博达智联为解决该类问题,专研了一款网关配网工具,实现用户现场使用手机…

详解大模型多轮对话的输入和输出token序列

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学…

【机器学习】机器学习的基本分类-强化学习-模型预测控制(MPC:Model Predictive Control)

Model Predictive Control (MPC) Model Predictive Control (MPC),即模型预测控制,是一种基于优化的控制算法,广泛应用于工业、自动驾驶、机器人等领域。它通过预测未来系统的行为,并在线解决优化问题来获得控制输入,…

探索 Samba 服务器:搭建跨平台文件共享的桥梁

samba 介绍 samba最先是再Linux和Windows两个平台之间建立一个桥梁,使得Linux系统和Windows系统之间互相通信和传输内容,比如复制文件、实现不同操作系统之间的资源共享等。在实际应用中,可以将samba服务器设置成一个功能非常强大的文件服务器。 SMB协…

专题八:背包问题

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是记忆化搜索,并且掌握记忆化搜索算法。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早…