使用St_INTERSECTS和ST_CROSSES POSTGIS不需要的结果

时间:2015-11-24 13:26:49

标签: postgis

我有一张表l_t_troncon,带有一个gest列LINESTRING。它代表了一条道路。

现在,我想检测路径是否与其他路径相交。

有时,当我使用ST_INTERSECTS时,它会显示为False。 然而,在同一个查询中,ST_DISTANCE表示0,ST_INTERSECTION表示存在交集。

在地图上,有一个交叉点。

它是表本身的连接,SRID是相同的。  和geom列是几何(而不是地理)。

我不知道为什么会这样。 我使用官方postgresql APT repo中的postgresql 9.4和postgis 2.1.8。

有任何解释吗?

我的疑问:

SELECT lt2.id,
   ST_DISTANCE(lt.geom, lt2.geom) as DIS,
   ST_SRID(lt.geom) as SRID,
   ST_ASTEXT(lt.geom) as GEOM1,
   ST_ASTEXT(lt2.geom) as GEOM2,
   ST_CROSSES(lt.geom, lt2.geom) as CROSSES,
   ST_INTERSECTS(lt.geom, lt2.geom) as INTERSECTS,
   ST_DWITHIN(lt.geom, lt2.geom, 0) as DWITHIN,
   ST_EQUALS(ST_ClosestPoint(lt.geom, lt2.geom), ST_ClosestPoint(lt2.geom, lt.geom)) as POINTS_EQUALS,
   ST_ASTEXT(ST_INTERSECTION(lt.geom, lt2.geom)) as INTERSECTION
FROM l_t_troncon lt 
JOIN l_t_troncon lt2 ON lt.id != lt2.id
WHERE lt.id = 3253 ORDER BY DIS ASC;

结果:

ID   DIS              SRID GEOM1                                                                           GEOM2                                                                           CROSSES INTERSECTS DWITHIN POINTS_EQUALS INTERSECTION

3251 0                2154 LINESTRING(1090785.76652617 6536888.19328297,1090833.26031043 6536868.26841502) LINESTRING(1090552.31321667 6538203.74023832,1090799.01544745 6536813.53348014) f       f          t       t             POINT(1090785.76652617 6536888.19328297)
3252 52.7247742247967 2154 LINESTRING(1090785.76652617 6536888.19328297,1090833.26031043 6536868.26841502) LINESTRING(1090799.01544745 6536813.53348014,1097373.76929105 6537183.45894039) f       f          f       f             GEOMETRYCOLLECTION EMPTY
3248 63.7211646996764 2154 LINESTRING(1090785.76652617 6536888.19328297,1090833.26031043 6536868.26841502) LINESTRING(1083213.56795189 6536386.7418127,1090799.01544745 6536813.53348014)  f       f          f       f             GEOMETRYCOLLECTION EMPTY

如果我尝试LINESTRINGS:

SELECT ST_DISTANCE(ST_GEOMFROMTEXT('LINESTRING(1090785.76652617 6536888.19328297,1090833.26031043 6536868.26841502)', 2154),
                   ST_GEOMFROMTEXT('LINESTRING(1090552.31321667 6538203.74023832,1090799.01544745 6536813.53348014)', 2154))

结果是4.06621238136966e-09

SELECT ST_ASTEXT(ST_INTERSECTION(ST_GEOMFROMTEXT('LINESTRING(1090785.76652617 6536888.19328297,1090833.26031043 6536868.26841502)', 2154),
                                 ST_GEOMFROMTEXT('LINESTRING(1090552.31321667 6538203.74023832,1090799.01544745 6536813.53348014)', 2154)))

结果是GEOMETRYCOLLECTION EMPTY

问题似乎只出现在第一个结果上(ID 3251)。对其他人都有好结果

0 个答案:

没有答案