CnosDB 在最近新发布的 2.4.0 版本中增加对时空函数的支持。

news2024/11/17 13:29:47

CnosDB 在最近新发布的 2.4.0 版本中增加对时空函数的支持。

概述

时空函数是一种用于描述时空结构和演化的函数。它在物理学、数学和计算机科学等领域中都有广泛的应用。时空函数可以描述物体在时空中的位置、速度、加速度以及其他相关属性。

用法

CnosDB 将使用一种全新的数据类型 Geometry来支持地理信息系统。

创建表的时候可以指定列的类型为Geometry:

create table geo_table (
  geo geometry(<object_type>, )
);

目前 CnosDB 中使用 WKT 格式来存储Geometry类型,Geometry类型下有 7 种几何对象:

WKT 是是一种开放的国际标准,全拼为 Well-Known Text 。

几何对象

语法描述

POINT(<x1><y1>)

线

LINESTRING(<x1><y1>,<x2><y2>,...)

多边形

POLYGON((<x1><y1>,<y1><y2>))

多点

MULTIPOINT (<x1> <y1>, <x2> <y2>, ...)

多线

MULTILINESTRING ((<x1> <y1>, <x2> <y2>, ...), (<x1> <y1>, <x2> <y2>, ...))

多面(多多边形)

MULTIPOLYGON (((<x1> <y1>, <x2> <y2>, ...)), ((<x1> <y1>, <x2> <y2>, ...)))

几何对象集合

GEOMETRYCOLLECTION (<geometry tag1> <wkt data1>, <geometry tag2> <wkt data2>, ...)

示例

几何对象

示例

POINT(30 10)

线

LINESTRING (30 10, 10 30, 40 40)

多边形

POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))

POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10), (20 30, 35 35, 30 20, 20 30))

多点

MULTIPOINT ((10 40), (40 30), (20 20), (30 10))

MULTIPOINT (10 40, 40 30, 20 20, 30 10)

多线

MULTILINESTRING ((10 10, 20 20, 10 40), (40 40, 30 30, 40 20, 30 10))

几何对象集合

GEOMETRYCOLLECTION (POINT (40 10), LINESTRING (10 10, 20 20, 10 40), POLYGON ((40 40, 20 45, 45 30, 40 40)))

支持函数

为了更好地操纵 Geometry 类型,CnosDB 提供了 ST_Geometry SQL 系列的函数,来计算几何体的性质和几何体之间的关系

ST_AsBinary(geometry)

将几何对象转换为 WKB 格式,WKB 格式是由 OpenGIS 规范定义的,用于以二进制流的形式交换几何数据,二进制流由含几何 WKB 信息的 BLOB 值表示。

参数类型:Geometry

返回类型:Binary

示例:

select ST_AsBinary('POINT  (1 1)')

返回结果为16进制:

+--------------------------------------------+
| st_AsBinary(Utf8("POINT  (1 1)"))          |
+--------------------------------------------+
| 0101000000000000000000f03f000000000000f03f |
+--------------------------------------------+

第一个字节表示数据的字节序:01

后面4个字节表示对象的几何类型 :01000000

POINT的值X和Y用8字节double类型的数据表示:000000000000F03F,000000000000F03F

ST_GeomFromWKB

功能:把WKB格式二进制转为Geometry类型

参数类型: Binary

返回类型: Geometry

示例:

SELECT ST_GeomFromWKB(ST_AsBinary('POINT(0 3)'))

返回的结果:

+-------------------------------------------------+
| st_GeomFromWKB(st_AsBinary(Utf8("POINT(0 3)"))) |
+-------------------------------------------------+
| POINT(0 3)                                      |
+-------------------------------------------------+

ST_Distance(geometry1, geometry2)

功能: ST_Distance 返回两个几何体的 2D 投影之间的最小欧氏距离。

参数类型:Binary

返回类型: Double

示例:

两点间距离

