העתקה והדבקה של העבודה בQGIS עם טמפלטים

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

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

ואז המנהל שלכם אומר שגודל הדף צריך להיות A3 ולא A4...

והפריסה שלכם הופכת מזה:



לזה:


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

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



אני רוצה שהמפה שלי תחיל רק את האמריקות כי ארצה לייצר מפה עולמית אופקית על שני עמודים .
בואו נתחיל בלהוסיף עמוד נוסף, פשוט לחצו על כפתור Add Pages... והוסיפוי עמוד נוסף אחרי העמוד הראשון.
 



עכשיו בואו נוסיף לעמוד השני מפה חדשה, אבל ניצור אותה יותר קטנה כי את הגודל והמיקום שלה נקבע באמצעות ביטויים.
תבחרו את המפה החדשה וגללו למטה בItem Properties לPosition and Size.

תוודאו שאתם קובעים את נקודת הייחוס (Reference point) למרכז האמצע כמו בתמונה לפני שאתם מתחילים לערוך את הביטויים.
התכונות הראשונות שנשנה הם גם אלו שהכי קל להבין, גובה (Height) ורוחב (Width), אנחנו יכולים לקבע אותם למימדים של הדף שאנחנו משתמשים בו (ברירת המחדל היא A4, אבל המימדים ישתנו כשתשנו את גודל הדף).
לדוגמה אנחנו יכולים פשוט להשתמש במשתנה @layout_pagewidth בשביל לקבוע את הרוחב כמו בתמונה, אבל לא במיקום הנכון (אתם מוזמנים גם להמשיך ולקבוע את הגובה עם @layout_pagheight).

 


עכשיו שהמפה שלנו ברוחב הנכון, בואו נקבע אותה גם במיקום הנכון עם קיבוע של מיקום הX שלה, נעשה את זה (בהנחה שאנחנו רוצים שהיא תשב בדיוק במרכז הדף) בצורה פשוטה עם הביטוי הבא:

@layout_pagewidth/2

 

 זה פותר לנו את המיקום של הX, אבל מה עם Y? כבר ניסיתם לקבוע אותו עם @layout_pageheight/2? ראיתם איך המפה שלכם עפה לעמוד הראשון? יופי, אז בואו נראה מה אפשר לעשות עם זה.
אם אתם רוצים לקבוע את נקודת הY (המיקום האנכי) באופן אוטומטי, היא צריכה לקבל הסטה מהעמוד הראשון, בשביל זה נשתמש במשתנים
layout_pageoffsets וlayout_page.
layout_page מחזיר במספר את העמוד הנוכחי שהמפה שלנו נמצאת בו.
layout_pageoffsets  מחזיר לנו מערך של מספרים שמייצגים את ההסטה מהעמוד הראשון.

אם נשלב את שניהם ביחד עם הנקודה המרכזית של העמוד (פשוט 2/גובה) נוכל לכתוב ביטוי שמשיג לנו את נקודת הY.

@layout_pageoffsets[ @layout_page-1] + @layout_pageheight/2

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


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



 
הדבר הבא שנעשה הוא עריכה של התכונות של המפה השנייה שלנו (Map 2, עכשיו משתמשים בשמות, בגלל זה הם חשובים), ונתחיל עם קנה המידה (Scale), מכיוון שאנחנו רוצים שהמפות יהיו המשכיות חייב להיות להן אותו קנה מידה.

אנחנו הולכים להשתמש בשתי פונקציות של מנוע הביטויים בשביל לקבוע קנ"מ זהה בין שתי המפות, נתחיל עם להשתמש בitem_variables('Map 1') שמחזיר לנו את התכונות של אובייקט פריסה ספציפי (לא רק מפות, אנחנו יכולים להשתמש גם באובייקטים אחרים, אבל אפשר להניח שקנה מידה ומערכת קואורדינטות יהיו למפות ולא לתמונות וטבלאות). מה שאנחנו מקבלים חזרה הוא המקבילה של מנוע הביטויים למילון בPython או אובייקט בJavaScript, משמע אובייקט עם מבנה של מפתח:ערך אותו אנחנו יכולים לתשאל בשביל לקבל ערכים ספציפיים לפי המפתח שלהם, בתמונה למטה אפשר לראות שהערך של המפתח item_id הוא Map 1.


 

את הביטוי item_variables('Map 1') נעטוף בפונקציה שעוזרת לנו לשלוף ערכים לפי מפתח ספציפי, הפונקציה נקראת map_get אבל אין לה שום קשר למפות, היא מקבלת את השם שלה מההגדרה השנייה של המילה Map במילון וובסטר. המפתח שאנחנו רוצים לשלוף הוא map_scale והביטוי הסופי שלנו אמור להיראות ככה:

map_get(
    item_variables('Map 1'),
'map_scale')

  אנחנו אמורים לקבל חזרה מספר שיקבע את קנה המידה של מפה 2 כך שיהיה תואם לקנה המידה של מפה 1.

 


עכשיו בואו נקבע גם את הגבולות (Extents) של המפה. נצטרך להשתמש בביטוי יחסית דומה אבל הערך שחוסר מהמפתח של map_extent הוא פוליגון, אז אנחנו הולכים לשלב את הביטוי הקודם עם פונקציות גיאומטריה כמו xmin, xmax, ymin וymax. קביעה של ערכי הY היא פשוט שימוש בערכי הY של מפה 1:

 ymin(map_get( item_variables('Map 1'), 'map_extent'))

ymax(map_get( item_variables('Map 1'), 'map_extent'))

 את X max אנחנו לא צריכים לקבוע, הוא ייקבע אוטומטית בהתאם לX min ולקנה המידה והגודל של המפה. בשביל לקבל מפה המשכית, אנחנו פשוט צריכים לקבוע את X min שיהיה שווה לX max של מפה 1:

xmax(map_get( item_variables('Map 1'), 'map_extent')) 

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

 


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

 

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



וזהו, יש לנו פריסה חדשה לפי הטמפלט שבנינו.

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


הערה חשובה

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

2. שינוי מספר העמוד בהתאם לעמוד שכל מפה אמורה להיות בו, אני פשוט נותן להן שם לפי העמוד שהן אמורות להיות בו.

3. לחיצה ימנית נוספת על הכפתור של הביטוי שתחיל את הביטוי שוב

 



 

Comments