أكثر

كيفية تحويل مضلع معين إلى أضلاع دنيا

كيفية تحويل مضلع معين إلى أضلاع دنيا


لدي ملف KML هذا بداخله متعدد الأضلاع.

رابط الملف موجود هنا

متعدد المضلعات. zip

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


إليك طريقة سأحاول: أولاً قم بتفجير متعدد الأضلاع في مجموعة من الميزات الفردية. (في QGIS الموجود ضمن Vector-> Geometry Tools-> Single part to Multipart) ثم قم باستيراد المضلعات إلى قاعدة بيانات مكانية مثل Spatialite ، وقم بتشغيل استعلام يبحث عن المضلعات التي لا تلمس أي مضلعات أخرى. بشكل عام ، ستكتب استعلامًا يقارن جدول المضلع مع نفسه ، شيئًا مثل:

حدد p1.id من polys p1 ، polys p2 حيث p1.id <> p2.id و ST_Touches (p1.geometry ، p2.geometry) = 0 ؛

استدامة التنسيقات الرقمية: التخطيط لمجموعات مكتبة الكونغرس

وصف التنسيق هذا للإصدار الأول من GeoSON ، الذي نشرته مجموعة من الأفراد في يناير 2008 ويصف نفسه باسم GeoJSON ، الإصدار 1.0. تم اعتماد وتنفيذ GeoJSON بثبات وسرعان ما لعبت دورًا مهمًا في العديد من منتجات قواعد البيانات المكانية وواجهات برمجة تطبيقات الويب ومنصات البيانات المفتوحة. طالب المنفذون بوضع معايير رسمية وتحسينات في المواصفات. في عام 2015 ، تم تعيين مجموعة عمل IETF (فرقة عمل هندسة الإنترنت) لتحديد التنسيق بشكل أكثر دقة والعمل كدليل أفضل للمنفذين. راجع ميثاق مجموعة عمل IETF الجغرافي JSON. نشرت مجموعة العمل RFC 7946 في أغسطس 2016 كمعيار IETF مقترح. في الوقت نفسه ، تم الإعلان عن أن مواصفات GeoJSON لعام 2008 قد عفا عليها الزمن. يعتمد التنسيق المحدد في RFC 7946 ، والذي لم يتم وصفه بشكل منفصل على موقع الويب هذا ، بشكل وثيق على إصدار 2008 ، ولكنه يحتوي على بعض التغييرات التي تهدف إلى إمكانية التشغيل البيني بشكل أكثر موثوقية. في هذا الوصف ، أي عبارة تنطبق فقط على إصدار 2008 ، ستستخدم الاسم GeoJSON_2008 لتوضيح ذلك.

GeoJSON هو تنسيق لتبادل البيانات الجغرافية المكانية يعتمد على JavaScript Object Notation (JSON). GeoJSON هو تنسيق يمثل مجموعة متنوعة من هياكل البيانات الجغرافية. قد يمثل كائن GeoJSON هندسة (منطقة من الفضاء) ، أو معلم (كيان محدد مكانيًا أو موجودًا) ، أو مجموعة من الميزات. يدعم GeoJSON الأنواع الهندسية المدرجة أدناه كأنواع الكائنات. تحتوي ميزة GeoJSON على كائن هندسي وخصائص إضافية تمثل مجموعة المعالم قائمة بالمعالم.

بنية بيانات GeoJSON الكاملة هي دائمًا كائن JSON واحد يتكون من مجموعة من أزواج الاسم / القيمة ، المعروفة بالأعضاء. تفرض مواصفات GeoJSON قيودًا إضافية لتعريف كائن GeoJSON:

  • يجب أن يحتوي كائن GeoJSON على عضو باسم "النوع". يجب أن تكون قيمة عضو النوع واحدة مما يلي: هدف, متعدد النقاط, LineString, MultiLineString, مضلع, متعدد المضلع, مجموعة الهندسة, ميزة، أو ميزةجمع.
  • قد يحتوي كائن GeoJSON_2008 على عضو "crs" ، يجب أن تكون قيمته كائن نظام مرجعي إحداثي.
  • قد يحتوي كائن GeoJSON على عضو "bbox" ، يجب أن تكون قيمته عبارة عن مصفوفة صندوق محيط

الاستخدام المحلي

خبرة LC أو مقتنيات موجودة
تفضيل LC بيان التنسيقات الموصى به لمكتبة الكونجرس (RFS) يتضمن GeoJSON كتنسيق مقبول لنظام المعلومات الجغرافية (GIS) - صور المتجهات.

عوامل الاستدامة

  • مواصفات الإصدار 1.0 من تنسيق GeoJSON (من 2008) على موقع geojson.org.
  • تم إرسال تنسيق GeoGSON - المسودة - الخادم الشخصي - geojson-00 (اعتبارًا من يناير 2014) إلى IETF.

تم اعتماد تنسيق GeoJSON بسرعة لتطبيقات الويب التي تتضمن رسم الخرائط. يحتوي موقع GeoJSON wiki على صفحة تسرد مستخدمي GeoJSON (آخر تحديث في 2013). المناقشة المتبقية للتبني هنا تعود إلى عام 2014. لم يحاول القائمون على تجميع هذا المورد تحديد التبني النسبي للإصدارات المختلفة من GeoJSON. نرحب بالتعليقات.

تم استخدام GeoJSON لتحديد التغطية الجغرافية للتطبيقات التي استخدمت MapKit من Apple ، بدءًا من iOS 7 (تم إصداره في سبتمبر 2013). راجع التعليمات الخاصة بتوفير الاتجاهات في OS X v10.9 و iOS 7.0. تم استخدام تنسيق GeoJSON_2008 بواسطة تطبيق الخرائط ومتجر التطبيقات للبحث عن التطبيقات في متجر التطبيقات القادرة على توفير الاتجاهات في منطقة مستهدفة. انظر إعلان التغطية الجغرافية المدعومة للاتجاهات.

على الرغم من أن ESRI تدعم تنسيقًا أكثر تعقيدًا قائمًا على JSON في مواصفة GeoServices REST ، فإن العديد من المشاريع مفتوحة المصدر ، بما في ذلك مشاريع ESRI تعمل على تطوير أدوات التحويل. انظر المراجع المفيدة أدناه.

يعتمد GeoJSON على نص يستخدم UNICODE ويستخدم بنية بسيطة للغاية. الأسماء المستخدمة لأنواع الكائنات المحددة في المواصفات هي كلمات إنجليزية شائعة. GeoJSON سهل على البشر القراءة والكتابة ، كما يسهل على الآلات التحليل والتوليد. يتم استخدام UTF-8 بشكل أكثر شيوعًا ، ولكن يُسمح أيضًا باستخدام UTF-16 و UTF-32.

عوامل الجودة والوظائف

يعتمد GeoJSON على JSON ويرث نفس القيود.

تم تصميم JSON لتبادل البيانات ولا يستخدم كتابة بيانات قوية للأرقام أو لديه دعم صريح للتواريخ. يتم تمثيل جميع البيانات كنص ، مع وجود الأرقام في الأساس 10 كتسلسل من الأرقام (بما في ذلك تدوين الأس الشائع للتعبير عن أعداد صغيرة جدًا أو كبيرة جدًا). JSON غير مناسب للتطبيقات التي تتطلب بيانات ثنائية. القيم المنطقية حقيقية و خاطئة مسموح بها كقيم. يوجد حد أدنى من الدعم لترميز البيانات المفقودة ، باستخدام امتداد باطل القيمة.

الغرض من GeoJSON هو دعم إنشاء الخرائط من خلال توفير معلومات الإسناد الجغرافي للمعالم من خلال المواقع الجغرافية المكانية ، والأشياء الهندسية التي تم إنشاؤها من المواضع. يتم تمثيل المواضع في خطوط الطول والعرض والارتفاع اختياريًا كأرقام عشرية. الافتراضي (موصى به بشدة ولكنه غير مطلوب في GeoJSON_2008) هو WGS84 ، ولكن يمكن تحديد أنظمة بديلة. المصطلح الموصى به لأنظمة CRS هو استخدام OGC (اتحاد جغرافي مكاني مفتوح) URNs ، على سبيل المثال urn: ogc: def: crs: OGC :: CRS84 (لـ WGS84). يمكن أيضًا استخدام معرّفات EPSG ، المستمدة من المجموعة الأوروبية لمسح البترول والتي تحتفظ بها الآن الرابطة الدولية لمنتجي النفط والغاز (OGP). بدلاً من ذلك ، يمكن ربط معلمات CRS بواسطة عنوان URL.