SELECT ST_Distance('POINT(1 0)', 'POINT(0 0)',);

+----------------------------------------------------+
| st_distance(Utf8("POINT(1 0)"),Utf8("POINT(0 0)")) |
+----------------------------------------------------+
| 1.0                                                |
+----------------------------------------------------+

返回结果:

+----------------------------------------------------+
| st_distance(Utf8("POINT(1 0)"),Utf8("POINT(0 0)")) |
+----------------------------------------------------+
| 1.0                                                |
+----------------------------------------------------+

点到直线距离

SELECT ST_Distance('POINT(0 0)', 'LINESTRING (30 10, 10 30, 40 40)');

返回结果:

+--------------------------------------------------------------------------+
| st_distance(Utf8("POINT(0 0)"),Utf8("LINESTRING (30 10, 10 30, 40 40)")) |
+--------------------------------------------------------------------------+
| 28.284271247461902                                                       |
+--------------------------------------------------------------------------+

平面和平面之间的距离

SELECT ST_Distance('POLYGON((0 2,1 1,0 -1,0 2))', 'POLYGON((-1 -3,-2 -1,0 -3,-1 -3))') as distance;

返回结果

+--------------------+
| distance           |
+--------------------+
| 1.4142135623730951 |
+--------------------+

ST_Area(geometry)

功能:返回几何对象 2D 投影的笛卡尔面积。面积单位与用于表示输入几何体坐标的单位相同。 对于点、线串、多点和多线串,此函数返回 0。 对于几何体集合,它返回集合中几何体的面积之和。

参数类型: Geometry

返回类型: Double

示例:

SELECT ST_Area('POLYGON ((40 40, 20 45, 45 30, 40 40))') as area;

+------+
| area |
+------+
| 87.5 |
+------+

返回结果

+------+
| area |
+------+
| 87.5 |
+------+

注意:部分几何图形不支持计算面积,对这些几何体计算面积会返回 0,如:Point、MultiPoint、LineString、MultiLineString、Line。 如果参数内容格式非法,返回值为 NULL。

案例:物联网场景监控车辆驶入电子围栏

下面有一张表 car。

表car记录车辆的实时位置, id 唯一指示一辆车, location 是车的实时坐标。

create table car (
  location: geometry(point, 0),
  tags(id)
);

这里有一种圆形的电子围栏,坐标为117.20, 39.12, 半径为0.0008。

1.计算此时电子围栏中的车辆数量

select count(*)
from(
  select max(time), id, location 
  from car 
  group by id, location
)
where st_distance(location, 'POINT (117.20, 39.12)') < 0.0008; 

首先通过max 聚合时间列,找到每辆车最新的位置记录,

然后使用 空间函数 st_distance 找到离电子围栏距离小于电子围栏半径的车辆 ,最后使用 count计算数量。

2.计算车 A5678 的最先进入电子围栏的时间以及最后在电子围栏内的时间。

select min(time), max(time) 
from car 
where id = 'A5678' and st_distance(location, 'POINT (117.20, 39.12') < 0.0008;

通过 id 筛选出指定车的记录,再使用 空间函数st_distance过滤出该车坐标在电子围栏中的记录,最后使用 min max 聚合函数找出时间。

以上就是 CnosDB2.4 关于时空函数的功能,你可以利用这些功能来处理和分析时空数据,使用时空函数可以帮助你解决许多与地理位置相关的问题,无论是在物流规划、位置分析、地理信息系统还是其他领域,都可以从时空数据中提取有价值的信息,帮助您做出更明智的决策,优化业务流程,并提供更好的服务。

无论您是专业的地理信息系统专家,还是对地理位置数据感兴趣的普通用户,时空函数都将为您提供强大而有用的查询和分析工具。让我们一起利用时空函数,挖掘地理数据的无限潜力!欢迎加入这个精彩的时空分析的世界!

CnosDB简介

