חילוץ נתונים מטאורלוגיים מקובץ geoTiff
-
אני מתנצל מראש אם השאלה לא תהיה מספיק מפורטת או ברורה. אני טרם אוחז ב"שאלת חכם חצי תשובה".
המשימה שאני מנסה לבצע היא חילוץ נתוני מזג אוויר במקומות שונים בעולם, ממאגר הנתונים של 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, שאין לי מושג מה לעשות איתו ואיך הוא אמור בדיוק להכיל בתוכו את כל המידע על טמפרטורה, משקעים ושאר מטעמים המופיעים בתיאור מסד הנתונים. כל חפירה בתיעודים ושאר אתרים לא הועילה לי.אז אולי עשיתי כמעט את כל הדרך נכון ונפלתי רק בפספוס קטן בסוף. ואולי חסר לי משהו בהבנת כל הפרנציפ. כך או כך, אם יש מישהו שמבין משהו בבוץ הזה - אודה לו על כל עזרה. רק לא להפנות אותי לגוגל, אני מכיר את האתר הזה.
-
@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 -
@davidnead אמר בחילוץ נתונים מטאורלוגיים מקובץ geoTiff:
בסופו של דבר אני רוצה לקבל סוג של דאטאבייס, להגיש לו שאילתא של קורדינטות (קו אורך ורוחב) ולקבל פלט כלשהו, שאין לי מושג מה בדיוק הוא מכיל ובאיזה מבנה הוא מגיע, אבל תכל'ס אמור לכלול בתוכו את הטמפרטורה הממוצעת למקום שביקשתי.
הואיל ולא קיבלת מענה מדויק לבעיה, יתכן וכיוון אחר יעזור לך.
אם אתה לא נעול דווקא על המאגר של worldclim, אולי תבדוק את ה-API של OpenWeather. הוא נותן בחינם 1000 בקשות ליום. -
@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 שאין לי שום ניסיון איתו, וזה ספריות שעושים עבודה מאחורי הקלעים.
אמנם יש כן קישור אחד שנתת (לפייתון) שלא ראיתי, ואנסה לראות אם אני יכול ללמוד ממנו משהו.
תודה! -
@OdedDvir אמר בחילוץ נתונים מטאורלוגיים מקובץ geoTiff:
@davidnead אמר בחילוץ נתונים מטאורלוגיים מקובץ geoTiff:
בסופו של דבר אני רוצה לקבל סוג של דאטאבייס, להגיש לו שאילתא של קורדינטות (קו אורך ורוחב) ולקבל פלט כלשהו, שאין לי מושג מה בדיוק הוא מכיל ובאיזה מבנה הוא מגיע, אבל תכל'ס אמור לכלול בתוכו את הטמפרטורה הממוצעת למקום שביקשתי.
הואיל ולא קיבלת מענה מדויק לבעיה, יתכן וכיוון אחר יעזור לך.
אם אתה לא נעול דווקא על המאגר של worldclim, אולי תבדוק את ה-API של OpenWeather. הוא נותן בחינם 1000 בקשות ליום.תודה, בחנתי כבר אופציה זו, אם לא תהיה ברירה אולי אשתמש בה, אך זה דיעבד גדול מאוד.
-
@davidnead יש מצב שלא בדקת ספריות אחרות חות מgdal?
עברת פה על זה
https://www.npmjs.com/search?ranking=popularity&q=geoTiff
הספריה הפופולרית היא עם 70 אלף הורדות שבועיות
https://www.npmjs.com/package/geotiffאני רואה המון קוד המון דוגמאות ומסתמא גם אפשר לשאול שם בגיטאב או בסטאק על זה נקודתית יותר.
-
@dovid אמר בחילוץ נתונים מטאורלוגיים מקובץ geoTiff:
@davidnead יש מצב שלא בדקת ספריות אחרות חות מgdal?
עברת פה על זה
https://www.npmjs.com/search?ranking=popularity&q=geoTiff
הספריה הפופולרית היא עם 70 אלף הורדות שבועיות
https://www.npmjs.com/package/geotiffאני רואה המון קוד המון דוגמאות ומסתמא גם אפשר לשאול שם בגיטאב או בסטאק על זה נקודתית יותר.
בחנתי את הספריה הנ"ל.
הבעיה שלי משולבת מזה שיש לי מעט מאוד התמצאות במושגים הרלוונטיים, כך שגם אם אני מתקרב אולי לפתרון יתכן שאני לא מזהה אותו. החלק השני של הבעיה (שנדמה לי שהוא העיקר) שמה שתקע אותי זה לאו דוקא פורמט הקובץ והדרך לקרוא אותו, אלא חוסר בידע על הקובץ הספציפי הזה, על מבנה התוכן שלו.
הצלחתי הרי לקבל טבלה של פיקסלים, שזה בעצם מערך של נתונים בינאריים, ולכן לכאורה יש לי תוצאה ביד. עלי לתת את המיקום שאני צריך ולקבל את התוצאה המתאימה. הבעיה שהתוצאה היא מספר בינארי יחיד (שמתורגם לINT) ואני אמור לקבל מחרוזת טקסט או משהו כזה שמכילה לא מעט מידע. אז מה אני מפספס? -
@davidnead אמר בחילוץ נתונים מטאורלוגיים מקובץ geoTiff:
וכמו שאמרת רובם ב-R שאין לי שום ניסיון איתו
לא התכוונתי שתעבור ללמוד R
אלא לעבור על הקוד ולקרוא בעיקר את ההערות
אולי לעבור גם על מדריך בסיסי לסינטקסט של R בסגנון הזהואז יש סיכוי סביר שתבין את מבנה הקובץ של worldclim (שיתכן ששונה קצת מקבצים של חברות אחרות) ותיישם את זה בJS.