Статьи

Введення в GeoServer і його REST API

  1. Попередня інформація
  2. установка
  3. Вимоги до сервера
  4. Установка Apache Tomcat і GeoServer WAR
  5. додаткові розширення
  6. Web-інтерфейс
  7. Початкова настройка
  8. Безпека
  9. Поточне обслуговування і управління даними
  10. REST API і PHP-обгортка
  11. Отримання, створення і видалення даних
  12. Лістинг 1. Створення робочої області, сховища даних PostGIS і публікація шару
  13. Лістинг 2. Перехоплення і перенаправлення запитів GeoServer
  14. Лістинг 3. Використання шару WFS сервера GeoServer з OpenLayers
  15. Використання WFS-T для зміни даних
  16. Лістинг 4. Виконання транзакції WFS-T для вставки невеликого шейп-об'єкта
  17. Створення та призначення стілів
  18. Лістинг 5. Запит конкретного стилю для шару WMS за допомогою OpenLayers
  19. Ресурси для скачування

Система управління даними з відкритим вихідним кодом, оснащена повним API і вбудованими WMS- і WFS-серверами

Ті, хто працює з картографічними даними в Інтернеті, ймовірно, знайомі з MapServer, який зазвичай є кращим інструментом для цих цілей. Хоча MapServer відмінно працює зі статичними джерелами даних, його настройка являє собою тривалий ручної процес. Для нього відсутні готові рішення по управлінню даними і настройці через API. Якщо ви шукаєте комплексне рішення по довгостроковому управлінню даними або готову основу для ГІС-орієнтованого Web-додатки, найкращим вибором, можливо, є GeoServer.

GeoServer - це сервер з відкритим вихідним кодом, що дозволяє легко управляти ГІС-даними. Як і MapServer, він надає дані у відповідності зі стандартами WMS і WFS. Він також підтримує сервіс WFS-T для модифікації актуальних даних, а також мову географічної розмітки (GML), мова розмітки Keyhole (KML) і багато інших форматів. Дані організовуються в робочі області та сховища даних, при цьому використовується дискова система зберігання або PostGIS. За допомогою вбудованого REST API можна управляти наборами даних в режимі реального часу. Це ПО також включає в себе готовий Web-інтерфейс.

У цьому докладному введенні в GeoServer досліджуються процес установки, Web-інтерфейс адміністрування і використання REST API за допомогою спрощує роботу интерфейсного PHP-класу.

Попередня інформація

Перед початком роботи потрібно зрозуміти, що таке ГІС, і познайомитися з основними термінами, такими як шейп-файл, атрибути векторних об'єктів і проекції. В розділі ресурси наведено посилання на сторінку GIS 101 сайта GIS Lounge, що є прекрасним введенням в основи ГІС.

WMS - це інтерфейс для запитуваних зображень карти, а WFS - інтерфейс для запитуваних векторних даних карти. WMS частіше використовується в ситуаціях, коли метою є виключно відображення даних. WFS зручніше при взаємодії користувачів з вихідними даними (наприклад, запит значень таблиці атрибутів або зміна даних). Модифікацію WFS часто називають WFS-T або WFS з транзакціями.

Багато операцій, що виконуються за допомогою GeoServer, мають формат XML, тому корисно мати уявлення про це форматі. В розділі ресурси наведено посилання на підручник "Основи XML", який містить відмінне опис XML.

Щоб виконати інструкції по установці, необхідно вміти працювати з командним рядком Linux® і мати доступ до сервера Linux. Якщо в якості системи зберігання даних ви хочете використовувати PostGIS, а не шейп-файли на диску, вам буде потрібно знання PostgreSQL і PostGIS, а також доступ до сервера PostGIS.

І, нарешті, вам буде потрібно OpenLayers - відмінний JavaScript-інструмент створення карт на стороні клієнта, який дозволяє розробляти (в тісній взаємодії з GeoServer) Web-додатки для представлення просторових даних. Для отримання інформації про OpenLayers прочитайте статтю Об'єднання даних за допомогою OpenLayers (EN).

