דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. חילוץ נתונים מטאורלוגיים מקובץ geoTiff

חילוץ נתונים מטאורלוגיים מקובץ geoTiff

מתוזמן נעוץ נעול הועבר תכנות
8 פוסטים 4 כותבים 262 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • D מנותק
    D מנותק
    davidnead
    כתב ב נערך לאחרונה על ידי
    #1

    אני מתנצל מראש אם השאלה לא תהיה מספיק מפורטת או ברורה. אני טרם אוחז ב"שאלת חכם חצי תשובה".

    המשימה שאני מנסה לבצע היא חילוץ נתוני מזג אוויר במקומות שונים בעולם, ממאגר הנתונים של worldclim.
    בסופו של דבר אני רוצה לקבל סוג של דאטאבייס, להגיש לו שאילתא של קורדינטות (קו אורך ורוחב) ולקבל פלט כלשהו, שאין לי מושג מה בדיוק הוא מכיל ובאיזה מבנה הוא מגיע, אבל תכל'ס אמור לכלול בתוכו את הטמפרטורה הממוצעת למקום שביקשתי.

    דא עקא, סוג כזה של נתונים (נתונים גיאו מרחביים על כל כדור הארץ וכשאר מילים מפוצצות) מגיע בפורט מקובל של קובץ geoTiff שזה בערך אומר שהמידע מתורגם לפיקסלים, וכך אתה יכול לקרוא לפי מיקום, וכנראה זו דרך אופטימלית לדחוס ולקרוא את המידע.

    בדר"כ קריאת המידע נעשית באמצעות כלים מוכנים (עם UI) שמשמשים אנשי מקצוע שעוסקים בזה. אבל אני כולה צריך קוד, פונקציית JS או פייתון פשוטה שתעשה לי את העבודה.
    למזלי הטוב, יצא לי בעבר להתעסק עם קוד מוכן שעשה משהו דומה, נתונים טיפוגרפיים על כל כדור הארץ. הוא השתמש בספריה GDAL שיש לה חבילה בפייתון וגם גרסה מקבילה בNODEJS.

    אז היות שאני לא מבין בזה כלום ניסיתי לגשש באפילה בעקבות הקוד שיש לי + ניסוי וטעיה + הרבה גוגל, להלן הצעדים שביצעתי והיכן שנתקעתי.

    //קריאת הקובץ
      const file = `E:\\World Climate\\\\wc2.1_30s_tavg_01.tif`;
      const dataset = gdal.open(file);
    
    //חילוץ נתונים של גובה ורוחב התמונה (או הרסטר או השד יודע מה) מהשדה
    dataset.geoTransform
    
    //קריאת הפיקסלים:
      const pxs = ds.bands.get(1).pixels.read(0, 0, ds.rasterSize.x, 14);
    

    טוב, פה נתקעתי פעם ראשונה. רציתי לקרוא את כל הפיקסלים, ולכן בהתחלה העברתי פרמטרים (0, 0, ds.rasterSize.x, ds.rasterSize.y) כלומר את כל הגובה והרוחב החל מהיסט 0 (הפינה). אבל משום מה זה החזיר שגיאה. מתברר שלמרות הגודל לכאורה של התמונה, הוא מסוגל לקרוא רק את ה14 שורות הראשונות (בדקתי, דוקא שורות אלו).

    החלטתי להתפשר ולנסות עם השורות הללו. אז בשביל השלב השני תרגמתי את הפיקסלים למערך שמסודר לפי מספרי שורות וטורים (באמצעות לולאה שעברה על הפיקסלים).

    כעת, לכאורה לא נותר לי אלא לבחור פיקסל מסוים (שיתאים במיקומו לקוי האורך והרוחב המבוקשים) וקיבלתי את התשובה (אם נתעלם מזה שיש לי מידע רק על 14 שורות).
    דא עקא, כל מה שהפיקסל מכיל זה מספר ארוך מסוג Float32, שאין לי מושג מה לעשות איתו ואיך הוא אמור בדיוק להכיל בתוכו את כל המידע על טמפרטורה, משקעים ושאר מטעמים המופיעים בתיאור מסד הנתונים. כל חפירה בתיעודים ושאר אתרים לא הועילה לי.

    אז אולי עשיתי כמעט את כל הדרך נכון ונפלתי רק בפספוס קטן בסוף. ואולי חסר לי משהו בהבנת כל הפרנציפ. כך או כך, אם יש מישהו שמבין משהו בבוץ הזה - אודה לו על כל עזרה. רק לא להפנות אותי לגוגל, אני מכיר את האתר הזה.

    nigunN OdedDvirO 2 תגובות תגובה אחרונה
    0
    • nigunN מנותק
      nigunN מנותק
      nigun
      השיב לdavidnead ב נערך לאחרונה על ידי nigun
      #2

      @davidnead
      לא נפנה אותך לגוגל
      רק נעתיק לכאן את התוצאות.

      כאן נראה שיש הסברים קצת יותר מורחבים מה מבנה הקובץ
      https://worldclim.org/data/v1.4/formats.html
      כאן יש דוגמה לחילוץ של המידע בשפת R אולי זה יתן לך כיוון
      https://gist.github.com/kgturner/6643334

      כל זה לקבצים בגרסה 1 של worldclim לא יודע איפה התיעוד של גרסה 2.

      עריכה: המשכתי בכיוון הזה וחיפשתי בגיטהאב עוד דוגמאות קוד לניתוח הקבצים של worldclim, יש שם עוד כמה שנראה שמתאימים לגרסה 2.
      למשל בזה מוזכר בפירוש גרסה 2.1
      https://github.com/Chilipp/latlon-utils

      יש עוד פרוייקטים מהשנים האחרונות שכנראה גם מתאימים
      צריך לעבור ולהבין מה מתאים, אמנם הרוב כתוב בR אבל אולי מההערות אפשר להבין משהו
      https://github.com/search?o=desc&q=worldclim&s=updated&type=Repositories

      מייל: nigun@duck.com

      D תגובה 1 תגובה אחרונה
      1
      • OdedDvirO מנותק
        OdedDvirO מנותק
        OdedDvir
        השיב לdavidnead ב נערך לאחרונה על ידי
        #3

        @davidnead אמר בחילוץ נתונים מטאורלוגיים מקובץ geoTiff:

        בסופו של דבר אני רוצה לקבל סוג של דאטאבייס, להגיש לו שאילתא של קורדינטות (קו אורך ורוחב) ולקבל פלט כלשהו, שאין לי מושג מה בדיוק הוא מכיל ובאיזה מבנה הוא מגיע, אבל תכל'ס אמור לכלול בתוכו את הטמפרטורה הממוצעת למקום שביקשתי.

        הואיל ולא קיבלת מענה מדויק לבעיה, יתכן וכיוון אחר יעזור לך.
        אם אתה לא נעול דווקא על המאגר של worldclim, אולי תבדוק את ה-API של OpenWeather. הוא נותן בחינם 1000 בקשות ליום.

        D תגובה 1 תגובה אחרונה
        2
        • D מנותק
          D מנותק
          davidnead
          השיב לnigun ב נערך לאחרונה על ידי
          #4

          @nigun אמר בחילוץ נתונים מטאורלוגיים מקובץ geoTiff:

          @davidnead
          לא נפנה אותך לגוגל
          רק נעתיק לכאן את התוצאות.

          כאן נראה שיש הסברים קצת יותר מורחבים מה מבנה הקובץ
          https://worldclim.org/data/v1.4/formats.html
          כאן יש דוגמה לחילוץ של המידע בשפת R אולי זה יתן לך כיוון
          https://gist.github.com/kgturner/6643334

          כל זה לקבצים בגרסה 1 של worldclim לא יודע איפה התיעוד של גרסה 2.

          עריכה: המשכתי בכיוון הזה וחיפשתי בגיטהאב עוד דוגמאות קוד לניתוח הקבצים של worldclim, יש שם עוד כמה שנראה שמתאימים לגרסה 2.
          למשל בזה מוזכר בפירוש גרסה 2.1
          https://github.com/Chilipp/latlon-utils

          יש עוד פרוייקטים מהשנים האחרונות שכנראה גם מתאימים
          צריך לעבור ולהבין מה מתאים, אמנם הרוב כתוב בR אבל אולי מההערות אפשר להבין משהו
          https://github.com/search?o=desc&q=worldclim&s=updated&type=Repositories

          ביקשתי לא גוגל לא מחמת עצלות ח"ו, אלא מפני שחפרתי בו יסודי ולא עלה בידי, יותר מידי מושגים שאין לי בהם ניסיון ואני נאבד בהם. על רוב הקישורים שנתת כבר עברתי, וכמו שאמרת רובם ב-R שאין לי שום ניסיון איתו, וזה ספריות שעושים עבודה מאחורי הקלעים.

          אמנם יש כן קישור אחד שנתת (לפייתון) שלא ראיתי, ואנסה לראות אם אני יכול ללמוד ממנו משהו.
          תודה!

          nigunN תגובה 1 תגובה אחרונה
          0
          • D מנותק
            D מנותק
            davidnead
            השיב לOdedDvir ב נערך לאחרונה על ידי
            #5

            @OdedDvir אמר בחילוץ נתונים מטאורלוגיים מקובץ geoTiff:

            @davidnead אמר בחילוץ נתונים מטאורלוגיים מקובץ geoTiff:

            בסופו של דבר אני רוצה לקבל סוג של דאטאבייס, להגיש לו שאילתא של קורדינטות (קו אורך ורוחב) ולקבל פלט כלשהו, שאין לי מושג מה בדיוק הוא מכיל ובאיזה מבנה הוא מגיע, אבל תכל'ס אמור לכלול בתוכו את הטמפרטורה הממוצעת למקום שביקשתי.

            הואיל ולא קיבלת מענה מדויק לבעיה, יתכן וכיוון אחר יעזור לך.
            אם אתה לא נעול דווקא על המאגר של worldclim, אולי תבדוק את ה-API של OpenWeather. הוא נותן בחינם 1000 בקשות ליום.

            תודה, בחנתי כבר אופציה זו, אם לא תהיה ברירה אולי אשתמש בה, אך זה דיעבד גדול מאוד.

            dovidD תגובה 1 תגובה אחרונה
            0
            • dovidD מנותק
              dovidD מנותק
              dovid ניהול
              השיב לdavidnead ב נערך לאחרונה על ידי
              #6

              @davidnead יש מצב שלא בדקת ספריות אחרות חות מgdal?
              עברת פה על זה
              https://www.npmjs.com/search?ranking=popularity&q=geoTiff
              הספריה הפופולרית היא עם 70 אלף הורדות שבועיות
              https://www.npmjs.com/package/geotiff

              אני רואה המון קוד המון דוגמאות ומסתמא גם אפשר לשאול שם בגיטאב או בסטאק על זה נקודתית יותר.

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

              D תגובה 1 תגובה אחרונה
              1
              • D מנותק
                D מנותק
                davidnead
                השיב לdovid ב נערך לאחרונה על ידי
                #7

                @dovid אמר בחילוץ נתונים מטאורלוגיים מקובץ geoTiff:

                @davidnead יש מצב שלא בדקת ספריות אחרות חות מgdal?
                עברת פה על זה
                https://www.npmjs.com/search?ranking=popularity&q=geoTiff
                הספריה הפופולרית היא עם 70 אלף הורדות שבועיות
                https://www.npmjs.com/package/geotiff

                אני רואה המון קוד המון דוגמאות ומסתמא גם אפשר לשאול שם בגיטאב או בסטאק על זה נקודתית יותר.

                בחנתי את הספריה הנ"ל.
                הבעיה שלי משולבת מזה שיש לי מעט מאוד התמצאות במושגים הרלוונטיים, כך שגם אם אני מתקרב אולי לפתרון יתכן שאני לא מזהה אותו. החלק השני של הבעיה (שנדמה לי שהוא העיקר) שמה שתקע אותי זה לאו דוקא פורמט הקובץ והדרך לקרוא אותו, אלא חוסר בידע על הקובץ הספציפי הזה, על מבנה התוכן שלו.
                הצלחתי הרי לקבל טבלה של פיקסלים, שזה בעצם מערך של נתונים בינאריים, ולכן לכאורה יש לי תוצאה ביד. עלי לתת את המיקום שאני צריך ולקבל את התוצאה המתאימה. הבעיה שהתוצאה היא מספר בינארי יחיד (שמתורגם לINT) ואני אמור לקבל מחרוזת טקסט או משהו כזה שמכילה לא מעט מידע. אז מה אני מפספס?

                תגובה 1 תגובה אחרונה
                1
                • nigunN מנותק
                  nigunN מנותק
                  nigun
                  השיב לdavidnead ב נערך לאחרונה על ידי
                  #8

                  @davidnead אמר בחילוץ נתונים מטאורלוגיים מקובץ geoTiff:

                  וכמו שאמרת רובם ב-R שאין לי שום ניסיון איתו

                  לא התכוונתי שתעבור ללמוד R
                  אלא לעבור על הקוד ולקרוא בעיקר את ההערות
                  אולי לעבור גם על מדריך בסיסי לסינטקסט של R בסגנון הזה

                  ואז יש סיכוי סביר שתבין את מבנה הקובץ של worldclim (שיתכן ששונה קצת מקבצים של חברות אחרות) ותיישם את זה בJS.

                  מייל: nigun@duck.com

                  תגובה 1 תגובה אחרונה
                  0

                  בא תתחבר לדף היומי!
                  • התחברות

                  • אין לך חשבון עדיין? הרשמה

                  • התחברו או הירשמו כדי לחפש.
                  • פוסט ראשון
                    פוסט אחרון
                  0
                  • דף הבית
                  • קטגוריות
                  • פוסטים אחרונים
                  • משתמשים
                  • חיפוש
                  • חוקי הפורום