Я написал быстрый сценарий PL / pg SQL, который создает два новых столбца для centroid_longitude
и centroid_latitude
и использует данные из столбца геометрии PostGIS и ST_X()
, ST_Y()
и ST_Centroid()
Функции PostGIS для вычисления значений.
alter table nhd_hr_nhdwaterbody ADD COLUMN centroid_latitude numeric(19,11);
alter table nhd_hr_nhdwaterbody ADD COLUMN centroid_longitude numeric(19,11);
UPDATE nhd_hr_nhdwaterbody SET centroid_longitude=ST_X(ST_Centroid(geom)), centroid_latitude=ST_Y(ST_Centroid(geom));
Когда я запускаю сценарий для базы данных с несколькими миллионами записей, я получаю следующую ошибку:
ERROR: lwgeom_centroid: GEOS Error: IllegalArgumentException: Invalid number of points in LinearRing found 3 - must be 0 or >= 4
Как ясно указано в ошибке , у скрипта возникла проблема, потому что ST_Centroid()
требует, чтобы геометрия имела 0 точек или> = 4, но некоторые из моих данных не имеют такого количества точек. В моем текущем приложении я просто хотел бы пропустить записи, которые не соответствуют критериям наличия 0 или более или равных 4 баллам.
Есть ли способ изменить этот сценарий, чтобы недействительные геометрии просто их значение широты и долготы устанавливается в нуль
1016 * Пример геометрия: 1018 * "01060000A0E610000001000000010300008001000000090000002CCEE69D9E9151C0286E1A1F3E3C46400000000000000000682D06E09F9151C0C0E9DF28403C46400000000000000000A48D6E9F9F9151C078231061423C464000000000000000009C9D35FF9E9151C0B848616C433C46400000000000000000C88E061C9D9151C020568951433C4640000000000000000008A4F59B9C9151C0B8CFD508433C4640000000000000000060C4A6B09C9151C0004FD209423C464000000000000000003884B6DB9C9151C0088727EE3F3C464000000000000000002CCEE69D9E9151C0286E1A1F3E3C46400000000000000000"