?

Log in

No account? Create an account

OpenWebGIS is online Geographic Information System

Previous Entry Share Next Entry
OpenWebGIS: структура системы и с чего начать при создании аналогичных проектов? часть первая
openwebgis

В последнее время мне задают вопросы по поводу создания OpenWebGIS, суть которых можно свести к следующему: Опишите, как создавалась OpenWebGIS и как мне сделать самому примерно такую же систему под мои задачи?
На днях мне задали 4 более конкретных вопроса, надеюсь, их автор не будет против, если приведу их здесь:

  1. для работы сервиса применялось только то, что перечислено в разделе "О проекте" или еще что то;

  2. карты выкачивались или просто берутся со стороннего сервиса?

  3. есть ли пошаговое описание создания Вашего проекта или подобного (какие настройки нужны для geoserver, пример кода основной страницы, как и самое главное - для чего Вы делали связки элементов перечисленных в разделе "О проекте")

  4. может посоветуете что то почитать для совсем начинающего веб-картографа.

В планируемой серии статей я попытаюсь ответить на эти вопросы. Перед вами самая первая статья, или точнее первая вводная часть, в которой кратко даются ответы на 4 поставленных выше вопроса.
[Spoiler (click to open)]
Сразу скажу, что я не учитель и система OpenWebGIS не является примером идеальной ГИС, в ней многое делалось поначалу наугад и на ощупь и только возможно сейчас процесс её разработки вошёл в более системное русло. Поэтому любая конструктивная критика очень и очень приветствуется. Писать буду только исходя из своего опыта и понимания, не настаивая на том, что это единственно верный и правильный путь.
Итак по пунктам:
           1.Помимо перечисленного так же применялся язык PHP и веб-сервер Apache, но это необходимо только если ваша система будет обращаться к сторонним ресурсам без технологии CORS https://ru.wikipedia.org/wiki/Cross-origin_resource_sharing (количество ресурсов с CORS наверное не более 10% от общего количества существующих в интернете) и если вы хотите осуществлять например, мониторинг активности пользователей ну и конечно при желании, много ещё для чего. Моя система подобная OpenWebGIS достаточно долго функционировала внутри большой локальной сети без Apache и PHP и даже некоторое время после открытия доступа через Интернет.
          2.Несколько карт, прежде всего основные (города, реки), те что добавляются по умолчанию в качестве слоёв при заходе на страницу OpenWeBGIS, я взял из открытых источников в виде shapefiles и положил в соответствующую папку на сервере. Уточню терминологию: картой я как правило называю – базовую подложку, например googlеmaps, все что наносится, добавляется сверху – это слои. Далее по мере необходимости администратор или другие пользователи загружают слои в виде shapefiles или GML и CSV – для этого есть специальные пункты меню в интерфейсе OpenWebGIS. Загрузка осуществляется по технологии: XMLHttpRequest (XMLHTTP, XHR) — API, доступное в скриптовых языках браузеров, таких как JavaScript. XMLHttpRequest использует запросы HTTP или HTTPS напрямую к веб-серверу и загружает данные ответа сервера напрямую в вызывающий скрипт. OpenLayers для работы с этой технологией предоставляет обёртку (функцию) : OpenLayers.Request.PUT. Например, для загрузки шейп-файла:
