写点什么

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

作者:CnosDB
  • 2023-11-13
    内蒙古
  • 本文字数:2540 字

    阅读完需:约 8 分钟

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


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


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


发布于: 刚刚阅读数: 5
用户头像

CnosDB

关注

还未添加个人签名 2022-04-18 加入

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

评论

发布
暂无评论
CnosDB 在最近新发布的 2.4.0 版本中增加对时空函数的支持。_开源_CnosDB_InfoQ写作社区