עיצוב Map Tips בQGIS

 


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

הפתרון עליו חשבתי הוא שימוש בmap tip, שהם סוג של פופאפ שמציג שדה או מה שאנחנו מגדירים כשהעכבר מרחף מעל לישות מסוימת. אנחנו יכולים לערוך את הMap Tip בחלונית הLayer Properties, שם אנחנו יכולים להגדיר אותו בצורה מאוד פשוטה באמצעות ביטוי, לדוגמה(בדוגמאות אני כמעט תמיד משתמש בשכבת Admin 0 - Countries של Natural Earth):

to_string("name") +'\n' + 'Population: '+to_string("pop_est")

 אפשר להכניס את הביטוי הזה בשדה הDisplay Name או בחלונית הHTML Map Tip, צריך לזכור שכשמוסיפים ביטוי לחלונית הHTML (וזה נכון גם כשמעצבים בHTML בPrint Layout) צריך לעטוף את הביטוי בסוגריים מרובעים ככה:

[%to_string("name") +'\n' + 'Population: '+to_string("pop_est")%]


לא משנה באיזו דרך תבחרו לכתוב את הביטוי, התוצאה הסופית במקרה של ביטוי פשוט שכזה יהיה Map Tip של טקסט פשוט שייראה בערך ככה:


 

אז איך אפשר לעצב את הMap Tip כדי שגם ייראה טוב?

אם נשתמש בHTML Map Tip אז אנחנו יכולים להוסיף לו, בצורה מפתיעה, גם קוד HTML. זה אומר שאנחנו יכולים להשתמש בתגיות HTML בשביל להפוך את הטקסט שלנו לבולט, או לשנות את הצבע הגודל שלו עם תגית header כמו זו לדוגמה:

<h2 style="color:red;">[% to_string("name")%]</h2>
<b>Population: </b>[%to_string("pop_est")%]
 

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

אנחנו יכולים גם לקחת את העיצוב לרמה הבאה, וכדי שהMap Tip שלנו ייראה כמו התמונה בתחילת הפוסט אנחנו יכולית להוסיף תגית של <style> בתחילת חלונית הHTML Map Tip ובתוכה להכניס כללי עיצוב בCSS. בשביל הדוגמה אני לקחתי כללי עיצוב מהמדריך של W3 Schools לעיצוב טבלה והכנסתי אותם לתוך התגית.
אחרי הוספה של כללי העיצוב (אפשר להשמיט את הכללים שקשורים לריחוף של העכבר מעל לשורות), אנחנו יכולים לבנות את הטבלה רק עם השדות שאנחנו רוצים. בדוגמה אני משתמש גם בשדה name_ar ומיישר אותו לימין כדי להראות את השם בערבית של כל מדינה כתוב מימין לשמאל.

<style>
table {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 1.3em;
    border-collapse: collapse;
    width: 300px;
  }
td, th {
    border: 1px solid #ddd;
    padding: 8px;
}
tr:nth-child(even){
    background-color: #f2f2f2;
}
tr:hover {
    background-color: #ddd;
}
th {
    padding-top: 12px;
    padding-bottom: 12px;
    background-color: #04AA6D;
    color: white;
}
</style>
<table>
    <tr>
        <th colspan="2">[% to_string("name")%]</th>
    </tr>
    <tr>
        <th>Field Name</th>
        <th>Value</th>
    </tr>
    <tr>
        <td><b>Population</b></td>
        <td>[%+to_string("pop_est")%]</td>
    </tr>
    <tr>
        <td><b>Continent</b></td>
        <td>[% "continent" %]</td>
    </tr>
    <tr>
        <td><b>Abbreviation</b></td>
        <td>[% "abbrev" %]</td></tr>
    <tr>
        <td><b>Economy</b></td>
        <td>[% "economy" %]</td>
    </tr>
    <tr>
        <td><b>Arabic Name</b></td>
        <td direction="rtl" style="text-align: right;">[% "name_ar" %]</td>
    </tr>
</table>


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


 

התוצאה שלנו נראית ככה:


 אתם יכולים ללמוד HTML וCSS בשביל להמשיך לשנות ולעצב את הMap Tips שלכם כדי לעזור למשתמשים שלכם להבין יותר טוב את המפה, ולחסוך זמן של חיפוש שדות ספציפיים בפאנל הIdentify. ההגדרות של הMap Tip נשמרות בעיצוב השכבה שנשמר בתוך הגדרות הפרוייקט אז אם משתמש אחר יפתח את הפרוייקט שלכם או אם תעבירו לו פרוייקט ששמור ביחד עם השכבות שלו בתוך GeoPackage הוא יראה בדיוק את מה שהגדרתם. 
 
אם המדריך הזה עזר לכם או שבא לכם לציין משהו שפספסתי תרגישו חופשיים להשאיר הערה על הפוסט.

You can learn HTML and CSS to keep changing and styling your map tips to
help users understand your map better and save time on looking for attributes in the Identify Panel. If this helped you or you want to point out something I've missed feel free to leave a comment.


Comments