установка

GeoServer - це Java ™ -сервлет. Він працює всередині контейнера сервлетів, наприклад Apache Tomcat. Його також можна використовувати автономно за допомогою вбудованого контейнера сервлетів Jetty, що дуже зручно при локальному тестуванні. Tomcat більше підходить для великих установок, тому в даній статті розглядається саме цей варіант.

Вимоги до сервера

Для роботи підійде будь-який Linux-сервер, до якого у вас є root-доступ. GeoServer відмінно працює на невеликій віртуальній машині, наприклад на невеликому екземплярі IBM PowerVM® або на розділі System Z®. Потреби в ресурсах безпосередньо залежать від обсягу трафіку, який планується направляти на GeoServer. На диску повинно бути достатньо місця для зберігання ГІС-даних і близько 5 ГБ для операційної системи і GeoServer. Рекомендується принаймні 512 МБ оперативної пам'яті. Можливе використання операційних систем Microsoft® Windows® і Mac OS® X, але Linux зручніше в промисловій експлуатації. У даній статті передбачається використання сервера під Ubuntu або Debian.

Установка Apache Tomcat і GeoServer WAR

Встановіть Tomcat за допомогою команди apt-get install tomcat7. Після завершення установки відкрийте список тесту за адресою http: // ваш-сервер: 8080. Потім перейдіть на сторінку GeoServer Stable Downloads (див. Розділ ресурси ) І завантажте стиснений WAR-файл. Розпакуйте файл і перемістіть geoserver.war з архіву в / var / lib / tomcat7 / webapps /. Не звертайте уваги на інші файли архіву. Перезапустіть Tomcat за допомогою команди service tomcat7 restart. За замовчуванням до встановленого сервера GeoServer можна звернутися за адресою http: // ваш-сервер: 8080 / geoserver /. Сервер Tomcat запускається автоматично при перезавантаженні.

Каталогом даних за замовчуванням є / var / lib / tomcat6 / webapps / geoserver / data /. У цьому каталозі містяться сховище даних (за замовчуванням) і налаштування безпеки. У ньому також міститься папка data для зберігання файлів актуальних ГІС-даних, так що шлях до цих файлів буде включати ім'я data двічі (наприклад, /var/lib/tomcat7/webapps/geoserver/data/data/USA/state.shp). Якщо це вас не влаштовує, змініть ім'я папки для зберігання даних на що-небудь більш визначене, наприклад gis_data.

Щоб звертатися до порту, відмінному від 8080, змініть файл /etc/tomcat7/server.xml. Знайдіть рядок <Connector port = "8080" protocol = "HTTP / 1.1", змініть 8080 на 80 (або інший порт, який хочете використовувати), збережіть файл і перезавантажте Tomcat.

додаткові розширення

Для GeoServer існує безліч розширень, які дозволяють використовувати більше джерел даних (наприклад, IBM DB2®) і нові функції (наприклад, Web-сервіс геопроцессінга (WPS) і висновок в Excel-форматі). Ці розширення можна знайти на сторінці завантаження GeoServer (див. Розділ ресурси ).

Щоб встановити розширення, розархівуйте його в / var / lib / tomcat7 / webapps / geoserver / WEB-INF / lib /. Після встановлення розширення (або всіх необхідних на цій стадії розширень) перезапустите GeoServer (sudo service tomcat7 restart).

Корисними розширеннями є OGR і MySQL. OGR підтримує додаткові формати виведення векторних даних, а MySQL підтримує базу даних MySQL. Після встановлення розширення OGR переконайтеся, що у вашій системі є робоча утиліта ogr2ogr. Якщо її немає, встановіть пакет gdal-bin за допомогою команди sudo apt-get install gdal-bin. Після перезавантаження сервера GeoServer в списку предпросмотра шару будуть відображатися всі формати, які підтримуються OGR. Точно так же після установки MySQL і перезавантаження системи в списку варіантів зберігання New data source з'явиться база даних MySQL. Розширення MySQL не має офіційної технічної підтримки, тому якщо немає нагальної потреби використовувати MySQL, кращим варіантом є PostGIS (PostgreSQL).