كيفية تحويل محدد متعدد الأضلاع إلى أضلاع دنيا - نظم المعلومات الجغرافية

معلومات إضافية: تتوفر معلومات إضافية حول الأنشطة الميدانية التي تم اشتقاق مجموعة البيانات منها عبر الإنترنت على & lthttp: //walrus.wr.usgs.gov/nearshorehab/>

أي استخدام لأسماء التجارة أو المنتجات أو الشركات هو لأغراض وصفية فقط ولا يعني موافقة حكومة الولايات المتحدة.

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

كوكران ، جاي آر ، هارني ، جودي ، دارتنيل ، بيت ، جولدن ، نادين ، وشيزار ، هانك ، 2005 ، مضلعات موطن خليج الجليد :.

الروابط عبر الإنترنت:

Cochrane ، Guy R. ، Harney ، Jodi ، Dartnell ، Pete ، Golden ، Nadine ، and Chezar ، Hank ، 2005 ، الخصائص الجيولوجية للموائل القاعية في Glacier Bay ، جنوب شرق ألاسكا الطبعة: 1.0: Open-File Report USGS OFR 2006-1081، هيئة المسح الجيولوجي الأمريكية ، برنامج الجيولوجيا الساحلية والبحرية ، الجيولوجيا الساحلية والبحرية الغربية ، سانتا كروز ، كاليفورنيا.

الروابط عبر الإنترنت:

الغرب_المحاور_المنسقة: -136.402813 الشرق_المحاور_المنسقة: -135.911540 شمال_الحد_المنسق: 58.757356 الجنوب_الرابط_المنسق: 58.349164

تاريخ البدء: 01 مارس 1999 تاريخ الانتهاء 18 يوليو 2000 Currentness_Reference: حالة الأرض

إسقاط الخريطة المستخدم هو NAD_1983_UTM_Zone_8N.

معلمات الإسقاط: مستقيم-عمودي_خط_القطب: -135 قياسي_موازي: 0.999600 خطأ_الصوم: 500000.000 خطأ في القيمة: 0.000

يتم ترميز الإحداثيات المستوية باستخدام زوج الإحداثيات
يتم تحديد Abscissae (إحداثيات س) لأقرب 0.000064
يتم تحديد الأوامر (إحداثيات ص) لأقرب 0.000064
الإحداثيات المستوية محددة بالأمتار

المرجع الأفقي المستخدم هو مرجع أمريكا الشمالية لعام 1983.
الشكل البيضاوي المستخدم هو النظام المرجعي الجيوديسي 80.
المحور شبه الرئيسي للقطع الناقص المستخدم هو 6378137.
تسطيح الشكل الإهليلجي المستخدم هو 1 / 298.2572222.

FID الاسم المستعار: الشكل نوع البيانات: الهندسة العرض: 0 الدقة: 0 المقياس: 0 التعريف: هندسة الميزة. مصدر التعريف: ESRI

FID الاسم المستعار: FID نوع البيانات: عرض الرقم: 6 التعريف: رقم الميزة الداخلية. مصدر التعريف: ESRI

GRIDCODE الاسم المستعار: GRIDCODE نوع البيانات: عرض الرقم: 10

MEGA_ID الاسم المستعار: MEGA_ID نوع البيانات: عرض السلسلة: 10

BOTTOM_ID الاسم المستعار: BOTTOM_ID نوع البيانات: عرض السلسلة: 10

MSO_MCR_ID الاسم المستعار: MSO_MCR_ID نوع البيانات: عرض السلسلة: 10

MDFIR_ID الاسم المستعار: MDFIR_ID نوع البيانات: عرض السلسلة: 10

SLOPE_ID الاسم المستعار: SLOPE_ID نوع البيانات: عرض السلسلة: 10

COMPLEX_ID الاسم المستعار: COMPLEX_ID نوع البيانات: عرض السلسلة: 10

الاسم المستعار للمنطقة: نوع بيانات المنطقة: عرض السلسلة: 200

COMMENT Alias: COMMENT نوع البيانات: عرض السلسلة: 25

حوض الاستحمام الاسم المستعار: حوض الاستحمام نوع البيانات: عرض السلسلة: 50

الاسم المستعار MEGA: MEGA نوع البيانات: تعويم العرض: 19 عدد الكسور العشرية: 11

أسفل الاسم المستعار: الأسفل نوع البيانات: سلسلة

MSO_MCR الاسم المستعار: MSO_MCR نوع البيانات: عرض السلسلة: 50

MDFR الاسم المستعار: MDFR نوع البيانات: عرض السلسلة: 50

HAB_TYPE الاسم المستعار: HAB_TYPE نوع البيانات: عرض السلسلة: 50

SLOPE Alias: SLOPE نوع البيانات: سلسلة العرض: 50

COMPLEXITY الاسم المستعار: COMPLEXITY نوع البيانات: عرض السلسلة: 50

سمات تصنيف الموائل القاعية: الميجابيتات ، وصلابة القاع ، والسكن المتوسط ​​، والمعدلات من Green and others ، 1999. CODE هي مزيج من سمات الموائل. MEGA_ID تعني "البحار الداخلية ، المضايق." BOTTOM_ID هي h للقاع الصلب ، أو m للقاع الصلب واللين المختلط ، أو s لقاع الرواسب الرخوة MSO_MRC_ID هي موائل كبيرة موصوفة في Greene وآخرون 1999. MDFR_ID هي معدّلات لوصف النسيج أو ليثولوجيا قاع البحر وتظهر في الكود مسبوقًا بشرطة سفلية (_). بما في ذلك الوضع الثنائي (_b) ، والواجهة (_i) ، والتموجات (_r) ، والاضطرابات الحيوية بشدة (_t) ، وفئة الاستحمام القريبة من الشاطئ & gt-75m (_x) ، وفئة الاستحمام القريبة من الشاطئ & lt = -75m و GT-200m (_y).

الكيان_و_السمات_التفاصيل_الخاصة: تم تعديل أنواع سمات الموئل بعد Greene و GH و Yoklavich و MM و Starr و RM و O'Connell و VM و Wakefield و WW و Sullivan و DE و McRea و JE و Cailliet ، GM ، 1999. مخطط تصنيف لموائل قاع البحار العميقة . Oceanologica Acta ، 22 ، 663-678.

من الذي انتج مجموعة البيانات؟

  • جاي ر.كوكران
  • جودي هارني
  • بيت دارتنيل
  • نادين جولدن
  • هانك شيزار

(831) 427-4754 (صوت)
(831) 427-4748 (فاكس)
[email protected]

لماذا تم كتابة مجموعة المعلومات؟

كيف تم انشاء هذه المعلومات؟

التاريخ: 01-Mar-2006 (العملية 1 من 2) ----------------------------- بدأ بيت دارتنيل هنا ---- ------------------------------------- أعد بيت دارتنيل صورة ERDAS fourclass.img

طرق التصنيف الجيومورفي: تم تحليل بيانات الحزم المتعددة لخليج جلاسير لأول مرة باستخدام عملية تصنيف شجرة القرار الهرمية. استخدم التصنيف أربع صور ، الصورة الأصلية لكثافة التشتت الخلفي ، ومنحدر قاع البحر ، واثنين من الصور النقطية المشتقة المحسوبة من قياس الأعماق الأصلي والصور المبعثرة المرتدة ، صورة تباين قياس الأعماق 3 × 3 ، وصورة تباين التشتت الخلفي المرشح 3 × 3. تم حساب التباين على أنه تباين قياس الأعماق أو التشتت الخلفي داخل النواة. المنطقة التي تحتوي على مجموعة كبيرة من تضاريس الأعماق ، مثل نتوء صخري ، سيكون لها تباين كبير في قياس الأعماق. سيكون للمنطقة الملساء تباين منخفض في قياس الأعماق. تم تحليل التبعثر العكسي بطريقة مماثلة لمنطقة ذات تقلبات عالية في التشتت الخلفي ، مثل نتوء (BS مرتفع) مع جيوب من الرواسب (BS منخفضة) سيكون لها تباين كبير في التشتت الخلفي ، في حين أن قاع البحر المسطح والمتجانس سيكون له تباين منخفض في التشتت الخلفي . تم حساب صور التباين من خلال توليد صورتين وسيطتين ، صورة قصوى وصورة دنيا. تم حساب الحد الأقصى للصورة عن طريق تشغيل مرشح (3 × 3 خلايا) أعاد القيمة القصوى داخل النواة إلى الخلية المركزية. تم حساب الحد الأدنى للصورة عن طريق تشغيل مرشح أعاد الحد الأدنى للقيمة داخل النواة إلى الخلية المركزية. تم إنشاء صور التباين من الفرق بين الحد الأقصى والحد الأدنى للصور. تعمل التصنيفات غير الخاضعة للإشراف على صورتي التباين ، على الصورة الأصلية ذات كثافة التشتت الخلفي ، وفي قاع البحر ، جمعت صورة منحدر قاع البحر وحدات البكسل في خمس مجموعات مرقمة من واحد إلى خمسة ، مع واحدة تمثل تباينًا / شدة / منحدرًا منخفضًا للغاية ، 2 تمثل انخفاضًا منخفضًا التباين / الشدة / المنحدر ، 3 يمثل تباينًا متوسطًا / شدة / منحدرًا ، 4 يمثل تباينًا / شدة / انحدارًا ، و 5 يمثل تباينًا / شدة / ميلًا عاليًا جدًا.

