geo_line_densify()

通过添加中间点将平面线或多线边转换为测地线。

语法

geo_line_densify(lineString,tolerance, [ preserve_crossing ])

详细了解语法约定

参数

客户 类型​​ 必需 说明
lineString dynamic GeoJSON 格式 的 LineString 或 MultiLineString。
tolerance int、long 或 real 用于定义原始平面边缘与转换后的测地线边缘链之间的最大距离(以米为单位)。 支持的值范围为 [0.1, 10000]。 如果未指定,则使用默认值 10
preserve_crossing bool 如果为 true,则在反子午线上保持边缘交叉。 如果未指定,则使用默认值 false

返回

采用 GeoJSON 格式dynamic 数据类型的致密线。 如果线或公差无效,则查询会生成 null 结果。

注意

对按照 WGS-84 坐标参考系统表示的地理空间坐标进行解释。

LineString 定义

dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})

dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2, ..., line_N]]})

  • LineString 坐标数组必须至少包含两个条目。
  • 坐标 [经度, 纬度] 必须有效。 经度必须是 [-180, +180] 范围内的实数,纬度必须是 [-90, +90] 范围内的实数。
  • 边缘长度必须小于 180 度。 将选择两个顶点之间的最短边缘。

约束

  • 致密线的最大点数限制为 10485760。
  • dynamic 格式存储线有大小限制。

动机

  • GeoJSON 格式将两点之间的边定义为直笛卡尔线,而 geo_line_densify() 使用测地线
  • 是使用测地线还是平面边缘可能取决于数据集,在长边中尤其如此。

示例

以下示例致密化曼哈顿岛的一条道路。 该边缘较短,平面边缘与其对应的测地线之间的距离小于公差规定的距离。 因此,结果保持不变。

print densified_line = tostring(geo_line_densify(dynamic({"type":"LineString","coordinates":[[-73.949247, 40.796860],[-73.973017, 40.764323]]})))

输出

densified_line
{"type":"LineString","coordinates":[[-73.949247, 40.796860], [-73.973017, 40.764323]]}

以下示例致密化长度约为 130 公里的边缘

print densified_line = tostring(geo_line_densify(dynamic({"type":"LineString","coordinates":[[50, 50], [51, 51]]})))

输出

densified_line
{"type":"LineString","coordinates":[[50,50],[50.125,50.125],[50.25,50.25],[50.375,50.375],[50.5,50.5],[50.625,50.625],[50.75,50.75],[50.875,50.875],[51,51]]}

下面的示例由于坐标输入无效而返回 null 结果。

print densified_line = geo_line_densify(dynamic({"type":"LineString","coordinates":[[300,1],[1,1]]}))

输出

densified_line

下面的示例由于公差输入无效而返回 null 结果。

print densified_line = geo_line_densify(dynamic({"type":"LineString","coordinates":[[1,1],[2,2]]}), 0)

输出

densified_line