Web-інтерфейс

Після установки увійдіть в адміністративний інтерфейс для виконання описаної нижче простого налаштування, навіть якщо плануєте використовувати GeoServer тільки з Web-додатки.

Початкова настройка

Ім'я користувача за замовчуванням - admin, а пароль - GeoServer. Після входу натисніть Security-> Users в меню зліва. Щоб змінити пароль адміністратора, в відобразиться списку виберіть ім'я admin. Тут також можна додавати нових користувачів.

Ви можете завантажити будь-які наявні шейп-файли або підготувати бази даних PostGIS. Наприклад, для набору даних США створіть каталог / var / lib / tomcat7 / webapps / geoserver / data / data / USA. Надіслати свої файли даних. Змініть шлях до файлів в залежності від того, де виконується екземпляр GeoServer (вкажіть tomcat7, якщо використовується Apache Tomcat). У разі PostGIS використовуйте утиліту shp2pgsql для імпорту шейп-файлів. Додаткові відомості про завантаження даних в PostGIS знаходяться в розділі ресурси .

GeoServer організовує дані (шари) в робочі області та сховища даних. Шар - це індивідуальний набір даних, наприклад дороги або озера. Робоча область забезпечує логічне групування даних для конкретного проекту або географічного регіону. Робоча область може містити одне або кілька сховищ даних, що визначають фізичне місце розташування даних (наприклад, каталог або файл на диску або таблиця бази даних PostGIS).

Після підготовки даних виберіть відповідні варіанти в меню Data, щоб додати їх в GeoServer. Для більшості опцій можна залишити значення за замовчуванням. Для робочих областей простір імен повинно мати унікальне значення такого вигляду: http: // імявашегосервера / імярабочейобласті. Додавання шарів називається публікацією шарів. Щоб виконати публікацію, виберіть потрібну систему координат (SRS - система просторової прив'язки) і натисніть Compute під кожним з двох обмежують прямокутників. Повторіть цю процедуру для всіх вихідних робочих областей, сховищ даних і шарів.

Якщо ви використовуєте PostGIS, для досягнення найкращих результатів імпортуйте хоча б один шейп-об'єкт в кожну таблицю бази даних, перш ніж розмістити її на GeoServer. Після настройки шарів перегляньте їх в GeoServer, як показано на малюнку 1.

Безпека

За допомогою GeoServer можна налаштувати ролі користувачів для управління доступом до певних робочих областях і сервісів. Якщо використовуваний вами екземпляр GeoServer є загальнодоступним, поекспериментуйте з меню Security, щоб зрозуміти, як працюють ролі. У багатьох випадках можна розмістити сервер за мережевим екраном або в закритій мережі і використовувати єдиний вхід з повним доступом. Можна також виконувати всі операції на GeoServer через власне ПО і PHP-проксі, який ми розглянемо в наступному розділі .

Поточне обслуговування і управління даними

Слідкуйте за тим, щоб обсяг дискового простору, процесорні ресурси і оперативна пам'ять, виділені для сервера, відповідали росту потреб з плином часу. Заплануйте регулярне резервне копіювання сервера. (Виконуйте резервне копіювання всього каталогу / var / lib / tomcat7 / webapps / geoserver і всіх наявних баз даних PostGIS.) Щоб уникнути плутанини при наявності декількох сотень шарів, завчасно розробіть план іменування робочих областей, просторів імен, сховищ даних і файлів.

REST API і PHP-обгортка

GeoServer має API, який дозволяє виконувати більшість операцій програмним способом. Цей API робить GeoServer корисним інструментом управління даними і основою для комплексного Web-додатки, яке автоматично додає і видаляє шари у міру необхідності. GeoServer API можна використовувати безпосередньо, але краще створити інтерфейсний PHP-клас, який спрощує операції і інкапсулює необхідні взаємодії. В розділі Завантаження наведено посилання на простий API обгортки і тестову сторінку, яку можна використовувати і модифікувати в своїх цілях.

