ST_GeomFromGeoJSON

标准格式的 GeoJSON 记录的几何图形部分转换为 GEOMETRY 对象。当您提供 GeoJSON 功能或 FeatureCollection 对象时,此函数会返回错误。

行为类型

不可变

语法

ST_GeomFromGeoJSON( geojson [, srid] [ USING PARAMETERS param=value[,...] ] );

参数

geojson
包含 GeoJSON GEOMETRY 对象的字符串,类型为 LONG VARCHAR。

Vertica 接受以下 GeoJSON 键值:

  • 类型

  • 坐标

  • 几何形状

其他键值被忽略。

srid

GEOMETRY 对象的空间参照系标识符 (SRID),类型为 INTEGER。

SRID 将存储在 GEOMETRY 对象中,但不影响空间计算的结果。

该实参在不执行操作时是可选的。

参数

ignore_3d
(可选)布尔值,是从返回的 GEOMETRY 对象中静默移除 3D 和更高维数据还是返回错误,取决于以下值:
  • true:从返回的 GEOMETRY 对象中移除 3D 和更高维数据。

  • false(默认值):当 GeoJSON 包含 3D 或更高维数据时返回错误。

ignore_errors
(可选)布尔值,是忽略无效 GeoJSON 对象上的错误还是返回错误,取决于以下值:
  • true:在 GeoJSON 解析期间忽略错误并返回 NULL。

  • false(默认值):如果 GeoJSON 解析失败,则返回错误。

返回

GEOMETRY

支持的数据类型

  • Point

  • Multipoint

  • Linestring

  • Multilinestring

  • Polygon

  • Multipolygon

  • GeometryCollection

示例

以下示例显示了如何使用 ST_GeomFromGeoJSON。

验证单个记录

以下示例使用 ST_IsValid 验证 ST_GeomFromGeoJSON 语句。该语句包含 SRID 4326 以指示点数据类型表示纬度和经度坐标,并将 ignore_3d 设置为 true 以忽略表示高度的最后一个值:

=> SELECT ST_IsValid(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[35.3606, 138.7274, 29032]}', 4326 USING PARAMETERS ignore_3d=true));
 ST_IsValid
------------
 t
(1 row)

将数据加载到表中

以下示例处理来自 STDIN 的 GeoJSON 类型并将它们存储在 GEOMETRY 数据类型表列中:

  1. 创建一个名为 polygons 的表,用于存储 GEOMETRY 空间类型:

    => CREATE TABLE polygons(geom GEOMETRY(1000));
    CREATE TABLE
    
  2. 使用 COPY 从 STDIN 读取支持的 GEOMETRY 数据类型并将它们存储在名为 geom 的对象中:

    => COPY polygons(geojson filler VARCHAR(1000), geom as ST_GeomFromGeoJSON(geojson)) FROM STDIN;
    Enter data to be copied followed by a newline.
    End with a backslash and a period on a line by itself.
    >> { "type": "Polygon", "coordinates": [ [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ] ] }
    >> { "type": "Point", "coordinates": [1, 2] }
    >> { "type": "Polygon", "coordinates": [ [ [1, 3], [3, 2], [1, 1], [3, 0], [1, 0], [1, 3] ] ] }
    >> \.
    
  3. 查询 polygons 表。下面的示例使用 ST_AsText 返回 geom 对象的 熟知文本 (WKT) 表示形式,并且使用 ST_IsValid 来验证每个对象:

    => SELECT ST_AsText(geom), ST_IsValid(geom) FROM polygons;
                       ST_AsText                   | ST_IsValid
    -----------------------------------------------+------------
     POINT (1 2)                                   | t
     POLYGON ((1 3, 3 2, 1 1, 3 0, 1 0, 1 3))      | f
     POLYGON ((100 0, 101 0, 101 1, 100 1, 100 0)) | t
    (3 rows)