الجغرافيا المكانية والخرائط في Java: نظرة عامة على الأدوات والمكتبات
يعد العمل مع البيانات الجغرافية وعرض الخرائط مهمة مطلوبة في تطبيقات Java الحديثة: من أنظمة اللوجستيات إلى متتبعات النشاط وخدمات المعلومات الجغرافية. في هذه المقالة، سنستعرض المكتبات والأدوات الرئيسية لـ Java التي تتيح معالجة بيانات الموقع الجغرافي، والعمل مع الإحداثيات، وعرض الخرائط. ستتعلم كيفية ربط هذه المكتبات، وسترى أمثلة على الكود للمهام النموذجية.
1. GeoTools — مكتبة جغرافية مكانية قوية
GeoTools هي مكتبة Java مفتوحة المصدر (LGPL) توفر أدوات للعمل مع البيانات الجغرافية المكانية. تدعم معايير Open Geospatial Consortium (OGC)، وقراءة وكتابة العديد من التنسيقات (Shapefile، GeoJSON، GML، PostGIS)، وتنفيذ عمليات مكانية معقدة: التقاطع، إنشاء المناطق العازلة، تحويل الإحداثيات.
الإمكانيات الرئيسية:
- دعم أكثر من 30 تنسيقًا للبيانات الجغرافية.
- العمل مع أنظمة الإحداثيات (EPSG) وتحويل الإسقاطات.
- التصفية والاستعلام عن البيانات المكانية (CQL، ECQL).
- عرض الخرائط عبر Swing (JMapPane).
مثال: قراءة ملف Shapefile وعرض عدد الكائنات
import org.geotools.data.FileDataStore;import org.geotools.data.FileDataStoreFinder;import org.geotools.data.simple.SimpleFeatureSource;import org.geotools.map.FeatureLayer;import org.geotools.map.MapContent;import org.geotools.styling.SLD;import org.geotools.styling.Style;import org.geotools.swing.JMapFrame;import java.io.File;
public class GeoToolsExample { public static void main(String[] args) throws Exception { File file = new File("path/to/your/file.shp"); FileDataStore store = FileDataStoreFinder.getDataStore(file); SimpleFeatureSource featureSource = store.getFeatureSource();
System.out.println("عدد الكائنات: " + featureSource.getCount());
// عرض الخريطة MapContent map = new MapContent(); map.setTitle("خريطتي"); Style style = SLD.createSimpleStyle(featureSource.getSchema()); FeatureLayer layer = new FeatureLayer(featureSource, style); map.addLayer(layer); JMapFrame.showMap(map); }}للعمل مع GeoTools، أضف التبعية في Maven:
<dependency> <groupId>org.geotools</groupId> <artifactId>gt-main</artifactId> <version>30.2</version></dependency>2. JMapViewer — مكون خفيف لـ OpenStreetMap
JMapViewer هي مكتبة Java بسيطة لتضمين خرائط OpenStreetMap في تطبيقات Swing. لا تتطلب الاتصال بـ APIs خارجية (باستثناء تحميل البلاطات) وهي مثالية للنمذجة السريعة.
الميزات:
- دعم الطبقات (علامات، خطوط، مضلعات).
- تحميل تلقائي لبلاطات OSM.
- معالجة النقرات وحركات الماوس.
مثال: عرض خريطة مع علامة
import org.openstreetmap.gui.jmapviewer.JMapViewer;import org.openstreetmap.gui.jmapviewer.MapMarkerDot;import org.openstreetmap.gui.jmapviewer.Coordinate;import javax.swing.*;import java.awt.*;
public class JMapViewerExample { public static void main(String[] args) { JFrame frame = new JFrame("خريطة OSM"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(800, 600);
JMapViewer map = new JMapViewer(); map.setDisplayPosition(new Coordinate(55.7558, 37.6173), 10); // موسكو، تكبير 10
// إضافة علامة map.addMapMarker(new MapMarkerDot(55.7558, 37.6173));
frame.add(map, BorderLayout.CENTER); frame.setVisible(true);