ลดความซับซ้อนของรูปหลายเหลี่ยมที่อยู่ติดกันโดยใช้ PostGIS


24

ฉันพบปัญหาที่ทำให้ชุดรูปหลายเหลี่ยมที่อยู่ติดกันง่ายขึ้น ถ้าฉันทำให้รูปหลายเหลี่ยมแต่ละอันแยกจากกันด้วยอัลกอริทึม Douglas – Peucker (ซึ่งใช้โดยเครื่องมือโอเพนซอร์ซหลายแห่ง) รูปหลายเหลี่ยมที่เป็นผลลัพธ์มักจะไม่ติดกันอีกต่อไป ปัญหานี้มีอยู่เช่นเมื่อทำให้ชายแดนของประเทศ / จังหวัดง่ายขึ้น

ใครบ้างมีวิธีแก้ปัญหาโดยใช้ PostGIS

คำตอบ:


19

โมเดลเวกเตอร์ทอพอโลยีจะให้สิ่งที่คุณต้องการ ในที่เก็บข้อมูลแบบไม่ทอพอโลยี (เช่นรูปร่างไฟล์) ขอบเดียวระหว่างรูปทรงเรขาคณิตจะถูกเก็บไว้สองครั้ง ในเวกเตอร์ทอพอโลยีพื้นที่จะถูกจัดเก็บแยกต่างหากจากเส้นดังนั้นสามารถทำการปรับได้โดยไม่มีผลกระทบต่อโครงสร้าง ฉันไม่สามารถหาไดอะแกรมที่ดีดังนั้นฉันจึงสร้างตัวอย่างง่าย ๆ นี้โดยคำนวณพื้นที่ A, B และ C จากจุดตัดของเส้น (เชื่อมต่อ 1-4) ซึ่งแยกพวกมันออก ตัวอย่างของเวกเตอร์ทอพอโลยี

รุ่นนี้จะถูกใช้โดย ArcInfo เป็นความคุ้มครองในฐานะ GRASS รูปแบบเวกเตอร์เริ่มต้นและสามารถนำมาใช้ในการ PostGIS กับการทดลองเครื่องมือ PostGIS โทโพโลยี บางทีวิธีที่ง่ายกว่านั้นคือการแปลงข้อมูลของคุณไปเป็น linework การลบไฟล์ที่ซ้ำซ้อนและสร้างรูปหลายเหลี่ยมของคุณใหม่หลังจากการทำให้เข้าใจง่าย


15

คุณต้องการเปลี่ยนรูปหลายเหลี่ยมของคุณเป็นเส้นทำให้เส้นเหล่านั้นเป็นขอบครอบคลุมง่ายลดความซับซ้อนของขอบเหล่านั้นแล้วสร้างกลับเป็นรูปหลายเหลี่ยมอีกครั้งและในที่สุดใช้จุดในรูปหลายเหลี่ยมเพื่อเข้าร่วมคุณสมบัติของรูปหลายเหลี่ยมเก่าอีกครั้งด้วย อันใหม่.

CREATE TABLE rings AS SELECT (ST_DumpRings(polys)).geom AS rings FROM polytable;
CREATE TABLE simplerings AS SELECT ST_Union(rings) AS simplerings FROM rings;
CREATE TABLE newpolycollection AS SELECT ST_Polygonize(ST_Simplify(simplerings, 10.0)) AS geom FROM simplerings;
CREATE TABLE newpolysnoattributes AS SELECT (ST_Dump(geom)).geom FROM newpolycollection;
CREATE TABLE newpolytable AS SELECT new.geom, old.attr FROM newpolysnoattributes new, polytable old WHERE ST_Contains(new.geom, ST_PointOnSurface(old.polys));

มีข้อผิดพลาดในข้างต้น แต่แนวคิดหลักอยู่ที่นั่น คุณสามารถทำได้ทั้งหมดในแบบสอบถามเดียวหากคุณต้องการ


2

เพื่อหลีกเลี่ยงปัญหานี้คุณควรสร้างแบบจำลองข้อมูลของคุณโดยใช้ข้อ จำกัด โทโพโลยี http://mapshaper.org/ทำ


-1

คุณต้องทำการ Tessellate ในทฤษฎี ARC / INFO เก่าของการสร้างรูปทรงเรขาคณิตรูปทรงเรขาคณิตที่อยู่ติดกันสองรูปทรงถูกสร้างขึ้นโดยหนึ่งรูปหลายเหลี่ยมและแบ่งปันรูปหลายเหลี่ยมนี้ ดังนั้นเมื่อคุณทำการวางแนวมันจะทำการวางแนวทั้งสองด้านเพราะมันอ้างอิง polyline เดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.