Mapfeatureserver как замена ArcGIS Server: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Нет описания правки
мНет описания правки
Строка 63: Строка 63:


После выполнения этих шагов, можно использовать слои MFS как обычные слои ArcGIS Feature Layer в веб-картах построенных на ArcGIS web API. К примеру, есть вьювер [http://www.allgis.org/cartobonus/help/ Картобонус], построенный на [http://resources.arcgis.com/en/help/silverlight-viewer/concepts/ ArcGIS API for Silverlight], именно он использовался для тестирования MFS. Чтобы добавить слой в карту, используйте URL вида <pre>http://hostname:5000/<layer id></pre>
После выполнения этих шагов, можно использовать слои MFS как обычные слои ArcGIS Feature Layer в веб-картах построенных на ArcGIS web API. К примеру, есть вьювер [http://www.allgis.org/cartobonus/help/ Картобонус], построенный на [http://resources.arcgis.com/en/help/silverlight-viewer/concepts/ ArcGIS API for Silverlight], именно он использовался для тестирования MFS. Чтобы добавить слой в карту, используйте URL вида <pre>http://hostname:5000/<layer id></pre>
[[Файл:Слои Mapfeatureserver в веб-картах Картобонус.png|мини|центр|750|Рабочий скриншот]]
[[Файл:Слои Mapfeatureserver в веб-картах Картобонус.png|thumb|center|upright=2.0|Рабочий скриншот слоев из MFS в вьювере Картобонус]]


Как видите, за исключением файла метаданных, всё достаточно просто.
Как видите, за исключением файла метаданных, всё достаточно просто.

Версия от 00:49, 24 мая 2013

Эта страница является черновиком статьи.


Описание веб-сервиса Mapfeatureserver как замены ArcGIS Server

Mapfeatureserver (далее MFS) - это веб-сервис, написанный на Python (WSGI, Flask) и реализующий ArcGIS Server REST API для слоев типа Feature Layer. MFS был задуман как средство, позволяющее избавиться от дорогостоящего ArcGIS Server при работе с веб-картами, использующими ArcGIS API.

Mapfeatureserver будет полезен разработчикам ГИС решений для веб и интранет, поскольку позволяет получить веб-карты красивые и функциональные как в ArcGIS, но без затрат на приобретение ArcGIS Server.

Что это, Mapfeatureserver?

Как я уже упомянул, MFS это open source программа на Python, которая после запуска создает веб-сервис отвечающий спецификации ArcGIS Server REST API для картографических слоев типа Feature Layer. Веб модуль MFS написан с использованием фреймворка Flask и отвечает спецификации WSGI, что позволяет использовать MFS в качестве части более крупных веб-решений.

Геоданные MFS считывает из PostGIS DB, что означает необходимость а) загрузить данные предполагаемого решения в БД PostGIS; б) обеспечить доступ к этой БД сервису MFS. На текущий момент, кроме PostGIS, другие БД не поддерживаются, но есть планы добавить поддержку MySQL и MongoDB.

Общая картина использования MFS выглядит примерно так.

  • Геоданные (шейп-файлы, к примеру) загружаем в PostGIS.
  • Для каждого слоя данных вписываем сведения в конфигурационные файлы MFS.
  • Запускаем веб-сервис.
  • В клиентской программе, к примеру Картобонус, добавляем к карте слои точно так же, как обычные FeatureLayer из ArcGIS Server.

Теперь о недостатках и ограничениях MFS.

На текущий момент программа находится в стадии «Proof of Concept», то есть обладает функциональностью минимально достаточной для демонстрации работоспособности подхода. Из всего многообразия запросов декларированных в API, наш сервис пока реализует два:

причем запрос данных может быть только одного типа - запрос на выборку по ограничивающему боксу (box). Этого достаточно, чтобы загрузить слой в карту и делать zoom, pan, просмотр атрибутов для features, но и только.

Остальная часть API будет реализована несколько позже. Хорошая новость заключается в том, что проект - open source и любой, кто обладает соответствующими навыками, может ускорить реализацию недостающих функций.

Инструкция по использованию Mapfeatureserver

Изложенная здесь информация может устареть к тому времени как вы читаете этот текст. Наиболее свежую информацию о проекте вы всегда можете найти на странице проекта в GitHub https://github.com/vasnake/mapfeatureserver

Чтобы запустить сервис MFS вам понадобится выполнить следующие шаги:

  • Скачать MFS с GitHub.
  • Установить Python 2.7 и необходимые библиотки, к примеру для MS Windows
set path=%path%;c:\d\Python27;c:\d\Python27\Scripts
pip install Flask flask-login blinker psycopg2 simplejson

psycopg2 for Windows

  • Запустить приложение Flask
pushd mapfeatureserver\wsgi
python mapfs_controller.py

URL веб-службы будет таким http://localhost:5000/ Если вы откроете эту страницу в браузере вы увидите служебную страницу со ссылками на тестовые слои. Эти ссылки работать не будут, так как у вас нет таких слоев. Удалить лишнее и добавить свое вы можете поправив файл

mapfeatureserver\wsgi\templates\servlets.html

Чтобы создать новый слой, вам нужно выполнить следующие шаги:

  • Получить доступ к БД PostGIS, к примеру, установив БД на свой хост.
  • Загрузить шейп-файл с нужными данными в БД, к примеру так:
set path=%path%;c:\Program Files\PostgreSQL\9.0\bin
pushd c:\t\shpdir
shp2pgsql.exe -d -I -s 4326 -W cp1251 flyzone.shp mfsdata.flyzone > flyzone.dump.sql
psql -f flyzone.dump.sql postgisdb mfs
  • Записать сведения о слое в конфигурационный файл
mapfeatureserver\config\layers.config.ini

находящиеся там примеры и комментарии помогут не ошибиться.

  • Создать файл метаданных для слоя. Это самая трудная часть.
mapfeatureserver\config\layer.<layer id>.config.json

Чтобы было легче, можно скопировать метаданные из аналогичного существующего слоя ArcGIS и внести в него правки. Метаданные слоя из ArcGIS доступны по URL типа

http://testags/arcgis/rest/services/flyzone/FeatureServer/2?f=pjson

Также, в MFS есть специальные страницы, типа

http://localhost:5000/admin/dsn/flyzone?oidfield=gid&geomfield=geom

для помощи в составлении файла метаданных.

После выполнения этих шагов, можно использовать слои MFS как обычные слои ArcGIS Feature Layer в веб-картах построенных на ArcGIS web API. К примеру, есть вьювер Картобонус, построенный на ArcGIS API for Silverlight, именно он использовался для тестирования MFS. Чтобы добавить слой в карту, используйте URL вида

http://hostname:5000/<layer id>
Рабочий скриншот слоев из MFS в вьювере Картобонус

Как видите, за исключением файла метаданных, всё достаточно просто. Теперь у нас есть свободный и бесплатный сервер Feature Layer-ов для обеспечения работы любого картографического софта, использующего спецификации ArcGIS REST API.

См. также

E-mail: vasnake@gmail.com