Tôi đang cố gắng thực hiện một số xử lý trên một số lớp đa giác rất lớn. Tuy nhiên, tôi đang gặp phải các lỗi hình học khác nhau như:
NOTICE: Ring Self-intersection at or near point 470396.52017068537 141300.52235257279
CONTEXT: PL/pgSQL function st_intersection(geometry,raster,integer) line 10 at RETURN QUERY
SQL function "st_intersection" statement 1
NOTICE: Ring Self-intersection at or near point 504154.61769969884 140782.04115761846
CONTEXT: PL/pgSQL function st_intersection(geometry,raster,integer) line 10 at RETURN QUERY
SQL function "st_intersection" statement 1
NOTICE: Ring Self-intersection at or near point 505255.50242871145 140803.34860398644
CONTEXT: PL/pgSQL function st_intersection(geometry,raster,integer) line 10 at RETURN QUERY
SQL function "st_intersection" statement 1
NOTICE: Ring Self-intersection at or near point 510312.46970004693 141215.29256710084
CONTEXT: PL/pgSQL function st_intersection(geometry,raster,integer) line 10 at RETURN QUERY
SQL function "st_intersection" statement 1
NOTICE: Ring Self-intersection at or near point 510312.46970004693 141215.29256710084
CONTEXT: PL/pgSQL function st_intersection(geometry,raster,integer) line 10 at RETURN QUERY
SQL function "st_intersection" statement 1
NOTICE: Ring Self-intersection at or near point 511839.50335641927 141115.85781738357
CONTEXT: PL/pgSQL function st_intersection(geometry,raster,integer) line 10 at RETURN QUERY
SQL function "st_intersection" statement 1
NOTICE: Ring Self-intersection at or near point 515064.03024010791 140895.68087158105
CONTEXT: PL/pgSQL function st_intersection(geometry,raster,integer) line 10 at RETURN QUERY
SQL function "st_intersection" statement 1
NOTICE: Ring Self-intersection at or near point 519233.18724611058 140881.47590733573
CONTEXT: PL/pgSQL function st_intersection(geometry,raster,integer) line 10 at RETURN QUERY
SQL function "st_intersection" statement 1
NOTICE: Ring Self-intersection at or near point 521072.73011588014 141044.83299615697
CONTEXT: PL/pgSQL function st_intersection(geometry,raster,integer) line 10 at RETURN QUERY
SQL function "st_intersection" statement 1
NOTICE: Ring Self-intersection at or near point 523331.31943088671 141144.26774587421
CONTEXT: PL/pgSQL function st_intersection(geometry,raster,integer) line 10 at RETURN QUERY
SQL function "st_intersection" statement 1
NOTICE: Ring Self-intersection at or near point 523331.31943088671 141144.26774587424
CONTEXT: PL/pgSQL function st_intersection(geometry,raster,integer) line 10 at RETURN QUERY
SQL function "st_intersection" statement 1
NOTICE: Ring Self-intersection at or near point 523395.24176999065 140725.22130063715
CONTEXT: PL/pgSQL function st_intersection(geometry,raster,integer) line 10 at RETURN QUERY
SQL function "st_intersection" statement 1
NOTICE: Ring Self-intersection at or near point 524531.63890961662 140810.45108610913
CONTEXT: PL/pgSQL function st_intersection(geometry,raster,integer) line 10 at RETURN QUERY
SQL function "st_intersection" statement 1
Tôi đã thử chức năng được đề xuất ở đây: https://trac.osgeo.org/postgis/wiki/UsersWikiCleanPolygons
để làm sạch hình học, mã tôi đã sử dụng là:
UPDATE public.mytable
SET geom=cleangeometry(geom);
Với kết quả:
ERROR: GEOSisSimple: IllegalArgumentException: This method does not support GeometryCollection arguments
và cũng
UPDATE public.valid_mytable
SET geom=ST_MakeValid(geom);
Cái này hoạt động, nhưng chỉ khi lần đầu tiên tôi thay đổi cột hình học của mình thành hình học
ALTER TABLE public.mytable ALTER COLUMN geom SET DATA TYPE geometry;
Sau đó để lại cho tôi một bảng không còn hoạt động với các chức năng khác của tôi!
ERROR: Relate Operation called with a LWGEOMCOLLECTION type. This is unsupported.
Tôi đã thử thay đổi các cột trở lại hình học (MultiPolygon)
ALTER TABLE public.my_table ALTER COLUMN geom SET DATA TYPE hình học (MultiPolygon);
Nhưng điều này thất bại
ERROR: Geometry type (GeometryCollection) does not match column type (MultiPolygon)
Tôi đã thử trải qua PostGIS in Action (Ed lần thứ hai) http://www.manning.com/obe/ nhưng tôi chỉ có thể tìm thấy các chức năng tìm hình học không hợp lệ, nhưng tập dữ liệu của tôi quá lớn để sửa lỗi này, tôi thực sự cần một cái gì đó sẽ sửa chúng tự động.
Tôi đã có thể cô lập các đa giác vấn đề, khi tôi thử và chạy ST_MakeValid () tôi nhận được kết quả:
ERROR: Geometry type (GeometryCollection) does not match column type (MultiPolygon)
********** Error **********
ERROR: Geometry type (GeometryCollection) does not match column type (MultiPolygon)
SQL state: 22023
Tôi đã thực hiện kiểm tra loại trên cột hình học của mình và thông báo loại đó là "MULTIPOLYGON"