أكثر

تحديد المدى في GDAL WriteArray؟


هل من الممكن تحديد المدى عند إنشاء بيانات نقطية فارغة في GDAL؟

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

tifpath = "path / to / output / tiff.tif" drvtif = gdal.GetDriverByName ("GTiff") rast = drvtif.Create (tifpath ، Ncolumns ، Nrows ، Nbands ، نوع البيانات) rast.SetProject (الإسقاط) # الإسقاط هو متغير يمثل الإسقاط المطلوب rast.GetRasterBand (1) .WriteArray (مجموعة)

المصفوفة الخاصة بي عبارة عن مصفوفة ذات حجم Ncolumns x Nrows ، مليئة بالأصفار (أريد خطوط نقطية فارغة). تم تحديد عدد البكسل مسبقًا ، كما هو الحال بالنسبة لحجم الخلية ، ومن خلال ضرب حجم الخلايا npixels * ، حددت ما يجب أن تكون نطاقات الإخراج الخاصة بي بحيث يكون كل بكسل بكسلًا كاملاً (أي لا يتم قطعه حسب النطاق ).

لكن ، لا يمكنني العثور على أي خيارات تسمح لي بتحديد المدى المطلوب.

لقد خطر لي أيضًا أنني لا أرى أي خيار لتحديد حجم الخلية.


نعم ، باستخدام ملفSetGeoTransformطريقة. يحدد Geographic Transform أصل البيانات النقطية في الزاوية العلوية اليسرى ، بالإضافة إلى حجم الخلية والدوران في اتجاه x و y للخلايا بهذا التنسيق:

geo_transform = (x أعلى اليسار ، x حجم الخلية ، x دوران ، y أعلى اليسار ، y تدوير ، حجم خلية y سالب)

أو في المثال الذي قدمته:

geo_transform = (-180 ، 0.0089952083 ، 0. ، 90 ، 0. ، -0.0089952083)

يمكن تطبيق هذا على كائن مجموعة البيانات ؛

rast.SetGeoTransform (geo_transform)

ملحوظة سيكون الجزء العلوي الأيسر هو إحداثيات أعلى يسار الخلية ، وليس مركز الخلية.


العمل مع بيانات التبخر والنتح ECOSTRESS

يقوم مركز الأرشيف النشط الموزع للعمليات الأرضية (LP DAAC) بتوزيع تجربة مقياس الإشعاع الحراري المنقول عبر الفضاء للنظام البيئي على منتجات بيانات المحطة الفضائية (ECOSTRESS). مهمة ECOSTRESS مكلفة بقياس درجة حرارة النباتات لفهم كمية المياه التي تحتاجها النباتات بشكل أفضل وكيفية استجابتها للإجهاد. يتم أرشفة منتجات ECOSTRESS وتوزيعها بتنسيق ملف HDF5 كمنتجات قائمة على swath.

في هذا البرنامج التعليمي ، ستستخدم Python لإجراء تحويل على نطاق واسع إلى شبكة لعرض بيانات النطاق على شبكة بنظام مرجعي محدد للإحداثيات (CRS) ، ومقارنة بيانات ECOSTRESS مع ملاحظات برج تدفق AmeriFlux الأرضية ، وتصدير مجموعة بيانات علمية طبقات (SDS) كملفات GeoTIFF يمكن تحميلها في برنامج GIS و / أو برنامج الاستشعار عن بعد.

مثال: تحويل ملف ECO3ETPTJPL.001 HDF5 على نطاق واسع إلى GeoTIFF مع CRS محدد ومقارنة ECOSTRESS Evapotranspiration (ET) مع ملاحظات ET الأرضية من موقع برج تدفق AmeriFlux في كاليفورنيا.