ثم تم تحليل الصور المصنفة الأربع غير الخاضعة للإشراف باستخدام تصنيف شجرة القرار الهرمي الذي يعد جزءًا من حزمة برامج ERDAS Imagine 8.4 (ERDAS ، 1999). التصنيف هو نهج قائم على القواعد يستخدم التسلسل الهرمي للشروط لتحليل بيانات الإدخال في مجموعة من الفئات. تم تطوير إطار عمل شجرة القرار من قواعد نصية ومتغيرات وفرضيات محددة تجريبياً. الفرضية عبارة عن فئة إخراجية ، مثل الطين المتجانس دقيق الحبيبات ، والمتغير هو صورة نقطية للقيم المشتقة (أي تباين قياس الأعماق) ، والقاعدة عبارة عن بيان شرطي حول قيم متغير البكسل (البيانات) التي يصف الفرضية. نظرًا لأن الصور الأربع المصنفة غير الخاضعة للإشراف مسجلة بشكل مشترك مع بعضها البعض ، يمكن إنشاء قواعد تربط قيم البكسل داخل أو بين الصور التي ستصنف في النهاية صورة جيومورفولوجية جديدة لقاع البحر. يمكن ربط العديد من القواعد والفرضيات معًا في تسلسل هرمي يصف الفرضية.

استندت قواعد عملية تصنيف شجرة القرار إلى ملاحظات فيديو قاع البحر. تم تطوير القواعد لتصنيف قاع البحر بشكل صحيح عبر مقطع الكاميرا. تم تصنيف المناطق التي لم تكن معروفة من قبل بالمثل بناءً على نفس هذه القواعد.

النتائج: أدى الجمع بين الفرضيات والقواعد والمتغيرات في شجرة القرار الهرمية إلى إنتاج خريطة لمقاطعات Glacier Bay Geomorphic. المناطق المصنفة على أنها `` عالية التعقيد / منحدر مرتفع / صخرة أو صخور مرصوفة '' مرتبطة بكثافة تناثر رجعي منخفضة جدًا إلى عالية جدًا (الجدول 1) ، وتباين منخفض إلى مرتفع للغاية ، وتباين متوسط ​​إلى مرتفع للغاية في قياس الأعماق. ترتبط المناطق ذات التعقيد العالي / المنحدر المنخفض / الصخرة أو الصخور المرصوفة بكثافة التشتت العكسي المنخفضة جدًا إلى المرتفعة جدًا ، والتباين المنخفض إلى المرتفع جدًا ، والتباين متوسط ​​إلى مرتفع جدًا في قياس الأعماق ، والمنحدر المنخفض جدًا. مناطق "الطين المتجانس الدقيق" المرتبطة بكثافة التشتت المرتد من متوسطة إلى منخفضة جدًا ، وتباين متوسط ​​إلى منخفض للغاية ، وتباين عالي جدًا إلى منخفض جدًا في قياس الأعماق. أخيرًا ، ترتبط مناطق "الرواسب غير المتماسكة غير المجمعة والرمل إلى الأنهار الجليدية ذات الحجم الصخري" بكثافة منخفضة جدًا إلى عالية جدًا في التشتت الخلفي ، وتباين منخفض جدًا إلى مرتفع للغاية ، وتباين منخفض جدًا إلى منخفض جدًا في قياس الأعماق.

المراجع: دليل إيرداس الميداني ، 1999 ، شركة إيرداس ، أتلانتا جورجيا. 672 ص.

التاريخ: 2005 (عملية 2 من 2) ----------------------------- بدأت نادين جولدن هنا -------- --------------------------------- // تقليم الشبكة Fourclass_grid باستخدام المحلل المكاني & quottrim بواسطة أداة Mask & quot. استخدم مدى بيانات الحزم المتعددة كقناع المدى.

// nibble grid 1) قيم البيانات المعاد تصنيفها: 0 - & gt NoData 1 - & gt 3 (hard) 2 - & gt 4 (hard) 3 - & gt 2 (Mixed) 4 - & gt 1 (soft)

// المفلترة الشبكة المستخدمة أداة التحليل المكاني & quot ؛ مرشح & quot ؛ تمريرة واحدة منخفضة. معاد التصنيف باستخدام أداة "التصنيف المكاني" & quot؛ أداة التصنيف & quot لتعيين قيم نطاق الشبكة مرة أخرى إلى 1 إلى 4. خريطة شبكة قيم المرشح المعينة: .5 - -1.5 = 1 1.5 - 2.5 = 2 2.5 - 3.3 = 3 3.3 - 4.5 = 4

// تحويل الشبكة إلى أداة التحليل المكاني المستخدمة & quotraster لميزة & quot لتحويل الشبكة إلى ملف شكل مضلع.

// تم إنشاء مضلع حمام ذو 3 قيم محيطية: 75 مترًا ، 200 مترًا ، 400 مترًا. تم إنشاء ملف مضلع من شبكة قياس الأعماق باستخدام المحلل المكاني & الاقتباس لميزة & quot الأداة. مختارة لخطوط 75 متر ، 200 متر ، 400 متر. تصدير البيانات المحددة إلى ملف شكل مضلع جديد.

// دمج أربع طبقات بولي وكونتور بولي محلل مكاني & quotionion & quot أداة لدمج مضلع رباعي الطبقات ومضلع كفاف ذو 3 قيم. ملاحظة: يتقاطع الاتحاد مع مضلعات شبكة الإدخال_1 (الفئة الرابعة) في كل مكان يتقاطع فيه إدخال gid_2 (مضلع كفاف).

// تحرير يدوي وتنظيف المضلعات تمت إضافة عمود قياس الأعماق إلى مضلع جديد ومدمج من أربع فئات باستخدام & quotHawth's Tools - & gt Intersect Point Tool & quot تمت إضافة جميع رموز الموائل الخضراء (1999) أعمدة التعريف والتعريف إلى المضلعات. تُستخدم أدوات التحديد حسب السمة والموقع والأدوات اليدوية للاستعلام عن سمات رمز الموئل الأخضر وتعيينها.

// تم استبعاد مضلعات الحدود المتبقية من عامل التصفية المضلعات المحددة بمساحات أقل أو تساوي 10 أمتار مربعة (ملاحظة: لقد اخترت المنطقة & lt = 1 ، & lt = 2 ، وما إلى ذلك حتى & lt = 10 وقمت بتشغيل أداة الإزالة لكل مجموعة تحديد ). استخدم أداة & quotEliminate & quot من & quot؛ أدوات إدارة البيانات & quot - & gt & quotGeneralation & quot - & gt & quotEliminate. & quot ملاحظة: تدمج الأداة Eliminate المضلعات المحددة مع المضلعات المجاورة مع أكبر مساحة.

هيئة المسح الجيولوجي الأمريكية ، الجيولوجيا الساحلية والبحرية (CMG) ، 2005 ، USGS CMG Glacier Bay ، Alaska Habitat Metadata.

الروابط عبر الإنترنت:

هيئة المسح الجيولوجي الأمريكية ، الجيولوجيا الساحلية والبحرية (CMG) ، 2005 ، USGS CMG InfoBank.

الروابط عبر الإنترنت:

