GIS-LAB

Географические информационные системы и дистанционное зондирование

Пример 1.1: Карта с одним слоем

MapServer позволяет создавать изображения и сохранять их локально или отправлять web-браузеру, как в данном примере. Отметим, что изображение может быть как вставленным в документ html, так и самостоятельным. В последнем случае необходимо указать в адресной строке браузера URL следующего вида: http://<insert hostname or IP address here>/cgi-bin/mapserv?map=/usr/local/www/gis-lab/data/docs/mapserver/tutorial5/example1-1.map&layer=altay&mode=map

Текст "insert hostname or IP address here" нужно заменить на адрес вашего web-сервера, на котором установлен MapServer (если вы работаете локально, то таким адресом является "localhost" или в форме IP-адреса – "127.0.0.1"). Данный URL состоит из двух частей. Первая часть - http://<insert hostname or IP address here>/cgi-bin/mapserv?, отвечает за вызов CGI-программы mapserv. Если вы укажете в адресной строке только эту часть, то получите в ответ следующее сообщение:

No query information to decode. QUERY_STRING is set, but empty.

Это сообщение информирует о том, что MapServer не может сгенерировать изображение, поскольку строка параметров, необходимых для этого, пуста и никакого изображения сгенерировать из нее невозможно. Вторая часть URL представляет собой строку, содержащую те самые, необходимые параметры (строка запроса). Строка запроса состоит из набора CGI-параметров (переменных и их значений), разделенных символом "&". Две части URL разделены знаком "?".

Перейдём непосредственно к рассмотрению второй части URL. Легко заметить, что первый параметр в строке запроса "map" имеет значение "/usr/local/www/gis-lab/data/docs/mapserver/tutorial5/example1-1.map", этот параметр указывает CGI-программе mapserv (или mapserv.exe, если MapServer установлен на компьютере с ОС Windows) адрес map-файла (что это за файл и для чего он нужен рассмотрим позднее). Следующий параметр "layer=altay" сообщает, что в создаваемую карту необходимо включить слой "altay", описанный в map-файле. И, наконец, последний параметр "mode=map" определяет способ вывода изображения. В нашем случае сгенерированное изображение отправляется непосредственно web-браузеру, без предварительного сохранения изображения на сервере. Переменная "mode" может принимать значение, отличное от "map", например, "browse". Сейчас мы не будем работать с режимом "browse", но обязательно к нему вернемся. А теперь посмотрим, что же представляет из себя map-файл (example1-1.map):

Содержание файла example1-1.map

Map-файл является основным методом конфигурации MapServer. Он состоит из объектов, каждый из которых, в свою очередь, может содержать в себе набор ключевых слов или другие объекты, то есть map-файл иерархичен. Главным объектом иерархии является объект MAP, все остальные объекты находятся внутри него. Рассмотренный map-файл имеет очень простую иерархию объектов. При рассмотрении каждого следующего примера эта иерархия будет усложняться.