var request = OpenLayers.Request.PUT({
url: urlStr,
async: false,
data: fileZIP,
headers: {
'Content-Type': 'application/zip',
'WWW-Authenticate': 'Basic realm="Authentication System"'
},
callback: alert ("it's OK")
});
Файл шейп запакованный в zip загрузили теперь надо создать в geoserver слой (Layer):
var request = OpenLayers.Request.PUT({
url: urlStr.split('file.shp?configure=all')[0]+"featuretypes/"+fileZIP.name.split('.')[0],
async: false,
data:''+fileZIP.name.split('.')[0]+' EPSG:4326true',
headers: {
"Content-Type": "application/xml"
},
success: function(e){},
failure: function (e) {}
});
Всё это в основном касается векторных (WFS) слоёв, т.е тех для которых пользователь может менять легенду и менять сами данные, добавлять например новые точки, полигоны, линии на карту и сохранять на сервере или не сохранять а просто выгружать в файл GML, CSV, KML, JSON.
Пример карты OpenWebGIS с векторными слоями посмотрите здесь: http://opengis.dlinkddns.com/gis/opengis_ru.html?openwebgis=LhrYVHYTEgxHsaVGb8m3on87vWi1RNCZ5rKC. На ней обозначены древние порты и римские дороги в Италии и окружающих территориях. Если название интересующего слоя выбрать в ниспадающем списке – 'Редактируемый слой’, то когда вы будете подводить курсор к интересующему элементу, выбранного слоя он будет менять цвет и можете щёлкнуть левой клавишей по нему и получить информацию о этом объекте.
Слои в виде WMS можно брать с других серверов, сторонних ресурсов (WFS, кстати тоже можно брать с других ресурсов, но их гораздо меньше чем источников WMS и пока об этом не будем). В OpenWebGIS для этого есть специальный модуль , его работу можно посмотреть на этом англоязычном видео https://www.youtube.com/watch?v=UC2oH86RTog. В этом случае вам наверняка понадобиться Apache и PHP. При работе с WMS слоями как правило вся информация берётся с других ресурсов, хотя в OpenWebGIS, есть опция сохранить сторонний WMS слой на сервере OpenWebGIS, но в этом случае сохраняется ссылка а не сама информация. Например вот здесь: http://opengis.dlinkddns.com/gis/opengis_ru.html?openwebgis=hwg03E6P9kdicuSVvMqW2FDmOK8FdpNAvMto , вы можете посмотреть небольшой метеорологический сервис на базе OpenWebGIS. Здесь слоёв много но не один из них не сохранён на сервере OpenWebGIS.
Ещё один вариант работы с географическими данными это загрузка на карту файлов GML, CSV, KML, JSON, GPX с вашего компьютера через меню ‘Слои->Новый слой из….’. В этом случае информация не загружается на сервер и не поступает с других серверов, а просто закидывается в оперативную память вашего браузера, вы с ней работаете, анализируете, делаете расчёты, создаёте новые атрибуты, элементы и т.д. и затем с помощью меню 'Экспорт слоя в…’ получаете на своём компьютере новый файл, который можете загрузить на сервер, работать в другой программе, передать друзьям и т.п.

Таким образом резюме по второму вопросу: слои(карты) в зависимости от задач, потребностей пользователей могут быть как на самом сервере OpenWebGIS так и в других местах.

           3.Пошагового описания создания OpenWebGIS пока нет, есть кусочки различных этапов других проектов        описанные на различных форумах, которые я использовал как сам понимал и умел под свои задачи.
Самые полезные для меня форумы в этом плане следующие: http://stackoverflow.com/questions/tagged/geoserver,
http://osgeo-org.1560.x6.nabble.com/OSGeo-Software-and-Data-Projects-f3741872.html,
http://gis-lab.info/forum/index.php
Сам geoserver, как ядро всей системы особых настроек не требует. Основное это создать в нём рабочее пространство (workspace) и хранилища (store) для слоёв проекта, это будет отправной точкой при программировании с использованием javascript различных действий (обращение к слоям, их изменение и т.п). А также если вы хотите разграничивать права доступа для различных пользователей, то надо настроить раздел security в интерфейсе geoserver.
Теперь по составу проекта:

  • а.Geoserver – открытый сервер, написанный на Java, для сетевого размещения пространственных данных и их обработки – это ядро OpenWebGIS, мне кажется этим всё сказано, подробнее в следующих статьях;

  • б.OpenLayers - библиотека с открытым исходным кодом, написанная на JavaScript, предназначенная для создания карт на основе программного интерфейса (API) – библиотека наряду с самим Javascript для программирования пользовательского интерфейса, грубо говоря создания html страниц и автоматизации основных функций ;

  • в.PostGIS - расширение объектно-реляционной СУБД PostgreSQL, предназначенное для хранения в базе географических данных – используется для хранения слоёв форматов: GML, CSV, которые загружаются пользователями через пункты меню Импорт GML,CSV файла в базу данных сервера ;

  • г.Proj4js - библиотека методов для трансформации между различными географическими координатными системами – полезная вещь при работе с векторной информацией, что-либо сделать с WMS слоями с помощью этой библиотеки не получится;

Как взаимосвязаны составные части OpenWebGIS показано на схеме ниже:
StructureOpenWebGIS

          4. Что почитать? Лучше чем здесь: http://gis-lab.info/forum/viewforum.php?f=26 и конкретно здесь http://gis-lab.info/forum/viewtopic.php?f=26&t=10484 я, наверное, не смогу посоветовать.
И ещё мне очень и очень помогал поиск ответов на конкретные вопросы, возникающие по ходу работы, с помощью Yandex в русскоязычном сегменте интернета и Google в англоязычном. Настолько помогал, что мне очень редко приходилось самому что-то спрашивать на различных программистских форумах, как правило, многое уже есть, многое обсуждено и даны решения большинства вопросов в разных вариантах.