ITPub博客

首页 > 数据库 > 国内数据库 > CnosDB 在最近新发布的 2.4.0 版本中增加对时空函数的支持。

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

原创 国内数据库 作者:CnosDB 时间:2023-12-06 15:09:38 0 删除 编辑

 

概述

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

用法

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

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

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

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

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

示例

支持函数

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

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


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70026635/viewspace-2999015/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
打造高性能、高压缩比、高可用的分布式云原生时间序列数据库,引领世界迈向万物智联。 欢迎关注 https://www.cnosdb.com

注册时间:2023-02-10

  • 博文量
    31
  • 访问量
    23526