יותר

השתמש ב- GeoServer כמקור לשכבת וקטור ב- OpenLayers 3


אני משתמש ב- PostGIS ו- GeoServer ו- OpenLayers 3 (OL3). חיברתי את טבלת PostGIS ל- GeoServer ופרסמתי את השכבה שלי. אני משתמש בקוד הבא כדי לקבל את השכבה כשכבת וקטור:

var vector = new ol.layer.Vector ({source: new ol.source.GeoJSON ({projectection: 'EPSG: 4326', url: 'http: // localhost: 8000 / geoserver / cite / ows? service = WFS & version = 1.0.0 & request = GetFeature & typeName = cite: myfeaturesTbl & maxFeatures = 50 & outputFormat = application / json & '})});

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

האם יש בעיה בקוד שלי?

אתה יכול לעזור לי להשיג שכבה וקטורית ב- OL3 עם GeoServer WFS?


הבעיה טמונה בשימוש שלך ב-url, שנראה כי ב- OL3 הוא מצפה רק קבצים סטטיים, כלומרurl = "/static/data/geojson.json".

כדי למלא את המפה שלך בנתונים טעונים באופן דינמי השתמש בשיחות Ajax וב-ol.source.Vector.addFeaturesשיטה:

var vectorSource = חדש ol.source.GeoJSON ({הקרנה: 'EPSG: 4326'}), $ .get ('/geoserver/cite/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=cite:myfeaturesTbl&maxFeatures=50&outputFormat=applic / json '// פונקציית התקשרות חזרה (נתונים) {// הוסף תחילה תכונות vectorSource.addFeatures (vectorSource.readFeatures (data)); // ואז הצג מפה ... var map = חדש ol.Map ({target:' ... ', שכבות: [חדש ol.layer.Tile ({מקור: ...}), חדש ol.layer.Vector ({מקור: vectorSource})});});

מציג מפות קוד פתוח שנבנה באמצעות React, OpenLayers ו- GeoServer.

אני עובד במחוז סימקו באונטריו, קנדה ואנחנו היינו חנות ESRI מזה 20 שנה (באתר פורטל, שרתי AGS רבים וכו '), אך עלות הרישוי של מוצרי השרת שלנו גדלה משמעותית. אז המנהל שלי הטיל עלי לנסות לבנות מחדש את אפליקציית האינטרנט הקיימת הפונה לציבור שלנו בקוד פתוח. זה & # x27s שנבנה כרגע על 3.x JS API באמצעות WAB - בניית יישומי אינטרנט.

לאחר קצת מחקר הלכתי עם React, OpenLayers, GeoServer ו- DB PostGres. לקחתי כרטיס מ- WAB ותכננתי את אותו סוג של מסגרת המאפשרת ל- devs להאריך אותו עם הרכיבים שלהם ולהעמיס אותם על בסיס תצורה (כלים ועיצובים).

האפליקציה לא הושלמה אבל אמורה להיות בתחילת 2020. יש שם מספיק כדי שתוכלו להבין את העיצוב / המושגים. פרסמתי את מה שיש לי כרגע ב- GitHub, כמו גם פרויקטים תומכים (משוב, WebAPI וכו '). אני ממש מקווה שאלו מכם שעובדים בחנויות ESRI יראו מה אפשרי ב- OpenSource. בכנות, שתיתי את ה- ESRI Kool-Aid כל הקריירה והפתעתי את עצמי בנושא זה.

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


11.1. התקנה וקביעת תצורה¶

יש להתקין את אפליקציית האינטרנט של GeoServer כאח של Metacat. אם אינך מעוניין להפעיל את GeoServer, ניתן לדלג על הפריסה, אך כל עורות המשתמשים במפות לא יופיעו כהלכה. (הערה: Geoserver ממליץ להשתמש בהגדרת שטח PermGen של לפחות 128 מגה.).

Metacat מגיעה עם ספריית נתונים שהוגדרה מראש שתשמש את GeoServer. זה כולל שכבת בסיס של מדינות עולם ותצורת ברירת מחדל שכבר מודעת למטמון המרחבי של Metacat. ממשק התצורה של Metacat משמש להגדרת תצורה של GeoServer לשימוש בספריית הנתונים המשותפת הזו. להגדרת תצורה נוספת של GeoServer, השתמש בכלי התצורה מבוסס האינטרנט, הזמין בכתובת: http://your.server.com/<geoserver_context> (למשל, http://knb.ecoinformatics.org/geoserver).

משימות תצורה נפוצות כוללות:

  • הוספת מפה לדף אינטרנט או לעור
  • קביעת תצורה של הגודל וההיקף הראשוני של המפה
  • קביעת תצורה של פריסת ממשק מיפוי ה- HTML
  • הגדרת תצורה של התפריט הנפתח "בחר מיקום
  • קביעת תצורה של התצוגה החזותית של נתונים גיאו-מרחביים (למשל, סימבולוגיה וצבע)
  • הוספת מערכי נתונים מרחביים אחרים למפת האינטרנט

הממשק הניהולי מבוסס GeoServer.

הערה: ייתכן שיהיה צורך לבצע תצורות מסוימות גם לקבצי ה- XML.

OpenLayers, שמשמשת Metacat כחזית עבור שירות ה- WMS של GeoServer, מספקת רכיבי ממשק או "ווידג'טים" (למשל, המפה, זום תיבה, רשימת שכבות, התפריט הנפתח "בחר מיקום", סרגל קנה מידה, רוחב / ארוך קואורדינטות וטופס שאילתה) המקלים על פריסת יישומי מיפוי מבוססי אינטרנט עם קידוד מינימלי.

ל- OpenLayers שלושה קבצי תצורה עיקריים המשמשים להתאמה אישית של ממשק המפה. תצורות ברירת המחדל הן:

מסמך מקום תיאור
קובץ המיקום שמו locations.jsp רשימת המיקומים שהוגדרו מראש (שם ותחום lat / lon)
פונקציות עיבוד מפות ראשיות maps.js מגדיר את המפה, הווידג'טים והתנהגותם
המפה ופריסת העמוד שניתנו map.jsp טוען את המפה ושולט בפריסת ה- HTML של הווידג'טים.

הערה: כברירת מחדל, בפעם הראשונה שמפעילים מחדש את Metacat, הוא מייצר "מטמון מרחבי" המכיל מידע גיאוגרפי על מסמכים במאגרו. התנהגות ברירת מחדל זו מוגדרת ב- lib / metacat.properties, כאשר הפרמטר regenerateCacheOnRestart מוגדר כ- true. המידע במטמון המרחבי נשמר בפורמט תואם GIS (ה- ESRI Shapefile) ומורכב משם המסמך והכיסוי הגיאוגרפי שלו. כאשר מסמכים מוכנסים, נמחקים ומתעדכנים במאגר Metacat, Metacat מסנכרן אוטומטית את המטמון המרחבי כדי לשקף את השינויים. מכיוון שהפקת המטמון יכולה לקחת זמן לא מבוטל (מספר דקות במקרה של כמה אלפי מסמכים), Metacat מאפסת את המאפיין regenerateCacheOnRestart ל- false לאחר שנוצר המטמון המרחבי. שים לב שאם אתה משדרג או מתקין מחדש את Metacat, המטמון המרחבי יתחדש מחדש.

11.1.1. הוספת מפה לדף אינטרנט או לעור¶

כדי להוסיף מפה לדף אינטרנט, כלול את ממשק המפה באמצעות iframe:

כתובת האתר של המפה, /metacat/style/common/spatial/map.jsp, היא ממשק המפה המוגדר כברירת מחדל. אם אתה מתכנן להתאים אישית את ממשק המפה, העתק את קובץ map.jsp לספריית העור שלך (או ספריית העור המוגדרת כברירת מחדל או מותאמת אישית).

ניתן לגשת למפה המותאמת אישית באמצעות כתובת האתר: /metacat/style/skins/<myskin>/spatial/map.jsp

11.1.2. קביעת תצורה של הגודל וההיקף הראשוני של המפה¶

לפני שתגדיר את הגודל וההיקף הראשוני של המפה, ודא שהעתקת את דף פריסת המפה לספריית העור שלך (ראה קביעת תצורה של Metacat לקבלת הוראות). לאחר שהקובץ הועתק, תוכלו לשנות את היקף ההתחלה של המפה ב: $/spatial/map.jsp.

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

ניתן לשלוט בגודל (גובה / רוחב) של המפה על ידי ערך #map CSS הכלול בדף map.jsp.

11.1.3. קביעת תצורה של פריסת ממשק מיפוי ה- HTML¶

ניתן לערוך את גודלה ואת המידה הראשונית של המפה ב: $/spatial/map.jsp.

Map.jsp הוא מיכל פשוט שניתן לכלול בדפים מורכבים אחרים אם תרצה בכך. הוא מכיל את המפה, הווידג'טים ורשימת התפריטים הנפתחת.

11.1.4. קביעת תצורה של התפריט הנפתח "בחר מיקום "¶

המיקומים המופיעים בתפריט הנפתח "בחר מיקום" מוגדרים בקובץ locations.jsp. ניתן להעתיק את locations.jsp מהתבנית המרחבית המשותפת לספריית העור שלך. כל מיקום מוגדר כתג HTML & ltoption / & gt. ערוך את הערך והתווית כדי לערוך או להוסיף מיקומים חדשים.

11.1.5. קביעת תצורה של התצוגה החזותית של נתונים גיאו-מרחביים (למשל, סימבולוגיה וצבע) ¶

מערכי נתונים גיאו-מרחביים מעוצבים באמצעות שימוש במתארים שכבתיים מסוגננים (SLD). ברירת המחדל של מכונות SLD המשמשות לנקודות הנתונים ותיבות הגבלת הנתונים הן ב- / lib / spatial / geoserver / data / סגנונות / ונקראים data_points_style.sld ו- data_bounds_style.sld, בהתאמה.

תוכל למצוא הדרכה מפורטת יותר על שימוש ב- SLD עם GeoServer בתיעוד GeoServer:

11.1.6. הוספת מערכי נתונים מרחביים אחרים למפת האינטרנט¶

אם יש בשרת שלך מערכי נתונים וקטוריים של GIS, כגון מזג אוויר או מידע טופוגרפי, שברצונך לכלול במפה האינטראקטיבית, תחילה עליך לרשום את מערך הנתונים ב- GeoServer. לאחר רישום מערך הנתונים תוכלו להוסיף את השכבה למפה. ניתן גם להוסיף שכבות מרחביות שזמינותן באופן ציבורי באמצעות WMS (ישנן מאות סטים של נתונים מרחביים זמינים. עיין בכתובת wms-sites.com לקבלת קטלוג טוב). הוראות להוספת שכבות זמינות לציבור כלולות בסוף פרק זה.

כדי לרשום את מערך הנתונים ולהוסיף אותו למפה:

  1. הפנה את הדפדפן שלך אל http: //your.server/geoserver, היכנס ל- GeoServer ונווט לדף התצורה של "חנויות נתונים" תחת חנויות נתונים וגט.
  2. צור מקור נתונים וקטורי חדש מתוך Shapefile בסביבת העבודה "metacat".

יצירת טופס צורה חדש באמצעות ממשק אדמיניסטרטיבי מבוסס GeoServers.

  1. התיאור, אם צוין, משמש בעיקר באופן פנימי בכדי לספק למנהלי מערכת אחרים מידע אודות ה- DataStore. לחץ על שלח.
  2. נווט לדף התצורה של "שכבות" תחת שכבות נתונים & gt. הוסף שכבה חדשה ממקור הנתונים החדש שלך.
  3. עליך גם להגדיר מספר מערכת הפניה מרחבית (SRS) עבור השכבה החדשה. רוב הנתונים הארוכים / ארוכים הם "4326". אם הנתונים שלך נמצאים בהקרנה אחרת, קבע את מערכת ההתייחסות המרחבית שלה באמצעות קישורי העזרה שסופקו.

תצורת FeatureType של GeoServer. הגדרות ה- SRS שנדונו בשלב 5 מודגשות.

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

תצוגה מקדימה של שכבת GeoServer מאפשרת לך לראות עיבוד של OpenLayer של השכבה החדשה.

  1. העתק את קובץ map.js המוגדר כברירת מחדל המרכיב את המפה ב- OpenLayers (style / common / spatial / map.js) לספרייה המרחבית של העור שלך.
  2. ערוך את שיטת init () כדי לכלול את השכבה החדשה שלך במפה - כשכבת-על או כשכבת בסיס.
  3. הפנה את הדפדפן לממשק המפה. השכבה החדשה שלך אמורה להופיע עם הקיימות.

11.1.7. הוספת נתונים מרחביים חיצוניים הנגישים באופן פומבי באמצעות WMS¶

ישנם מאות מקורות של נתונים מרחביים שזמינים לציבור באמצעות WMS (עיין בכתובת http://wms-sites.com לקבלת קטלוג טוב). כדי להוסיף מקורות נתונים אלה למפה שלך, הוסף את השכבות בקובץ המרחב / map.js של העור שלך.


Indiemaps.com/blog

אני שמח לעשות פחות פלאש ויותר פיתוח JavaScript בימים אלה. בפרט, חקרתי שתי פלטפורמות מיפוי אינטרנט בעלות קוד פתוח של JavaScript: אחת ישנות, OpenLayers ואחת חדשה, Polymaps.

OpenLayers כבר זמן מה, אך עדיין מתפקד בצורה יוצאת מהכלל כמסגרת מפות חלקלקה תוך מתן התאמה אישית קלה של מפות נושאיות. Polymaps הוא חדש לגמרי (מבית Stamen כדי שתדעו שהוא יעבור לכם בראש), אך הוא מדהים בכך שהוא מאפשר התאמה אישית נושאית מבוססת סטנדרטים של שכבות גיאוגרפיות הנטענות באמצעות GeoJSON או KML על אריחי וקטור & # 8220 שמוצגים עם SVG & # 8221.

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

האמור לעיל הוא קרטוגרמה של השפעת בחירות המדינה משנת 2007 על ידי ניו יורק טיימס

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

הנה דוגמה ממאמרו המקורי של ג'ודי אולסון מ 1976 על טופס קרטוגרמה זה.

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

יישום

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

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

אני עובד עם OpenLayers כחצי שנה אז יישמתי שם תחילה קרטוגרמות.

OpenLayers

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

טען גיאודאטה

OpenLayers הופך את טעינת הגיאוגרפיה לדי קלה שהספרייה יכולה לנתח WKT, GML, KML, GeoJSON, GeoRSS וכו '. לכל דבר ואנחנו נשתמש במחלקה Layer.Vector. במקרה זה אני נטען בגרסת KML מ- Geocommons, ולכן מנתח Format.KML של OpenLayer.

קרטוגרמות לא רציפות אינן דורשות הקרנה גיאוגרפית & # 8212 ללא קשר להקרנת עבודת הקו המקורית, התכונות עדיין יכולות להיות מוגדלות או מטופלות בצורה מדויקת כדי ליצור את הקרטוגרמה. אז הסיבות היחידות להקרנה הן אסתטיקה ושיפור זיהוי התכונות. אני לא בטוח באיזו הקרנה אולסון השתמש, אבל פשוט הלכתי על הקלאסיקה הישנה ההיא, Albers Equal Area. באופן ספציפי, השתמשתי ב- Proj4js ובהגדרה הבאה:

Proj4js.defs ["MY_ALBERS"] = & # 8220 + proj = aea + lat_1 = 32 + lat_2 = 58 + lat_0 = 45 + lon_0 = -97 + x_0 = 0 + y_0 = 0 + ellps = WGS84 + datum = WGS84 + יחידות = m + no_defs & # 8221

כדי ליישם אותו, אני פשוט יוצר OpenLayers.Projection שמופעל על המפה כשהוא מיידי. ל- Thematicmapping.org מידע נוסף על תחזיות ועל OpenLayers.

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

תכונות קנה מידה

כדי לשנות גודל של תכונה מצולעת עבור קרטוגרמה לא רציפה, עלינו לדעת:

  1. ערך התכונה עבור המאפיין התמטי שנבחר (ראה לעיל)
  2. את האזור של התכונה ואת centroid כפי שניתנו

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

רצוי שטח = (value / maxValue) * maxArea

wantedScale = Math.sqrt (רצוי שטח / מקור שטח)

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

feature.geometry.resize (רצוי Scale, centroid)

תוֹצָאָה

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

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

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

קפיצות

Polymaps היא ספריית מיפוי JavaScript חדשה למדי על ידי Stamen ו- SimpleGeo. Geocommons הציגו לאחרונה את Polymaps לשירות המיפוי המקוון שלהם, ויצרו כלי מיפוי נושאים מקוון די פלאש ללא עוצמה. יצירת קרטוגרמות לא רציפות ב- Polymaps הייתה קצת קשה יותר מהתהליך שפורט לעיל, רק בגלל שהספרייה כל כך קלה.

טען גיאודאטה

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

אבל אני פשוט אלך עם GeoJSON בשביל זה. גיליתי בפוסט זה מ- GeoIQ שאני יכול לגשת לגרסת GeoJSON של תכונות בכל מערך נתונים של Geocommons על ידי מעבר לנקודת הקצה & # 8220features.json & # 8221. אז עבור מערך המפקד המשוער שלי לשנת 2009, אני אטען בכתובת http://geocommons.com/overlays/55629/features.json?geojson=1 בשיטה הפשוטה הבאה:

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

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

כמו בדוגמה של OpenLayers לעיל, אלא אם כן אתה כבר יודע את הערך המקסימלי של המאפיין שלך, יהיה עליך לעבור על התכונות כדי לקבוע אותו. בקוד שלעיל תוכלו לראות שאני משתמש בשיטת ה- on של השכבה כדי להאזין לאירוע & # 8220load & # 8221. ושם אני יכול להוריד את התכונות שלי ממאפיין התכונות של אובייקט האירוע. מאפיינים מאוחסנים במאפיין data.properties של כל תכונה.

תכונות קנה מידה

כדי לשנות גודל של כל תכונה עלינו לדעת תחילה שזה ערך במאפיין הנבחר (ראו לעיל). לאחר מכן עלינו לקבוע את השטח הנוכחי (בפיקסלים) על מנת להבין את השטח הרצוי של התכונה בקרטוגרמה הסופית. OpenLayers מספק שיטה נוחה לכך, אך ב- Polymaps עלינו לגלגל בעצמנו עבור מייק בוסטוק (אחד המחברים העיקריים של Polymaps) היה לעזר רב. כדי לחשב את השטח של כל תכונה הייתי זקוק רק לגישה לרשימת הקואורדינטות המוקרנות (ואז אוכל להשתמש בטכניקה הבסיסית המפורטת כאן). מר בוסטוק הצביע על תכונת pathSegList של ממשק SVGPathElement. PathSegList חושף רשימה של קטעי נתיבים עם ממשק SVGPathSeg. מייק אמר שאני יכול לסמוך על שהמקטעים הללו יהיו אחד מסוגים & # 8220M & # 8221 (לעבור אל), & # 8220L & # 8221 (שורה אל), או & # 8220Z & # 8221 (קו סוף). בעזרת מידע זה הרכבתי במהירות שיטה שתחזיר את השטח המוקרן של כל SVGPathElement ש- Polymaps עשוי לייצר.

פונקציה getPathArea & # 40 segList & # 41
{
אזור var = 0
var seg1, seg2
var nPts = segList. מספר פריטים

// בואו נראה אם ​​הפריט האחרון הוא 'Z' (זה אמור להיות)
var lastLetter =
segList. getItem & # 40 nPts - 1 & # 41. pathSegTypeAsLetter
אם & # 40 lastLetter. toLowerCase & # 40 & # 41 == 'z' & # 41
nPts -
var j = nPts - 1
segItem_list:
עבור & # 40 var i = 0 i & lt nPts j = i ++ & # 41
{
seg1 = segList. getItem & # 40 i & # 41
seg2 = segList. getItem & # 40 j & # 41
אזור + = seg1. x * seg2. y
שטח - = seg1. y * seg2. איקס
}
שטח / = 2
להחזיר מתמטיקה. אזור שרירי הבטן & # 40 & # 41
}

יכולתי ליצור בקלות שיטת צנטרואיד דומה, אבל התעצלתי והחלטתי להשתמש רק במרכז תיבת הגבולות של כל תכונה (נגישה דרך כל שיטת getBBox של אלמנט SVG).

האזור והסולם הרצוי מחושבים בדיוק כפי שעשינו לעיל ב- OpenLayers:

רצוי שטח = (value / maxValue) * maxArea
wantedScale = Math.sqrt (רצוי שטח / מקור שטח)

לאחר מכן מוחל הסולם באמצעות התכונה & # 8216transform 'של כל אלמנט SVG, יש להגדיר את הגודל ואת תרגום ה- x-y בתכונה & # 8216transform':

תוֹצָאָה

כמו בעבר, הנה תמונה שנתפסה מהדוגמה שתוכלו למצוא בעמוד זה. תראה שם קצת מהקוד, אך אנא & # 8216 צפה במקור 'כדי לראות את כל הקוד והסימון.

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

סיכום

שום דבר כאן לא חדש. אני עושה זאת בפלאש זמן מה & # 8212 ראה כאן וכאן וכמובן שג'ודי אולסון עשתה את זה לפני כ -35 שנה. אבל זה נחמד לראות את זה עובד באופן דינמי בכמה ספריות תואמות תקן אינטרנט בעלות קוד פתוח. תודה ל- OpenLayers, Polymaps ו- Geocommmons על כך שאפשרו!

8 תגובות

אתה יכול לעשות את אותו הדבר באמצעות SLD ומסנן Java פשוט באמצעות GeoServer. ראה http://ian01.geog.psu.edu/geoserver/www/cartogram/discontinous.html לדוגמא ופרטים.

הורדת את הקישור הראשון לשרת לבדיקה? היכן עוד נוכל לבדוק או שיש הוראות כיצד להגדיר סביבה זו באופן מקומי ולבדוק?

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

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

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

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

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

רק סקרן אם ניסית משהו פשוט יותר - להוסיף את הערכים שאתה רוצה להציג בקרטוגרמה, כך שהמדינה עם הערך הגדול ביותר היא 100% (כלומר שומרת על הגודל הנוכחי) והתאמת כל שאר הגודל של מדינות האחוזים לבסיס זה, ואז חציצה פְּנִימָה? מדינות עם האחוזים הקטנים ביותר עלולות להיעלם, אך אולי ישמרו על המיקום ואין חפיפה כי אתה יורד בגודל. אבל אולי אם היה הבדל גדול בין הערכים הגבוהים / הנמוכים ביותר, אני מניח שאולי רק יראה מצב אחד וכל האחרים ייעלמו & # 8230 תהפוך למיניקל & # 8230?

5 מסלולים

[. ] indiemaps.com/blog »קרטוגרמות לא רציפות ב- OpenLayers ו- Polymaps indiemaps.com/blog/2011/02/oncontontiguous-cartograms-in-openlayers-and-polymaps/ & ndash page page & ndash cache אני שמח לעשות פחות פלאש ו יותר פיתוח JavaScript בימינו. בפרט, חקרתי שתי פלטפורמות מיפוי אינטרנט בעלות קוד פתוח של JavaScript: אחת ישנות, OpenLayers ואחת חדשה, Polymaps. הצג השפעה בלבד (1) $ ('# filter-infonly'). שנה (פונקציה () אחר >) [. ]

[. ] של פריק מדהים, מה עם זה? קרטוגרמות לא רציפות ב- OpenLayers וב Polymaps 1. OpenLayers + Polymaps 2 הוא שילוב מנצח. אלוהים יברך את איאן טורטון שדחף את [. ]

[. ] קרטוגרמות לא רציפות ב- OpenLayers וב Polymaps [. ]

[. ] נתקלתי בעבודתו לפני שלוש שנים, וזה אף פעם לא כואב להחמיא לנו בבלוגים על כמה פריצות מגניבות באמצעות ה- API שלנו. אני מאוד מתרגש להצטרף לצוות הפיתוח של GeoIQ כמהנדס ויזואליזציה. ה [. ]

[. ] ראה OL המשמש למיפוי נושאי ביישומי choropleth ופרופורציות סמל בשנת 2008. הוספתי קרטוגרמות לא רציפות לתערובת האחרונה [. ]


GeoServer 2.17.3 פורסם

אנו שמחים להכריז על שחרורו של GeoServer 2.17.3 עם הורדות (מלחמה | סל), תיעוד והרחבות.

מהדורה זו נעשית בשילוב עם GeoTools 23.3 ו- GeoWebCache 1.17.3. זהו שחרור תחזוקה המומלץ למערכות ייצור.

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

שיפורים ותיקונים

מהדורה זו כוללת מספר שיפורים. שיפורים בולטים:

  • SLDService יכולה כעת לפרסם שיטות סיווג נתמכות (ללקוחות הגהה עתידיים, במקרה שמתווספות שיטות חדשות בהמשך הדרך). נוספה שיטת סיווג חדשה מבוססת סטיית תקן.
  • ניתן להשתמש כעת בסכימת יישומים המייצרת תפוקות תכונות פשוטות (מיפוי טהור) עם כל הפורמטים הנפוצים ביותר של תכונות פשוטות, כמו shapefile, CSV, KML וכן הלאה.
  • אפשר להשבית השלמה אוטומטית של הכניסה לממשק המשתמש
  • היבואן עבר אופטימיזציה כדי למנוע סריקות מלאות בספריות בזמן ייבוא ​​קבצים בודדים. זה יחד עם אופטימיזציות דומות בקצירת פסיפס תמונה, מזרז את הקציר באופן משמעותי של קבצים חדשים באמצעות היבואן, כאשר הוא נמצא בספריות הכוללות קבצים רבים.
  • פלט האריחים הווקטוריים יכול כעת להפיק תועלת מלאה ממקור נתונים כללי מראש, וקורא את התכונות ברזולוציה הנדרשת ליצירת אריחי הווקטור (השתמש בעבר ברזולוציה הגבוהה ביותר שיש).
  • תהליך ג'יפל / עיבוד השינוי יכול כעת ליצור פלט רב-פס, וביצועיו קיבלו מספר שיפורים.

תיקונים הכלולים במהדורה זו:

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

למידע נוסף עיין בהערות הגרסה 2.17.3.

עדכוני קהילה

עבור מפתחים הבונים מהמקור, המודולים הקהילתיים שלנו הם מקום נהדר לשתף פעולה בפונקציונליות ושיפורים.


כיצד לחבר את SAP HANA עם GeoServer

בינתיים ניתן להשתמש ב- SAP HANA ובתכונות המרחביות שלו עם הרבה כלים GIS (מערכות מידע גיאוגרפיות) של צד שלישי. שאלה מכריעה אחת היא כיצד לחבר בין SAP HANA לכלים אלה. זה עשוי להיות שונה למדי מכלי לכלי ולעיתים גם להיות סוג של מידע נסתר, במיוחד כאשר האפשרות והתמיכה בכלי מסוים הם חדשים ואחרונים. בבלוג זה אני נכנס לפרטים כיצד לחבר בין SAP HANA ל- GeoServer.

ניתן להשתמש ב- SAP HANA ב- GeoServer כחנות נתונים. http://docs.geotools.org/latest/userguide/library/jdbc/hana.html מתאר במובן מסוים שזה אפשרי. אנו נמסור את הפרטים בבלוג זה לסביבת MS Windows 10 ו- GeoServer 2.15.0.

פרוס את תוסף ה- HANA עבור GeoServer: עבור אל https://mvnrepository.com/artifact/org.geotools.jdbc/gt-jdbc-hana/21.0 ולחץ על הכפתור ממש לצד & # 8220Files & # 8221 כדי להוריד את הקובץ gt-jdbc-hana-21.0.jar.

העתק את הקובץ gt-jdbc-hana-21.0.jar לספרייה & # 8230 GeoServer 2.15.0 webapps geoserver WEB-INF lib של התקנת GeoServer.

לאחר שעשיתי זאת גם את ה- HANA JDBC ngdbc.jar יש להעתיק את מנהל ההתקן לאותה ספריה.

אתה יכול למצוא ngdbc.jar בספרייה C: Program Files SAP hdbclient של התקנת hdbclient של הסביבה שלך.

לאחר ביצוע פעולה זו הפעל מחדש את geoServer ותמצא את SAP HANA כמקור נתונים וקטורי אפשרי נוסף בשרת Geo תחת חנויות & # 8211 & GT הוסף חנות חדשה:

הגדר את מקור הנתונים הווקטורי עבור SAP HANA: נתאר את פרמטרי החיבור למסד נתונים של HANA רק בעת יצירת חנות ב- GeoServer. כתנאי הכרחי אתה צריך שיהיה לך כבר מקום עבודה. לפרטים כיצד ליצור סביבות עבודה והדרכות כלליות עבור GeoServer ראה למשל. https://geoserver.geo-solutions.it/edu/en/.

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

בדוגמה זו מסד הנתונים של הדיירים שלי נקרא SPL ויש סכימת בסיס נתונים בשם HACKT25.

כעת תוכל ליצור שכבה חדשה ב- GeoServer באמצעות שכבות & # 8211 & gt הוסף שכבה חדשה ובידוק צולב של מה שאתה רואה כאן עם מה שיש לך במסד הנתונים HANA המרוחק שלך.

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


שכבות וקטור ו- IE

שימוש ב- Javascript של OpenLayers ממודול OpenLayers יכול להציג כמה בעיות בעיבוד שכבות וקטור ב- IE.

הסיבה הבסיסית לנושא:

לאינטרנט אקספלורר יש דבר שנקרא VML: Vector Markup Language, בו הוא משתמש לצייר גרפיקה. VML הוא מה שאתה משתמש ב- IE: canvas4ie הוא איטי, מפות Google משתמשות ב- VML כדי לצייר מסלולים, ו- OpenLayers משתמש בו כדי לצייר וקטורים.

אלמנטים VML מעוצבים על ידי יצירת סגנונות דמויי CSS במרחב שמות. OpenLayers יוצר מרחב ol: names ואז יוצר סגנונות כמו ol: line ol: מעגל וכו '.

לשם כך, עליו לגשת ל- document.namespaces. Document.namespaces לא תמיד נמצא בסביבה: במיוחד, אינך יכול לסמוך על הימצאותו לפני document.ready.

אבל, לפעמים document.namespace * נמצא * לפני document.ready וזה הדבר שבלגן את תפיסת העולם שלי. אז, התיאוריה הייתה, יש מצבים. משהו ב- HTML יכול למנוע מילוי של document.namespaces לפני document.ready.

$ (או $ (מסמך) .ready ()

  • אם יש תמונה שבורה בעמוד, אזי שמות לא מלאים.
  • אם לדף אין תמונות שבורות, אזי document.namespace נגיש

Document.load ()

31 גיליונות סגנון

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

התיקון

איננו יכולים להעביר שכבות פתוחות ל- document.load () מכיוון שהוא תלוי בערימת ההתנהגות של Drupal, הפועלת ב- document.ready (). עלינו להגדיר רק את מסמכי names.names לפני ש- OpenLayers ישאל את מעבד ה- VML שלו האם הדפדפן הנוכחי מסוגל להעביר VML (משימה שהיא מנסה להשלים באמצעות קריאה !! (document.namespaces))

תיקונים אחרים

Adding a tag <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> will allow IE8 to render vectors if it doesn't render them correctly on a normal pageload. Note that this must be the first element inside the header tag.


Layers and GeometryEncoders

The primary type that defines a collection of geometries is the Layer. A layer contains an index for querying. In addition a Layer can be an EditableLayer if it is possible to add and modify geometries in the layer. The next most important interface is the GeometryEncoder.

The DefaultLayer is the standard layer, making use of the WKBGeometryEncoder for storing all geometry types as byte[] properties of one node per geometry instance.

The OSMLayer is a special layer supporting Open Street Map and storing the OSM model as a single fully connected graph. The set of Geometries provided by this layer includes Points, LineStrings and Polygons, and as such cannot be exported to Shapefile format, since that format only allows a single Geometry per layer. However, OMSLayer extends DynamicLayer, which allow it to provide any number of sub-layers, each with a specific geometry type and in addition based on a OSM tag filter. For example you can have a layer providing all cycle paths as LineStrings, or a layer providing all lakes as Polygons. Underneath these are all still backed by the same fully connected graph, but exposed dynamically as apparently separate geometry layers.


WMS/WMTS protocol and configuration improvements

Creating new styles from templates

It’s now possible to create new styles starting from the built-in templates, and the style will be encoded in the desired style language (SLD, or CSS, or even something else, if you created your own styling language extension point):

GeoWebCache filter parameters GUI improved

It’s now possible to configure integer parameters in the caching section of a layer configuration.

GeoWebCache Storage

GeoWebCache can now store cached tiles on a perlayer basis - including Amazon S3.

Request parameter support in Freemaker templates

Freemarker GetFeatureInfo templates can now access to the request parameter, as well as the Java process environment variables, in order to customize their response. For example, it’s now possible to expand the following variables in the template:

Controlling interpolation on a layer by layer basis

You can now control layer interpolation via GetMap, and specify a different interpolation policy on different layers. This is great if you are serving multiple raster maps, and maybe you want to have your classified raster use nearest neighbor, while showing the ozone density layer with bilinear interpolation.

Inspire configuration improved


GeoServer

The GeoServer team is happy to announce the GeoServer 2.15.0 release with downloads (zip|war|exe), documentation (html|pdf) and extensions.

This release is production ready and is ready to work with your Java 8 or Java 11 operational environment. This release is made in conjunction with GeoWebCache 1.15.0 and GeoTools 21.0.

The ability to work with Java 11 is the result a dedicated code sprint. Thanks to organizations participating in the code sprint (Boundless, GeoSolutions, GeoCat, Astun Technology, CCRi) along with sprint sponsors (Gaia3D, atol, osgeo:uk, Astun Technology).

Layer Service Settings

To start things off an often requested capability, the ability to control which services are enabled on a layer-by layer basis.

To try it our yourself see Service Settings in our user manual.

GeoFence Internal Server Extension

Originally a standalone service offering fine grain control over GeoServer security this functionality has been packaged up and embedded into a GeoServer extension for easier deployment.

  • GeoFence rules provided greater control over security allowing layer by layer service restrictions
  • GeoFence rules can provide access to data overriding layer details including CQL filter to limit contents returned and default style used for rendering
  • GeoFence rules can limit access to a geographic extent

For more details see GeoFence Internal Server in our user manual.

Style Editor SLD Auto-Complete

To help make editing easier the Style Editor can provide auto-complete suggestions for SLD 1.0. To try it out yourself use control-space for context aware suggestions.

Generate Classified Thematics maps

SLDService is now an official extension, with a number of improvements. SLDService can now be used for the

  • classification of raster data too
  • equal area classification
  • standard deviation filtering

The SLD REST Service extension is used to generate thematic styles based on attribute data:

For more information see SLD Rest Service in our user manual.

WPS GetExecutionStatus and Dismiss Operations

WPS “GetExecutions” vendor operation allows each user to get the list of running processes:

The Dismiss vendor operation can be used to cancel the execution of one of the listed processes.

For more information see Dismiss in our user guide.

Java 11 Support

The provided binary download works with either Java 8 or Java 11. Tomcat 9 or newer is required for the WAR install. The user guide compatibility list will continue to be updated based on your feedback.

The java ecosystem is now being led by the open source OpenJDK project, with long term support available from a range of organizations notably RedHat OpenJDK and Adopt OpenJDK. The GeoTools user guide provides an overview of Java 8 and Java 11 distributions.

The net effect of these changes:

  • If you have been using Oracle JDK please review your options
  • Java 8 will continue to be available
  • The Java ecosystem is now led by the open-source Open JDK project

Java 11 no longer supports the Java 2 extension mechanism used for native JAI and native ImageIO libraries. We recommend the use of the pure Java JAI-EXT operations which have been made the default (see the next section).

JAI-EXT operations on by default

The use of the JAI-EXT operations have long been a recommendation, with this release we are making them the default for GeoServer. The JAI-EXT library offers a pure java implementation enhanced for geospatial functionality supporting NODATA pixels and support for vector footprints.

GeoServer Codebase

In addition to Java 11 support this release includes:

  • Add JSON as a Legend Output format (GISP 173)
  • Printing plugin upgrade version of JTS
  • Upgrade NetCDF dependencies
  • Improvements for vector tile production, both in terms of output correctness and production performance

Thanks to Andrea Aime for steady work on the codebase quality:

    source code analysis, high priority checks, will fail the build in case of issues byte code analysis, same as above
  • Many small bugs fixed

For more details developers are invited to review Automated Quality Assurance checks in our developers manual. Also, work in ongoing on the master (dev) branch to extend the reach of static code checks using SpotBugs and CheckStyle too.


צפו בסרטון: , OpenLayers, PostgeSQL, GeoServer web application: create and deploy (סֶפּטֶמבֶּר 2021).