מבוא ל- GeoTools

1. סקירה כללית

במאמר זה נעבור על יסודות ה- ספריית Java של קוד פתוח של GeoTools - לעבודה עם נתונים גיאו-מרחביים. ספרייה זו מספקת שיטות תואמות ליישום מערכות מידע גיאוגרפיות (GIS) ומיישמת ותומכת בסטנדרטים רבים של OGC (Open Geospatial Consortium).

מכיוון שה- OGC מפתח תקנים חדשים, הם מיושמים על ידי GeoTools, מה שהופך אותו למועיל למדי לעבודה גיאו-מרחבית.

2. תלות

נצטרך להוסיף את התלות של GeoTools pom.xml קוֹבֶץ. מכיוון שתלות זו אינה מתארחת ב- Maven Central, עלינו גם להצהיר על מאגריהם כדי שמייבן יוכל להוריד אותם:

  osgeo מאגר קוד פתוח של Geospatial Foundation //download.osgeo.org/webdav/geotools/ opengeo OpenGeo Maven Repository //repo.opengeo.org 

לאחר מכן, אנו יכולים להוסיף את התלות שלנו:

 org.geotools gt-shapefile 15.2 org.geotools gt-epsg-hsql 15.2 

3. GIS ו- Shapefiles

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

3.1. GIS

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

חלק מהנתונים הגיאוגרפיים הם מרחביים - הם מתייחסים למיקומים קונקרטיים על פני כדור הארץ. הנתונים המרחבים מלווים בדרך כלל בנתוני התכונות. נתוני מאפיינים יכולים להיות כל מידע נוסף על כל אחת מהתכונות המרחביות.

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

3.2. Shapefiles

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

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

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

אנו יכולים להשתמש ב- GeoTools כדי להוסיף תכונות כמו ערים, בתי ספר וציוני דרך טופס צורות.

4. יצירת תכונות

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

4.1. שמירת נתונים גיאו-מרחביים

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

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

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

בואו ניצור שיטת עוזר כדי להקל על אחסון הנתונים שלנו מַפָּה לְהִתְנַגֵד:

ריק סטטי פרטי addToLocationMap (שם מחרוזת, כפול רוחב, כפול כפול, מפה מיקומים) {קואורדינטות רשימה = ArrayList חדש (); קואורדינטות. להוסיף (lat); קואורדינטות. להוסיף (lng); locations.put (שם, קואורדינטות); }

עכשיו בואו למלא את שלנו מַפָּה לְהִתְנַגֵד:

מַפָּה מיקומים = HashMap חדש (); addToLocationMap ("בנגקוק", 13.752222, 100.493889, מיקומים); addToLocationMap ("ניו יורק", 53.083333, -0.15, מיקומים); addToLocationMap ("קייפטאון", -33.925278, 18.423889, מיקומים); addToLocationMap ("סידני", -33.859972, 151.211111, מיקומים); addToLocationMap ("אוטווה", 45.420833, -75.69, מיקומים); addToLocationMap ("קהיר", 30.07708, 31.285909, מיקומים);

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

4.2. הגדרת סוגי תכונות

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

אחת הדרכים היא להשתמש ב- createType שיטת ה- DataUtilites מעמד:

SimpleFeatureType TYPE = DataUtilities.createType ("מיקום", "מיקום: נקודה: srid = 4326," + "שם: מחרוזת");

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

בונה SimpleFeatureTypeBuilder = חדש SimpleFeatureTypeBuilder (); builder.setName ("מיקום"); builder.setCRS (DefaultGeographicCRS.WGS84); בונה .add ("מיקום", Point.class); .length (15) .add ("שם", String.class); SimpleFeatureType CITY = builder.buildFeatureType ();

שני הסוגים שומרים את אותו מידע. מיקום העיר מאוחסן כ- נְקוּדָה, ושם העיר מאוחסן כ- חוּט.

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

4.3. יצירת תכונות ואוספי תכונות

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

בואו נפתח א SimpleFeatureBuilder המספק את סוג התכונה שלנו:

SimpleFeatureBuilder featureBuilder = SimpleFeatureBuilder חדש (CITY);

אנו זקוקים גם לאוסף כדי לאחסן את כל אובייקטים התכונה שנוצרו:

DefaultFeatureCollection collection = new DefaultFeatureCollection ();

מכיוון שהכרזנו בסוג התכונות שלנו להחזיק a נְקוּדָה עבור המיקום, נצטרך ליצור נקודות לערים שלנו על סמך הקואורדינטות שלהן. אנחנו יכולים לעשות זאת עם JTSGeometryFactoryFinder של GeoTools:

GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory (null);

ציין זאת אנו יכולים גם להשתמש באחרים גֵאוֹמֶטרִיָה שיעורים כמו קַו ו מְצוּלָע.

אנחנו יכולים ליצור פוּנקצִיָה שיעזרו לנו להכניס תכונות לאוסף:

פונקציה סטטית פרטית<>, SimpleFeature> toFeature (SimpleFeatureType CITY, GeometryFactory geometryFactory) {מיקום החזרה -> {נקודה נקודה = geometryFactory.createPoint (קואורדינטות חדש (location.getValue (). Get (0), location.getValue (). קבל (1))) ; SimpleFeatureBuilder featureBuilder = SimpleFeatureBuilder חדש (CITY); featureBuilder.add (נקודה); featureBuilder.add (location.getKey ()); return featureBuilder.buildFeature (null); }; }

ברגע שיש לנו את הבנאי ואת האוסף, באמצעות הקוד שנוצר בעבר פוּנקצִיָה, אנחנו יכולים צור תכונות ושמור אותם באוסף שלנו:

locations.entrySet (). stream () .map (toFeature (CITY, geometryFactory)) .forEach (אוסף :: הוסף);

האוסף מכיל כעת את כל התכונות שנוצרו על סמך התכונות שלנו מַפָּה אובייקט שהחזיק את הנתונים הגיאו-מרחביים.

5. יצירת DataStore

GeoTools מכיל א ממשק API של DataStore המשמש לייצוג מקור לנתונים גיאו-מרחביים. מקור זה יכול להיות קובץ, בסיס נתונים או שירות כלשהו שמחזיר נתונים. אנחנו יכולים להשתמש ב- DataStoreFactory ליצור את שלנו חנות מידע, אשר יכיל את התכונות שלנו.

בואו נקבע את הקובץ שיכיל את התכונות:

קובץ shapeFile = קובץ חדש (קובץ חדש ("."). GetAbsolutePath () + "shapefile.shp");

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

Params מפה = HashMap חדש (); params.put ("url", shapeFile.toURI (). toURL ()); params.put ("צור אינדקס מרחבי", בוליאני. TRUE);

בואו ניצור את DataStoreFactory באמצעות הפרמטרים שיצרנו זה עתה, והשתמש במפעל זה ליצירת ה- חנות מידע:

ShapefileDataStoreFactory dataStoreFactory = ShapefileDataStoreFactory חדש (); ShapefileDataStore dataStore = (ShapefileDataStore) dataStoreFactory.createNewDataStore (params); dataStore.createSchema (CITY);

6. כתיבה לטופס צורה

השלב האחרון שעלינו לעשות הוא לכתוב את הנתונים שלנו ל- a טופס צורה. כדי לעשות זאת בבטחה, אנו הולכים להשתמש ב עִסקָה מִמְשָׁק זה חלק מה- GeoTools ממשק API.

ממשק זה נותן לנו אפשרות בְּקַלוּת לְבַצֵעַ שלנו את השינויים בקובץ. זה גם מספק דרך לבצע א גלגל לאחור מהשינויים שלא צלחו אם מתרחשת בעיה כלשהי תוך כדי כתיבה לקובץ:

עסקת עסקה = חדש ברירת מחדל ("צור"); מחרוזת typeName = dataStore.getTypeNames () [0]; SimpleFeatureSource featureSource = dataStore.getFeatureSource (typeName); if (featureSource instanceof SimpleFeatureStore) {SimpleFeatureStore featureStore = (SimpleFeatureStore) featureSource; featureStore.setTransaction (עסקה); נסה את {featureStore.addFeatures (אוסף); transaction.commit (); } לתפוס (בעיה חריגה) {transaction.rollback (); } סוף סוף {transaction.close (); }}

ה SimpleFeatureSource משמש לקריאת תכונות, ו- SimpleFeatureStore משמש לגישה לקריאה / כתיבה. זה מצוין ב GeoTools תיעוד כי באמצעות מופע של השיטה לבדיקה אם אנו יכולים לכתוב לקובץ היא הדרך הנכונה לעשות זאת.

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

7. מסקנה

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

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

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

תוכל למצוא את קוד הדוגמה המלא המשמש במאמר זה בפרויקט GitHub שלנו. זהו פרויקט של Maven, כך שתוכלו לייבא אותו ולהריץ אותו כפי שהוא.


$config[zx-auto] not found$config[zx-overlay] not found