这是从波特兰到釜山的航线。我想检查一下路线对陆地多边形的路线,比如通过陆地的路线行进的距离。问题是在检查陆地交叉路口时,它认为路线正在经过北美,欧洲等,虽然它没有经过通过真实的任何陆地区域。
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 ="相对。 4.8.0, 2012年3月6日" GDAL =" GDAL 1.10.1,2013/08/26"的libxml =" 2.9.1" LIBJSON ="未知"拓扑光栅
答案 0 :(得分:0)
路线是如何建造的?看起来它被构造直到日期线,然后从那条直线到下一个"日期行,到目的地。
你应该将这些路线构建为海点之间的大圆距离。
有趣的博客/答案:
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,它将沿着投影线创建许多顶点,实际上是"弯曲"这条线。
在处理完路线施工问题后(您确实连接了两条不在路线上的地点,越过陆地),使用球体距离函数来获得准确的测量值。