时空服务
所有文档

          时序时空数据库 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参考