向clickhouse插入一段由经纬度构成的路径

news2024/11/27 11:36:40

目录

  • 背景
  • 粗暴简单字符串
    • 示例
  • 数组套数组
    • 示例
  • LineString+WKT来帮忙
  • 参考资料

背景

现有一条路,这条路由好几段路段构成,每个路段又由一些轨迹点先后连接而成,且这些轨迹点数量不固定,有些路段由10个轨迹点连接而成,有些路段由30个轨迹点连接而成,而有些只由2个轨迹点连接而成,每个轨迹点又由一对经纬度组成,想办法把这些轨迹点存入clickhouse里,一般有以下三种方法。

  • 方法一 粗暴简单字符串

  • 方法二 数组套数组

  • 方法三 LineString+WKT来帮忙

粗暴简单字符串

也许你会抱怨,又给我整字符串,感觉字符串就是万精油,这不,在处理经纬度路径数据也能用得上,可以这么去想,让某路段的所有轨迹点都做成一个字符串,笼统的塞进某个字段里面去便是,只是后期取数的时候略微麻烦,需要tolist改过来。

示例

  • 建表
CREATE TABLE ods_car.ads_roadTrajectory1_local on cluster cluster_1shards_3replicas
(
    `id` Int32 COMMENT '路段号',
    `segment_trajectory` String COMMENT '路段中的轨迹点'
)
ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/{shard}/ads_roadTrajectory1_local',
 '{replica}')
ORDER BY id
SETTINGS storage_policy = 'three_tier',
 index_granularity = 8192;


CREATE TABLE ods_car.ads_roadTrajectory1 on cluster cluster_1shards_3replicas
(
    `id` Int32 COMMENT '路段号',
    `segment_trajectory` String COMMENT '路段中的轨迹点'
)
ENGINE = Distributed('cluster_1shards_3replicas',
 'ods_car',
 'ads_roadTrajectory1_local',
 rand());
  • 查表
select id, segment_trajectory
from ods_car_network.ads_roadTrajectory1;

此时应该是一个由2个字段构成的空表。

  • 插入数据
INSERT INTO ods_car_network.ads_roadTrajectory1(id,segment_trajectory)
VALUES(
1,  
'[[109.97939898149895, 39.310716681169026],[109.9793989813902, 39.310715680670924]]'
);
  • 验证
select id, segment_trajectory, toTypeName(segment_trajectory)
from ods_car_network.ads_roadTrajectory1;

在这里插入图片描述
可以看到segment_trajectory字段的类型是String。

数组套数组

如果点的经纬度在前期就被写成数组结构,一个点一对经纬度对,一个2个元素组成的数组,都是如下这样的

[ 116.397128 , 39.916527 ] [116.397128, 39.916527] [116.397128,39.916527]

那么,可以使用ClickHouse的Array类型来存储。path列是Array类型,用于存储经纬度点的数组。

示例

  • 建表
CREATE TABLE ods_car.ads_roadTrajectory1_local on cluster cluster_1shards_3replicas
(
    `id` Int32 COMMENT '路段号',
    `segment_trajectory` Array(Array(Float32)) COMMENT '路段中的轨迹点'
)
ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/{shard}/ads_roadTrajectory1_local',
 '{replica}')
ORDER BY id
SETTINGS storage_policy = 'three_tier',
 index_granularity = 8192;

CREATE TABLE ods_car.ads_roadTrajectory1 on cluster cluster_1shards_3replicas
(
    `id` Int32 COMMENT '路段号',
    `segment_trajectory` Array(Array(Float32)) COMMENT '路段中的轨迹点'
)
ENGINE = Distributed('cluster_1shards_3replicas',
 'ods_car',
 'ads_roadTrajectory1_local',
 rand());
  • 查表
select id, segment_trajectory
from ods_car_network.ads_roadTrajectory1;

查询结果1

  • 插入数据
INSERT INTO ods_car.ads_roadTrajectory1(id,segment_trajectory)
VALUES(
1,  
[[109.97939898149895, 39.310716681169026],[109.9793989813902, 39.310715680670924]]
);

此时,可以再次查表看一下效果

插入数据效果

segment_trajectory列是Array类型,用于存储经纬度点的数组。该路径由2个点组成,分别是(109.97939898149895, 39.310716681169026)、(109.9793989813902, 39.310715680670924)。

如果要查询path表中所有路径的ID、名称和经纬度点,可以使用以下示例查询语句

SELECT id, segment_trajectory FROM ods_car.ads_roadTrajectory1;

这个语句将查询ads_roadTrajectory1表中所有路径的ID、和构成这个路径的经纬度点对,在结果中,经纬度点以数组形式返回,方便其他脚本语音如python索引提取。

LineString+WKT来帮忙

在ClickHouse中,可以使用GeoSpatial数据类型来存储经纬度点的路径。GeoSpatial数据类型支持存储点、线和多边形等地理空间数据,需要提前安装安装Geospatial扩展,该扩展提供了许多地理空间数据类型和函数,包括LineString类型。

