Начиная с версии 8.0, в MapInfo Professional добавлена клиентская поддержка службы Web Feature Service (WFS), позволяющая получать данные в формате GML (Geography Markup Language), используя Интернет-запросы HTTP GET и HTTP POST через обычное Интернет-соединение. Программа-клиент службы WFS была разработана в соответствии со спецификацией 1.0.0 OpenGIS® Web Feature Service Implementation Specification, полный текст которой доступен по адресу: http://www.opengis.org/docs/02-058.pdf
Служба WFS во многом похожа на WMS (Web Mapping Service), и обе могут передавать географические данные через Интернет. Но если WMS-сервер передает растровые карты, WFS-сервер передает исходные координатные данные, которые клиент использует при создании карты.
Внимание: Клиент MapInfo WFS разработан в соответствии со стандартом OGC WFS Specification 1.0.0. Этот клиент не позволяет получать данные от источников, которые действуют под ранними или более поздними версиями спецификации OGC.
Эта версия клиента WFS поддерживает графический стандарт GML2 (OGC GML V2.1.1). Спецификация OGS WFS предполагает, что все серверы должны поддерживать GML2, но не запрещается также поддержка других форматов. Сервер выдает информацию о доступных форматах, а клиент делает запрос данных, в том формате, в котором он может их принять. Если сервер не поддерживает GML2, то он не будет поддерживаться клиентом MapInfo WFS.
GML2 не поддерживает информацию о стилях. Вы можете связать информацию о стиле с определённой таблицей WFS.
Запрос WFS содержит описание операций запроса, которые могут быть применены к одному или несколько географическим объектам. Клиент производит запрос и посылает его в службе WFS, используя HTTP Специализированный Web-сервер читает и исполняет этот запрос.
Оператор GetCapabilities запрашивает сервер WFS о его возможностях. Затем WFS-клиент MapInfo Professional может создавать запросы, соответствующие серверу WFS и таблице.
В ответ на запрос каждая таблица на сервере WFS может возвращать только одну таблицу MapInfo. Соотношение карт здесь всегда "1-к-1" (в отличие от структуры службы WMS, в которой реализовано соотношение "много-к-1").
Файл TAB, полученный от сервера WFS напоминает связанную таблицу СУБД, доступную только для чтения. Он задает файл MAP и файл DAT и используется как обычная таблица MapInfo, доступная только для чтения. Информация сохранена так, чтобы таблица могла быть обновлена с сервера WFS.
Последовательность действий может быть описана следующим образом:
1. После засылки запроса GetCapabilities на сервер WFS, сервер возвращает список слоев WFS (FeatureTypes) которые он может предоставить.
2. Пользователь выбирает слой WFS, чтобы получить его от сервера, затем MapInfo Professional посылает запрос DescribeFeatureType на сервер. В ответ вырабатывается XML-схема, которая описывает объекты слоя.
3. Пользователь может затем выбрать, какие колонки и/или строки надо получить.
4. MapInfo Professional посылает запрос GetFeature к WFS. Если пользователь не выбрал подмножество нужных колонок, то по умолчанию используются все колонки.
5. Финальный результат - документ GML, содержащий коллекцию объектов. Каждый объект представляет собой одну «запись» в таблице MapInfo.
MapInfo поддерживает для клиента список серверов WFS, чтобы облегчить изучение
использования этих новых функций.
Внимание: Поскольку данные, которые Вы получаете используя WFS, находятся на удаленном сервере, то данные время от времени могут изменяться. Для поддержки актуальности данных Вы можете заново вручную выбирать необходимый набор данных с WFS-сервера. См. раздел Обновление слоя WFS в Справочной системе, там это описано более подробно.
Когда таблица MapInfo WFS открыта, в интерфейс автоматически добавляются средства ее
обновления. Чтобы корректно отображать данные GML2 в MapInfo Professional, служба Web
Feature Service должна удовлетворять следующим требованиям:
• Сервер, от которого Вы запрашиваете информацию, должен поддерживать WFS версии 1.0.0. WFS-клиент посылает из MapInfo Professional начальный запрос GetCapabil-ities, чтобы удостовериться в том, что поддерживается версия 1.0.0. Если сервер, от которого Вы запрашиваете информацию, не поддерживает версию 1.0.0, MapInfo Professional не может использовать этот сервер, и никакие дальнейшие операции не будут выполнены.
• WFS-сервер должен ответить на запрос GetCapabilities, используя метод HTTP GET и возвратить информацию в виде XML.
• Сервер должен быть способен ответить на запрос GetFeature, возвращая GML2
(OGC GML V2.1.1). Ответ сервера на запрос GetCapabilities должен включить эту информацию. Если сервер не гарантирует использование GML2 как результирующего формата для GetFeature, то MapInfo Professional не сможет использовать сервер, и никакие дальнейшие операции не будут выполнены.
• Ответ GetCapabilities сервера должен соответствовать схеме OGC GetCapabilities. Если ответ сервера на запрос GetCapabilities не соответствует схеме, MapInfo Professional не сможет его корректно считать. Это может привести к тому, что MapInfo Professional пропустит элементы передаваемой сервером информации. В некоторых случаях поэтому взаимодействие MapInfo Professional с сервером будет приводить к ошибочным результатам или потерям данных.
• WFS-сервер должен поддерживать методы HTTP GET и/или HTTP POST для функций DescribeFeatureType и GetFeature. WFS-клиент MapInfo Professional поддерживает и HTTP GET, и HTTP POST. Сервер должен указывать, что он поддерживает эти методы в каждом ответе на запрос GetCapabilities. MapInfo Professional предпочитает использовать HTTP POST для обеих операций; если сервер объявляет, что это поддерживает и HTTP POST, и HTTP GET для этих операций, то MapInfo Professional все равно использует HTTP POST.
• Сервер должен передавать URL и для DescribeFeatureType, и для GetFeature в ответе на запрос GetCapabilities. Передаваемый URL должен быть допустим для этого запроса. Если сервер передает в ответе недопустимый URL, то WFS-клиент MapInfo Professional не сможет продолжать работу и выдаст сообщение об ошибке.
Ответ DescribeFeatureType должен быть:
• XML-схемой, которая содержит информацию только для указанной таблицы. Если сервер возвращает схему, которая содержит описания для нескольких таблиц, MapInfo Professional не может разобрать ее правильно, и операция потерпит неудачу.
• Правильная XML-схема. Если ответ DescribeFeatureType неправилен с точки зрения XML-схемы, никакие дальнейшие операции для этого типа объектов проводить нельзя. Без правильной схемы MapInfo Professional не может создать или заполнить таблицу. В этом случае Вы можете либо выбрать другую таблицу, либо выбирать другой сервер, либо отменить диалог WFS.
Внимание: MapInfo Professional может не обработать схемы, которые "хорошо сформированы", но содержат недопустимый XML.
MapInfo Professional проверяет, насколько хорошо сформирована схема XML, возвращенная для DescribeFeatureType, но не проверяет сам XML. Однако, наш WFS-клиент работает правильно со многими серверами, которые возвращают схемы, содержащие недопустимые элементы, и наши разработчики приняли решение не отказываться от взаимодействия с серверами, которые не всегда возвращают на 100% правильный XML.
Внимание: MapInfo Professional не может успешно обработать схемы, которые содержат недопустимые элементы, типа недопустимого символа в название элемента. Например, в элементе "Тип города" содержится пробел, который по правилам XML не допустим.
Если MapInfo Professional может обработать схему, которая правильно построена, но содержит недопустимый XML-элемент, это может создать трудноидентифицируемые проблемы в другом месте. Например, в процессе обработки ответа на запрос GetFeature, если XML не соответствует схеме, MapInfo Professional может создать пустую таблицу, не показывая при этом ошибку.
MapInfo Professional:
• не обрабатывает директиву xsd:include. Все типы элемента должны быть определены в схеме, возвращенной в ответ на запрос DescribeFeatureType или порожденными из основных типов GML.
• MapInfo Professional поддерживает все фильтры строк, которые сервер объявляет в ответе GetCapabilities со следующими ограничениями:
• Фильтры являются OGC-определёнными фильтрами, как определено в спецификациях OGC WFS или OGC Filter Encoding Implementation.
• Фильтр берет аргумент 0 или 1 вне названия столбца. Это ограничение интерфейса пользователя. Интерфейс MapInfo Professional в настоящее время не таков, чтобы обращаться к таким фильтрам. Это включает фильтр "A Between", который требует 2 значения.