跳转至

地理相关函数

函数

COORDINATE_SYSTEM_CONVERT

根据给定的经纬度以及转换前后坐标系计算转换后坐标系的经纬度。

CREATE TEMPORARY FUNCTION
  COORDINATE_SYSTEM_CONVERT
AS
  'tech.leovan.hive.udf.geo.CoordinateSystemConvertUDF';

参数

返回值

转换后坐标系的经纬度:ARRAY<DOUBLE> 类型

示例

SQL:

SELECT
  COORDINATE_SYSTEM_CONVERT(39.909175, 116.397452, 'GCJ02', 'WGS84')
;

输出结果为:

[
  39.90777149066542,
  116.39120837626726
]

GEOHASH_DECODE

根据 Geohash 计算中心点纬度、中心点经度、边界纬度最小值、边界纬度最大值、边界经度最小值、边界经度最大值。

CREATE TEMPORARY FUNCTION
  GEOHASH_DECODE
AS
  'tech.leovan.hive.udf.geo.GeohashDecodeUDF';

参数

  • GEOHASH(必选):STRING 类型,Geohash

返回值

中心点纬度、中心点经度、边界纬度最小值、边界纬度最大值、边界经度最小值、边界经度最大值的数组:ARRAY<DOUBLE> 类型

示例

SQL:

SELECT
  GEOHASH_DECODE('wx4g09n')
;

输出结果为:

[
  39.90852355957031,
  116.39808654785156,
  39.9078369140625,
  39.909210205078125,
  116.39739990234375,
  116.39877319335938
]

GEOHASH_ENCODE

根据给定的经纬度计算指定精度的 Geohash。

CREATE TEMPORARY FUNCTION
  GEOHASH_ENCODE
AS
  'tech.leovan.hive.udf.geo.GeohashEncodeUDF';

参数

  • LATITUDE(必选):DOUBLE 类型,坐标纬度
  • LONGITUDE(必选):DOUBLE 类型,坐标经度
  • PRECISION(必选):INTEGER 类型,Geohash 精度,取值范围 \(\left[1, 12\right]\)

返回值

Geohash 编码:STRING 类型

示例

SQL:

SELECT
  GEOHASH_ENCODE(39.909175, 116.397452, 7)
;

输出结果为:

wx4g09n

GREAT_CIRCLE_DISTANCE

计算两个坐标之间的距离。

CREATE TEMPORARY FUNCTION
  GREAT_CIRCLE_DISTANCE
AS
  'tech.leovan.hive.udf.geo.GreatCircleDistanceUDF';

参数

返回值

距离(单位:米):DOUBLE 类型

示例

SQL:

SELECT
  GREAT_CIRCLE_DISTANCE(39.909175, 116.397452, 31.239698, 121.499707)
;

输出结果为:

1067.9805366585604

SQL:

SELECT
  GREAT_CIRCLE_DISTANCE(
      39.909175, 116.397452, 31.239698, 121.499707,
      'gcj02', 'mean')
;

输出结果为:

1067.9805366585604

SQL:

SELECT
  GREAT_CIRCLE_DISTANCE(
      39.909175, 116.397452, 31.239698, 121.499707,
      'gcj02', 'equatorial')
;

输出结果为:

1069.1754509458906

POLYGON_AREA

计算多边形面积。

CREATE TEMPORARY FUNCTION
  POLYGON_AREA
AS
  'tech.leovan.hive.udf.geo.PolygonAreaUDF';

参数

  • POLYGON_STRING(必选):STRING 类型,多边形文本,仅支持 Polygon 和 MultiPolygon
  • POLYGON_STRING_FORMAT(可选):STRING 类型,多边形文本格式,仅支持 WKTGEOJSON,默认为 WKT

返回值

面积(单位:平方米):DOUBLE 类型

示例

SQL:

SELECT
  POLYGON_AREA(
    "POLYGON ((..., ..., ...)",
    "WKT"
  )
;

输出结果为:

1.0

POLYGON_GEOHASH

计算覆盖多边形的 Geohash 列表。

CREATE TEMPORARY FUNCTION
  POLYGON_GEOHASH
AS
  'tech.leovan.hive.udf.geo.PolygonGeohashUDF';

参数

  • POLYGON_STRING(必选):STRING 类型,多边形文本,仅支持 Polygon 和 MultiPolygon
  • PRECISION(必选):INTEGER 类型,Geohash 精度,取值范围 \(\left[1, 12\right]\)
  • POLYGON_STRING_FORMAT(可选):STRING 类型,多边形文本格式,仅支持 WKTGEOJSON,默认为 WKT

返回值

Geohash 列表:ARRAY<STRING> 类型

示例

SQL:

SELECT
  POLYGON_AREA(
    "POLYGON ((..., ..., ...)",
    8,
    "WKT"
  )
;

输出结果为:

[
  ...,
  ...,
  ...
]

SPATIAL_RELATION

计算两个地理区域的空间关系。

CREATE TEMPORARY FUNCTION
  SPATIAL_RELATION
AS
  'tech.leovan.hive.udf.geo.SpatialRelationUDF';

参数

  • GEO_STRING_1(必选):STRING 类型,地理区域 1 文本
  • GEO_STRING_2(必选):INTEGER 类型,地理区域 2 文本
  • GEO_STRING_FORMAT(可选):STRING 类型,地理区域文本格式,仅支持 WKTGEOJSON,默认为 WKT

返回值

关系名称:STRING 类型

可能的返回值如下:

关系名称 关系描述
WITHIN 在其中
CONTAINS 包含
DISJOINT 不相交
INTERSECTS 相交

示例

SQL:

SELECT
  SPATIAL_RELATION(
    "POINT (..., ...",
    "POLYGON ((..., ..., ...)",
    "WKT"
  )
;

输出结果为:

WITHIN

附录

Geohash 误差

GeoHash 精度 纬度 Bits 经度 Bits 纬度误差 经度误差 距离误差(千米)
1 2 3 ±23 ±23 ±2500
2 5 5 ±2.8 ±5.6 ±630
3 7 8 ±0.70 ±0.70 ±78
4 10 10 ±0.087 ±0.18 ±20
5 12 13 ±0.022 ±0.022 ±2.4
6 15 15 ±0.0027 ±0.0055 ±0.61
7 17 18 ±0.00068 ±0.00068 ±0.076
8 20 20 ±0.000085 ±0.00017 ±0.01911
9 22 23 ±0.000021 ±0.000021 ±0.00478
10 25 25 ±0.00000268 ±0.00000536 ±0.0005971
11 27 28 ±0.00000067 ±0.00000067 ±0.0001492
12 30 30 ±0.00000008 ±0.00000017 ±0.00000186