‏הצגת רשומות עם תוויות GIS. הצג את כל הרשומות
‏הצגת רשומות עם תוויות GIS. הצג את כל הרשומות

יום חמישי, מרץ 21, 2024

I'm thrilled to see that the packge I contributed to in 2019, is now used in an offical guide at #switch2osm, now we only need just one external tool to #debian (carto) to be able to setup a self hosted #osm compatibale tile server #GIS, setup one while you can!

איזה כיף לראות  את החבילה ששלחתי לה פאטצים בשנת 2019 משומשת במדריך רשמי של switch2osm.

הסיפור היה שבשנת 2019 הרחוקה, החבילות שנתנו את renderd היו מחוץ לדביאן,  ובאופן כללי בתקופה ההיא החבילות הדרושות ל  OSM בדביאן לא היו ארוזות,  מה שדי תקע את האפשרות לשדרג מג'סי מעלה אם היה לכם שרת שמספק מרצפות (tile server),  אז רציתי לפתור את זה ושלחתי לי מספר טלאים (פאטצ'ים) , רק אחד מהם התקבל בסופו של יום. תודות לעבודתם הרבה של הרבה אנשים ב2020, החבילה נארזה ונכנסה לדביאן,כך היכולת לספק שירותי מיפויי מבוססים OSM בדביאן די חזרו, וכך מאז גירסת בול פגיעה החבילה libapache2-mod-tile שוב נמצאת בדביאן.

עברה תקופה די ארוכה מאז, אבל מה אני רואה היום בפיד ה  הRSS שלי ? הודעה על הגדרת שרת apache ביחד עם osm ,ואיזו חבילה אני רואה שם ? יאפ מה שתרמתי לה,  והתענגתי על העובדה שrenderd עדיין משומש וניתן להשתמש בו. ולמה זה חשוב ? כי בין ג'סי לבין בול פגיעה היכולת לספק שירותי מיפויי מבוססי OSM הייתה בעייתית בלשון המעטה.
 
המדריך שם מבקש להוריד את openstreetmap-carto  מקוד מקור בשביל לבנות את mapnik.xml שמשומש בrednerd, זאת למרות שהיום יש כבר את openstreemap-carto שאמור להביא את כל הדברים ישירות, לכן אנחנו עדיין לא הגענו לנחלה. לא בדקתי האמת אם אפשר להשתמש רק במה שהחבילה הזאת מספקת בשביל להרים סביבה,  נקווה שגם הדרישה הזאת תהיה מיותרת בקרוב,  פעם נדרשנו להוריד את libapache2-mod-tile אולי בקרוב פשוט נוכל להוריד את ה DVD של דביאן וקבצי התוכן של OSM ונהיה רגועים שזה פשוט יעבוד בלי שום תלויות נוספות.

עריכה: בדקתי ואת הקובץ mapnik.xml ניתן לקבל מתיקיית ה utils אם מורידים את קוד המקור של החבילה libapache2-mod-tile: 
apt-get source libapache2-mod-tile
Reading package lists... Done
NOTICE: 'libapache2-mod-tile' packaging is maintained in the 'Git' version control system at:
https://salsa.debian.org/debian-gis-team/libapache2-mod-tile.git
Please use:
git clone https://salsa.debian.org/debian-gis-team/libapache2-mod-tile.git
to retrieve the latest (possibly unreleased) updates to the package.
Need to get 1,387 kB of source archives.
Get:1 http://deb.debian.org/debian bookworm/main libapache2-mod-tile 0.6.1-2 (dsc) [2,230 B]
Get:2 http://deb.debian.org/debian bookworm/main libapache2-mod-tile 0.6.1-2 (tar) [1,372 kB]
Get:3 http://deb.debian.org/debian bookworm/main libapache2-mod-tile 0.6.1-2 (diff) [12.9 kB]
Fetched 1,387 kB in 1s (1,432 kB/s)            
dpkg-source: info: extracting libapache2-mod-tile in libapache2-mod-tile-0.6.1
dpkg-source: info: unpacking libapache2-mod-tile_0.6.1.orig.tar.gz
dpkg-source: info: unpacking libapache2-mod-tile_0.6.1-2.debian.tar.xz
dpkg-source: info: using patch list from debian/patches/series
dpkg-source: info: applying 0001-Use-VirtualHost-directive-configuration.patch

ואז פשוט להעתיק את הקובץ mapnik.xml לאן שצריך
cp utils/example-map/mapnik.xml /path/to/destination
 