ما مدى موثوقية البيانات وما هي المشاكل المتبقية في مجموعة البيانات؟

تم تجذير مضلعات الموطن في ArcGIS 9.1 من شجار فسيفساء السونار السونار المحدد جغرافيًا.

٪ حصى ورمل وطمي وطين وحبوب دقيقة لـ 1144 عينة

كيف يمكن لشخص ما الحصول على نسخة من مجموعة البيانات؟

(831) 427-4754 (صوت)
(831) 427-4748 (فاكس)
[email protected]

يرجى التعرف على هيئة المسح الجيولوجي الأمريكية (USGS) كمصدر لهذه المعلومات.

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

لا تشكل عملية التوزيع أي ضمان من هذا القبيل ، ولا تتحمل هيئة المسح الجيولوجي الأمريكية أية مسؤولية في استخدام هذه البيانات أو البرامج أو المواد ذات الصلة.

من كتب البيانات الوصفية؟

(831) 427-4754 (صوت)
(831) 427-4748 (فاكس)
[email protected]

تم إنشاؤها بواسطة النائب الإصدار 2.8.6 في الأربعاء 07 ديسمبر 16:05:33 2005


16.2. نموذج هندسة OpenGIS

مجموعة الأنواع الهندسية التي اقترحتها OGC's SQL مع أنواع الهندسة البيئة على أساس نموذج هندسة OpenGIS . في هذا النموذج ، لكل كائن هندسي الخصائص العامة التالية:

إنه مرتبط بنظام الإسناد المكاني ، الذي يصف مساحة الإحداثيات التي يتم فيها تعريف الكائن.

إنه ينتمي إلى فئة الهندسة.

16.2.1. التسلسل الهرمي لفئة الهندسة

تحدد فئات الهندسة التسلسل الهرمي على النحو التالي:

لا يمكن إنشاء كائنات في فئات غير قابلة للتشغيل. من الممكن إنشاء كائنات في فئات قابلة للحساب. تحتوي جميع الفئات على خصائص ، وقد تحتوي الفئات القابلة للتشغيل على تأكيدات (قواعد تحدد مثيلات الفئة الصالحة).

الهندسة هي الطبقة الأساسية. إنها فئة مجردة. تقتصر الفئات الفرعية للهندسة القابلة للدمج على كائنات هندسية صفرية وأحادية وثنائية الأبعاد موجودة في مساحة إحداثيات ثنائية الأبعاد. يتم تحديد جميع فئات الهندسة القابلة للتشغيل بحيث يتم إغلاق المثيلات الصالحة لفئة الهندسة طوبولوجيًا (أي أن جميع الأشكال الهندسية المحددة تتضمن حدودها).

تشتمل فئة الهندسة الأساسية على فئات فرعية لـ Point و Curve و Surface و Geometry

تمثل النقطة كائنات صفرية الأبعاد.

يمثل المنحنى كائنات أحادية البعد ، وله فئة فرعية LineString ، مع فئات فرعية فرعية Line و LinearRing.

تم تصميم Surface لكائنات ثنائية الأبعاد وله فئة فرعية من المضلع.

تخصص GeometryCollection فئات تجميع صفرية وأحادية وثنائية الأبعاد تسمى MultiPoint و MultiLineString و MultiPolygon لنمذجة الأشكال الهندسية المقابلة لمجموعات النقاط و LineStrings و Polygons ، على التوالي. يتم تقديم MultiCurve و MultiSurface كفئات فائقة مجردة تعمل على تعميم واجهات المجموعة للتعامل مع المنحنيات والأسطح.

يتم تعريف الهندسة والمنحنى والسطح و MultiCurve و MultiSurface على أنها فئات غير قابلة للتكوين الفوري. يحددون مجموعة مشتركة من الأساليب لفئاتهم الفرعية ويتم تضمينها من أجل التمدد.

تعتبر Point و LineString و Polygon و GeometryCollection و MultiPoint و MultiLineString و MultiPolygon فئات قابلة للتشغيل.

16.2.2. فئة الهندسة

الهندسة هي الطبقة الجذرية للتسلسل الهرمي. إنها فئة غير قابلة للتكوين الفوري ولكنها تحتوي على عدد من الخصائص المشتركة لجميع القيم الهندسية التي تم إنشاؤها من أي من الفئات الفرعية للهندسة. هذه الخصائص موصوفة في القائمة التالية. الفئات الفرعية المعينة لها خصائصها الخاصة ، الموصوفة لاحقًا.

خصائص الهندسة

تحتوي القيمة الهندسية على الخصائص التالية:

انها يكتب . تنتمي كل هندسة إلى إحدى الفئات القابلة للحساب في التسلسل الهرمي.

انها سريد ، أو معرّف المرجع المكاني. تحدد هذه القيمة نظام الإسناد المكاني المرتبط بالهندسة والذي يصف مساحة الإحداثيات التي يتم فيها تعريف كائن الهندسة.

في MySQL ، تعد قيمة SRID مجرد عدد صحيح مرتبط بقيمة الهندسة. تتم جميع الحسابات بافتراض الهندسة الإقليدية (المستوية).

انها إحداثيات في نظام الإسناد المكاني ، ممثلة بأرقام مزدوجة الدقة (ثمانية بايت). تشتمل جميع الأشكال الهندسية غير الفارغة على زوج واحد على الأقل من إحداثيات (X ، Y). لا تحتوي الأشكال الهندسية الفارغة على إحداثيات.

ترتبط الإحداثيات بـ SRID. على سبيل المثال ، في أنظمة إحداثيات مختلفة ، قد تختلف المسافة بين كائنين حتى عندما يكون للكائنات نفس الإحداثيات ، لأن المسافة على مستو نظام الإحداثيات والمسافة على مركزية الأرض النظام (الإحداثيات على سطح الأرض) أشياء مختلفة.

انها الداخلية , الحدود ، و الخارج .

تحتل كل هندسة مكانًا ما في الفضاء. الشكل الخارجي للهندسة هو كل المساحة التي لا تشغلها الهندسة. الداخل هو المساحة التي تشغلها الهندسة. الحدود هي الواجهة بين الداخل والخارج للهندسة.

انها MBR (الحد الأدنى لمستطيل الإحاطة) ، أو المغلف. هذا هو الشكل الهندسي المحيط ، ويتكون من إحداثيات الحد الأدنى والحد الأقصى (X ، Y):

ما إذا كانت القيمة بسيط أو غير بسيط . القيم الهندسية للأنواع (LineString ، MultiPoint ، MultiLineString) إما بسيطة أو غير بسيطة. يحدد كل نوع تأكيداته الخاصة لكونه بسيطًا أو غير بسيط.

ما إذا كانت القيمة مغلق أو ليست مغلقة . القيم الهندسية للأنواع (LineString ، MultiString) إما مغلقة أو غير مغلقة. يحدد كل نوع تأكيداته الخاصة لإغلاقه أو عدم إغلاقه.

ما إذا كانت القيمة فارغة أو غير فارغ تكون الهندسة فارغة إذا لم يكن لها أي نقاط. لم يتم تعريف الشكل الخارجي والداخلي وحدود الشكل الهندسي الفارغ (أي ، يتم تمثيلها بقيمة NULL). يتم تعريف الهندسة الفارغة على أنها بسيطة دائمًا وتبلغ مساحتها 0.

انها البعد . يمكن أن يكون للشكل الهندسي بُعد -1 أو 0 أو 1 أو 2:

0 لشكل هندسي بدون طول ولا مساحة.

1 لهندسة بطول غير صفري ومساحة صفرية.

2 لهندسة مع منطقة غير صفرية.

الكائنات النقطية لها أبعاد صفرية. تحتوي كائنات LineString على بُعد 1. تحتوي كائنات Polygon على بُعد 2. أبعاد كائنات MultiPoint و MultiLineString و MultiPolygon هي نفس أبعاد العناصر التي تتكون منها.

16.2.3. كلاس بوينت

النقطة هي هندسة تمثل موقعًا واحدًا في مساحة إحداثيات.

أمثلة النقطة

تخيل خريطة واسعة النطاق للعالم مع العديد من المدن. يمكن أن يمثل كائن نقطة كل مدينة.

على خريطة المدينة ، يمكن أن يمثل كائن Point محطة للحافلات.

خصائص النقطة

يتم تعريف النقطة على أنها هندسة ذات أبعاد صفرية.