CREATE DATABASE IF NOT EXISTS geospatial;
USE geospatial;
CREATE TABLE dummy (dummy UInt8) ENGINE = Memory;
INSERT INTO dummy VALUES (1);
INSTALL EXTENSION geospatial;

安装好拓展后,对于一段有经纬度点的路径,可以使用LineString类型来存储。LineString是由多个点组成的线段,可以表示路径或路线。每个点由经度和纬度两个值组成。

以下是一个示例表结构,用于存储经纬度点的路径:

CREATE TABLE path (
id UInt64,
name String,
path LineString
) ENGINE = MergeTree()
ORDER BY id;

在这个表中,id和name是普通的列,用于存储路径的ID和名称。path列是LineString类型,用于存储路径的经纬度点。

可以使用WKT(Well-Known Text)格式来插入和查询LineString类型的数据。以下是一个示例插入语句:

INSERT INTO path VALUES (1, 'path1', 'LINESTRING(116.397128 39.916527, 116.397524 39.917081, 116.398129 39.917441)');

这个语句将一条名为path1的路径插入到path表中。该路径由三个点组成,分别是(116.397128, 39.916527)、(116.397524, 39.917081)和(116.398129, 39.917441)。

可以使用ST_AsText函数将LineString类型的数据转换为WKT格式。以下是一个示例查询语句:

SELECT id, name, ST_AsText(path) FROM path;

这个语句将查询path表中所有路径的ID、名称和经纬度点,并将经纬度点转换为WKT格式。

注,使用Geospatial扩展需要在ClickHouse服务器上安装GEOS库,如果您没有安装GEOS库,请先安装它,并且确保有相应的权限,否则会报错

 Code: 50, e.displayText() = DB::Exception: Unknown data type family: LineString. 

参考资料

1,https://blog.csdn.net/u010882234/article/details/130588280
2,https://blog.csdn.net/PengPengBlog/article/details/80142485

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

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

相关文章

13 MCMC——马尔可夫链蒙特卡洛

文章目录 13 MCMC——马尔可夫链蒙特卡洛13.1 MCMC的意义13.2 简单采样方法介绍13.2.1 概率分布采样13.2.2 Rejection Sampling——拒绝采样13.2.3 Importance Sampling——重要性采样 13.3 Markov Chain知识补充13.3.1 Markov Chain定义13.3.2 Markov Chain性质——平稳分布13…

javaScript蓝桥杯----猜硬币

目录 一、介绍二、准备三、目标四、代码五、完成 一、介绍 为了打发无聊的时间,小蓝开发了一款人机对战的猜硬币游戏,页面中一共有 9 个杯子,系统会随机挑选 3 个杯子在里面放入硬币,玩家通过输入含有杯子序号的字符串进行猜选&a…

基于Python班级管理系统毕业设计-附源码171809

目 录 摘要 1 绪论 1.1研究背景 1.2研究的目的与意义 1.3系统开发技术的特色 1.4论文结构与章节安排 2 基于Python班级管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.3.2数据修改流程 2.3.3数据删除流程 2.3 系统功能分析 2.3.1 功能性…

【考点】CKA 08_Kubernetes工作负载与调度 关系调度 nodeSelector 亲和性和反亲和性 污点 节点驱离与下线

文章目录 考试题目:deployment 扩容(扩容命令)1. Kubernetes 调度器1.1 调度概览1.2 kube-scheduler1.3 kube-scheduler 调度流程 2. Kubernetes 关系调度2.1 节点标签2.2 节点隔离/限制2.3 nodeName 字段2.3.1 准备工作2.3.2 创建使用 nodeN…

深度学习-第T10周——数据增强

深度学习-第T10周——数据增强 深度学习-第T10周——数据增强一、前言二、我的环境三、前期工作1、导入数据集2、查看图片数目 四、数据预处理1、 加载数据1.1、设置图片格式1.2、划分训练集1.3、划分验证集1.4、查看标签1.5、再次检查数据1.6、配置数据集 2、数据可视化 五、数…

硬件设计电源系列文章-DCDC转换器基础知识

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示:这里可以添加技术概要 本文主要接着上篇,上篇文章主要讲述了LDO的相关基础知识,本节开始分享DCDC基础知识 整体架构流程 提示:这里可以添加技术整体架构 以下是…

ROS学习——通信机制(话题通信②—订阅方实现)

2.1 话题通信 Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 042话题通信(C)3_订阅方实现_Chapter2-ROS通信机制_哔哩哔哩_bilibili 1.新建demo02_sub.cpp文件,搭建框架 2.包含头文件 3.初始化ROS节点 cuiHua——节点名称,具有唯一性 4.创…

一小时让你Get到面试套路:记一次Java初中级程序员面试流程梳理