הקובץ עצמו הוא ממש קטן (מה שיש בדביאן): 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Map[]>
<Map background-color="#afc6e9" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
 <Parameters>
   <Parameter name="name"><![CDATA[It's a simple world]]></Parameter>
   <Parameter name="description"><![CDATA[Simplest CartoCSS style showing land cover of the world.]]></Parameter>
   <Parameter name="bounds">-180,-85.05112877980659,180,85.05112877980659</Parameter>
   <Parameter name="center">0,0,4</Parameter>
   <Parameter name="format"><![CDATA[png]]></Parameter>
   <Parameter name="minzoom">0</Parameter>
   <Parameter name="maxzoom">18</Parameter>
 </Parameters>
 <Style filter-mode="first" name="world">
   <Rule>
     <PolygonSymbolizer fill="#ffffff" fill-opacity="0.75" />
     <LineSymbolizer stroke="#dddddd" stroke-width="0.3" />
   </Rule>
 </Style>
 <Layer name="world" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
   <StyleName><![CDATA[world]]></StyleName>
   <Datasource>
     <Parameter name="file"><![CDATA[very_simplified_land_polygons.shp]]></Parameter>
     <Parameter name="type"><![CDATA[shape]]></Parameter>
   </Datasource>
 </Layer>
</Map>


ובאמת שזה לא סיפור לכוון אותו לכל מיקום אחר.

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

אם משתמשים ב marble-qt כלקוח המפות שלכם, אתם יכולים לכוון להוריד את המפות ישירות מהשרת שלכם, בתאוריה זה אמור להיות המצב  גם  ב gnome-maps אבל לא הצלחתי לעשות זאת דרך /usr/share/gnome-maps/maps-service.json וגם לא דרך הפעלה של gnome-maps https://my-tile-server.local , ככה שבאורן עדיין ממשיכים להשתמש ב marble.

יום שלישי, אפריל 18, 2023

openstreetmap.org מציג שמות רחובות בשפה הלא נכונה (ערבית בממשק אנגלי או עברי)

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

במפות govmap או מפות גוגל כן רואים את שמות הרחובות בשפת הממשק או שניתן להחליף בקלות ללא פתיחת חשבון, בדקתי בשפה הערבית את מפות גוגל למשל והוא הציג בצורה נכונה את השמות העבריים בעברית ובערבית כשבוחרים בשפה הערבית. שם יש כתיבה בשפה האחרת.
 
למשל אזור התעשייה עידן הנגב המשותף בין רהט, בני שמעון ולהבים שמות הרחובות מופיעים רק בשפה הערבית, שם למשל לקחו את השמות העבריים כמו רחוב היצירה ורשמו לالخلق (כן ממש תרגמו ולא השתמשו בשם העברי),  אני חותם פה, למרבית העוברים באזור אין סיכוי לקרוא או להשתמש במפה כי, וואללה מרביתנו לא דוברים את השפה. בחברות האוטבוסים שבדקתי מופיע רחוב היצירה ולא אחולקה. רחוב עומר אל-מוח'תאר (ככה הוא מופיע במפות בעברית ) למשל מופיע בשמות התחנות בחברות האוטובסים בממשק עברי אשר משתמשת גם ב OSM בשביל להציג את המסלול , רק שאין סיכוי למי שאינו יודע קרוא וכתוב בערבית להבין את  שם הרחוב על המפה.
 
ברהט למשל (ששם האמת יש רוב מוחלט לדוברי השפה הערבית), יש תרגום מילולי כמו לציון השכונות השתמשו ב  حيّ , הייתי מצפה שאם אדם מחובר בשפה האנגלית הוא באמת ייראה את רחוב  A-Salam ולא شارع السلام , או רחוב א-סאלם אם מדובר בשפה העברית, וממש לא רחוב השלום או peace street.

נכון לעכשיו OSM כרגע לא שמיש בעליל לאף תייר או מי שאינו דובר את השפה הערבית והעברית כמו שצריך.

יום שבת, מרץ 28, 2020

Packaging OSM for debian

בגלל המגפה כולם עכשיו מתחילים להרים שרתים ולהציג מידע על מפות, רק שכמעט כולם מתבססים על שירותי המיפוי של אחרים.  בדר"כ הפתרונות הן שימוש ב openstreetmap , google , esri  ואחרים (משום מה לא ראיתי איש שמשתמש במפה של  govmap.gov.il).

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

רק היום בדביאן יש בעייה באריזה של חבילות OSM.

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

כולנו אוהבים להשתמש בשירותי ה tile של OSM אבל אנחנו תלויים בשרתים של OSM שיעבדו במקום שיהיה לנו שירותי tile server משלנו.

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


לצערי אני לא יודע מספיק Java Script בשביל לפתור את בעיות האריזה של node-carto, וממה שהבנתי node-carto היא החבילה שתוקעת את שאר החבילות הנדרשות בשביל לבנות tile server של OSM.

נכון להיום החבילות הבאות תקועות בתהליך האריזה הן :
אפשר לראות חבילות אחרות עליהם הצוות עובד פה.

את העזרה באריזה שלכם אפשר להגיש ב debian-gis@lists.debian.org וניתן לצפות בדיונים פה .

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

אין לי קשר ל debian-gis או דביאן פרט לשימוש בחבילות , כל הנאמר פה זה דעתי ולא דעתם של החברים בצוות שם.

יום רביעי, יוני 14, 2017

סקירה ל nadlan.gov.il

לפני זמן מה ראיתי אתר שאמור לספק מידע GIS בממשק משתמש גרפי חדש, הממשק עושה שימוש ב AngularJs ופשוט מציג מידע מתוך govmap ופועל בדפדפן ללא שימוש בפלאש או silverlight.

משום מה בחרו לאחסן חלק מידע בשרתי גוגל וב CDN של bootstrap במקום לאחסון בשירותי הממשל, אבל לפחות את רוב האתר איחסנו תחת הדומיין gov.il.

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

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

אם היו מאפשרים להשתמש במידע של govmap בתנאי השימוש, יכול להיות שהיה אפשר למשל לשתף מידע עם OSM או לאפשר משיכת מידע ושכבות בתוכנות צד שלישי ובאתרים אחרים.זאת כמובן ע"י נתינת הקרדיט הנדרש  כמו שעושים כשמתמשים ב OpenLayers או Marble אבל אי אפשר.

מישהוא החליט לאסור את שיתוף ושימוש ולכן אם אתה כותב תוכנה חופשית ב GIS לא כדאי לך התקרב לgovmap בלי בירוקרטיה, וזה ממש חבל כאשר יש לך API נוח כמו KeshetAnnan שיודע למשוך מידע מרשות המיסים וממערכת המיפוי בפעולת rest פשוטות.

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

כאשר ניגשים לאתר מגלים שהוא מתהדר בתמיכה ב דסקטופ טאבלט ומובייל. רק שככל הנראה אין זה לא כולל פיירפוקס (אבל זה עובד ב IE ו Edge) על Win10  או Gnu/Linux.

  • בפיירפוקס זה נראה כך :

ואם בודקים בשגיאות רואים :
10:28:24.704 Error: this.predictorInput.offsetParent is null
AmlPredictor/this.Initialize@https://www.nadlan.gov.il/scripts/dis/bundleJS.js?v=1.0.24:20725:9
a/this.link/<@https://www.nadlan.gov.il/KeshetAnan/dis/out.directives.js?v=1.0.24:2:1846
timeout/timeoutId<@https://www.nadlan.gov.il/scripts/dis/bundleJS.js?v=1.0.24:38440:28
completeOutstandingRequest@https://www.nadlan.gov.il/scripts/dis/bundleJS.js?v=1.0.24:27065:7
Browser/self.defer/timeoutId<@https://www.nadlan.gov.il/scripts/dis/bundleJS.js?v=1.0.24:27453:7
 1 bundleJS.js:33796:18
 consoleLog/< https://www.nadlan.gov.il/scripts/dis/bundleJS.js:33796:18
 $ExceptionHandlerProvider/this.$get</< https://www.nadlan.gov.il/scripts/dis/bundleJS.js:30737:7
 timeout/timeoutId< https://www.nadlan.gov.il/scripts/dis/bundleJS.js:38443:11
 completeOutstandingRequest https://www.nadlan.gov.il/scripts/dis/bundleJS.js:27065:7
 Browser/self.defer/timeoutId< https://www.nadlan.gov.il/scripts/dis/bundleJS.js:27453:7



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

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

מדי פעם מקבלים :


ואם בודקים בשגיאות מקבלים:
bundleJS.js?v=1.0.24:33796 TypeError: Cannot read property 'appendChild' of null
    at AmlPredictor.Initialize (bundleJS.js?v=1.0.24:20725)
    at out.directives.js?v=1.0.24:2
    at bundleJS.js?v=1.0.24:38440
    at completeOutstandingRequest (bundleJS.js?v=1.0.24:27065)
    at bundleJS.js?v=1.0.24:27453


  • קונקי 4.4.25 הצליח להציג את דף החיפוש, אבל לא הצליח להציג את התוכן, חיפוש ע"ג המפה כן עושה רושם שיעבוד :


לפעמים המפה מוצגת ולפעמים זה :




לפי הקריאות יש שימוש ב api של ArcGIS המותקן על מערכת GovMap. מכיוון שהפעם תנאי השימוש באתר נדלן לא אוסרים על פירסום ממצאים אני חושב שמותר לי לכתוב את הפוסט הזה.

  • תוכן ב IE ו EDGE.

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

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

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

לאחר טיול במערכת אני מבין שעדיין אתר מדלן וgovmap הם הפתרון (להשתמש בשניהם ביחד לא רק באחד) בשביל לקבל תמונה טובה יותר בזמן שכירות.

יום שבת, פברואר 13, 2016

כל הכבוד לעיריות

אני חייב להגיד כל הכבוד לעריית חיפה ולמיזם חיפה עיר חכמה (מתברר שמספר רב של עיריות) - הם היו צריכים פתרון מיפוי שיעבוד אז הם לא בחרו בממשק JS (רחמנא ליצלן להשתמש ב ol3 או  LF שייתמך בכל מכשיר סלולאר או דפדפן) הם לא שיחקו אותה ראש קטן ולא השתמשו בהצעה להשתמש ב JS הם הלכו והרימו ממשק בנוי ב silverlight

חושבים שאני עובד עליכם ואין מצב כזה אז הנה הקישור.

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


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

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

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

הלכתי ובדקתי כמה ערים נוספות וגם שם יש דברים מעניינים : 


שימוש ב פלאש (ירושלים) - טוב זה עוד לא מת , זה עובד ואף עובד טוב - אין יותר מדי תלונות.
שימוש ב ArcIMS (פתח תקווה) - עובד ב IE - אין יותר מדי תלונות.
שימוש ב Silverlight - עיריית באר שבע , הרצליה וחיפה.

רוצים לדעת למה אני צוחק במיוחד ? כי מדובר על שימוש בפלטפורמה של ArcGIS והצגת מפות מתוך     bbox וגם ע"י tiles,  יאפ בדיוק זאת שיש אפשרות להשתמש ב JS שיעבוד בכל דפדפן בשביל להציג את כל המידע שיש שם.

רוצים שיהיה מקדם טוב לבדיקה שלא יצחקו שזה לא עובד ?

תבדקו שהאתר שלכם עובד ב iceweasel על דביאן, קונקי על פדורה.

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

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

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

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

יום ראשון, ינואר 31, 2016

מפה חופשית (צילומי אוויר ולווין)

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




לא יודע למה יש שם את החור באזור הארקטי ,

יש שני רמות של מידע ב MapQuest שאני משתמש - מיפוי אווירי ומפות רגילות.

הכתובות של ה CDN למיפוי אווירי -

otile*.mqcdn.com//tiles/1.0.0/sat/{zoomLevel}/{x}/{y}.png

הכתובות של ה CDN למיפוי רגיל -

otile*.mqcdn.com//tiles/1.0.0/map/{zoomLevel}/{x}/{y}.png


קוד המקור לקובץ ההגדרות :
<?xml version="1.0" encoding="UTF-8"?>
<!--
     This xml file is free software licensed under the GNU LGPL. You can
     find a copy of this license in LICENSE.txt in the top directory of
     the source code.
-->
<dgml xmlns="http://edu.kde.org/marble/dgml/2.0">
  <document>
    <head>
      <!-- The license here applies to the actual map content, not this dgml file. See the license header above for the dgml file license -->
      <!-- The content that this license refers to is not distributed with this package -->
      <license short="Data, imagery and map information provided by MapQuest, OpenStreetMap and contributors, ODbL">Data, imagery and map information provided by MapQuest, OpenStreetMap and contributors, ODbL</license>
      <name>Mapquest tile server</name>
      <target>earth</target>
      <theme>mapquest</theme>
      <icon pixmap="mapquest.png"/>
      <visible>true</visible>
      <description><![CDATA[MapQuest is an online mapping company based in the United States and is wholly-owned by AOL. MapQuest is one of the pioneers in online mapping and holds a significant market share in the U.S. During the State Of The Map 2010, the company announced their support for OpenStreetMap making MapQuest the first large online mapping service to embrace OSM. ]]></description>
      <zoom>
        <minimum>   900  </minimum>
        <maximum>  3500  </maximum>
        <discrete> true </discrete>
      </zoom>
    </head>
    <map bgcolor="#000000">
      <canvas/>
      <target/>
      <layer name="mapquest" backend="texture">
        <texture name="mapnik_data" expire="31536000">
          <sourcedir format="PNG"> earth/mapquest </sourcedir>
          <tileSize width="256" height="256"/>
          <storageLayout levelZeroColumns="1" levelZeroRows="1" maximumTileLevel="19" mode="Custom"/>
          <projection name="Mercator"/>
          <downloadUrl protocol="http" host="otile1.mqcdn.com" port="80" path="/tiles/1.0.0/sat/{zoomLevel}/{x}/{y}.png"/>
          <downloadUrl protocol="http" host="otile2.mqcdn.com" port="80" path="/tiles/1.0.0/sat/{zoomLevel}/{x}/{y}.png"/>
          <downloadUrl protocol="http" host="otile3.mqcdn.com" port="80" path="/tiles/1.0.0/sat/{zoomLevel}/{x}/{y}.png"/>
          <downloadUrl protocol="http" host="otile4.mqcdn.com" port="80" path="/tiles/1.0.0/sat/{zoomLevel}/{x}/{y}.png"/>
          <downloadPolicy usage="Browse" maximumConnections="20"/>
          <downloadPolicy usage="Bulk" maximumConnections="2"/>
          <blending name="AlphaBlending"/>
        </texture>

       <texture name="tile" expire="31536000">
          <sourcedir format="PNG"> earth/mapquest/tiles </sourcedir>
          <tileSize width="256" height="256"/>
          <storageLayout levelZeroColumns="1" levelZeroRows="1" maximumTileLevel="19" mode="Custom"/>
          <projection name="Mercator"/>
          <downloadUrl protocol="http" host="otile1.mqcdn.com" port="80" path="/tiles/1.0.0/map/{zoomLevel}/{x}/{y}.png"/>
          <downloadUrl protocol="http" host="otile2.mqcdn.com" port="80" path="/tiles/1.0.0/map/{zoomLevel}/{x}/{y}.png"/>
          <downloadUrl protocol="http" host="otile3.mqcdn.com" port="80" path="/tiles/1.0.0/map/{zoomLevel}/{x}/{y}.png"/>
          <downloadUrl protocol="http" host="otile4.mqcdn.com" port="80" path="/tiles/1.0.0/map/{zoomLevel}/{x}/{y}.png"/>
          <downloadPolicy usage="Browse" maximumConnections="20"/>
          <downloadPolicy usage="Bulk" maximumConnections="2"/>
          <blending name="AlphaBlending"/>
        </texture>

     </layer>

      <layer name="standardplaces" backend="geodata">
        <geodata name="cityplacemarks">
          <sourcefile>cityplacemarks.cache</sourcefile>
        </geodata>
        <geodata name="baseplacemarks">
          <sourcefile>baseplacemarks.cache</sourcefile>
        </geodata>
        <geodata name="elevplacemarks">
          <sourcefile>elevplacemarks.cache</sourcefile>
        </geodata>
        <geodata name="otherplacemarks">
          <sourcefile>otherplacemarks.cache</sourcefile>
        </geodata>
        <geodata name="boundaryplacemarks">
          <sourcefile>boundaryplacemarks.cache</sourcefile>
        </geodata>
      </layer>
    </map>
    <settings>
      <property name="coordinate-grid">
        <value>true</value>
        <available>true</available>
      </property>
      <property name="overviewmap">
        <value>true</value>
        <available>true</available>
      </property>
      <property name="compass">
        <value>true</value>
        <available>true</available>
      </property>
      <property name="scalebar">
        <value>true</value>
        <available>true</available>
      </property>
      <group name="Places">
        <property name="places">
          <value>true</value>
          <available>true</available>
        </property>
        <property name="cities">
          <value>false</value>
          <available>false</available>
        </property>
        <property name="terrain">
          <value>false</value>
          <available>false</available>
        </property>
        <property name="otherplaces">
          <value>false</value>
          <available>false</available>
        </property>
      </group>
      <group name="Texture Layers">
        <property name="hillshading">
          <value>false</value>
          <available>true</available>
        </property>
      </group>
     <group name="Texture Layers">
        <property name="tile">
          <value>false</value>
          <available>true</available>
        </property>
      </group>


    </settings>
    <legend>
      <section name="coordinate-grid" checkable="true" connect="coordinate-grid" spacing="12">
        <heading>Coordinate Grid</heading>
      </section>
      <section name="tile" checkable="true" connect="tile" spacing="12">
        <heading>MapQuest tiles</heading>
      </section>

    </legend>
  </document>
</dgml>

יום שישי, ינואר 15, 2016

כל הכבוד לגוגל #2

לפני מספר ימים סיפרתי על זה שגוגל סוגרת את הברז ל  RouteBuilder , ואוסרת עליה להשתמש בשירות המפות שלה (לטענת גוגל RouteBuilder פעלו בניוד ו TOS של מפות גוגל).

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

מפה לשם גוגל משכו בחזרה את האיסור להשתמש במוצר שלהם נכון לעכשיו אבל החלק הבאמת מעניין , בדיוק כמו שהמון אנשים הציעו (כולל אני) החברה ב RouteBuilder עוברים להשתמש ב OpenStreetMap ואולי ביחד עם שימוש ב Leaflet (וזה לא באמת משנה אם זה זה או ol העיקר שזה קוד פתוח).

החלק המאוד משמעותי בנושא הוא העובדה שמוצר יחסית גדול מתנתק מקבלי שירות מפות ועובר להשתמש בשירות tiles (מדיה) ושירות ניתוב פתוח (שבאופן לא מפתיע אפשר להריץ לבד בלי התערבות של OSM בדרך).

השאלה היא מתי מפתחי אפליקציות נוספות יחליפו את שירותי ההסתמכות על מיפוי גוגל ויתחילו להשתמש ולאפשר החלפת שרתי מיפוי למשתמש ?

אחת השאלות הגדולות ביותר לאפליקציית מיפוי היא -
האם היא מוסגלת לעבוד offline לאחר הורדת מפות ל cache.
האם היא מסוגלת לעבוד בתוך רשת סגורה ללא פנייה למקורות חיצוניים.

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

יום שני, ינואר 11, 2016

תודה לגוגל (או חברת האלפבית)

אני חייב להגיד תודה לחברת גוגל , לאחר שזו הציבה דרישה ל RouteBuilder שאוסרת עליה להשתמש ב maps api. מדובר על פרוייקט שקם שנתיים אחרי OpenStreetMap אמנם OpenStreetMap מחזיקים ברישיון משונה (ODBL) זה עדיין טוב יותר מגוגל (גם MapQuest לא מדהימים למען האמת).


זה לא שלא אמרו לאנשים שאם הם רוצים שירות שיעבוד יש צורך להרים שרת מיפוי עצמי, זה לא שלא אמרו  שיש חוקים שחייבים לעמוד בהם  (TOS) כשבונים שירות GIS.

מצד אחד חבל לי על RouteBuilder מצד שני זה לא ממש מפתיע,לדעתי RouteBuilder היו צריכים להרים שרת מיפויי פרטי או לעבור לאחד כזה (לדוגמה mapnik).

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

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

מי שלא רוצה שהפרוייקט הבא או האתר המדהים שלכם יחטוף סתירה כזאת בעתיד הלא רחוק ? תתקינו שרת מיפוי (tile server)  - לא משנה מאיפה תיקחו את המפות אם זה OpenStreetMap או מידע גאוגרפי שיוצא לArcGIS ולכם יש רישיון שימוש להשתמש בו,העיקר שתהיה לכם היכולת להחליט מה להציג, מתי להציג ואיפה להציג.


בשביל להציג את המפות השתמשו בתוכנה חופשית כמו marble או QGIS ואם יש צורך בממשק וובי השתמשו ב OpenLayers כנגד השרת שהרמתם (יש אחרים , לי ניסיון רק עם ol לצערי).

אתם בונים אתר מדהים בWIX או בדף שאתם מציגים יש מפה ? נה להשתמה ש OpenLayers שמכוון כלפי שרת המיפויי שלכם. ובמיוחד אם אתם מפרסמים מפגש טכנולוגי זה יהיה מצויין אם תספקו את המפה שלכם לבד ולא תשתמשו במפה של ספק חיצוני.

ואם אפשר כמה מילים על מפ"י.

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


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

יום שלישי, אוקטובר 27, 2015

מפת מסלולי osm.org.il דרך marble

הייתי צריך מפת טיולים שאוכל להשתמש בה offline מכיוון שאני משתמש ב marble יצרתי קובץ טעינה עבורה. מקור התוכן הוא osm.org.il וזכויות היוצרים שייכות ל osm.

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

כברירת מחדל זה נראה כך :


אם נלך ל legend ונבחר שכבה אחרת (למשל MTB) זה יראה כך :


ועכשיו איך מקבלים את היופי הזה אצלנו במחשב?

לפי מערכת הפעלה שברשותכם  פרסו את הקובץ במקום המתאים, עבור משפחת דביאן למשל זה יהיה תחת
/usr/share/marble/data/maps/earth

הפעילו מחדש את marble,  לצערי osm.org.il לא רינדרו את המפות בזום נמוך מ 7 לכן תאלצו לחפש את המדינה בגלובוס ואז לבצע התקרבות לרמה 7.



נכון להיום השרת osm.org.il מספק את השירות ,יכול להיות שבעתיד השרת יעבור מקום ואז יהיה צורך לשנות את כתובות בקובץ ה dgml

קוד המקור עבור המפה :

<?xml version="1.0" encoding="UTF-8"?>
<!--
     This xml file is free software licensed under the GNU LGPL. You can
     find a copy of this license in LICENSE.txt in the top directory of
     the source code.
-->
<dgml xmlns="http://edu.kde.org/marble/dgml/2.0">
  <document>
    <head>
      <!-- The license here applies to the actual map content, not this dgml file. See the license header above for the dgml file license -->
      <!-- The content that this license refers to is not distributed with this package -->
      <license short="© OpenStreetMap contributors( CC-BY-SA">© OpenStreetMap contributors, CC-BY-SA</license>
      <name>osm.org.il</name>
      <target>earth</target>
      <theme>osm.org.il</theme>
      <icon pixmap="osm.org.il.png"/>
      <visible>true</visible>
      <description><![CDATA[osm.org.il is a hiking server for Israel]]></description>
      <zoom>
        <minimum>   900  </minimum>
        <maximum>  3500  </maximum>
        <discrete> true </discrete>
      </zoom>
    </head>
    <map bgcolor="#000000">
      <canvas/>
      <target/>
      <layer name="osm.org.il" backend="texture">
        <texture name="mapnik_data" expire="31536000">
          <sourcedir format="PNG"> earth/osm.org.il </sourcedir>
          <tileSize width="256" height="256"/>
          <storageLayout levelZeroColumns="1" levelZeroRows="1" maximumTileLevel="19" mode="Custom"/>
          <projection name="Mercator"/>
          <downloadUrl
protocol="http" 
host="www.osm.org.il" 
port="80" 
path="/IsraelHiking/Tiles/{zoomLevel}/{x}/{y}.png"/>
          <downloadPolicy usage="Browse" maximumConnections="20"/>
          <downloadPolicy usage="Bulk" maximumConnections="2"/>
        </texture>

        <texture name="routes" expire="31536000">
          <sourcedir format="PNG"> earth/routes </sourcedir>
          <tileSize width="256" height="256"/>
          <storageLayout levelZeroColumns="1" levelZeroRows="1" maximumTileLevel="19" mode="Custom"/>
          <projection name="Mercator"/>
          <downloadUrl
protocol="http" 
host="www.osm.org.il" 
port="80" 
path="/IsraelHiking/OverlayTiles/{zoomLevel}/{x}/{y}.png"/>

        <blending name="AlphaBlending"/>
        </texture>

        <texture name="mtb" expire="31536000">
          <sourcedir format="PNG"> earth/mtb </sourcedir>
          <tileSize width="256" height="256"/>
          <storageLayout levelZeroColumns="1" levelZeroRows="1" maximumTileLevel="19" mode="Custom"/>
          <projection name="Mercator"/>
          <downloadUrl
protocol="http" 
host="www.osm.org.il" 
port="80" 
path="/IsraelHiking/mtbTiles/{zoomLevel}/{x}/{y}.png"/>

        <blending name="AlphaBlending"/>
        </texture>

     </layer>

      <layer name="standardplaces" backend="geodata">
        <geodata name="cityplacemarks">
          <sourcefile>cityplacemarks.cache</sourcefile>
        </geodata>
        <geodata name="baseplacemarks">
          <sourcefile>baseplacemarks.cache</sourcefile>
        </geodata>
        <geodata name="elevplacemarks">
          <sourcefile>elevplacemarks.cache</sourcefile>
        </geodata>
        <geodata name="otherplacemarks">
          <sourcefile>otherplacemarks.cache</sourcefile>
        </geodata>
        <geodata name="boundaryplacemarks">
          <sourcefile>boundaryplacemarks.cache</sourcefile>
        </geodata>
      </layer>
    </map>
    <settings>
      <property name="coordinate-grid">
        <value>true</value>
        <available>true</available>
      </property>
      <property name="overviewmap">
        <value>true</value>
        <available>true</available>
      </property>
      <property name="compass">
        <value>true</value>
        <available>true</available>
      </property>
      <property name="scalebar">
        <value>true</value>
        <available>true</available>
      </property>
      <group name="Places">
        <property name="places">
          <value>true</value>
          <available>true</available>
        </property>
        <property name="cities">
          <value>false</value>
          <available>false</available>
        </property>
        <property name="terrain">
          <value>false</value>
          <available>false</available>
        </property>
        <property name="otherplaces">
          <value>false</value>
          <available>false</available>
        </property>
      </group>
      <group name="Texture Layers">
        <property name="routes">
          <value>false</value>
          <available>true</available>
        </property>
      </group>
      <group name="Texture Layers">
        <property name="mtb">
          <value>false</value>
          <available>true</available>
        </property>
      </group>


    </settings>
    <legend>
      <section name="coordinate-grid" checkable="true" connect="coordinate-grid" spacing="12">
        <heading>Coordinate Grid</heading>
      </section>
      <section name="routes" checkable="true" connect="routes" spacing="12">
        <heading>routes</heading>
      </section>
       <section name="mtb" checkable="true" connect="mtb" spacing="12">
        <heading>MTB</heading>
      </section>
 
    </legend>
  </document>
</dgml>

יום שישי, אוקטובר 23, 2015

שירות מיפוי פרטי

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


שרת המיפוי משתמש ב mapnik ואני טוען קבצי pbf, כמות המקום הפנויי הדרוש לבניית מערכת בצורה גסה הם כ -32 מ"ב מקום פנויי עבור כל מ"ב של קובץ נטען. לצערי גיליתי בצורה הרעה שאתה לא יכול לטעון כמה אזורים מקבצים שונים קודם כל יש לאחד אותם ורק אז ניתן יהיה לטעון. אז כבוחרים אזור צריך לחשוב טוב טוב. זמן טעינה הוא כ שעתיים לכל ג"ב של מידה (16 ג"ב ראם וכונן SSD) , המפות מרונדרות בעת הבקשה.

שרת המיפויי שלי רץ תחת אפאצי, מבצע הזדהות באמצעות שם משתמש וסיסמה ומגביל גישה לפי אזור גאוגרפי בעל חותמת SSL עם CA פרטי.

מודל המיפוי (mod_tile) מספק שירות תחת geo.

שרת ה מיפויי נקרא geo.local כל לקוח שמחובר לענני מקבל זאת דרת שרת ה DNS הפרטי שלי, אבל מכשירים שאינם מחוברים (נמצאים רק ב VPN בעלי קישור בקובץ hosts).

הגבלת אזור גאוגרפי ע"י $CC הוא סימון המדינה
iptables -A OUTPUT -m geoip --dst-cc $CC -j ACCEPT
iptables -A INPUT -m geoip --src-cc $CC -j ACCEPT




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

יצרתי לי קובץ dgml שאיתו אוכל לגרום ל marble לעבוד עם שרת המיפויי האישי שלי  :

הקובץ שמור תחת /usr/share/marble/data/maps/earth/private

יצרתי תמונת private.png ו קובץ תחת 0/0.

אני שם פה רישיון של openstreetmap בגלל שטענתי קובץ pbf שיוצר ע"י openstreetmap.
שם המשתמש הוא tileusername והסיסמה היא  tilepassword.
 לקח לי קצת זמן להבין אבל אם הסיסמה שגוייה או המסלול ממנו צריך לקחת קבצים לא תהיה אינדיקציה ברורה.



<?xml version="1.0" encoding="UTF-8"?>
<!--
     This xml file is free software licensed under the GNU LGPL. You can
     find a copy of this license in LICENSE.txt in the top directory of
     the source code.
-->
<dgml xmlns="http://edu.kde.org/marble/dgml/2.0">
  <document>
    <head>
      <!-- The license here applies to the actual map content, not this dgml file. See the license header above for the dgml file license -->
      <!-- The content that this license refers to is not distributed with this package -->
      <license short="© OpenStreetMap contributor">Source: © OpenStreetMap contributors, License: Creative Commons Attribution-ShareAlike 2.0 (CC BY-SA)</license>
      <name>Private tile server</name>
      <target>earth</target>
      <theme>private</theme>
      <icon pixmap="private.png"/>
      <visible>true</visible>
      <description><![CDATA[<p>A <i>privately owned tile server</i></p>]]></description>
      <zoom>
        <minimum>   900  </minimum>
        <maximum>  3500  </maximum>
        <discrete> true </discrete>
      </zoom>
    </head>
    <map bgcolor="#000000">
      <canvas/>
      <target/>
      <layer name="private" backend="texture">
        <texture name="mapnik_data" expire="31536000">
          <sourcedir format="PNG"> earth/private </sourcedir>
          <tileSize width="256" height="256"/>
          <storageLayout levelZeroColumns="1" levelZeroRows="1" maximumTileLevel="19" mode="Custom"/>
          <projection name="Mercator"/>
          <downloadUrl 
protocol="https" 
host="geo.local" 
port="8080" 
path="/geo/{zoomLevel}/{x}/{y}.png" 
user="tileusername" 
password="tilepassword"/>
          <downloadPolicy usage="Browse" maximumConnections="20"/>
          <downloadPolicy usage="Bulk" maximumConnections="2"/>
        </texture>
     </layer>
      <layer name="standardplaces" backend="geodata">
        <geodata name="cityplacemarks">
          <sourcefile>cityplacemarks.cache</sourcefile>
        </geodata>
        <geodata name="baseplacemarks">
          <sourcefile>baseplacemarks.cache</sourcefile>
        </geodata>
        <geodata name="elevplacemarks">
          <sourcefile>elevplacemarks.cache</sourcefile>
        </geodata>
        <geodata name="otherplacemarks">
          <sourcefile>otherplacemarks.cache</sourcefile>
        </geodata>
        <geodata name="boundaryplacemarks">
          <sourcefile>boundaryplacemarks.cache</sourcefile>
        </geodata>
      </layer>
    </map>
    <settings>
      <property name="coordinate-grid">
        <value>true</value>
        <available>true</available>
      </property>
      <property name="overviewmap">
        <value>true</value>
        <available>true</available>
      </property>
      <property name="compass">
        <value>true</value>
        <available>true</available>
      </property>
      <property name="scalebar">
        <value>true</value>
        <available>true</available>
      </property>
      <group name="Places">
        <property name="places">
          <value>true</value>
          <available>true</available>
        </property>
        <property name="cities">
          <value>false</value>
          <available>false</available>
        </property>
        <property name="terrain">
          <value>false</value>
          <available>false</available>
        </property>
        <property name="otherplaces">
          <value>false</value>
          <available>false</available>
        </property>
      </group>
      <group name="Texture Layers">
        <property name="hillshading">
          <value>false</value>
          <available>true</available>
        </property>
      </group>
    </settings>
    <legend>
      <section name="coordinate-grid" checkable="true" connect="coordinate-grid" spacing="12">
        <heading>Coordinate Grid</heading>
      </section>
    </legend>
  </document>
</dgml>

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