Java使用Mybatis获取数据库Geometry

Java使用Mybatis获取数据库Geometry

方案A 使用ST_AsText(l.coordinates) 查询速度会慢因转换字符串数据大小会大

将几何对象转换为文本

mapper层

select ST_AsText(coordinates) as 'coordinates' from table1

domain 层

public class Entry implements Serializable {private Long id;private String coordinates;private String name;//省略set get 构造方法
}

方案B 获取geometry的字节流

首先来说我们Mybatis是不支持获取Geometry的,如果我们想要获取到那么就要以byte[]字节流的方式获取这个Geometry字段,然后在将字节流删除前4位转换为十六进制,然后在通过Geo工具如 org.geotools.data.postgis.WKBReader or com.vividsolutions.jts.io.WKBReader or org.locationtech.jts.io.WKBReader 进行转换为我们数据库所对应的Geometry数据。

为什么删除前4位

因为Mysql的Geometry存放的是WKB格式,前4位是SRID值,所以需要删除前4位再去进行处理。

SRID是“空间参考标识符” (Spatial Reference Identifier)

数据库查询代码

@Select("SELECT coordinates FROM locations")
public List<Entry> getall();

实体类方法

public class Entry implements Serializable {private Long id;private byte[] coordinates;private String name;//省略set get 构造方法
}

转换业务方法

		//测试@GetMapping("/test")public String test() throws SQLException, IOException, ParseException {//从数据库获取GeometryList<Entry> getall = testMapper.getall();//封装好返回给前端的GeometryList<Geometry> list = new ArrayList<>();//处理数据转换从字节流转换为我们想要的Geometryfor (Entry entry : getall) {byte[] coordinates = entry.getCoordinates();String string = byteArrayToHexString(coordinates);Geometry geometry = bytesToGeometry(string);list.add(geometry);}return list.toString();}//下面的代码不要碰private static String byteArrayToHexString(byte[] bytes) {StringBuilder result = new StringBuilder();for (int i = 4; i < bytes.length; i++) {result.append(String.format("%02X", bytes[i]));}return result.toString();}private static org.locationtech.jts.geom.Geometry bytesToGeometry(String geomBytes) {byte[] bytes =  WKBReader.hexToBytes(geomBytes);//用org.geotools.data.postgis.WKBReader 或者com.vividsolutions.jts.io.WKBReader、org.locationtech.jts.io.WKBReader转都okorg.locationtech.jts.geom.Geometry geo = null;try {WKBReader wkbReader = new  WKBReader();geo = wkbReader.read(bytes);//System.out.println("geotools: " + geo.getCoordinates().length);} catch (ParseException e) {//System.err.println("geotoolsError: " + e.getMessage());}
//
//        try {
//            com.vividsolutions.jts.io.WKBReader wkbReader1 = new com.vividsolutions.jts.io.WKBReader();
//            Geometry geometry = wkbReader1.read(bytes);
//            System.out.println("vividsolutions: " + geometry.getCoordinates().length);
//        } catch (ParseException e) {
//            System.err.println("vividsolutionsError: " + e.getMessage());
//        }
//
//        try {
//            org.locationtech.jts.io.WKBReader wkbReader2 = new org.locationtech.jts.io.WKBReader();
//            org.locationtech.jts.geom.Geometry geometry = wkbReader2.read(bytes);
//            System.out.println("locationtech: " + geometry.getCoordinates().length);
//        } catch (org.locationtech.jts.io.ParseException e) {
//            System.err.println("locationtechError: " + e.getMessage());
//        }return geo;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/615641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cesium 实战 - 模型亮度调整,自定义着色器(CustomShader)完美解决模型太暗的问题

Cesium 实战 - 自定义视频标签展示视频 模型变暗问题以往通过光线解决问题模型变暗原理解决问题完整代码在线示例在 Cesium 项目中,添加模型是比较基础的功能,Cesium 支持 glTF(GBL) 格式。 在实际应用中,经常会遇到模型特别暗的情况,对比而言,其他三维环境添加是正常的…

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-5稳定性stability-李雅普诺夫Lyapunov

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-5稳定性stability-李雅普诺夫Lyapunov Stability in the sense of Lyapunov Assympototic Stability

怎么做微信秒活动_掀起购物狂潮,引爆品牌影响力

微信秒杀活动&#xff1a;掀起购物狂潮&#xff0c;引爆品牌影响力 在数字化时代&#xff0c;微信已经成为人们日常生活中不可或缺的一部分。作为中国最大的社交媒体平台&#xff0c;微信不仅为人们提供了便捷的通讯方式&#xff0c;还为商家提供了一个广阔的营销舞台。其中&a…

借助小redbook.item_get_video API:电商如何增强客户体验

随着电商市场的竞争日益激烈&#xff0c;客户体验成为了电商企业能否在市场中立足的关键因素之一。如何提高客户体验&#xff0c;增加用户黏性&#xff0c;成为电商企业亟待解决的问题。小redbook.item_get_video API作为一种强大的电商个性化营销工具&#xff0c;可以帮助电商…

基于SpringBoot的医护人员排班系统(代码+数据库+文档)

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目 希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;一、研究背景 1.1 研究背景 随…

使用OTB数据集需要注意的一个问题