حدود النقطة هي المجموعة الفارغة.

16.2.4. منحنى الفصل

المنحنى هو شكل هندسي أحادي البعد ، وعادة ما يتم تمثيله من خلال سلسلة من النقاط. تحدد الفئات الفرعية الخاصة لـ Curve نوع الاستيفاء بين النقاط. المنحنى هو فئة غير فورية.

خصائص المنحنى

يحتوي المنحنى على إحداثيات نقاطه.

يُعرّف المنحنى بأنه هندسة أحادية البعد.

يكون المنحنى بسيطًا إذا لم يمر من نفس النقطة مرتين.

يتم إغلاق المنحنى إذا كانت نقطة البداية الخاصة به مساوية لنقطة النهاية الخاصة به.

حدود المنحنى المغلق فارغة.

تتكون حدود المنحنى غير المغلق من نقطتي النهاية.

منحنى بسيط ومغلق هو حلقة خطية.

16.2.5. فئة LineString

LineString هو منحنى مع استيفاء خطي بين النقاط.

أمثلة LineString

على خريطة العالم ، يمكن أن تمثل كائنات LineString الأنهار.

في خريطة المدينة ، يمكن أن تمثل كائنات LineString الشوارع.

خصائص LineString

يحتوي LineString على إحداثيات مقاطع محددة بواسطة كل زوج متتالي من النقاط.

الخط هو خط إذا كان يتكون من نقطتين بالضبط.

سلسلة الخط هي حلقة خطية إذا كانت مغلقة وبسيطة.

16.2.6. فئة السطح

السطح عبارة عن هندسة ثنائية الأبعاد. إنها فئة غير فورية. صنفها الفرعي الوحيد القابل للحساب هو Polygon.

خصائص السطح

يتم تعريف السطح على أنه هندسة ثنائية الأبعاد.

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

حدود السطح البسيط هي مجموعة المنحنيات المغلقة المقابلة لحدودها الخارجية والداخلية.

16.2.7. فئة المضلع

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

أمثلة على المضلع

على خريطة المنطقة ، يمكن أن تمثل كائنات المضلع الغابات والمقاطعات وما إلى ذلك.

تأكيدات المضلع

تتكون حدود Polygon من مجموعة من كائنات LinearRing (أي كائنات LineString بسيطة ومغلقة) تشكل حدودها الخارجية والداخلية.

المضلع ليس له حلقات متقاطعة. قد تتقاطع الحلقات الموجودة في حدود المضلع عند نقطة ، ولكن فقط كظل.

لا يحتوي المضلع على خطوط أو مسامير أو ثقوب.

يحتوي المضلع على جزء داخلي عبارة عن مجموعة نقاط متصلة.

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

التأكيدات السابقة تجعل المضلع هندسة بسيطة.

16.2.8. فئة الهندسة

مجموعة GeometryCollection هي هندسة تتكون من مجموعة هندسية واحدة أو أكثر من أي فئة.

يجب أن تكون جميع العناصر في GeometryCollection في نفس نظام الإسناد المكاني (أي في نفس نظام الإحداثيات). لا توجد قيود أخرى على عناصر GeometryCollection ، على الرغم من أن الفئات الفرعية من GeometryCollection الموصوفة في الأقسام التالية قد تقيد العضوية. قد تستند القيود إلى:

نوع العنصر (على سبيل المثال ، قد تحتوي MultiPoint على عناصر Point فقط)

القيود المفروضة على درجة التداخل المكاني بين العناصر

16.2.9. فئة MultiPoint

تعد MultiPoint عبارة عن مجموعة هندسية تتكون من عناصر Point. النقاط غير متصلة أو مرتبة بأي شكل من الأشكال.

أمثلة متعددة النقاط

على خريطة العالم ، يمكن أن تمثل MultiPoint سلسلة من الجزر الصغيرة.

على خريطة المدينة ، يمكن أن تمثل MultiPoint منافذ مكتب التذاكر.

خصائص MultiPoint

تعد MultiPoint هندسة ذات أبعاد صفرية.

تعد MultiPoint بسيطة إذا لم تكن هناك قيمتان متساويتان (لها قيم إحداثيات متطابقة).

حدود MultiPoint هي المجموعة الفارغة.

16.2.10. فئة MultiCurve

المنحنى المتعدد عبارة عن مجموعة هندسية تتكون من عناصر منحنى. تعد MultiCurve فئة غير قابلة للتكوين الفوري.

خصائص MultiCurve

المنحنى المتعدد هو هندسة أحادية البعد.

يعد المنحنى المتعدد بسيطًا إذا وفقط إذا كانت جميع عناصره بسيطة ، فإن التقاطعات الوحيدة بين أي عنصرين تحدث عند نقاط تقع على حدود كلا العنصرين.

يتم الحصول على حد MultiCurve من خلال تطبيق "قاعدة الوحدة النمطية 2" (المعروفة أيضًا باسم "قاعدة الفردي والزوجي"): تكون النقطة في حدود MultiCurve إذا كانت في حدود عدد فردي من عناصر MultiCurve.

يتم إغلاق المنحنى المتعدد إذا تم إغلاق جميع عناصره.

تكون حدود المنحنى المتعدد المغلق فارغة دائمًا.

16.2.11. فئة MultiLineString

سلسلة MultiLineString عبارة عن مجموعة هندسة MultiCurve تتكون من عناصر LineString.

أمثلة على سلسلة MultiLineString

على خريطة المنطقة ، يمكن أن تمثل MultiLineString نظام نهر أو نظام طريق سريع.

16.2.12. فئة MultiSurface

تعد MultiSurface مجموعة هندسية تتكون من عناصر سطحية. تعد MultiSurface فئة غير قابلة للتشغيل. صنفها الفرعي الوحيد القابل للحساب هو MultiPolygon.

تأكيدات متعددة الأسطح

لا يحتوي سطحان متعدد الأسطح على أي أجزاء داخلية تتقاطع.

يحتوي عنصرا MultiSurface على حدود تتقاطع على الأكثر في عدد محدود من النقاط.

16.2.13. فئة متعدد المضلع

المضلع المتعدد هو كائن متعدد الأسطح يتكون من عناصر مضلع.

أمثلة على المضلع المتعدد

على خريطة المنطقة ، يمكن أن يمثل المضلع المتعدد نظامًا من البحيرات.

تأكيدات المضلع المتعدد

لا يحتوي المضلع المتعدد على عنصرين مضلعين مع عناصر داخلية تتقاطع.

لا يحتوي المضلع المتعدد على عنصرين مضلعين متقاطعين (يُحظر التقاطع أيضًا من خلال التأكيد السابق) ، أو يتلامسان عند عدد لا نهائي من النقاط.

قد لا يحتوي المضلع المتعدد على خطوط مقطوعة أو مسامير أو ثقوب. المضلع المتعدد عبارة عن مجموعة نقاط منتظمة ومغلقة.

المضلع المتعدد الذي يحتوي على أكثر من مضلع له مساحة داخلية غير متصلة. عدد المكونات المتصلة للداخل الداخلي لمضلع متعدد يساوي عدد قيم المضلع في المضلع المتعدد.

خصائص المضلع المتعدد

المضلع المتعدد هو هندسة ثنائية الأبعاد.

حدود المضلع المتعدد عبارة عن مجموعة من المنحنيات المغلقة (قيم LineString) المقابلة لحدود عناصر المضلع الخاصة بها.

يقع كل منحنى في حدود المضلع المتعدد في حدود عنصر مضلع واحد بالضبط.

يقع كل منحنى في حدود عنصر مضلع في حدود المضلع المتعدد.


قبل التنزه في جزء من مسار الأبلاش ، وجدت نفسي أتساءل: أي من الأشجار في منطقة معينة هي الأكثر تميزًا / تميزًا؟

بعد رحلة رائعة من خلال علم الشجرة ، والملفات الشكلية ، والكوروبليثس ، كانت النتيجة:

كان الهدف من هذا المشروع هو إنشاء تصور للبيانات لاستكشاف وفحص توزيع أنواع الأشجار في جميع أنحاء الولايات المتحدة.

قم بتشغيل التصور ، أو اقرأ استكشافًا للنتائج. يشرح الجزء المتبقي من هذا README كيف أنشأت التصور وتنسيقات البيانات والمكتبات التي استخدمتها (ملفات الأشكال ، و geoJSON ، و Shapely for Python ، و Leaflet) ، وخيارات التحليل والتصميم التي قمت بها على طول الطريق.

