Як працювати з геопросторовими даними: інструменти та фреймворки 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, ми можемо створити коло, інтерпольоване як 10-сторонній багатокутник. Потім ми створюємо новий екземпляр MultiLineString, використовуючи зовнішнє кільце багатокутника (яке представлено LineString) і розміщуємо його в нашій базі даних.

Під час роботи з геопросторовими даними вам потрібен інструмент для їх візуалізації. Тут стане в пригоді 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 шару. Таку карту можно вбудувати, наприклад, на вебсторінку вашого вебаплікейшена.

Тож, сподіваюся, інформація була для вас корисною. Буду радий відгукам :)

Сподобалась стаття? Натискай «Подобається» внизу. Це допоможе автору виграти подарунок у програмі #ПишуНаDOU

👍ПодобаєтьсяСподобалось11
До обраногоВ обраному6
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Відмінний вступний матеріал по темі, дякую!

Дякую за статтю, хоч і коротку і без коду, але цікаву.
Ще один приклад де джава є на дксктопі.

Підписатись на коментарі