Я столкнулся с проблемой, связанной с формами сбора данных переписи населения Австралии , предоставленными в формате MapInfo Австралийским бюро статистики .Я загружаю их в базу данных PostGIS с помощью инструмента ogr2ogr , который работает для большинства фигур, но не для всех.
Простой пример проблемы, с которой я сталкиваюсь:запрос, подобный этому (требует загрузки набора данных NSW):
SELECT st_union(wkb_geometry) FROM cd06answ WHERE cd_code_2006 LIKE '1291%'
Результатом этого запроса является не ожидаемая форма, а NULL.
В таблице нет нулевых значений,но есть неверные геометрии.Например,
SELECT cd_code_2006 FROM cd06answ
WHERE cd_code_2006 LIKE '1291%' AND NOT st_isvalid(wkb_geometry)
извлекает значения '1291301' и '1291321'.Если я исключу неверные геометрии, st_union будет успешным.
Подключение Quantum GIS к базе данных позволяет отрисовывать обе фигуры.Они должны быть частью геометрического объединения, поэтому мне нужно как-то решить проблему.
Существуют ли более эффективные способы загрузки данных MapInfo в PostGIS?Или какие-то средства для фиксации данных внутри PostGIS?Так как данные базы данных отображаются нормально, должна быть возможность сохранить их, не так ли?
РЕДАКТИРОВАТЬ: основываясь на отзывах Кристофа, я немного больше экспериментировал с st_buffer и st_snaptogrid.Результат этого запроса:
SELECT
cd_code_2006,
st_isvalid(st_buffer(wkb_geometry,0)),
st_isvalid(st_snaptogrid(wkb_geometry, 0.00000001)),
st_isvalid(st_snaptogrid(wkb_geometry, 0.0000001))
FROM
cd06answ
WHERE
cd_code_2006 LIKE '1291%'
AND
NOT st_isvalid(wkb_geometry)
Это то, что для обеих затронутых геометрий первая и последняя из трех st_isvalids верны, а средняя - нет.
К сожалению, ни один подход не исправляетобъединение, только
SELECT st_union(st_buffer(wkb_geometry,0.4)) FROM cd06answ
WHERE cd_code_2006 LIKE '1291%'
приводит к геометрии, но
SELECT st_union(st_buffer(wkb_geometry,0.3)) FROM cd06answ
WHERE cd_code_2006 LIKE '1291%'
- нет (ранее я пробовал небольшой буферный прием, но не доводил его до этогоуровень).
Это кажется слишком много для исправления.