ฉันพยายามทำการประมวลผลบางอย่างบนเลเยอร์รูปหลายเหลี่ยมที่มีขนาดใหญ่มาก อย่างไรก็ตามฉันพบข้อผิดพลาดทางเรขาคณิตหลายอย่างเช่น:
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
ฉันได้ลองใช้ฟังก์ชั่นที่แนะนำที่นี่: https://trac.osgeo.org/postgis/wiki/UsersWikiCleanPolygons
สำหรับการทำความสะอาดรูปทรงเรขาคณิต, รหัสที่ฉันใช้อยู่:
UPDATE public.mytable
SET geom=cleangeometry(geom);
ด้วยผลลัพธ์:
ERROR: GEOSisSimple: IllegalArgumentException: This method does not support GeometryCollection arguments
และนอกจากนี้ยังมี
UPDATE public.valid_mytable
SET geom=ST_MakeValid(geom);
อันนี้ใช้ได้ แต่ถ้าฉันเปลี่ยนคอลัมน์เรขาคณิตของฉันเป็นเรขาคณิตเป็นครั้งแรก
ALTER TABLE public.mytable ALTER COLUMN geom SET DATA TYPE geometry;
ซึ่งทำให้ฉันมีโต๊ะที่ไม่สามารถใช้งานกับฟังก์ชั่นอื่น ๆ ของฉันได้อีกแล้ว!
ERROR: Relate Operation called with a LWGEOMCOLLECTION type. This is unsupported.
ฉันลองเปลี่ยนคอลัมน์กลับไปเป็นรูปทรงเรขาคณิต (MultiPolygon)
แก้ไขตาราง public.my_table แก้ไขคอลัมน์คอลัมน์ตั้งประเภทข้อมูลเรขาคณิต (MultiPolygon);
แต่สิ่งนี้ล้มเหลว
ERROR: Geometry type (GeometryCollection) does not match column type (MultiPolygon)
ฉันได้ลองใช้งาน PostGIS in Action (Second Ed) http://www.manning.com/obe/แต่ฉันสามารถค้นหาฟังก์ชั่นสำหรับการค้นหารูปทรงเรขาคณิตที่ไม่ถูกต้องเท่านั้น แต่ชุดข้อมูลของฉันมีขนาดใหญ่มากที่จะแก้ไขปัญหานี้ด้วยตนเองฉันจริงๆ ต้องการบางสิ่งที่จะแก้ไขได้โดยอัตโนมัติ
ฉันสามารถแยกรูปหลายเหลี่ยมปัญหาได้เมื่อฉันพยายามเรียกใช้ ST_MakeValid () ฉันได้รับผลลัพธ์:
ERROR: Geometry type (GeometryCollection) does not match column type (MultiPolygon)
********** Error **********
ERROR: Geometry type (GeometryCollection) does not match column type (MultiPolygon)
SQL state: 22023
ฉันทำการตรวจสอบประเภทในคอลัมน์รูปทรงเรขาคณิตของฉันและมันบอกว่าเป็นประเภท "MULTIPOLYGON"