一般网上下载的otb100数据集只要98给序列&#xff0c;这样就会导致在跑数据集的时候出现错误。 需要进行修改&#xff0c;下面链接里面的是我在网上收集到的一个修改后的数据集&#xff0c;有100个视频序列。 otb100提取码&#xff1a;z4tp 除了上面这一步&#xff0c;有的还需…

JC/T 2080-2011 木铝复合门窗检测

木铝复合门窗是指由铝合金型材和实木型材镶装构成的木铝复合型材制作的门窗。 JC/T 2080-2011 木铝复合门窗检测项目 测试项目 测试标准 表面质量 JC/T 2080 装配质量 JC/T 2080 木材含水率 GB/T 1931 甲醛释放量 GB 18580 启闭力 GB/T 9158 反复启闭性能 JG/T 1…

Visual Studio 2017 “无法查找或打开PDB文件“ 解决方法

运行的时候提示无法查找或打开PDB文件 解决办法&#xff08;注意&#xff1a;必须使用管理员身份运行VS&#xff09; 第一步 打开调试窗口的选项 第二步 调试——>常规——>勾选启用源服务器支持 它会弹出警告窗口&#xff0c;点“是”即可 第三步 调试——>符号——…

记录误删除docker中极狐gitlab容器恢复过程

如题一次误操作导致删除了docker中极狐gitlab容器恢复过程 情况说明 创建容器时&#xff0c;我是用的是极狐官网推荐安装的步骤&#xff0c;具体按照官网步骤走就行 sudo docker run --detach \--hostname gitlab.example.com \--publish 443:443 --publish 80:80 --publish …

华为OD机试 - 反射计数(Java JS Python C)

题目描述 给定一个包含 0 和 1 的二维矩阵。 给定一个初始位置和速度,一个物体从给定的初始位置出发,在给定的速度下进行移动,遇到矩阵的边缘则发生镜面发射。 无论物体经过 0 还是 1,都不影响其速度。 请计算并给出经过 t 时间单位后,物体经过 1 点的次数。 矩阵以左…

web网页首页布局

效果展示&#xff1a; html代码&#xff1a; <!doctype html> <html> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge,chrome1"> <meta name"viewport" content&qu…

【C语言题解】 | 144. 二叉树的前序遍历

144. 二叉树的前序遍历 144. 二叉树的前序遍历代码 144. 二叉树的前序遍历 提示&#xff1a; 树中节点数目在范围 [0, 100] 内 函数原型&#xff1a; int* preorderTraversal(struct TreeNode* root, int* returnSize) {首先先观察一下这个函数原型&#xff0c;TreeNode* roo…

亿胜盈科HT4822 160mW免输出电容立体声耳机放大器

HT4822是一款无需输出隔直电容的立体声耳机放大器。支持差分和单端的模拟信号输入。 在3.6V供电下&#xff0c;THDN 1%&#xff0c;32ohm负载时能提供80mW的输出。其具有低至0.007%的THDN。 HT4822能在2.5V-6.0V电源条件下工作&#xff0c;具有过热保护和欠压保护等功能。 …

C语言与lua通过json对象交互

C语言调用Lua&#xff0c;传递一个JSON字符串&#xff0c;并将其解析为table&#xff0c;并返回一个JSON串给C语言。 在使用C语言调用Lua的过程中&#xff0c;有时需要向Lua传递一些数据&#xff0c;并从Lua接收返回结果。为了实现这个功能&#xff0c;我们可以借助第三方库&a…

记录一次数据中包含转义字符\引发的bug

后端返回给前端的数据是: { "bizObj": { "current": 1, "orders": [ ], "pages": 2, "records": [ { "from": "1d85b8a4bd33aaf99adc2e71ef02960e", …

deepin安装protobuf(3.22前版本可以使用此方法安装)

deepin安装protobuf 下载protobuf编译安装 下载protobuf protobuf版本&#xff1a;https://github.com/protocolbuffers/protobuf/releases 选择你要下载的版本我这里使用的是这个URL&#xff1a;https://github.com/protocolbuffers/protobuf/releases/v21.12 点击下载的版…

多协议数据库Navicat Premium中文

Navicat Premium是一款强大的数据库管理和开发工具&#xff0c;支持多种数据库系统&#xff0c;如MySQL、Oracle、SQL Server、PostgreSQL等。它提供了一个直观的图形用户界面&#xff0c;使开发者可以轻松地创建、管理和维护数据库。Navicat Premium具有强大的数据建模、查询、…

java JDBC 连接数据库(增删查改)

必须先插入工具包 代码 public static void main(String[] args) {DataSource ds JdbcHelper.getDs();System.out.println(ds);JdbcTemplate jdbcTemplatenew JdbcTemplate(ds);System.out.println(jdbcTemplate);//新增String sql1"insert into biao values(null,?,?,…

高阶智驾,开打「硬核」战

一直以来&#xff0c;高阶智驾的「规模化普及」何时到来&#xff0c;硬件的「军备竞赛」和系统「降本增效」长期处于博弈状态。 其中&#xff0c;作为关键环节之一&#xff0c;传感器配置以及相应的感知算法技术迭代升级是最具看点的部分。以特斯拉、百度Apollo为代表的纯视觉技…

C++ 点云模型mesh PLY格式转成点云PCD格式

目录 一、代码示例二、结果示例适用:点云模型数据转成点云数据(即:PLY格式转PCD格式,STL格式转pcd格式) 一、代码示例 #include <iostream> #include <pcl/io/io.h> #include <pcl/io/vtk_lib_io.h>