Всі операції API виконуються за допомогою запитів GET, POST, PUT або DELETE по URL-адресою http: // вашсервер: 8080 / geoserver / rest /. Додайте потрібний об'єкт (наприклад, робочі області) в URL після роздільник і вкажіть повертається формат (зазвичай це XML, JSON або HTML). Таким чином, запит GET за адресою http: // вашсервер: 8080 / geoserver / rest / workspaces.xml повертає всі робочі області в форматі XML. У загальному випадку запит GET повертає результати в тому ж форматі, який використовувався при створенні екземпляра об'єкта за допомогою запиту POST або при його оновленні за допомогою запиту PUT. Лише в рідкісних випадках доведеться вказувати всі деталі, які повертаються запитом GET. Інтерфейсний PHP-клас (див. Розділ Завантаження ) Містить приклади конкретних операцій REST API. Посилання на REST Configuration API приведена в розділі ресурси .

Отримання, створення і видалення даних

Приклад PHP-обгортки містить прості функції отримання, видалення і створення об'єктів основних типів. При створенні сховища даних PostGIS база даних вже повинна існувати. При використанні createLayer для таблиці PostGIS ім'ям шару є ім'я таблиці. Перш ніж додати шар в GeoServer, переконайтеся, що в таблицю завантажений хоча б один шейп-об'єкт. При використанні сховища даних Shapefile Directory ім'ям шару є ім'я файлу (без шляху), при цьому файл повинен знаходитися в каталозі сховища даних. Лістинг 1 ілюструє створення за допомогою однієї операції робочої області, сховища даних і шару.

Лістинг 1. Створення робочої області, сховища даних PostGIS і публікація шару
include "GeoserverWrapper.php"; $ Geoserver = new GeoserverWrapper ( 'http://geosrvr.chrismichaelis.com/geoserver', $ username, $ password); // відкрита функція createWorkspace ($ workspaceName) $ geoserver-> createWorkspace ( 'delineation_34'); // відкрита функція createPostGISDataStore ($ datastoreName, $ workspaceName, // $ databaseName, $ databaseUser, $ databasePass, $ databaseHost = 'localhost', // $ databasePort = '5432') $ geoserver-> createPostGISDataStore ( 'd34_outputs', ' delineation_34 ',' delineations ',' gisuser ',' gisuser ',' localhost '); // Створіть таблицю pg_query ( "CREATE TABLE d34_stream_output (...)"); // Завантажте шейп-об'єкт (и) відповідно до логіки вашої програми pg_query ( "INSERT INTO d34_stream_output (...)"); // відкрита функція createLayer ($ layerName, $ workspaceName, $ datastoreName, // $ description = '') $ geoserver-> createLayer ( 'd34_stream_output', 'delineation_34', 'd34_outputs', 'Delineation outputs for run # 34') ;

Перегляд шарів

За допомогою функції viewLayer маєте змогу надсилати запити набору даних в форматі GML або в KML (формат Google Earth). Якщо ви хочете використовувати вихідні KML-дані безпосередньо в Google Earth, переконайтеся, що ваш набір даних містить координати широти і довготи. Використовуйте функцію viewLayerLegend, щоб отримати піктограму легенди для створення власної легенди.

Найпростішим і гнучким способом відображення даних сервера GeoServer є використання OpenLayers. Оскільки OpenLayers є браузерні інструментом, всі запити з Web-сторінки повинні мати одні й ті ж доменне ім'я і порт. Це обмеження, обумовлене вимогами безпеки, також перешкоджає взаємодії з GeoServer через порт і сервер, відмінні від основного сайту. У зв'язку з цим наша PHP-обгортка також надає функцію wfsPost, яка передає запити на GeoServer. Приклад тестового класу API tester.php використовує цю функцію для перехоплення і перенаправлення запитів з OpenLayers на GeoServer. У лістингу 2 наведено відповідний код.