البيانات المستخدمة في المثال:

  • منتج البيانات: ECOSTRESS Evapotranspiration PT-JPL Daily L3 Global 70m الإصدار 1 (ECO3ETPTJPL.001)
    • طبقات مجموعة البيانات العلمية (SDS):
      • ETinst
      • عدم اليقين
      • طبقات مجموعة البيانات العلمية (SDS):
        • خط العرض
        • خط الطول
        • المتغيرات:
          • الحرارة الكامنة (ث / م 2)

          إذا كانت الجريمة تنطبق خارج الحدود الإقليمية بموجب الولاية القضائية الإقليمية والبحرية الخاصة ، فهل يمكن تطبيقها عند ارتكابها في بلد أجنبي؟

          لقد كنت أجد هذا مربكًا. إذا ارتكب بوب ، وهو مواطن أمريكي ، جريمة في البلد "أ" ، وهو أمر غير قانوني خارج الحدود الإقليمية بموجب الولاية القضائية البحرية والإقليمية الخاصة ، فهل هذا يعني أنه يمكن أن تتهمه الولايات المتحدة بارتكابها؟ من خلال قراءتي من هنا ، فإن الإجابة هي لا ، حيث لا يبدو أن دولة أجنبية مدرجة في تعريف SMTJ. يُعرَّف الاختصاص البحري والإقليمي الخاص على أنه:

          مصطلح "الولاية القضائية البحرية والإقليمية الخاصة للولايات المتحدة" ، كما هو مستخدم في هذا العنوان ، يشمل:

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

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

          (3) أي أراض محجوزة أو مكتسبة لاستخدام الولايات المتحدة ، وتحت الاختصاص الحصري أو المشترك لها ، أو أي مكان تم شراؤه أو الحصول عليه بطريقة أخرى من قبل الولايات المتحدة بموافقة الهيئة التشريعية للولاية التي يجب أن تكون ، لتشييد حصن ، أو مجلة ، أو ترسانة ، أو حوض بناء السفن ، أو أي مبنى آخر ضروري.

          (4) أي جزيرة أو صخرة أو مفتاح يحتوي على رواسب ذرق الطائر ، والتي قد تُعتبر ، وفقًا لتقدير الرئيس ، ملكًا للولايات المتحدة.

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

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

          (7) أي مكان خارج الولاية القضائية لأي دولة فيما يتعلق بارتكاب جريمة من قبل أو ضد أحد مواطني الولايات المتحدة.

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

          (9) فيما يتعلق بالجرائم المرتكبة من قبل أو ضد أحد مواطني الولايات المتحدة كما يستخدم هذا المصطلح في القسم 101 من قانون الهجرة والجنسية -

          (أ) مباني الولايات المتحدة الدبلوماسية أو القنصلية أو العسكرية أو غيرها من البعثات أو الكيانات التابعة لحكومة الولايات المتحدة في دول أجنبية ، بما في ذلك المباني وأجزاء المباني والأراضي التابعة لها أو التابعة لها أو المستخدمة لأغراض تلك البعثات أو الكيانات ، بغض النظر عن من الملكية و

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


          ماذا بعد

          نصيحة سريعة: تغيير التحويل الجغرافي باستخدام GDAL python

          أثناء تحضير المنشور التالي ، وجدت ملفًا به تحويل جغرافي خاطئ ، ولكن ليس أداة سهلة للقيام بذلك.
          يعد الترميز سهلاً مثل فتح مصدر البيانات مع خيار التحديث وتعيين التحويل الجغرافي الجديد على النحو التالي:
          حيث يجب أن يكون التحويل الجغرافي أ tuple مثل (-180.5 ، 1.0 ، 0.0 ، 90.5 ، 0.0 ، -1.0). ألق نظرة على الوثائق لمزيد من المعلومات.

          لقد أنشأت برنامجًا صغيرًا لتسهيل الأمر ، يسمى changeGeotransform.py:


          البوصلة

          الجزء الجميل من التطبيق هو البوصلة المتحركة. للحصول عليه ، نحتاج إلى ثلاثة أشياء:

          • الحصول على الإحداثيات الجغرافية
          • الحصول على اتجاه الجهاز (الجغرافي) واتجاه الشاشة (أفقي أو عمودي)
          • رسم البيانات

          يعد الحصول على الموقع أمرًا قياسيًا تمامًا ، ما عليك سوى الاستماع إلى navigator.geolocation.watchPosition واستدعاء رد الاتصال. سيطلب المتصفح الإذن.

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

          الحدث المراد الاستماع إليه هو window.addEventListener ("deviceorientationabsolute" ، setHeading) (ليس حدثًا ملاحًا !؟). وهي تستخدم خاصية رد الاتصال أيضًا. في هذه الحالة ، يجب إضافة زاوية إذا كان الجهاز في الوضع الأفقي (ويمكن أن يكون له موضعان في الوضع الأفقي). اتجاه الشاشة موجود في كائن الشاشة.

          مرة أخرى ، يجعل Svelte كل شيء سهلاً حقًا. إذا تغير شيء ما في وسيطات الدالة ، فسيتم استدعاء الوظيفة. إنه مثل useEffect في رد الفعل ، لكنه أفضل!

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

          لرسم البيانات ، قمت بفصل الكود إلى دالة drawCompass بملفها draw-compass.ts. يستخدم funtion الوظائف النموذجية للقماش ، لذلك لن أنسخ كل الكود هنا.

          تعد شبكة الويب هذه مرشحًا واضحًا لتصبح PWA نظرًا لأنها أفضل بكثير على جهاز محمول به مستشعر توجيه. للقيام بذلك ، وجدت مثالًا واحدًا في Svelte.

          أول شيء هو إضافة السطر التالي إلى public / index.html:

          & ltlink rel = ’manifest’ href = ’manifest.json’ & gt

          وأنشئ ملف manifest.json في نفس المجلد:

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

          الخطوة التالية هي إضافة عامل الخدمة. هذا ضروري أيضا. يجب أن تحتوي على طريقة الجلب ، والتي تم حذفها عدة مرات.

          • كن حذرا مع المسارات على ذاكرة التخزين المؤقت! إذا فشل شيء ما ، فلن يتم تثبيت عامل الخدمة.
          • هناك قسم مخصص للتحقق من ذلك في أدوات التطوير (الأولين في علامة تبويب التطبيق)

          بمجرد الانتهاء من ذلك ، يجب أن يستمع الموقع إلى الحدث beforeunnstallprompt:

          بمجرد تخزين الحدث ، يمكن استدعاؤه عند النقر فوق الزر. هنا وظيفة التحضير والوظيفة التي يتم تثبيتها بالفعل:

          • تطبيق Unistall قبل المحاولة مرة أخرى! لقد علقت في هذا الأمر وهو أمر محبط حقًا لأنه لم يحدث شيء ومن الصعب معرفة السبب ... لإلغاء التثبيت ، افتح التطبيق وانقر على الرمز الثاني في الجزء العلوي عندما تكون في جهاز الكمبيوتر.
          • إذا لم تقم وظيفة handleInstall بتسجيل أي شيء ، فتحقق من أدوات التطوير للحصول على بعض النصائح.
          • btnInstallAppVisible هو المتغير الذي يخفي الزر عند تثبيت التطبيق ولم تعد هناك حاجة إلى الزر.

          重新 投影 栅格 数据 (إعادة إسقاط البيانات النقطية)

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

          يقوم الكود التالي ببساطة بإعادة طرح مجموعة البيانات المحددة في crs جديد (new_crs) مع أي تعديلات على التحويل الأساسي. يقرأ الكود في مجموعة بيانات ، ويشتق تحويلًا جديدًا ، وارتفاع وعرض خطوط المسح ، وينشئ مصفوفة للبيانات المعاد تجميعها (new_imgdata) وينفذ أخيرًا إعادة الإسقاط:

          以下 代码 仅 将给 定 的 数据 投影 到 新 的 crs (new_crs) 中 , 并且 对 基础 进行 了 任何 更改。 该 读取 数据 集 , 得出 新 变换 , 栅格 高度 和 宽度 , 为 重新投影 的 数据 (new_imgdata) 创建 一个 数组 , 最后 执行 重新 投影 :


          性能 比较 (مقارنة الأداء)

          كيف يتراكم منطق استعلام GeoTIFF.js مقابل استدعاء gdallocationinfo؟ يمكن أن يعتمد هذا قليلاً على عدد الملفات التي تفتحها (خاصةً بشكل متكرر) ، لكن نتائجي ، على الصعيدين التجريبي والعملي ، كانت حاسمة. في محرك أقراص الحالة الصلبة ، سألت عن نفس البيانات النقطية (حوالي 500 بكسل × 200 بكسل ، مع 250 نطاقًا) باستخدام نفس خط العرض وخط الطول وسجلت المللي ثانية المنقضية.

          如何 将 GeoTIFF.js 查询 逻辑 与 对 gdallocationinfo 的 调用 进行 gdallocationinfo? 这 可能 取决于 您 打开 的 文件 数量 (尤其 是 重复 打开 的 文件 数量) , 但是 我 的 实验 和 实践 结果 都是 上 驱动, 我 使用 相同 的 纬度 和 经度 查询 了 相同 的 栅格 (大约 500 بكسل × 200 بكسل , 具有 250 条 带) , 并 记录 了 经过 的 毫秒 数。

          exec (gdallocationinfo…)

          إكسيك (gdallocationinfo.)

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

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


          شاهد الفيديو: تحديد مجال الدالة جبريا. الكسرية و الجذرية (شهر اكتوبر 2021).