使用 ST_Intersection 与 postgis 的错误结果
Wrong result using ST_Intersection with postgis
我想用postgis做一个简单的交集,但是我得到的结果是错误的。该地图项的开头缺少一段大约 7 米。
这是我用于交集的 sql-命令:
select ST_Intersection(t2.wkb_geometry,
t1.wkb_geometry), t2.sde_id as s_sde, t2.mtb_id,
ST_Length(ST_Intersection(t1.wkb_geometry,t2.wkb_geometry))
from
public.mountainbike_pavement_temp2 t1 inner join public.mountainbike_strecken_temp2 t2 on
t1.wkb_geometry && t2.wkb_geometry;
结果长度应该是187米左右,结果长度只有180米左右。我已经尝试了很多,但我找不到任何原因,为什么会发生这种情况,因此如何解决它。
当我在 ArcGis 中执行此交集时,一切正常。
我试过这个
postgres 9.6.15 和 postgis 2.4
还有
postgres 12.1 和 postgis 3.0,结果相同。
表格和数据可以在这里找到:
表名:
mountainbike_pavement_temp2
public.mountainbike_strecken_temp2
从mountainbike_pavement_temp2到mountainbike_strecken_temp2的第一个顶点的距离全为0,在postgis中用ST_Distance计算(见下面的注释)。所以我假设,有一个交叉点。
问题是 pavement
行与 strecken
行不完全重合。具体来说,它们包含一个不在 strecken
线串上的顶点 POINT ( -43663.049707713886 245429.5072260416 )
。这意味着交叉点不包括 strecken
线的整个长度。
下图显示了这一点(点位置被放大以显示差异)。 pavement
是红色,strecken
是蓝色。
这可能适用于 ArcGIS,因为它在计算交点时可能会使用一些捕捉启发式算法。
我想用postgis做一个简单的交集,但是我得到的结果是错误的。该地图项的开头缺少一段大约 7 米。
这是我用于交集的 sql-命令:
select ST_Intersection(t2.wkb_geometry,
t1.wkb_geometry), t2.sde_id as s_sde, t2.mtb_id,
ST_Length(ST_Intersection(t1.wkb_geometry,t2.wkb_geometry))
from
public.mountainbike_pavement_temp2 t1 inner join public.mountainbike_strecken_temp2 t2 on
t1.wkb_geometry && t2.wkb_geometry;
结果长度应该是187米左右,结果长度只有180米左右。我已经尝试了很多,但我找不到任何原因,为什么会发生这种情况,因此如何解决它。
当我在 ArcGis 中执行此交集时,一切正常。
我试过这个 postgres 9.6.15 和 postgis 2.4
还有
postgres 12.1 和 postgis 3.0,结果相同。
表格和数据可以在这里找到:
表名: mountainbike_pavement_temp2 public.mountainbike_strecken_temp2
从mountainbike_pavement_temp2到mountainbike_strecken_temp2的第一个顶点的距离全为0,在postgis中用ST_Distance计算(见下面的注释)。所以我假设,有一个交叉点。
问题是 pavement
行与 strecken
行不完全重合。具体来说,它们包含一个不在 strecken
线串上的顶点 POINT ( -43663.049707713886 245429.5072260416 )
。这意味着交叉点不包括 strecken
线的整个长度。
下图显示了这一点(点位置被放大以显示差异)。 pavement
是红色,strecken
是蓝色。
这可能适用于 ArcGIS,因为它在计算交点时可能会使用一些捕捉启发式算法。