CnosDB是一款高性能、高易用性的开源分布式时序数据库,现已正式发布及全部开源。

欢迎关注我们的社区网站:https://cn.cnosdb.com

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

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

相关文章

Javaweb之javascript的小案例的详细解析

1.5.4 案例 1.5.4.1 需求说明 鲁迅说的好&#xff0c;光说不练假把式,光练不说傻把式。所以接下来我们需要通过案例来加强对于上述DOM知识的掌握。需求如下3个&#xff1a; 点亮灯泡 将所有的div标签的标签体内容后面加上&#xff1a;very good 使所有的复选框呈现被选中的…

RT-DETR 应用 CARAFE:特征内容感知重新组装

特征上采样是现代卷积神经网络架构中的关键操作,例如特征金字塔。其设计对于密集预测任务,如目标检测和语义/实例分割至关重要。在本研究中,我们提出了一种称为内容感知特征重组(CARAFE)的通用、轻量级且高效的操作符,以实现这一目标。CARAFE具有以下几个优点:(1)大的…

【Java】详解多线程的概述及三种创建方法

&#x1f33a;个人主页&#xff1a;Dawn黎明开始 &#x1f380;系列专栏&#xff1a;Java ⭐每日一句&#xff1a;身在井隅&#xff0c;心向阳光&#xff0c;眼里有诗&#xff0c;自在远方 &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4…

typora保护机制与注册逆向分析

、起因 一直比较喜欢Typora的简洁与美观&#xff08;尝试过用 vscode 搭配插件编辑 markdown 文件&#xff0c;体验还是要差一些的&#xff09;&#xff0c;突然发现自己windows机器上很久前安装的typora不让用了&#xff0c;提示&#xff1a; 幸好原始安装文件还在&#xf…

基于 Gin 的 HTTP 代理 demo

上次用 TCP 模拟了一个 HTTP 代理之后&#xff0c;感觉那样还是太简陋了&#xff0c;想着是不是可以用框架来做一个有点实际用处的东西。所以&#xff0c;就思索如何用 golang 的 Gin 框架来实现一个&#xff1f;嗯&#xff0c;对的你没有听错&#xff0c;是 gin 框架。你可能会…

【Java 进阶篇】Java与JQuery选择器:解锁前端开发的魔法大门

在前端开发的世界中&#xff0c;选择器是我们与HTML文档进行互动的钥匙&#xff0c;而Java和JQuery则为我们提供了强大的工具&#xff0c;使得前端开发不再是一个艰深的谜题。本篇博客将围绕Java与JQuery选择器展开&#xff0c;深入解析选择器的奥秘&#xff0c;为你打开前端开…

体验版CorelDRAW2023矢量图话题工具

在当今数字化时代&#xff0c;图形设计已经成为了各行各业不可或缺的一部分。无论是企业的品牌标识、广告宣传&#xff0c;还是个人的插画作品、名片设计&#xff0c;都需要一个强大而多功能的设计软件来实现。而CorelDRAW正是这样一款令人惊叹的工具&#xff0c;它不仅提供了丰…

vue设计原理-带你重走vue诞生路程

我们首先看下面这个小demo demo源码: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" conten…

Python开发者的利器:掌握多种执行JS的方法

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com JavaScript&#xff08;JS&#xff09;是一种常用的脚本语言&#xff0c;通常用于网页开发&#xff0c;但有时也需要在Python中执行或调用JavaScript代码。这种需求可能是因为希望与网页进行交互&#xff0c;或者…

机器学习数据预处理——Word2Vec的使用

引言&#xff1a; Word2Vec 是一种强大的词向量表示方法&#xff0c;通常通过训练神经网络来学习词汇中的词语嵌入。它可以捕捉词语之间的语义关系&#xff0c;对于许多自然语言处理任务&#xff0c;包括情感分析&#xff0c;都表现出色。 代码&#xff1a; 重点代码&#…

