在 Amazon Redshift 中查询空间数据 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在 Amazon Redshift 中查询空间数据

空间数据描述几何体在定义空间(空间参照系)中的位置和形状。Amazon Redshift 支持具有 GEOMETRYGEOGRAPHY 数据类型的空间数据,其中包含空间数据和数据的空间参考系统标识符 (SRID)。

空间数据包含可用于表示地理要素的几何数据。此类数据的示例包括天气报告、地图方向、包含地理位置的推特、店铺位置以及航空公司路线。空间数据在业务分析、报告和预测中起着重要的作用。

您可以使用 Amazon Redshift SQL 函数查询空间数据。空间数据包含对象的几何值。

GEOMETRY 数据类型操作在笛卡尔平面上工作。尽管空间参考系统标识符 (SRID) 存储在对象内部,但该 SRID 只是坐标系的标识符,在处理 GEOMETRY 对象的算法中没有任何作用。对 GEOGRAPHY 数据类型执行的操作将对象内部的坐标视为球体上的球面坐标。此球体由 SRID 定义,该 SRID 引用了地理空间参考系统。默认情况下,GEOGRAPHY 数据类型是使用空间参考 (SRID) 4326 创建的,参照世界大地测量系统 (WGS) 84。有关 SRID 的更多信息,请参阅维基百科中的空间参考系统

您可以使用 ST_Transform 函数来转换来自各种空间参考系统的坐标。坐标转换完成后,您还可以在两者之间使用简单的转换,只需使用地理 SRID 对输入 GEOMETRY 进行编码即可。此转换仅复制坐标,无需进一步转换。例如:

SELECT ST_AsEWKT(ST_GeomFromEWKT('SRID=4326;POINT(10 20)')::geography);
st_asewkt ------------------------ SRID=4326;POINT(10 20)

为了更好地理解 GEOMETRYGEOGRAPHY 数据类型之间的区别,考虑使用世界大地测量系统 (WGS) 84 来计算柏林机场 (BER) 和旧金山机场 (SFO) 之间的距离。使用 GEOGRAPHY 数据类型,结果以米为单位。使用 SRID 4326 GEOMETRY 数据类型时,结果以度为单位,无法转换为米,因为一度的距离取决于地球几何体的位置。

GEOGRAPHY 数据类型的计算主要用于现实圆形地球计算,如一个国家的无误差精确面积。但是,它们的计算成本要高得多。因此,ST_Transform 可以将坐标转换为适当的局部投影坐标系,实现更快的 GEOMETRY 数据类型计算。

使用空间数据,您可以运行查询以执行以下操作:

  • 找出两点之间的距离。

  • 检查一个区域 (多边形) 是否包含另一个区域。

  • 检查一条线串是否与另一条线串或多边形相交。

您可以使用 GEOMETRY 数据类型来保存空间数据的值。Amazon Redshift 中的 GEOMETRY 值可以定义二维 (2D)、三维 (3DZ)、带度量的二维 (3DM) 和四维 (4D) 几何体基元数据类型:

  • 二维 (2D) 几何体由平面中的两个笛卡尔坐标 (x, y) 指定。

  • 二维 (2D) 几何体由空间中的三个笛卡尔坐标 (x, y, z) 指定。

  • 带测量 (3DM) 的二维几何体由三个坐标 (x, y, m) 指定,其中前两个坐标是平面中的笛卡尔坐标,第三个是测量值。

  • 四维 (4D) 几何体由四个坐标 (x, y, z, m) 指定,其中前三个坐标是空间中的笛卡尔坐标,第四个是测量值。

有关几何体基元数据类型的更多信息,请参阅 Wikipedia 中的几何体的已知文本表示

您可以使用 GEOGRAPHY 数据类型来保存空间数据的值。Amazon Redshift 中的 GEOGRAPHY 值可以定义二维 (2D)、三维 (3DZ)、带度量的二维 (3DM) 和四维 (4D) 几何体基元数据类型:

  • 二维 (2D) 几何体由球体上的经纬度坐标指定。

  • 三维 (3DZ) 几何体由球体上的经纬度和高度坐标指定。

  • 带测量的二维 (3DM) 几何体由三个坐标(经度、纬度、度量)指定,其中前两个坐标是球面角坐标,第三个是测量值。

  • 四维 (4D) 几何体由四个坐标(经度、纬度、高度、度量)指定,其中前三个坐标是经度、纬度和高度,第四个是测量值。

有关地理坐标系的更多信息,请参阅维基百科中的地理坐标系球坐标系

GEOMETRYGEOGRAPHY 数据类型具有以下子类型:

  • POINT

  • LINESTRING

  • POLYGON

  • MULTIPOINT

  • MULTILINESTRING

  • MULTIPOLYGON

  • GEOMETRYCOLLECTION

有一些 Amazon Redshift SQL 函数支持以下几何数据的表示形式:

  • GeoJSON

  • 已知文本 (WKT)

  • 扩展的已知文本 (EWKT)

  • 已知二进制 (WKB) 表示

  • 扩展的已知二进制文件 (EWKB)

您可以在 GEOMETRYGEOGRAPHY 数据类型之间转换。

以下 SQL 将线串从 GEOMETRY 转换到 GEOGRAPHY

SELECT ST_AsEWKT(ST_GeomFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)')::geography);
st_asewkt ---------------------------------------------- SRID=4326;LINESTRING(110 40,2 3,-10 80,-7 9)

以下 SQL 将线串从 GEOMETRY 转换到 GEOGRAPHY

SELECT ST_AsEWKT(ST_GeogFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)')::geometry);
st_asewkt ---------------------------------------------- SRID=4326;LINESTRING(110 40,2 3,-10 80,-7 9)

Amazon Redshift 提供了许多 SQL 函数来查询空间数据。除了 ST_IsValid 函数之外,接受 GEOMETRY 对象作为参数的空间函数期望该 GEOMETRY 对象是有效的几何体。如果 GEOMETRYGEOGRAPHY 对象无效,则空间函数的行为未定义。有关有效性的更多信息,请参阅几何有效性

有关用于查询空间数据的 SQL 函数的详细信息,请参阅空间函数

有关加载空间数据的详细信息,请参阅加载 GEOMETRY 或 GEOGRAPHY 数据类型的列