Як працювати з геопросторовими даними: інструменти та фреймворки Java
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
Мене звуть Юрій, я Senior Java Developer у Luxoft.
Останні 10 років я працюю в галузі GIS (геоінформаційні системи) та навігації. У сучасному світі GIS можна зустріти як на простенькому сайті у вигляді вбудованої карти з позначкою розташування, різних спортивних трекерах, автомобільних навігаторах, так і на професійних геодезичних системах нафтогазової галузі.
У цій статті я хотів би поділитися набором інструментів для Java розробника, який починає працювати із GIS.
Як працювати з геопросторовими даними: інструменти та фреймворки Java
На перший погляд, може здаватися, що в GIS та навігації немає нічого особливого — потрібно лише обробити набір координат. Просто, правда? Але насправді це складний світ зі своїми стандартами, технологіями та екосистемою. Сьогодні я хочу поділитися своїми знаннями про корисні інструменти для проєктів Java GIS.
Почнемо з невеликого вступу. Геопросторові дані — це інформація, яка поєднує характеристики об’єкта з його розташуванням на поверхні Землі. Об’єктом може бути будь-яке фізичне тіло або подія з деяким набором параметрів (розмір, колір, час тощо). Місцеперебування зазвичай представлено довготою, широтою, а в деяких випадках і абсолютною висотою.
Зазвичай геопросторові дані представлені в растровому (зображення) або векторному (цифрові координати) форматі.
Основним інструментом, який допоможе вам керувати геопросторовими даними у вашій програмі, є GeoTools. Це бібліотека Java з відкритим вихідним кодом, яка надає набір операцій, що відповідає специфікаціям Open Geospatial Consortium (OGC). GeoTools дозволяє легко зчитувати/записувати геопросторові дані з різних джерел (Esri shapefiles, KML, GeoJSON, просторові бази даних (наприклад PostGIS) тощо), виконувати операції з геометрією (перетини, об’єднання, буфери, перетворення crs тощо) та показувати растрові та векторні дані. Розглянемо невеликий приклад:
@PostMapping("circle") public String createCircle(@RequestParam(name = "x")Double x, @RequestParam(name = "y") Double y, @RequestParam(name = "radius")Double radius) { GeometryFactory geometryFactory = new GeometryFactory(); GeometryBuilder geometryBuilder = new GeometryBuilder(geometryFactory); DeliveryArea deliveryArea = new DeliveryArea(); Polygon circle = geometryBuilder.circle(x, y, radius, 10); MultiLineString mls = geometryFactory.createMultiLineString( new LineString[]{circle.getExteriorRing()}); deliveryArea.setGeom(mls); service.save(deliveryArea); return "Success"; }
Уявіть, що у нас є служба доставки й нам потрібно визначити райони доставки по всьому місту. Тут ми маємо метод REST, який приймає координати та радіус області. У нас є сутність (об’єкт) бази даних DeliveryArea, яка зберігає геометрію лише типу MultiLineString. Використовуючи GeoTools, ми можемо створити коло, інтерпольоване як
Під час роботи з геопросторовими даними вам потрібен інструмент для їх візуалізації. Тут стане в пригоді OpenJump. OpenJump — це GIS з відкритим вихідним кодом, повністю написаний на Java. Open-Jump може допомогти вам візуалізувати вихідні дані для вашої програми, а також проміжні результати обробки геопросторових даних. Ви можете комбінувати шари з різних джерел (файли фігур, WMS, WFS, PostGIS тощо) в одному робочому просторі для порівняння та аналізу. Він забезпечує стилізацію і маркування шарів, і оскільки OpenJump написаний на Java, ви можете писати власні плагіни для нього.😊
Якщо ви створюєте вебсервіс і маєте намір зображати геопросторові дані кінцевим користувачам, немає потреби винаходити велосипед. OGC розробила кілька протоколів для зображення геопросторових даних: WMS (Web Map Service, показує растрові дані), WFS (Web Feature Service, показує векторні дані) і WCS (Web Coverage Service, показує явища, що змінюються в просторі/часі). ). І ось ще один інструмент Java, який може допомогти вам загорнути ваші дані в ці протоколи — GeoServer. Це вебсервер Java з відкритим вихідним кодом для перегляду та редагування геопросторових даних. Він запакований як архів .war і може бути розгорнутий на будь-якому сервері програм (Tomcat, Glassfish, та ін.) Java або контейнері сервлетів. Він також дозволяє налаштовувати стилі для ваших шарів даних і керувати автентифікацією. Іншим схожим інструментом Java є deegree. Його також надає OGC. У той час як Geoserver може читати дані з різних джерел (бази просторових даних, KML, файли фігур), degree працює лише зі стандартами OGC та ISO.
У наведеному нижче прикладі ми бачимо головну сторінку Geoserver, де ви можете налаштувати робочу область (шари, стилі тощо). Також там і відображається карта берегової лінії, яку ми бачили в попередньому прикладі, у вигляді WMS шару. Таку карту можно вбудувати, наприклад, на вебсторінку вашого вебаплікейшена.
Тож, сподіваюся, інформація була для вас корисною. Буду радий відгукам :)
2 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів