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 |
---|