Выбор стартовой строки, где geom возвращает другой geom - PullRequest
2 голосов
/ 27 июня 2019

У меня есть таблица с множественными строками, и я хотел бы найти строку, которая начинается в определенной точке.Я использую:

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)

Проблема здесь в том, что результат имеет другой геом.Это не то, что я просил.Это событие не содержит геом, который я искал.

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

Любая идея, что я делаю неправильно, или любое предложение, которое я могу изменитьв моем запросе?

1 Ответ

2 голосов
/ 27 июня 2019

Сравнение геометрий с использованием = может не привести к ожидаемому результату. До PostGIS 2.4 равенство основывалось на ограничивающей рамке геометрии, а не на самих вершинах, и, вероятно, усекало незначительные цифры. Проверьте эту превосходную статью .

Вы можете заменить = на ST_Equals, что проверяет каждую вершину на точное пространственное равенство.

При этом ваши ожидания могут быть слишком завышенными. Расстояние между вашей геометрией и начальной точкой линии составляет 1,266e-005 м, поэтому около 10 микрометров ... большинство пользователей / программ ГИС считают две точки равными.

...