【数据结构】树与二叉树(十二):二叉树的递归创建(算法CBT)

文章目录 5.2.1 二叉树二叉树性质引理5.1&#xff1a;二叉树中层数为i的结点至多有 2 i 2^i 2i个&#xff0c;其中 i ≥ 0 i \geq 0 i≥0。引理5.2&#xff1a;高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点&#xff0c;其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…

【Redis系列】Redis的核心命令(上)

哈喽&#xff0c;大家好&#xff0c;我是小浪。那么上篇博客教会了大家如何在Linux上安装Redis&#xff0c;那么本篇博客就要正式开始学习Redis啦&#xff0c;跟着俺的随笔往下看~ 1、启动Redis 那么如何启动Redis呢&#xff1f;最常用的是以下这个命令&#xff1a; redis-cl…

“艾迪-东软杯”第六届武汉理工大学新生程序设计竞赛

A.Capoos Acronym Zero 题目描述 yz 和他的朋友 ea 和 zech 一起养了一群 Capoo。 这些 Capoo 非常聪明&#xff0c;但不知道为什么&#xff0c;它们并没有从三人那里学到怎么写算法题&#xff0c;而是出于某种原因开始研究语言学&#xff0c;并发明了一套自己的暗语。这门暗语…

设计模式之十一:代理模式

代理可以控制和管理访问。 RMI提供了客户辅助对象和服务辅助对象&#xff0c;为客户辅助对象创建和服务对象相同的方法。RMI的好处在于你不必亲自写任何网络或I/O代码。客户程序调用远程方法就和运行在客户自己本地JVM对对象进行正常方法调用一样。 步骤一&#xff1a;制作远程…

【C++初阶】类与对象(三)

目录 一、再谈构造函数1.1 初始化列表1.1.1 初始化列表写法1.1.2 哪些成员要使用初始化列表 1.2 初始化列表的特点1.2.1 队列类问题解决1.2.2 声明顺序是初始化列表的顺序 1.3 explicit关键字1.3.1 explicit关键字的作用 二、static成员2.1 类的静态成员概念2.2 类里创建了多少…

C++ 模板保姆级详解——template<class T>(什么是模板?模板分哪几类?模板如何应用?)

目录 一、前言 二、 什么是C模板 &#x1f4a6;泛型编程的思想 &#x1f4a6;C模板的分类 三、函数模板 &#x1f4a6;函数模板概念 &#x1f4a6;函数模板格式 &#x1f4a6;函数模板的原理 &#x1f4a6;函数模板的实例化 &#x1f34e;隐式实例化 &#x1f349;显式实…

Halcon WPF 开发学习笔记(4):Halcon 锚点坐标打印

文章目录 专栏前言锚点二次开发添加回调函数辅助Model类 下集预告 专栏 Halcon开发 博客专栏 WPF/HALCON机器视觉合集 前言 Halcon控件C#开发是我们必须掌握的&#xff0c;因为只是单纯的引用脚本灵活性过低&#xff0c;我们要拥有Halcon辅助开发的能力 锚点开发是我们常用的…

记录一次某某虚拟机的逆向

导语 学了一段时间的XPosed&#xff0c;发现XPosed真的好强&#xff0c;只要技术强&#xff0c;什么操作都能实现... 这次主要记录一下我对这款应用的逆向思路 apk检查 使用MT管理器检查apk的加壳情况 发现是某数字的免费版本 直接使用frida-dexdump 脱下来后备用 应用分…

【ATTCK】MITRE Caldera - 测试数据泄露技巧

CALDERA是一个由python语言编写的红蓝对抗工具&#xff08;攻击模拟工具&#xff09;。它是MITRE公司发起的一个研究项目&#xff0c;该工具的攻击流程是建立在ATT&CK攻击行为模型和知识库之上的&#xff0c;能够较真实地APT攻击行为模式。 通过CALDERA工具&#xff0c;安全…