POSTGIS: ОШИБКА: Работа со смешанной геометрией SRID. Попытка найти перекрывающиеся геометрии с двумя разными SRIDS / таблицами

POSTGIS_VERSION = 2.1;

У меня две таблицы с двумя разными SRID. Моя цель - показать, какие геометрии из TABLE_B пересекаются с регионом из TABLE_A.

SELECT tablebname, a.geom FROM TABLE_B as a INNER JOIN (SELECT geom FROM TABLE_A WHERE tableAID = '00001') as b ON ST_Intersects(a.geom, b.geom);

Моя структура таблицы (усеченная) выглядит следующим образом

TABLE_A
текст tableAid
геометрия geom (SRID = 3577)

TABLE_B
текст tableBid
геометрия geom (SRID = 4326)

Я попытался преобразовать геометрию с помощью ST_TRANSFORM (geom, 3577), но все равно получаю ту же ошибку «ОШИБКА: Работа со смешанной геометрией SRID».

Используя следующую команду
select distinct(ST_SRID(geom)) as srid, count(*) from tableA group by srid;

Я получаю следующее

srid | count
3566 | 2196
     |   18

Мои попытки изменить последние 18 на 3577 тщетны. Каждый раз, когда я обновляю SRID, он говорит, что успешно или не нашел никакого SRID ‹> 3577.

Любая помощь будет принята. Я могу предоставить более подробную информацию в случае необходимости. Спасибо.


person Rusty Robot    schedule 27.11.2013    source источник
comment
Какая версия PostGIS? 18 отсчетов без SRID, возможно, равны NULL.   -  person Mike T    schedule 27.11.2013
comment
У меня такая же проблема с Debian Stretch, но когда я запускаю из командной строки с помощью psql -dmydb -c SELECT ... он отлично работает, показывая, что это проблема именно внутри pycopg2. Не могли бы вы это исправить?   -  person Eamonn Kenny    schedule 23.07.2019
comment
Если я правильно помню, возможно, я просто установил для всех NULL SRID значение 1 или сопоставил их с SRID остальных данных.   -  person Rusty Robot    schedule 24.07.2019


Ответы (1)


Работает ли это без подзапроса, исправления псевдонима таблицы и использования преобразования?

SELECT b.*, a.*
FROM table_b AS b
INNER JOIN table_a AS a ON
  tableaid = '00001' AND ST_Intersects(ST_Transform(a.geom, 4326), b.geom);

Также обратите внимание, что в исходном запросе вы путаете TABLE_B as a, что, возможно, объясняет, почему ваша попытка с ST_Transform не удалась, поскольку он не преобразовывал предполагаемый столбец a.geom. Кроме того, такой версии PostGIS 9.1 не существует, так что я предполагаю, что у вас 2.x. При настройке с использованием typmods (например, geometry(Polygon, 4326)) они не могут иметь смешанные SRID.

person Mike T    schedule 27.11.2013
comment
Спасибо, Майк, пока выполняется запрос SQL, он не возвращает никаких совпадений. Я знаю, что регионы, которые у меня есть, перекрываются, но запрос не возвращает ни одного. У вас есть возможное объяснение? Спасибо. - person Rusty Robot; 28.11.2013
comment
Ваш SQL-запрос действительно помог найти соседние (пересекающиеся) регионы в одной таблице. Мне нужны пересекающиеся области в таблицах. Любая дополнительная помощь, которую вы можете предоставить, приветствуется. Я буду продолжать заниматься этой проблемой и сообщать вам обо всех изменениях. - person Rusty Robot; 28.11.2013
comment
Ваш SQL был правильным, я использовал неправильный SRID в обеих таблицах. - person Rusty Robot; 10.12.2013