PostGIS是否提供针对Geography类型的ST_MaxDistance函数?
PostGIS针对Geography类型的最大距离计算方案
PostGIS目前没有原生支持Geography类型的ST_MaxDistance函数,现有的ST_MaxDistance仅适用于Geometry类型,基于投影单位计算二维最大距离。
如果不想将Geography转换为Geometry类型,可以通过以下替代方案计算两个Geography对象的最大球面距离:
顶点遍历计算法:提取两个Geography对象的所有顶点,计算每对顶点间的球面距离,取最大值。示例SQL如下:
SELECT MAX(ST_Distance(v1.geog_vertex, v2.geog_vertex)) AS max_spherical_distance FROM ( SELECT (ST_DumpPoints(ST_GeomFromGeography(g1))).geom::geography AS geog_vertex ) AS v1 CROSS JOIN ( SELECT (ST_DumpPoints(ST_GeomFromGeography(g2))).geom::geography AS geog_vertex ) AS v2;这里仅临时将Geography转为Geometry提取顶点,随即转回Geography计算距离,无需修改原始数据的存储类型。
优化复杂要素计算:若处理的是顶点数量极多的复杂要素(如高精度多边形),可先用
ST_SimplifyPreserveTopology简化要素后再提取顶点,平衡精度与计算效率:SELECT MAX(ST_Distance(v1.geog_vertex, v2.geog_vertex)) AS max_spherical_distance FROM ( SELECT (ST_DumpPoints(ST_SimplifyPreserveTopology(ST_GeomFromGeography(g1), 0.0001))).geom::geography AS geog_vertex ) AS v1 CROSS JOIN ( SELECT (ST_DumpPoints(ST_SimplifyPreserveTopology(ST_GeomFromGeography(g2), 0.0001))).geom::geography AS geog_vertex ) AS v2;自定义函数封装:如果需要频繁使用该功能,可以将上述逻辑封装为自定义函数,调用时更便捷。
内容的提问来源于stack exchange,提问作者David542
相关产品推荐
相关产品推荐