Лістинг 2. Перехоплення і перенаправлення запитів GeoServer
// Передача WFS-запиту на сервер закритої мережі // (або для междоменной захисту в обхід проксі) $ pathParts = explode ( '/', $ _SERVER [ 'PATH_INFO']); if ($ pathParts [1] == 'wfsauth') {$ unused = array_shift ($ pathParts); $ Unused = array_shift ($ pathParts); $ User = array_shift ($ pathParts); $ Pass = array_shift ($ pathParts); // Передача WFS-запиту з використанням імені користувача і пароля include "GeoserverWrapper.php"; $ Geoserver = new GeoserverWrapper ( 'http://geosrvr.chrismichaelis.com/geoserver', $ user, $ pass); $ Wfs = implode ( '/', $ pathParts); if ($ _SERVER [ 'QUERY_STRING']! = '') $ wfs. = '?' . $ _SERVER [ 'QUERY_STRING']; // відкрита функція wfsPost ($ apiPath, $ post) echo $ geoserver-> wfsPost ($ wfs, file_get_contents ( 'php: // input')); return; } Else if ($ pathParts [1] == 'wfs') {$ unused = array_shift ($ pathParts); $ Unused = array_shift ($ pathParts); // Авторизація не потрібно include "GeoserverWrapper.php"; $ Geoserver = new GeoserverWrapper ( 'http://geosrvr.chrismichaelis.com/geoserver'); $ Wfs = implode ( '/', $ pathParts); if ($ _SERVER [ 'QUERY_STRING']! = '') $ wfs. = '?' . $ _SERVER [ 'QUERY_STRING']; echo $ geoserver-> wfsPost ($ wfs, file_get_contents ( 'php: // input')); return; }

У лістингу 3 показано підключення OpenLayers до шару WFS через PHP-проксі. Хоча в назві функції видно, що код призначений для WFS, цей підхід настільки ж добре працює для шару WMS. WMS надає зображення карти в форматі PNG. WFS надає актуальні дані карти в форматі GML, які відображаються на стороні клієнта за допомогою JavaScript-коду.

Лістинг 3. Використання шару WFS сервера GeoServer з OpenLayers
wfs = new OpenLayers.Layer.Vector ( "Editable Features", {strategies: [new OpenLayers.Strategy.BBOX (), new OpenLayers.Strategy.Save ()], / * Попередня рядок включає WFS-T. * / projection: new OpenLayers.Projection ( "EPSG: 900913"), / * 900913 = Проекція Google, необхідна для використання базових шарів Google Earth * / protocol: new OpenLayers.Protocol.WFS ({version: "1.1.0", srsName: "EPSG : 900913 ", url:" http: //.../geoserver_api/index.php/wfsauth/USERNAME/PASSWORD ", featureNS:" http://chrismichaelis.com/test_1 ", featurePrefix: 'test_1', featureType: "roads2", geometryName: 'the_geom', schema: "http: //.../geoserver_api/index.php/wfsauth/USERNAME/PASSWORD/" + "DescribeFeatureType? version = 1.1.0 & typename = test_1: roads2"}) }); map.addLayer (wfs);

Цей підхід також можна використовувати для реалізації додаткового захисту. Припустимо, що GeoServer знаходиться в закритій мережі або за мережевим екраном. При взаємодії з ним за допомогою PHP-додатки по URL запиту можна визначити, які користувачі Web-додатки мають доступ до запитуваного шару.

Використання WFS-T для зміни даних

Одним з переваг WFS перед WMS є те, що транзакції поновлення набору даних можна виконувати безпосередньо на сервері. Якщо ви використовуєте OpenLayers, додайте в лістинг 3 рядок, що створює стратегію Save. Елементи управління OpenLayers DeleteFeature, DrawFeature і ModifyFeature, дозволяють швидко і просто редагувати шейп-об'єкти в Web-додатку.

