【问题标题】:Selecting a start line with where geom returns different geom选择geom返回不同geom的起始行
【发布时间】:2019-06-27 07:17:42
【问题描述】:

我有一个包含多行字符串的表格,我想找到一条从某个点开始的行。我正在使用:

gis=>  select * from (select gid, ST_StartPoint(ST_LineMerge((geom))) as start from aw_pipes) s where s.start = '0101000020E6100000D050E433E678D73F71F37608AF284A40' order by gid;
 gid  |                       start
------+----------------------------------------------------
 1458 | 0101000020E6100000809BB933E678D73FE3D07608AF284A40
(1 row)

这里的问题是结果有不同的几何。这不是我要求的。它不包含我正在搜索的 geom。

gis=> select geom from aw_pipes where gid = 1458;
                                                     geom
--------------------------------------------------------------------------------------------------------------
 0105000020E610000001000000010200000002000000809BB933E678D73FE3D07608AF284A40CDD4B35E4E7BD73F62DB7D83AD284A40
(1 row)

gis=> select ST_DumpPoints('0105000020E610000001000000010200000002000000809BB933E678D73FE3D07608AF284A40CDD4B35E4E7BD73F62DB7D83AD284A40');
                        st_dumppoints
--------------------------------------------------------------
 ("{1,1}",0101000020E6100000809BB933E678D73FE3D07608AF284A40)
 ("{1,2}",0101000020E6100000CDD4B35E4E7BD73F62DB7D83AD284A40)
(2 rows)

我的 postgis 版本是:

gis=> select PostGIS_Version ();
            postgis_version
---------------------------------------
 2.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1

知道我做错了什么或有什么建议可以在我的查询中更改吗?

【问题讨论】:

    标签: sql select postgis where-clause


    【解决方案1】:

    使用= 比较几何可能不会得到您期望的结果。在 PostGIS 2.4 之前,相等性基于几何边界框,而不是顶点本身,并且可能会截断无关紧要的数字。检查这个优秀的article

    您可以将= 替换为ST_Equals,它会检查每个顶点的精确空间相等性。

    话虽如此,您的期望可能有点太高了。您的几何图形和线起点之间的距离是 1.266e-005 m,所以大约 10 micrometers... 大多数 GIS 用户/软件会认为这两个点是相等的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 2013-09-07
      • 1970-01-01
      相关资源
      最近更新 更多