كيف يمكن تحليل أو تسهيل بيانات نظم المعلومات الجغرافية بذكاء (تبسيط المضلعات)؟

StackOverflow https://stackoverflow.com/questions/1849928

سؤال

لدي خرائط تفصيلية للمقاطعات الأمريكية، من خط النمر مجموعات البيانات.كيف يمكنني أخذ عينات من البيانات أو تنعيمها أو تحليلها حتى أحصل على أشكال أكثر استقامة وصندوقية وأقل "ضوضاء" لتمثيل المعالم الجغرافية - في هذه الحالة فقط حدود المقاطعات وخطوط الولايات، ولكن ربما أيضًا في الحالة العامة؟

يمكن أن يتم أخذ العينات في وقت العرض إذا كان من الممكن القيام بذلك بكفاءة، أو يمكن إنشاء مجموعة بيانات متوازية وتخزينها.انا استخدم PostGIS, ، والخطوط عبارة عن خطوط متعددة تم إنشاؤها بواسطة shp2pgsql -- ولكن أي حل تأخذ فيه خطًا متعرجًا وتختصره إلى خط أكثر سلاسة له نفس الأهمية تقريبًا بالنسبة للمترجم البشري سيكون مفيدًا للغاية.

هل كانت مفيدة؟

المحلول

المشكلة في التخلص من النقاط ببساطة هي أنه يمكنك تشويه شكل المضلع الأصلي بسرعة.النهج الأفضل هو أن نتعامل مع الأمر من الاتجاه الآخر؛ابدأ بتقريب أساسي للمضلع ثم قم بتحسينه للأعلى نحو الشكل المعقد.

مثال ممتاز على هذا النهج هو خوارزمية دوغلاس-بويكر.تبدأ برأسين مرسومين من المضلع الكامل.أضف قمة ثالثة عن طريق تحديد النقطة الأبعد عن الحافة المرسومة بين الرأسين الأولين.استمر في إضافة النقاط حتى تحصل على ما يشبه المضلع الأصلي بدرجة كافية.

نصائح أخرى

دوغلاس بيكر هو بالتأكيد النهج الصحيح.هناك بعض الطرق البسيطة للوصول إلى تطبيقاتها في PostGIS وQGIS والتي أعتقد أنني سأضيفها هنا لأولئك الذين يصادفون هذا المنشور بسؤال مماثل.الهدف هو البدء بشيء مثل هذا:

alt text

وينتهي بشيء مثل هذا:

alt text

في PostGIS، يتم تنفيذ Douglas-Peucker كـ simplify, ، النحو، مفصل هنا في bostongis.org, ، هو بعض البديل من:

SELECT transform(simplify(transform(the_geom, 2249), 500),4326) from the_geo_table

وقد نجح هذا الأمر بشكل جيد للغاية حتى في مجموعة البيانات الوطنية الكاملة، مع وجود بعض الأخطاء القليلة التي يبدو أنها ناجمة عن سوء البيانات الأساسية.واتضح أيضًا أن عنصر القائمة موجود في QGIS Tools > Geometry Tools > Simplify Geometries سيتم تصدير ملف شكل مبسط لأي شكل هندسي وإضافته كطبقة إلى مشروعك الحالي.

هذه مجموعة أدوات أساسية جدًا وقد طرحت السؤال بمستوى منخفض جدًا، على الرغم من أنه كان من الجيد تعلم الرياضيات الأساسية، إلا أن هناك تفسيرًا جيدًا لذلك هنا:http://www.mappinghacks.com/code/PolyLineReduction/, ، بالإضافة إلى نموذج التعليمات البرمجية الذي تبين أنه ليس ضروريًا جدًا!

بدلاً من QGIS، أقترح استخدام ogr2ogr لأنه لا يحذف المضلعات!

ogr2ogr output.shp input.shp -simplify 0.0001

فيما يلي خوارزمية تجانس تكرارية بسيطة:

لكل ثلاث نقاط متتالية على أي مسار، إذا كانت النقطة الوسطى ليس بها تقاطعات وتقع ضمن زاوية عتبة صغيرة للمسار المباشر بين النقطتين الخارجيتين، فقم بإزالتها.

كرر حتى تشعر بالرضا.

يمكنك أيضًا تجربة خوارزمية Visvalingam، التي تزيل بشكل متكرر الجزء الأقل وضوحًا من السطر.فيما يلي شرح رائع لتلك الخوارزمية:

يمكنك أيضًا استخدام تبسيط.js والذي يستخدم مزيج من دوغلاس بيكر وخوارزميات المسافة الشعاعية.توجد أيضًا روابط للعديد من المنافذ للغات الأخرى المدرجة في الموقع مشروع جيثب

الإجابة بواسطة @unmounted صحيحة، ولكن أود إضافة اقتراح آخر.

استخدم دائمًا الوظيفة ST_SimplifyPreserveTopology بدلاً من ST_Simplify في PostGIS.كلاهما يستخدم نفس الخوارزمية الأساسية (Douglas-Peucker)، لكن الأول يتجنب أي تبسيط قد يؤدي إلى أشكال هندسية غير صالحة.على سبيل المثال، قد ينتج عن ST_Simplify هندسة تتقاطع مع نفسها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top