gpt4 book ai didi

postgresql - 如何在 POSTGIS 中使用带重新投影的 st_intersection()?

转载 作者:行者123 更新时间:2023-11-29 13:55:56 28 4
gpt4 key购买 nike

这是一条从“波特兰到釜山”的航运路线,我想根据 land_polygons 检查这条路线,比如一条穿过陆地的路线走了多远。问题是在检查陆地交叉点时,它认为好像这条路线正在经过北美、欧洲等,但实际上并未经过任何陆地区域。

shipping route from portland to busan

    SELECT sum(ST_Length(ST_Intersection(route::geography,polygon))) as intersection
FROM land_polygons l,
routes t
where t.route_id = ? and
ST_intersects(route::geometry,geom);

postgis 版本:

POSTGIS="2.1.7 r13414" GEOS="3.4.2-CAPI-1.8.2 r3921" PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 1.10.1, released 2013/08/26" LIBXML="2.9.1" LIBJSON="UNKNOWN" TOPOLOGY RASTER

最佳答案

路线是如何 build 的?看起来它一直在 build 直到日期变更线,然后从那条直线到“下一个”日期变更线,再到目的地。

您应该将这些路线构建为海点之间的大圆距离。

有趣的博客/答案:

https://gis.stackexchange.com/questions/109562/does-postgis-have-a-vincenty-distance-calculation https://gis.stackexchange.com/questions/84443/what-is-this-postgis-query-doing-to-show-great-circle-connections http://anitagraser.com/2011/08/20/visualizing-global-connections/

所有这些示例的关键是使用 ST_Segmentize,它将沿投影线创建许多顶点,实际上“弯曲”该线。

在处理完路线构建问题后(您确实连接了两个不在路线上的点,越过陆地),使用球体距离函数来获得准确的测量值。

关于postgresql - 如何在 POSTGIS 中使用带重新投影的 st_intersection()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31938183/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com