قادني البحث عن موارد حول نطاقات أنواع الأشجار بسرعة إلى خرائط نطاق الأشجار الخاصة بإلبرت ليتل ، عالم النبات الذي قام (في فترة توليه لقب "كبير أخصائيي Dendrologist" في خدمة الغابات بوزارة الزراعة الأمريكية) بتجميع البيانات من مختلف الدراسات الميدانية إلى إنتاج مجموعة من خرائط مدى الأشجار لـ 678 نوعًا من الأشجار في أمريكا الشمالية. تم رقمنة هذه الخرائط بواسطة USGS وهي متوفرة هنا بتنسيق PDF وملف الشكل. فيما يلي مثال على خريطة نطاق لتنوب البلسم.

تنسيق وهيكل بيانات الشجرة

يتم تمثيل نطاقات شجرة ليتل بواسطة ملفات الأشكال ، وهو تنسيق شائع في مجال متطور جيدًا لأنظمة المعلومات الجغرافية (GIS). بعد تنزيل ملفات الأشكال وفحصها ، وبعد بعض البحث والمداولات ، قررت تحويل ملفات الأشكال إلى تنسيق GeoJSON ، لعدة أسباب:

  • إنه تنسيق أخف ، وكنت بحاجة فقط للخطوط العريضة الأساسية لنطاقات الأشجار
  • it is a JSON format, easily used in Javascript and the most popular mapping libraries
  • it is easier to parse as a human reader

For the conversion I used ogr2ogr, an open-source library for processing geospatial data. There are various conversion details related to the projection between different coordinate systems - this article was useful in guiding me through the process.

The converted GeoJSON files looked like this, excluding some extraneous fields:

Each tree range was represented by a list of features (map regions), each of which had properties including area, perimeter, and code, and each of whose geometry was a Polygon with a list of (longitude, latitude) coordinate pairs describing its outline. Note that the coordinates are actually a list of list of coordinate pairs - this is because sometimes the feature is of type MultiPolygon rather than Polygon, and multiple polygons are described.

Github has a convenient built-in GeoJSON renderer, so you can see the balsam fir tree's range and compare with the same data in GeoJSON format.

Format and structure of location data

The US Census Bureau maintains boundary files for various geographic areas of the country and at various resolution levels. I wanted a range of area sizes - states, counties, and towns. I couldn't locate a national data source for townships, but this article led me to township data for various Northeast states.

After converting to GeoJSON, the data looked similar to the tree range data except with several additional fields such as county or state name or postal code. I took an appropriate combination of these additional fields to get a unique name for each location.

Plan out rest of project and code architecture

I now had enough information to plan out the rest of the project. After downloading and converting the tree range and geographic location data to GeoJSON, I would intersect the two data sets, either through some polygon intersection calculation or a suitable simplification. The results of the intersection would list which tree species were present at which locations, and which locations were spanned by each species. Next, I would explore the data to identify which metrics were most informative in showing the tree distributions. Finally, I would design the visualization to show these metrics and actually build it.

Data Acquisition and Parsing

This step involved downloading all 678 tree range shapefiles and the thousands of location shapefiles, converting them to GeoJSON format, and checking a few visually to make sure the converted GeoJSON regions were sensible.

I included in this repository the converted location GeoJSON files for states and counties, and for towns in 7 northeast states. I also included the raw data for only the first 10 tree species alphabetically due to file size. All of these can be found in the data folder.

Research, think on how to perform range calculation

For every tree and location, I was interested in the answer to the question: does the tree region (a set of non-overlapping polygons) cover or in some way intersect the location region (a different set of polygons)? My first thought was to run an exhaustive polygon intersection algorithm, but the resolution of the tree range data set (roughly 1MB each) and some research on algorithms prompted me to look for a simplification.

My next thought was to simplify one region to one point or a set of points and calculate whether those points were located within the other region's polygons. There appeared to be a literature on the subject and some implementations that fit my requirements. Because geographic locations were more regularly shaped than tree ranges, I decided to calculate the centroid of each region and calculate whether the centroid existed in at least one polygon for a given tree range. I kept in mind that my results would be less accurate for larger regions (such as states) because I was only sampling the center of the region.

Select, install, test library for PolygonContainsPoint and PolygonCenter calculations

Most of the fastest implementations used customized databases that handled GIS data or were written in C/C++, but these two articles led me to the Shapely library for Python. I tested the algorithm with a test tree range and some sample points and it seemed to work correctly. It was also reasonably fast, capable of processing all of the polygons for a tree range in less than a second on my 2.8GHz MacBook Pro..

Write code for intersection calculations, run for all data

I wrote code to load and calculate the centroid of geographic locations, to calculate intersections between the centroids and tree range regions, and to store the results. For the entire set of northeast townships, the largest data set, the calculations took about 2.5 hours.

The important code is located in the scripts folder and contains the following files:

Filename وصف
locations.py loads, parses geoJSON files representing geographic areas (states, counties, townships)
treeranges.py loads, parses geoJSON files representing ranges of trees
intersections.py calculates intersections between tree ranges and geographic areas
stats.py calculates statistics on intersection data, such as coverage fractions
map_settings.py default map parameters for various visualizations
geojson.py methods for preparing and writing .geojson files (and associated .js files)

Examine data and think on visualization metrics

For the 678 tree species, 50 states,

3500 northeast towns, I had a list of all tree species contained in each region and all regions covered by each species. The next step was to consider how to best represent and visualize the information.

Starting from the tree data, it would be somewhat interesting to see how many regions and what total area each tree covered, although this information was already given directly in the tree range maps. I couldn't think of many fruitful comparisons to be made between trees besides size of coverage area, since metrics like shape, directionality, or region of coverage were probably better examined per-location than per-tree. For interest, here are the trees with largest and smallest reported ranges:

Rank Largest Range Smallest Range
1 common juniper (Juniperus communis) black calabash (Amphitecna latifolia)
2 quaking aspen (Populus tremuloides) Florida cupania (Cupania glabra)
3 black spruce (Picea mariana) rough strongbark (Bourreria radula)
4 white spruce (Picea glauca) balsam torchwood (Amyris balsamifera)
5 paper birch (Betula papyrifera) long spine acacia (Acacia macracantha)
6 red osier dogwood (Cornus stolonifera) bitterbush (Picramnia pentandra)
7 Bebb willow (Salix bebbiana) buccaneer palm (Pseudophoenix sargentii)
8 balsam poplar (Populus balsamifera) cinnecord (Acacia choriophylla)
9 tamarack (Larix laricina) West Indies satinwood (Zanthoxylum flavum)
10 coyote willow (Salix exigua) Florida clusia (Clusia rosea)

More interesting was to start from the location data, which could show metrics as layers on top of the geographical data. I also thought some measure of how unique the location's species were might be interesting, especially relative to nearby regions. Could we correlate the country's geophysical regions and boundaries to features of the tree range data?

Lastly, for a more in-depth look at the universe of tree types, I could overlay additional data such as broader taxonomic classifications or specific features - e.g. deciduous versus evergreen. This would require additional data sources, such as scraping some public tree database.

I decided to play around with some basic visualizations to explore the data and decide what metrics might be most useful to display.

Find map library for interactive visualization

There are lots of mapping libraries out there. Because I wanted to avoid a commercial API and needed something relatively simple, I choose Leaflet which had some examples that seemed to be similar to my intended result.

Build basic visualization, experiment with various metrics

I calculated various metrics of interest in each region (number of trees, distribution of trees, uniqueness of trees) and started looking at different regions of the country with states and counties colored by each metric. It was immediately clear that state-level location data was too coarse for informative results California, for example, registered very few tree species only because its centroid was in the arboreally-sparse Central Valley. County-level data was more interesting, although looking at the full country was overwhelming. I focused on counties in different regions, such as the northeast states whose geography I had a better intuition for.

The most interesting metric I created tried to measure how unique each county's tree population was. I calculated a "coverage" metric for each tree species defined as the fraction of total locations in the sample for which the tree was present. Then, I calculated the "average coverage" for each location across all the trees it contained. In other words:

