时序时空数据库TSDB

    时空服务

    TSDB目前已支持时空服务,帮助用户更高效的处理与空间地理位置相关的数据。

    使用说明

    TSDB目前的SQL查询接口已支持多种与空间地理位置相关的函数,包括二维计算和球面计算。借助这类函数的强大能力,用户可以使用SQL方便地对空间地理位置相关的数据进行计算、分析,挖掘数据价值。

    场景一:判断某个设备编号为ABC123的设备是否在某块特定区域内

    下图表示TSDB存储的设备位置数据:每个设备的位置信息分别用x_value和y_value两个域(field)来存储,x_value和y_value表示设备在二维坐标系中的坐标;同时用licenseID(Tag)来代表设备号。 可以将这些数据看成一个二维表(如下图),针对此二维表可以通过构造空间函数来使用时空服务。 image.png

    举例: 判断设备ID为ABC123的设备是否在某个特定区域(不包含边界);假定这块区域是由(200, 200), (400, 200), (400, 400),(200, 400)四个点围绕组成的四边形。

    SQL语句:

    select * from DeviceLocation where ST_Contains(ST_GeometryFromText('POLYGON ((200 200,400 200,400 400,200 400,200 200))'), ST_Point(x_value,y_value)) and LicenseID = ‘ABC123’

    返回得到以下数据,证明设备ID为ABC123的设备在时间为1523973720000时在以上指定区域内。 image.png

    场景二:计算某个车辆在移动的轨迹中,是否经过一块以某个点为中心,一定半径以内的区域

    TSDB的时空服务同时支持球面距离的计算,车辆位置和轨迹通常都是通过GPS信息来定位,所以真实的轨迹需要通过球面计算来计算。参考上例,我们可以将上述示例中的x_value和y_value用真实的经度(longitude)和纬度(latitude)来代替表示车辆的实际位置: image.png

    举例: 计算某个车辆在移动的轨迹中,是否经过一块以点(40.17222,80.175)为中心,半径为200m以内的区域。 SQL语句:

    select * from VehicleLocation where LicenseID=’京AFR673’and ST_Distance(to_spherical_geography(ST_Point(longitude, latitude)),to_spherical_geography(ST_Point(40.17222, 80.175))) <= 200

    返回得到以下数据,证明车牌为京AFR673的车在会时间点为1523973720000时经过以上特定区域。 image.png

    实际应用

    车辆监测

    时序数据库用以存储时间、空间数据,借助时空服务,可以实时监测车辆当前行驶路线,在异常情况下,比如车辆脱离既定路线后,能够及时报警;有需要时还能够查看车辆历史行驶轨迹。在检修车作业场景下,判断检修车是否在指定区域内作业;检修车辆的行驶是否偏离预定轨迹;离某个站点最近的救援车是哪一辆等,从而实现车辆的全局优化调控。

    image.png

    轨迹分析

    时序数据库用以存储时间、空间数据,借助时空服务,可以计算分析各类轨迹之间的关系,例如分析归纳人流最易聚集的热点区域,特定道路在哪些时间段车辆最多会造成堵塞,在特定区域是否有异常人员、车辆进入。轨迹分析可以应用在非常广泛多样的业务场景中,诸如社区安全、按需选址(如写字楼、医院、商场)、交通分流。

    image.png

    时空服务函数参考

    关于SQL语句的使用参考,请参见支持SQL查询

    时空服务构造函数

    • ST_Point

    声明

    Geometry ST_Point (double X, double Y)

    作用

    根据指定的坐标值(X, Y)返回一个点(Point)类型的几何(Geometry)对象。

    示例

    ST_Point(1.0,2.0)

    返回一个点(Point)类型的几何(Geometry)对象,其横纵坐标分别为1.0和2.0。

    • ST_LineFromText

    声明

    Geometry ST_LineFromText (varchar WKT)

    作用

    从Well-Known Text (WKT) 的字符串表达式中返回一个线段(LineString)类型的几何(Geometry)对象。

    示例

    ST_LineFromText('LINESTRING(1.0 1.5,1.0 0.5)') 

    返回一个起点为(1.0,1.5),终点为(1.0,0.5)的线段(LineString)类型的几何(Geometry)对象,

    • ST_Polygon

    声明 Geometry ST_Polygon (varchar WKT) 作用

    从Well-Known Text (WKT) 的字符串表达式中返回一个多边形(Polygon)类型的几何(Geometry)对象。

    示例

    ST_Polygon('POLYGON ((1 1,1 4,4 4,4 1))') 

    返回一个由(1,1)、(1,4)、(4,4)、(4,1)四个点组成的多边形(Polygon)类型的几何(Geometry)对象。

    • ST_GeometryFromText

    声明

    Geometry ST_GeometryFromText (varchar WKT)

    作用

    从Well-Known Text (WKT) 的字符串表达式中返回一个几何(Geometry)对象。

    示例

    ST_GeometryFromText('POLYGON ((0 0,1 0,1 1,0 1,0 0))') 

    返回一个由(0,0)、(0,1)、(1,1)、(1,0)四个点组成的多边形(Polygon)类型的几何(Geometry)对象。

    • to_spherical_geography

    声明

    SphericalGeography to_spherical_geography (Geometry geometry)

    作用

    把一个几何(Geometry)对象转换为一个球面几何(SphericalGeography)对象。

    示例

    to_spherical_geography(ST_Point(40.172, 80.175))

    返回一个球面几何对象,标识地球上位于东经40.172度,北纬80.175度的点。【-180,0】为西经,【0,180】为东经;【-90,0】为南纬,【0,90】为北纬。

    时空服务关系函数

    • ST_Contains

    声明

    boolean ST_Contains (Geometry A, Geometry B)

    作用

    如果不存在Geometry B中的点落在Geometry A外,且Geometry B内部至少有一个点落在Geometry A内,,返回true,否则返回false

    示例

    ST_Contains(ST_Polygon('POLYGON ((0 0,1 0,1 1,0 1))'), ST_Point(0.5,0.5))=true

    点(0.5,0.5)完全落在由(0,0)、(0,1)、(1,1)、(1,0)四个点组成的多边形内,所以返回true

    • ST_Equals

    声明

    boolean ST_Equals(Geometry A, Geometry B)

    作用

    如果几何(Geometry)对象A和几何(Geometry)对象B代表的是同一个对象,返回true,否则返回false

    示例

    ST_Equals(ST_GeometryFromText('POLYGON ((1 1, 1 3, 3 3, 3 1))'), ST_GeometryFromText('POLYGON ((3 3,3 1,1 1,1 3))')=true

    由于上述两个多边形完全重合,所以返回true

    • ST_Intersects

    声明

    boolean ST_Intersects (Geometry A, Geometry B)

    作用

    如果几何(Geometry)对象A和几何(Geometry)对象B在二维空间上相交,返回true,否则返回false

    示例

    ST_Intersects(ST_GeometryFromText('POLYGON((1 1, 1 3, 3 3, 3 1))'), ST_GeometryFromText('POLYGON ((4 4, 4 5, 5 5, 5 4))'))=false

    由于这两个矩形没有相交,所以返回false

    • ST_Overlaps

    声明

    boolean ST_Overlaps (Geometry A, Geometry B)

    作用

    如果几何(Geometry)对象A和几何(Geometry)对象B有部分重叠,且其中一个并不完全包含另一个,返回true,否则返回false

    示例

    ST_Overlaps(ST_GeometryFromText('POLYGON ((1 1, 1 4, 4 4, 4 1))'), ST_GeometryFromText('LINESTRING (1 1, 4 4)'))=false

    由于起点为(1,1),终点为(4,4)的线段被完全包含于由(1,1)、(1,4)、(4,4)、(4,1)四个点组成的多边形内,所以即使两者有相交,ST_Overlaps仍返回false

    时空服务访问函数

    • ST_Area

    声明

    double ST_Area (Geometry A)

    作用

    返回多边形(Polygon)类型的几何(Geometry)对象A二维空间下的面积。

    示例

    ST_Area(ST_GeometryFromText('POLYGON ((2 2, 2 6, 6 6, 6 2))'))=16.0

    返回由(2,2)、(2,6)、(6,6)、(6,2)四个点组成的多边形的面积为16.0。

    • ST_Area

    声明

    double ST_Area (SphericalGeometry A)

    作用

    返回多边形(Polygon)类型的球面几何(SphericalGeometry)对象A在地球球面上的面积。

    示例

    ST_Area(to_spherical_geography(ST_Polygon('POLYGON ((0 0,0 90,90 0))')))=6.375825913974858E13

    返回由地球球面上的三个点(0,0)、(0,90)、(90,0)组成的多边形的球面面积为6.375825913974858E13平方米。这里地球半径=6371.01千米。

    • ST_Distance

    声明

    double ST_Distance (Geometry A, Geometry B)

    作用

    返回几何(Geometry)对象A和几何(Geometry)对象B在二维空间下的笛卡尔最短距离。

    示例

    ST_Distance(ST_Point(50, 100), ST_Point(150, 150))= 111.80339887498948

    返回上述两个点(50,100)和(150,150)之间的笛卡尔最短距离为111.80339887498948。

    • ST_Distance

    声明

    double ST_Distance (SphericalGeometry A, SphericalGeometry B)

    作用

    返回球面几何(SphericalGeometry)对象A和球面几何(SphericalGeometry)对象B在地球球面上的最短距离,单位米。

    示例

    ST_Distance(to_spherical_geography(ST_Point(40.175, 80.175)), to_spherical_geography(ST_Point(40.5, 80.5)))= 36643.77019025462

    返回地球上两个点(40.175, 80.175)和(40.5, 80.5)之间的球面距离为36643.77019025462米。这里地球半径=6371.01千米。

    • ST_Length

    声明

    double ST_Length (LineString A)

    作用

    返回线段(LineString)类型的几何(Geometry)对象A在二维空间下的长度。

    示例

    ST_Length(ST_GeometryFromText('LINESTRING (0 0, 2 2)'))= 2.8284271247461903

    返回起点为(0,0),终点为(2,2)的线段的长度为2.8284271247461903。

    • ST_X

    声明

    double ST_X (Point A)

    作用

    返回点(Point)类型的几何(Geometry)对象A的横(X轴)坐标。

    示例

    ST_X(ST_GeometryFromText('POINT (1 2)'))=1.0

    返回点(1,2)的横(X轴)坐标为1.0.

    • ST_Y

    声明

    double ST_Y (Point A)

    作用

    返回点(Point)类型的几何(Geometry)对象A的纵(Y轴)坐标。

    示例

    ST_Y(ST_GeometryFromText('POINT (1 2)'))=2.0

    返回点(1,2)的纵(Y轴)坐标为2.0.

    上一篇
    数据可视化
    下一篇
    SQL参考