如何在POSTGIS中使用st_intersection()和重新投影?

时间:2015-08-11 09:33:00

标签: postgresql gis polygon postgis shapefile

这是从波特兰到釜山的航线。我想检查一下路线对陆地多边形的路线,比如通过陆地的路线行进的距离。问题是在检查陆地交叉路口时,它认为路线正在经过北美,欧洲等,虽然它没有经过通过真实的任何陆地区域。

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 ="相对。 4.8.0,   2012年3月6日" GDAL =" GDAL 1.10.1,2013/08/26"的libxml =" 2.9.1"   LIBJSON ="未知"拓扑光栅

1 个答案:

答案 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,它将沿着投影线创建许多顶点,实际上是"弯曲"这条线。

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