coverage = (# of regions covered by the tree range) / (# of total regions)

average coverage = mean coverage of all trees contained by the region

This gave interesting results, in which I could see the geographical uniqueness of the Adirondack and Acadian regions and the southern coastal regions of Connecticut and New York City. However, results were skewed for regions with fewer trees, such as Nevada whose two tree species were relatively rare and gave the state a strong uniqueness score.

I wanted to see my average coverage somewhow normalized by number of tree species, so I assigned each map region a hue (color) based on its average coverage and a saturation (lightness/darkness) based on its number of species. The resulting visualization produced the set of graphics described in this analysis.


Errors when using QGIS Topology Checker with must not overlap rule

I use the Topology Checker Plugin in QGIS 3 with the rule "must not overlap" for a single PostGIS multipolygon layer.

Can somebody explain the meaning of errors (colored in red) when the Plugin colors a whole polygon as a red area?

إجابة واحدة

When the topology checker highlights a feature in red, it means that feature violates one of the rules.

Since your only rule is "must not overlap," when a polygon is red it means that polygon overlaps with another polygon.

It's up to you to find the exact place where it overlaps. I suggest using the Clip tool (from the Vector menu > Geoprocessing tools) to find any overlaps. The clip tool will create a new layer that is just the areas where the polygons overlap. You can zoom to each individual area from the attribute table (select one feature, click the "zoom to selection" button). Then fix the overlaps in the original layer.


محتويات

  • Georeferencing is crucial to making aerial and satellite imagery, usually raster images, useful for mapping as it explains how other data, such as the above GPS points, relate to the imagery.
  • Very essential information may be contained in data or images that were produced at a different point of time. It may be desired either to combine or compare this data with that currently available. The latter can be used to analyze the changes in the features under study over a period of time.
  • Different maps may use different projection systems. Georeferencing tools contain methods to combine and overlay these maps with minimum distortion.
  • Using georeferencing methods, data obtained from surveying tools like total stations may be given a point of reference from topographic maps already available.
  • It may be required to establish the relationship between social survey results which have been coded with postal codes or street addresses and other geographic areas such as census zones or other areas used in public administration or service planning.

How to process GRIB2 weather data for solar panel applications (GeoJSON)

Written by
Elliott Wobler
Technical Solutions Engineer

This tutorial covers how to work with Spire Weather’s global forecast data in GRIB2 format using Python.

This tutorial uses GeoJSON input.

ملخص

This tutorial covers how to work with Spire Weather’s global forecast data in GRIB2 format using Python.

If you have never worked with GRIB2 data before, it’s recommended to start with the getting started tutorial, since this current one will address slightly more advanced topics.

Specifically, this tutorial demonstrates how to retrieve incoming shortwave solar radiation within the bounds of a complex polygon (e.g. a nation’s border).

By the end of this tutorial, you will know how to:

  1. Load files containing GRIB2 messages into a Python program
  2. Inspect the GRIB2 data to understand which weather variables are included
  3. Filter the GRIB2 data to an accumulated weather variable of interest (i.e. incoming shortwave radiation)
  4. Create smaller data accumulations (e.g. hourly) from the forecast-total accumulated value by differencing
    the totals from adjacent lead times (see here for more detail)
  5. Crop the GRIB2 data to the area defined by a GeoJSON file input
  6. Convert the transformed GRIB2 data into a CSV output file for further analysis and visualization

Downloading the Data

The first step is downloading data from Spire Weather’s File API.

This tutorial expects the GRIB2 messages to contain NWP data from Spire’s Renewable Energy data bundle.

For information on using Spire Weather’s File API endpoints, please see the API documentation and FAQ.

The FAQ also contains detailed examples covering how to download multiple forecast files at once using cURL.

For the purposes of this tutorial, it is assumed that the GRIB2 data has already been successfully downloaded, if not get a sample here.

Understanding filenames

Files downloaded from Spire Weather’s API products all share the same file naming convention.

Just from looking at the filename, we can determine:

  • the date and time that the forecast was issued
  • the date and time that the forecasted data is valid for
  • the horizontal resolution of the global forecast data
  • the weather data variables that are included in the file (see the full list of Spire Weather’s commercial data bundles)

For more detailed information on the above, please refer to our FAQ.

Python Requirements

The following Python packages are required for this tutorial.

Although using conda is not strictly required, it is the officially recommended method for installing PyNIO (see link below).

Once a conda environment has been created and activated, the following commands can be run directly:

Inspecting the Data

After downloading the data and setting up a Python environment with the required packages, the next step is inspecting the data contents in order to determine which weather variables are available to access. Data inspection can be done purely with PyNIO, but in this tutorial we will instead use PyNIO as the engine for xarray and load the data into an xarray dataset for transformation. Note that an explicit import of PyNIO is not required, so long as it’s installed properly in the active Python environment.

First, import the xarray package:

Next, open the GRIB2 data with xarray using PyNIO as its engine (note that the GRIB2 data should be from Spire’s Renewable Energy data bundle):

ds = xr.open_dataset("path_to_renewable_energy_file.grib2", engine="pynio")

Finally, for each of the variables, print the lookup key, human-readable name, and units of measurement:

The output of the above should look something like this, giving a clear overview of the available data fields:

This tutorial covers how to work with Downward short-wave radiation flux . Notice that the variable name DSWRF_P8_L1_GLL0_acc has a suffix of _acc while the other variables do not. This suffix indicates that incoming shortwave radiation values accumulate over the course of the forecast. You can read more about accumulated data fields in our FAQ, and we’ll cover how to handle them later on in this tutorial.

Processing the Data

Now that we know which weather variables and vertical levels are included in the GRIB2 data, we can start processing our xarray dataset.

Filtering the xarray data to a specific variable

With xarray , filtering the dataset’s contents to a single variable of interest is very straightforward:

It’s recommended to perform this step before converting the xarray dataset into a pandas DataFrame (rather than filtering the DataFrame later), since it minimizes the size of the data being converted and therefore reduces the overall runtime.

Converting the xarray data into a pandas.DataFrame

To convert the filtered xarray dataset into a pandas DataFrame, simply run the following:

Loading a GeoJSON file with the GDAL Python package

Although the package we installed with conda was named gdal , we import it into Python as osgeo . This is an abbreviation of the Open Source Geospatial Foundation, which GDAL/OGR (a Free and Open Source Software) is licensed through.

To load GeoJSON data into GDAL, we just use GDAL’s CreateGeometryFromJSON function:

The GeoJSON format is a common standard in the world of geographic information systems. Many pre-existing GeoJSON regions can be downloaded for free online (e.g. national borders, exclusive economic zones, etc.) and custom shapes can also be created in a variety of free software tools, such as geojson.io or geoman.io. For this tutorial we use the country of Italy as our complex polygon, but this could just as easily be the extent of a farm or some other subregional area.

When loading GeoJSON data into GDAL, only the geometry section of the Feature is needed. Here is a simple example of what the GeoJSON input file could contain:

The GeoJSON file can be loaded into Python using the standard json package, and should then be converted into a Python string:

Once we have loaded our GeoJSON definition into a Python string, we can create a GDAL geometry object like this:

Getting the bounding box that contains a GeoJSON area

Eventually we will crop the data to the precise area defined by the GeoJSON file, but this is a computationally expensive process so it’s best to limit the data size first. In theory we could skip the step of cropping to a simple box altogether, but in practice it’s worth doing so to reduce the overall runtime.

GDAL makes it easy to calculate the coarse bounding box that contains a complex GeoJSON area:

Coordinate values can then be accessed individually from the resulting array:

The order of geospatial coordinates is a common source of confusion, so take care to note that GDAL’s GetEnvelope function returns an array where the longitude values come before the latitude values.

Cropping the pandas.DataFrame to a geospatial bounding box

Now that the filtered data is converted into a pandas DataFrame and we have the bounds containing our area of interest, we can crop the data to a simple box.

The first step in this process is unpacking the latitude and longitude values from the DataFrame’s index , which can be accessed through the index names of lat_0 and lon_0 :

Although latitude values are already in the standard range of -90 degress to +90 degrees, longitude values are in the range of 0 ل +360.

To make the data easier to work with, we convert longitude values into the standard range of -180 degrees to +180 degrees:

With latitude and longitude data now in the desired value ranges, we can store them as new columns in our existing DataFrame:

Then, we use the bounding box values from the previous section (the components of the bbox array) to construct the DataFrame filter expressions:

Finally, we apply the filters to our existing DataFrame:

The resulting DataFrame has been cropped to the bounds of the box that contains the complex GeoJSON area.

Cropping the pandas.DataFrame to the precise bounds of a GeoJSON area

In order to crop the DataFrame to the precise bounds of the complex GeoJSON area, we will need to check every coordinate pair in our data. Similar to the previous section where we remapped every longitude value, we will perform this action with a map expression.

To pass each coordinate pair into the map function, we create a new DataFrame column called point where each value is a tuple containing both latitude and longitude:

We can then pass each coordinate pair tuple value into the map function, along with the previously loaded GeoJSON area , and process them in a function called check_point_in_area which we will define below. The check_point_in_area function will return either True or False to indicate whether the provided coordinate pair is inside of the area or not. As a result, we will end up with a new DataFrame column of boolean values called inArea :

Once the inArea column is populated, we perform a simple filter to remove rows where the inArea value is False . This effectively removes data for all point locations that are not within the GeoJSON area:

Of course, the success of the above is dependent upon the logic inside of the check_point_in_area function, which we have not yet implemented. Since the GeoJSON area was loaded with GDAL, we can leverage a GDAL geometry method called Contains to quickly check if the area contains a specific point. In order to do this, the coordinate pair must first be converted into a wkbPoint geometry in GDAL:

Once we have our wkbPoint geometry, we simply pass it into the area.Contains method to check if the area contains the point:

Putting the pieces together, here is what we get for our final check_point_in_area function:

As you can see, the only variable returned by the check_point_in_area function is a boolean value indicating whether the specified point is in the area or not. These boolean values then populate the new inArea DataFrame column. This allows us to apply the filter from above and end up with the precisely cropped data we want:

Parsing the forecast time from the filename

Each individual file contains global weather forecast data for the same point in time.

Using our knowledge from the Understanding Filenames section of this tutorial, and assuming that the filename argument is in the expected format, we can write a function to parse the valid forecast time from the filename:

Then, we can create a new DataFrame column for time which stores this value as a string in every row:

Although it may seem unnecessary to store the same exact timestamp value in every row, this is an important step if we want to eventually concatenate our DataFrame with forecast data for other times (demonstrated below in Processing Multiple Data Files).

Filtering the final DataFrame

Perform a final filter on our DataFrame to select only the columns that we want in our output, where variable is a string like "DSWRF_P8_L1_GLL0_acc" :

Processing accumulated data fields

At this stage, the data for one forecast lead time has been cropped to an area of interest and filtered to only the relevant fields, thereby reducing the total size of our DataFrame. We can now find the difference between it and the previous lead time’s data values — effectively changing from a forecast-total accumulated value to smaller (e.g. hourly or 6-hourly) data accumulations. Before doing that though, we duplicate the accumulated DataFrame because we’ll need a copy to take the difference from the next forecast lead time.

Once we have a copy of the accumulated data, we can subtract the previous lead time’s accumulated data from the current lead time’s accumulated data:

If the GRIB2 data we’re processing is in hourly lead time intervals (from Spire’s short-range forecast), then the new df DataFrame now contains accumulated values for just a 1-hour interval, rather than the whole forecast up until that time. Likewise, if the GRIB2 data we’re processing is in 6-hourly lead time intervals (from Spire’s medium-range forecast), then the df DataFrame now contains accumulated values for just a 6-hour interval. To better understand what this looks like from a data perspective, we recommended checking out the simple visualizations in our FAQ.

As a final step, it’s important to set previous_df to the current lead time’s accumulated data, so that we can repeat the process above for the next lead time in the forecast:

When all of the pieces are put together into an operational Python script, this process should take place inside of a loop that iterates through every forecast lead time of interest. The complete code at the bottom of this tutorial is implemented in such a way, and the relevant loop is at the end of the file.

Saving the data to a CSV output file

Save the processed DataFrame to an output CSV file:

Setting the index = False parameter ensures that the DataFrame index columns are not included in the output. This way, we exclude the lat_0 and lon_0 values since we already have columns for latitude and remapped longitude .

Please note that converting from GRIB2 to CSV can result in very large file sizes, especially if the data is not significantly cropped or filtered.

Processing Multiple Data Files

It is often desirable to process multiple data files at once, in order to combine the results into a single unified CSV output file.

For example, let’s say that we have just used the Spire Weather API to download a full forecast’s worth of GRIB2 data into a local directory called forecast_data/ . We can then read those filenames into a list and sort them alphabetically for good measure:

From here, we can iterate through the filenames and pass each one into a function that performs the steps outlined in the Processing the Data section of this tutorial.

Once all of our final DataFrames are ready, we can use pandas to concatenate them together like so (where final_dataframes is a list of DataFrames):

We end up with a combined DataFrame called output_df which we can save to an output CSV file like we did before:

Complete Code

Below is an operational Python script which uses the techniques described in this tutorial and also includes explanatory in-line comments.

The script takes three arguments:

The accumulated NWP data variable of interest

The local directory where the GRIB2 data is stored

For example, the script can be run like this:

Here is the complete code:

Final Notes

Using the CSV data output from our final script, we can now easily visualize the processed data in a free tool such as kepler.gl. We can also set thresholds for alerts, generate statistics, or fuse with other datasets.

Spire Weather also offers pre-created visualizations through the Web Map Service (WMS) API which you can read more about here.

For additional code samples, check out Spire Weather’s public GitHub repository.

Would you like to book a consultation?

Learn more about our Weather APIs and how Spire Weather can help you enable the data advantage.


How to convert a specific multipolygon to minimum polygons - Geographic Information Systems

This section describes functions for converting between GeoJSON documents and spatial values. GeoJSON is an open standard for encoding geometric/geographical features. For more information, see http://geojson.org. The functions discussed here follow GeoJSON specification revision 1.0.

GeoJSON supports the same geometric/geographic data types that MySQL supports. Feature and FeatureCollection objects are not supported, except that geometry objects are extracted from them. CRS support is limited to values that identify an SRID.

MySQL also supports a native JSON data type and a set of SQL functions to enable operations on JSON values. For more information, see Section 11.5, “The JSON Data Type”, and Section 12.18, “JSON Functions”.

Generates a GeoJSON object from the geometry ز . The object string has the connection character set and collation.

If any argument is NULL , the return value is NULL . If any non- NULL argument is invalid, an error occurs.

max_dec_digits , if specified, limits the number of decimal digits for coordinates and causes rounding of output. If not specified, this argument defaults to its maximum value of 2 32 − 1. The minimum is 0.

options , if specified, is a bitmask. The following table shows the permitted flag values. If the geometry argument has an SRID of 0, no CRS object is produced even for those flag values that request one.

Flag Value Meaning
0 No options. This is the default if options is not specified.
1 Add a bounding box to the output.
2 Add a short-format CRS URN to the output. The default format is a short format ( EPSG: srid ).
4 Add a long-format CRS URN ( urn:ogc:def:crs:EPSG:: srid ). This flag overrides flag 2. For example, option values of 5 and 7 mean the same (add a bounding box and a long-format CRS URN).

Parses a string str representing a GeoJSON object and returns a geometry.

If any argument is NULL , the return value is NULL . If any non- NULL argument is invalid, an error occurs.

options , if given, describes how to handle GeoJSON documents that contain geometries with coordinate dimensions higher than 2. The following table shows the permitted options values.

Option Value Meaning
1 Reject the document and produce an error. This is the default if options is not specified.
2, 3, 4 Accept the document and strip off the coordinates for higher coordinate dimensions.

options values of 2, 3, and 4 currently produce the same effect. If geometries with coordinate dimensions higher than 2 are supported in the future, these values can be expected to produce different effects.

ال srid argument, if given, must be a 32-bit unsigned integer. If not given, the geometry return value has an SRID of 4326.

GeoJSON geometry, feature, and feature collection objects may have a crs property. The parsing function parses named CRS URNs in the urn:ogc:def:crs:EPSG:: srid and EPSG: srid namespaces, but not CRSs given as link objects. Also, urn:ogc:def:crs:OGC:1.3:CRS84 is recognized as SRID 4326. If an object has a CRS that is not understood, an error occurs, with the exception that if the optional srid argument is given, any CRS is ignored even if it is invalid.

As specified in the GeoJSON specification, parsing is case-sensitive for the type member of the GeoJSON input ( Point , LineString , and so forth). The specification is silent regarding case sensitivity for other parsing, which in MySQL is not case-sensitive.


شاهد الفيديو: شرح عمل دوران لشكل معين باستعمال زاوية مرجعية مجهولة القيمة على برنامج AutoCad