Можна також виконувати операції редагування безпосередньо з PHP-коду, а не намагатися безпосередньо змінювати шейп-файли на диску або таблицю PostGIS. Інтерфейсна обгортка надає функцію executeWFSTransaction, яка в якості аргументу приймає XML-транзакції. У транзакції вказуються простір імен і шар. Додаткова інформація про написання транзакцій WFS-T приведена в навчальному посібнику GEOSS Transactional WFS (див. Розділ ресурси ).

Лістинг 4 ілюструє виконання простої транзакції WFS-T, яка вставляє Г-подібну лінію.

Лістинг 4. Виконання транзакції WFS-T для вставки невеликого шейп-об'єкта
$ WFSTRequest = '<? Xml version = "1.0&quot;?> <Wfs: Transaction service = "WFS" version = "1.1.0" xmlns: wfs = "http://www.opengis.net/wfs" xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation = "http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/ wfs.xsd "> <wfs: Insert> <feature: roads2 xmlns: feature =" http://chrismichaelis.com/test_1 "> <feature: the_geom> <gml: MultiCurve srsName =" EPSG: 900913 "xmlns: gml = "http://www.opengis.net/gml"> <gml: curveMember> <gml: LineString> <gml: posList> -11575958.058425 5537202.2479459 -11575346.562199 5524666.5753089 -11561893.645222 5524666.5753089 </ gml: posList> </ gml: LineString> </ gml: curveMember> </ gml: MultiCurve> </ feature: the_geom> </ feature: roads2> </ wfs: Insert> </ wfs: Transaction> '; $ Geoserver-> executeWFSTransaction ($ WFSTRequest);

Зверніть увагу, що в лістингу 4 координати проекції відповідає тому, що зазначено в XML-Трібуте srsName.

Створення та призначення стілів

Для WFS-шарів стилі, як правило, визначаються в JavaScript-коді, створюваному с помощью OpenLayers на стороні клієнта. Для відображення шарів WMS, що представляють собою зображення, створювані на сервері, використовуються визначення стилів. Визначення стилів створюються за допомогою SLD-нотації (Styled Layer Descriptor). SLD - це XML-схема для настройки відображення шарів, що надає безліч параметрів, таких як різні значення і діапазони атрибутів. GeoServer дозволяє зберігати і іменувати стилі, щоб використовувати їх в подальшому. SLD краще вивчати на прикладі. На сторінці SLD Cookbook міститься багато готових до використання прикладів (див. Розділ ресурси ).

Інтерфейсна обгортка надає функції отримання, створення і видалення стилів, а також призначення стилю шару. Один шар може мати кілька стилів. При наявності декількох стилів можна задати використовуваний стиль в WMS-запиті, як показано в прикладі OpenLayers WMS в лістингу 5.

Лістинг 5. Запит конкретного стилю для шару WMS за допомогою OpenLayers
map.addLayer (new OpenLayers.Layer.WMS (// При необхідності тут знову можна використовувати "PHP Proxy". "test_workspace: roads2", "http://geosrvr.chrismichaelis.com/geoserver/roads2/wms", {LAYERS : 'test_workspace: roads2', STYLES: 'simple_roads'. tiled: true}, {buffer: 0, displayOutsideMaxExtent: true, isBaseLayer: true, yx: { 'EPSG: 4326': true}}));

Висновок

Інтеграція GeoServer з Web-додатком - це відмінний спосіб скоротити кількість рутинного коду, необхідного для управління даними, і в той же час отримати в своє розпорядження повнофункціональний WMS- і WFS-T-сервер. Ви можете використовувати описаний в статті підхід і супроводжуючі статтю приклади без всяких обмежень.

Ресурси для скачування

Схожі тими

Підпішіть мене на ПОВІДОМЛЕННЯ до коментарів

Php/wfsauth/USERNAME/PASSWORD/" + "DescribeFeatureType?
Quot;?

Новости