视频教程传送门: 一小时让你Get到面试套路:记一次Java初中级程序员面试流程梳理_哔哩哔哩_bilibili听了N多个师兄师姐的面试录音,采访了N多个师兄时间的面试经历,才总结出来的java面试流程,非常适合正在准备面试的你。…

【7 微信小程序学习 - 小程序的系统API调用,网络请求封装】

1 网络请求 – 原生 请求数据,保存数据 1 原生请求 Page({data: {allCities: {},houselist: [],currentPage: 1},async onLoad() {// 1.网络请求基本使用wx.request({url: "http://codercba.com:1888/api/city/all",success: (res) > {//保存数据const data res…

企业级在线办公系统搭建开发环境

目录 介绍 搭建开发环境 安装MySQL数据库 安装Redis程序 安装MongoDB数据库 安装RabbitMQ 安装JDK 安装Maven环境 安装Node.js程序 安装HbuilderX工具 MacOS环境的程序安装 安装Docker环境 安装MySQL数据库 安装MongoDB数据库 安装Redis程序 安装RabbitMQ 学习…

【Python 匿名函数】零基础也能轻松掌握的学习路线与参考资料

Python 匿名函数是一种特殊的函数,也称为 lambda 函数。它允许我们创建一种简单的函数,一行代码就可以搞定。可能你会发现,在使用Python时,经常可以看到lambda关键字,以lambda开头的就是匿名函数。本文将详细介绍Pytho…

在一台电脑上配置多个Git账号,工作、生活两不误

文章目录 先 Unset global 配置生成 SSH Key 并配置到 GitHub多账号用 config 管理 先 Unset global 配置 任意文件夹下 Git Bash Here 然后输入如下命令来 unset git config --global --unset user.name git config --global --unset user.email git config --global --unset…

LabVIEW编程开发汽油中各种掺假物浓度⽔平的检测

LabVIEW编程开发汽油中各种掺假物浓度⽔平的检测 主要目的是使用LabVIEW中的密度法找到汽油中掺杂物的浓度。已经对许多技术进行了研究,以发现汽油中的掺杂物。例如蒸馏试验、化学制造商试验、蒸发试验、气相色谱法可以专门测量掺杂物。甚至有数字密度计来测量汽油…

深圳旧改投资_一秒读懂什么是确权?物业权利人核实的基础要点。

权利人核实常见问题 为什么要做历史违建物业权利人核实? 2021年3月1日正式实施的《深圳经济特区城市更新条例》,区城市更新部门应当在物业权利人更新意愿核实阶段组织区规划土地监察机构、辖区街道办事处和原农村集体经济组织继受单位对历史违建物业权…

【数据可视化】数据可视化Canvas

1、了解Canvas ◼什么是Canvas ---- Canvas 最初由Apple于2004 年引入,用于Mac OS X WebKit组件,为仪表板小部件和Safari浏览器等应用程序提供支持。后来,它被Gecko内核的浏览器(尤其是Mozilla Firefox)&#xff0c…

上位机Qt应用程序与MCU板子之间的串口数据传输算法,举例1字节、2字节、4字节正负数。再加qDebug的重定向显示打印数据。

串口之间的数据传输算法 前言【1】Qt界面设计图【2】串口char型举例串口收发正数举例串口收发负数举例 【3】串口short 型举例大端序和小端序 串口收发正数举例串口收发负数举例 【4】串口int型举例串口收发正数举例串口收发负数举例串口收发正负数(简洁版推荐&…

大数据分析的Python实战指南:数据处理、可视化与机器学习【上进小菜猪大数据】

上进小菜猪,沈工大软件工程专业,爱好敲代码,持续输出干货。 引言: 大数据分析是当今互联网时代的核心技术之一。通过有效地处理和分析大量的数据,企业可以从中获得有价值的洞察,以做出更明智的决策。本文将…

Mujoco210 Ubuntu 22.04配置安装(一)

目录 .1 下载 1.1 解压 1.2 许可问题 1.3 环境配置 1.4 测试mujoco .2 安装mujoco-py 2.1 conda激活虚拟环境\或新创建一个环境 2.2 下载mujoco-py ​编辑 2.3 配置环境变量 2.4 测试mujoco-py 2.5 测试时的一些报错处理 2.5.0 command /usr/bin/gcc failed with…

Linux操作系统——第三章 基础IO

目录 接口介绍 open 文件描述符fd 0 & 1 & 2 文件描述符的分配规则 重定向 FILE 理解文件系统 inode ​编辑 理解硬链接 软链接 动态库和静态库 静态库与动态库 生成静态库 库搜索路径 生成动态库 使用动态库 运行动态库 使用外部库 接口介绍 o…

(顶刊复现)配电网两阶段鲁棒故障恢复(matlab实现)

参考文献: X. Chen, W. Wu and B. Zhang, "Robust Restoration Method for Active Distribution Networks," in IEEE Transactions on Power Systems, vol. 31, no. 5, pp. 4005-4015, Sept. 2016, doi: 10.1109/TPWRS.2015.2503426. 1.研究背景 1.1摘…