arzobispo писал(а):Вот возникли у меня следующие вопросы:
1. Где прописать SQL запрос к Базе данных?
2. Как связать Карту с Базой данных (как понял, то, что было в ответе на прошлое сообщение)?
Это два связанных вопроса, и отвечать на них лучше одновременно.
Предполагаю, что у вас уже есть файл, описывающий карту (файл, с расширением map). И уже есть шаблон html, позволяющий отображать эту карту в окне браузера. (Если этого еще нет, то см. описание основных этапов создания карты и шаболонов:
http://gis-lab.info/qa/mapserver-begin.html).
Предполагаю также, что вам нужно добавить еще один слой к карте - слой данных PostGIS.
Для этого:
Создаете новый слой в вашем map-файле (т.е. добавляете туда предложение LAYER) и настраиваете параметры (то, что не относится к БД, заменяю многоточием):
Код: Выделить всё
LAYER
NAME ...
TYPE <зависит от типа геометриии данных в вашей БД>
CONNECTIONTYPE postgis # Указываете, что слой - слой PostGIS
CONNECTION "dbname=<имя> host=<адрес> port=<порт> user=<пользователь> password=<пароль>" # это и есть строка подключения к базе данных
DATA "<имя поля с геоданными> from <таблица>" # выборка данных из БД
HEADER ...
FOOTER ...
TEMPLATE ...
PROJECTION
...
END
METADATA
...
END
CLASS
...
END
...
END
Итак, ответ на вопрос № 2:
Код: Выделить всё
CONNECTION "dbname=<имя> host=<адрес> port=<порт> user=<пользователь> password=<пароль>"
Это строка подключения, в которой задается имя базы данных, адрес сервера, порт, имя пользователя и пароль доступа (некоторые параметры могут отсутствовать - зависит от настроек подключения к БД в PostgreSQL).
Ответ на вопрос № 1:
Код: Выделить всё
DATA "<имя поля с геоданными> from <таблица>"
Здесь описывается имя поле с геометрическими данными и таблица, откуда выбираются данные. Например,
Здесь же можно указать более сложный запрос - на выборку данных по условию, например:
Код: Выделить всё
DATA "the_geom from (SELECT landuse.object_id, landuse.area,
forest.type, forest.the_geom FROM landuse INNER JOIN forest ON
landuse.gid = forest.gid) as foo using unique gid using
SRID=4326"
Более подробно обо все этом сказано в учебных материалах:
коротко в pdf и
набор учебных материалов
arzobispo писал(а):
3. Как связать пользовательский интерфейс с запросом SQL?
С этим немного посложнее (для меня). Вижу 2 пути (возможно есть еще) оба из них я реализовывал давно и подробности помню плохо:
1) Пойти по пути использования параметров qstring, qlayer, qitem и т.д., предоставляемых MapServer. Об этом сказано
здесь.
2) Использовать
фильтры. Причем, параметры фильтрации можно менять динамически
См. раздел "Changing map file parameters via a form or a URL"