Несколько замечаний, касающихся map-файлов: определение каждого объекта начинается с его имени и заканчивается словом "END", комментарии обозначаются символом фунта (#).

Представим файл example1-1.map в виде иерархии объектов:

MAP
 |-LAYER
   |-CLASS
     |-STYLE

Рассмотрим ключевые слова (параметры), встречающиеся в приведенном примере.

Основные параметры

MAP
Любой map-файл начинается с ключевого слова MAP, обозначающего начало описания объекта MAP. Весь map-файл – есть ни что иное, как объект MAP.

IMAGETYPE
Ключевое слово IMAGETYPE используется для определения формата выходного графического файла. В рассмотренном примере мы использовали формат PNG (похожий на GIF). Можно было использовать и GIF-формат, если библиотека GD была скомпилирована с поддержкой GIF, WBMP или JPEG. Мы также можем определить другие выходные параметры (PDF, SWF, GeoTIFF) при условии, что их поддержка была определена на этапе компиляции MapServer и указать, используя объект OUTPUTFORMAT. Рассмотрение объекта OUTPUTFORMAT выходит за рамки данного учебного пособия, но вы можете узнать о нем более подробно, посетив web-сайт MapServer.

EXTENT
Этот параметр определяет ограничивающий прямоугольник нашей карты – охват. Значения параметров охвата вводятся в соответствии со следующим форматом:
<Нижняя левая координата X> <Нижняя левая координата Y> <Верхняя правая координата X> <Верхняя правая координата Y> и разделяются пробелом. Эти значения должны быть в тех же единицах измерения, что и геоданные.

В рассмотренном примере данные находятся в географической системе координат, поэтому единицами измерения являются градусы. Вы можете воспользоваться утилитой ogrinfo, которая входит в библиотеку GDAL/OGR для определения охвата shape-файла. Для нашего примера информация о нем была получена следующим образом:

ogrinfo -al -so altay-a.shp

Эта команда вернула следующий результат:

Layer name: altay-a
Geometry: Polygon
Feature Count: 2
Extent: (77.802216, 49.083084) - (89.869980, 54.489159)
Layer SRS WKT:
GEOGCS["GCS_WGS_1984",
    DATUM["WGS_1984",
        SPHEROID["WGS_1984",6378137,298.257223563]],
    PRIMEM["Greenwich",0],
    UNIT["Degree",0.017453292519943295]]
ID: Real (32.3)
F_CODE: String (80.0)
F_CODE_DES: String (80.0)
NAM: String (80.0)
NA2: String (80.0)
NA2_DESCRI: String (80.0)
NA3: String (80.0)
NA3_DESCRI: String (80.0)
TILE_ID: Integer (10.0)
FAC_ID: Real (32.3)

Для определения охвата также можно воспользоваться другими средствами: ArcView или свободными ГИС – QGIS, Thuban и т.д. Попробуйте изменить значения определяющие охват для понимания того, как изменения этого параметра влияют на карту.

SIZE
Этот параметр отвечает за размер изображения (карты) в пикселях. Так наша карта имеет размер – 400 пикселей по горизонтали и 300 по вертикали. Также потренируйтесь с изменением этого параметра и понаблюдайте, как при этом будет меняться ваша карта.

SHAPEPATH
Определяет путь к вашим данным. Вы можете задавать как полный путь (например, "/usr/local/www/gis-lab/data/docs/mapserver/tutorial5/data/"), так и путь относительно местоположения map-файла (в данном примере "data "). Сама папка, содержащая эти данные, не должна быть доступна через веб, иначе существует вероятность того, что данные будут скачаны напрямую без вашего ведома. Удостоверьтесь, что пользователь, управляющий web-сервером (обычно, "nobody" или "apache" в среде *nix) имеет права на чтение данных из SHAPEPATH.

IMAGECOLOR
Определяет цвет фона вашей карты. Задается в формате RGB. В нашем примере все компоненты (красный, зеленый, синий) установлены на уровне 255, что обеспечивает белый фон карты.

Параметры объекта LAYER

LAYER
Обозначает начало описания слоя (объекта LAYER). Вы можете описать произвольное количество данных объектов, но по умолчанию стоит ограничение в 100 слоев. Для того чтобы снять это ограничение, необходимо отредактировать файл map.h из исходного кода программы и перекомпилировать MapServer.

NAME
Представляет собой идентификатор слоя. MapServer использует его для определения необходимости включения или невключения слоя в результирующую карту.

DATA
Имя файла исходных данных (в нашем примере это shape-файл). MapServer поддерживает множество векторных форматов (не только shape-файлы), за счет использования библиотеки OGR (составная часть GDAL). Пожалуйста, посетите web-сайт GDAL http://www.gdal.org и прочитайте http://www.gdal.org/ogr/index.html для знакомства с перечнем векторных форматов, поддерживаемых MapServer. Хотелось бы отметить учебное пособие по использованию векторных данных в MapServer (авторы: Jeff McKenna, Tyler Mitchell). Вы можете скачать его (в формате PDF) по адресу http://dl.maptools.org/dl/docs/mapserv/ .

TYPE
Какой тип у ваших данных? Если это векторные данные, то это могут быть POLYGON (полигональные), LINE (линейные) или POINT (точечные) данные. Используйте тип LINE, даже если ваши данные фактически имеют тип POLYLINE (полилиния). Значение TYPE также может принимать значения RASTER (для растровых данных) или ANNOTATION (аннотация). В нашем примере мы использовали тип POLYGON.

STATUS
Статус слоя – ON (включен) или OFF (выключен), используется при обращении к слою из строки запросов. Если установлено значение статуса DEFAULT, значит слой всегда включен.

Параметры объекта CLASS

CLASS
Обозначает начало описания класса (объекта CLASS) внутри объекта LAYER. Вы можете описать произвольное количество таких объектов, но по умолчанию стоит ограничение в 50 классов. Для того чтобы снять это ограничение, так же как и с количеством слоев, необходимо отредактировать соответствующий файл и перекомпилировать MapServer.

NAME
Служит идентификатором класса. Слой может содержать несколько классов, точно также, как карта может включать в себя несколько слоев. Имена классов используются MapServer как подписи для легенды, поэтому рекомендуется давать классам значимые имена. Процесс создания легенды будет рассмотрен в нашем учебном пособии далее.

Параметры объекта STYLE

STYLE
Обозначает описание стиля (объекта STYLE), определяющего каким условным обозначением будут отображаться данные. Имеется возможность определения нескольких стилей в пределах одного класса.

COLOR
Определяет цвет заливки полигонов. В случае когда TYPE имеет значение LINE – COLOR определяет цвет линий. Значение этого параметра задается в RGB-формате.

OUTLINECOLOR
Определяет цвет контуров полигонов. Задается в RGB-формате. MapServer не рисует по умолчанию контуры полигонов, поэтому если вы хотите видеть их границы, вам необходимо определить параметр OUTLINECOLOR.

На этом первый пример нашего пособия закончен.

Глава 1 | Содержание| Пример 1.2

Обсудить в форуме Комментариев — 85

Последнее обновление: February 27 2009