Это было давно, кажется в начале 90-х. Простая до безобразия, еще DOS игра, зацепила сознание, заставила думать, разрабатывать новые идеи. А что, если добавить реальные сантехнические устройства, добавить параметры нагрузки (разбор воды), устроить несколько этажей, разделить водопровод и канализацию, сделать не просто подсчет очков, но и дать возможность пользователю «играть», прокручивая модель, изменяя потоки, регулировать задвижки? Увлекательно, инженерно, программируемо.
До реализации собственной версии игры увы не дошло, однако концепция врезалась в память навсегда. С тех пор вышло огромное количество версий самой игры (Pipes, Pipemania, Plumber2). И однажды, году так в 1997 я увидел эту же концепцию в профессиональном продукте - ГИС GeoMedia, и совершенно неудивительно, что имя этому чудо-механизму было Pipe.
| современная версия Поиграть! :-)
|
Пайп, Pipe (употребляем оба варианта)
ABBYY Lingvo11 сообщает:
Pipe
а) труба, трубопровод
| Пайп - это уникальная часть концепции GeoMedia, которая представляет из себя программно реализуемый протокол, позволяющий компонентам ПО (в данном случае это ГИС GeoMedia и все продукты на ее основе) обмениваться любыми данными по общему каналу, и на выходе получать определенный набор данных (Recordset).
Таким образом, вся ГИС логика приложения использует реляционные понятия для представления географических или физических сущностей. Фактически вы работаете с таблицами оперируя сугубо реляционными понятиями:
Например:
Продукты семейства GeoMedia включают в себя множество видов программных компонент пайп-сервисов, создающих и/или обрабатывающих данные.
Лексикон: | | Пайп | | Пайп-сервис | | Рекордсет |
Что же представляют из себя пайпы? Пайпы представляют из себя механизм, благодаря которому реляционные таблицы с данными в GeoMedia могут многократно обрабатываться и структурно изменяться отдельными специальными компонентами ПО. Пайпы потребляют один (или более) входной набор данных и на выходе продуцируют один (или более) выходной набор данных. При этом результирующий набор данных пайпа может иметь больше (меньше) строк, больше (меньше) полей по сравнению с входящей матрицей данных (Recordset). Результирующий набор данных, в свою очередь, может подаваться на другой пайп, который обычно также трансформирует его, изменив данные и часто также количество строк и полей.

Пайпы используют РекордсетыОсновным интерфейсом универсального доступа к данным (GDO) во всех продуктах семейства GeoMedia является GRecordset и его подчиненные объекты (GFields, GField). GRecordset- географический Рекордсет, фактически это SQL выборка табличных данных. В отличие от простого SQL, в ГИС наборы данных могут наполняться не только реляционными, но и географическими запросами.
Это очень похоже на широкоизвестный стандарт ODBC, нивелирующий физические различия разных СУБД или даже текстовых данных и позволяющий с ними работать единообразно. Использование интерфейса GRecordset позволяет пользователям GeoMedia игнорировать физические структуры данных первоисточников. В качестве первоисточника могут быть: популярные ГИС-форматы, CAD файлы, реляционные базы данных, Excel-электронные таблицы. Программный компонент (Пайп), использующий GRecordset, вообще не знает о физической сущности данных, которыми манипулирует. Это позволяет программистам, работающих с GeoMedia, писать единый (стандартизированный) набор кода данных, который может работать с разными данными без необходимости их конвертации.
Программные компоненты использующие Рекордсеты (пайпы всегда генерируют Рекордсеты) используют все преимущества такого абстрагирования. Любые данные, полученные через интерфейс Рекордсетов, могут использоваться и переправляться через пайпы и другие объекты GeoMedia. Можно и самому создать собственный пайп, который например, принял бы какой-то определенный массив данных, и преобразовал его в Recordset. Этот полученный Recordset может быть в дальнейшем просмотрен и отредактирован, передан в другой пайп, визуализирован на карте и т.д.
Пайп-сервисПайп-сервис – это программная компонента, которая принимает один (или несколько) Рекордсет на вход, и создающая один (или более) Рекордсет на выходе. Также содержит автоматизированный интерфейс по установке и изменению критериев пайп-сервисов. Довольно часто термин «пайп-сервис» применяется просто как «пайп».
Пример: BufferZonePipe- классический геоинформационный компонент построения буферных зон реализован в GeoMedia в виде пайп-сервиса. Принимает на вход рекордсет (т.е. любой набор геопространственных данных), возвращает на выходе тоже рекордсет- результирующий, содержащий буферные обьъекты. Для управления требует подачу на вход параметра- ширины буферной зоны, единицы измерения ширины. Обладает логикой построения на выбор: буферных зон с закруглениями (на основе радиусов) или прямоугольных буферных зон.
 
Связывание пайповПайпы могут располагаться последовательно в виде цепочки для решения довольно сложной задачи, при этом будет происходить постоянная манипуляция с массивами данных, и после прохождения каждого пайпа структура представления данных будет изменяться. Пайпы могут быть соединены так, чтобы результирующий рекордсет одного пайпа, в свою очередь, был входящим рекордсетом для следующего пайпа. Именно в этом проявляется реальное преимущество архитектуры пайпинга. Вместо создания сложных алгоритмов, с помощью которых происходит анализ данных, создаются простые разнофункциональные узлы, которые для решения сложных задач просто выстраиваются последовательно цепочкой.

Например: Уже рассмотренный ранее механизм построения буферных зон в пользовательском интерфейсе самой программы Geomedia реализован следующим способом (см. рис. 3). Кроме уже знакомых нам параметров собственно BufferZonePipe, внизу диалога существует также опция Merge touching buffer zones - Слить касающиеся буферные зоны. Выполнение данной операции основано на следующем в цепочке пайпе- MergePipe.

т.е. фактически, для реализации данной команды для пользователя, за кулисами диалогового окна лежит процесс создания цепочки пайпов:

Когда-то, в ранних версиях Geomedia операция построения буфера выполнялись одним пайпом, однако со временем разработчики разделили эти функции на два независимых пайпа.
Ведь пользователю программы все равно не видно, что в действительности происходит связывание двух пайпов, зато программисту, пишушему программы с использованием объектов Geomedia, гораздо вероятнее пригодится та или иная функциональность в отдельных пайпах. Слиянию ведь часто подвергаются не только буферизированные объекты.
Пайпы GeoMedia 6.0Хотя конечный пользователь GeoMedia и не видит пайпов, но они являются фундаментом многих командных процессов. Как разработчик под GeoMedia, вы будете использовать пайпы в ваших пользовательских командах. Ниже можно увидеть классификацию пайп-компонент, использующихся в GeoMedia 6.0. | AddressGeocodePipe | принимает на вход адрес и выдает на выход рекорсет с широтой/долготой адреса | AggregationPipe
| аггрегирует функциональные атрибуты из входного рекордсета в фичера входного рекордсета | | AttributeFilterPipe | отбирает подмножество данных из первичного рекордсета. Принимает SQL where-фразу которая определяет параметры отбора | BufferPipe
| создает рекордсет содержащий геометрию в виде буфера относительно первоначальной геометрии | | CenterPointPipe | создает рекордсет с доп.геоеметрическим полем. Это поле содержит точечную геометрию вычисленного центра | ConflictDetectionPipe
| принимает на вход рекордсет для которого просчитываются конфликты. На выходе выдает рекордсет с булевым полем, в котором указывается есть или нет конфликт для данной геометрии в записи. Конфликты вычисляются с помощью пространственного оператора Touch. Пайп используется, например для разрешения конфликтов в множестве подписей сегментов улиц (исключает наложение) | | CoordGeocodePipe | создает рекордсет с точечной геометрией на основе полей с данными о широте и долготе (или X/Y) с учетом координатной системы источника | CSSTransformPipe
| трансформирует из одной координатной системы в другую | | CustomDataPipe | создает блок в памяти, наполняемя непрямую из стандартных рекордсетов или нестандартных источников данных. Для программистов | CustomFieldsPipe
| расширяет первичный рекордсет дополнительно определяемыми полями | | CustomFilterPipe | фильтрует первичный рекордсет с помощью нестандартной (программируемой) логики. Для программистов | EquijoinPipe
| создает рекордсет как продукт объединения (SQL join). Результирующий рекордсет содержит все поля обоих первичных. | | FunctionalAttributesPipe | создает новый рекордсет расширенный вычислеными функциональными атрибутами | GraphicsTextPipe
| создает текстовую геометрию на базе точечной и атрибутов полей, статического текста или их комбинаций. Используется для создания Label фичеров | | MergePipe | создает рекордсет, в котором каждый фичер есть продукт слияния одного или более исходных | MovePipe
| создает рекордсет с доп. геометричесим полем.Это поле содержит геометрию сдвинутую отностительно первоначальной на указанное расстояние | | OriginatingPipe | создает первичный рекордсет на основе имени таблицы, атрибутивного или пространственного фильтра, пространственного оператора. При создании цепочки пайпов является стартовым и обеспечивает динамику цепочки, расширенные метаданные | SchemaprojectionPipe
| создает рекордсет с уменьшенным количеством полей или переопределенным их порядком относительно первичного | | SortPipe | используется в табличных видах для сортировки по убыванию или возрастани. Поддерживает сортировку по множественному ключу | SpatialDifferencePipe
| вычитает (геометрически вырезает) из геометрии первичного рекордсета геометрию рекордсета-маски | | SpatialFilterPipe | создает рекорсет с уменьшенным количеством строк, выполняя пространсвенно сравнение первичного рекордсета с геометрией фильтра | SpatialIntersectionPipe
| находит пространственное пересечение двух рекордсетов | | SpatialSubsetPipe | принимает два рекордсета и выдает пространственную реляцию | TopoGeometryPipe
| создает топологические сущности для входного рекордсета | | UnionPipe | соединяет входные рекордсеты | valueListFilterPipe
| фильтрует рекордсет на основе списка имен полей |
Что позволяют делать пайпы?Исторически ГИС-данные долгие годы формировались внутри продуктовых линеек компаний призводителей. Данные от различных вендоров или даже из различных приложений одних и тех же производителей нуждались в реимпортных процессах для преодоления различий в физическом и логическом моделировании. С 1996 года универсальный доступ к данным GDO во всех продуктах линейки GeoMedia позволяет разработчикам и пользователям рассматривать все ГИС-данные по одному унифицированному сценарию. Опираясь на GDO интерфейс и разнообразие ГИС-данных, к которым разработчики имеют доступ, пайпы обеспечивают технологию управления этими данными. Пайпы предоставляют возможность пользователям анализировать данные, легко преодолевая границы конкретных источников, не заботясь об их природе, и сосредоточившись на выполнении функциональной задачи.
Итеративный (многократный) анализЦепочки пайпов превосходно поддерживают итеративный анализ, позволяющий пользователю использовать результаты одного запроса в качестве входящего к следующему. Это позволяет пользователю успешно уточнять и повышать качество результирующих данных как ответ на комплексные вопросы. Например, человек, ищущий дом в Киеве, мог в качестве первого запроса выдать запрос на все продающиеся дома внутри городской черты. Так как полученные результаты получаются слишком громоздкими для анализа, то пользователь может ввести уточнение – искать только те дома, которые содержат две или три комнаты. Первый запрос (все дома для продажи в Киеве) используется в качестве входящего к другому запросу, которые сокращает полученные данные по всем продающимся домам, к только тем, которые имеют две или три комнаты. Полученный набор данных является более управляемым, и возможно после этого пользователь введет третий, более специфический, критерий (например, дома должны быть в 5-км радиусе от школ) для принятия уже окончательного решения о покупке дома.
Итеративный анализ облегчает жизнь пользователям в решении проблем, и позволяет разбить проблему на серию дискретных вопросов, дав ответы на которые можно решить проблему целиком. Итеративный анализ является наиболее пригодным в том случае, когда пользователь определяет следующую часть запроса, базирующегося на результатах предыдущего запроса. Это также полезно, когда часть запроса используется снова и снова. Например, агент по продаже недвижимости может выдвинуть стандартный запрос по всем продающимся домам в городе, и это может повторно использоваться в случае появления нескольких желающих купить себе дом в этом городе.
Динамика в GeomediaИтеративный анализ, описанный выше, является отличным способом получения нужного результата. Это похоже на последовательные правки в документе Word, но вот незадача- от обилия промежуточных вариантов рябит в глазах, и если ваш анализ действительно сложный, то промежуточные результаты-версии должны были бы размножаться в геометрической прогрессии. Но в продуктах Geomedia есть замечательное свойство- динамика. Это решение всех проблем, и это решение полностью основано на механизме пайпов и возможности построения цепочек пайпов. Это работает следующим образом: однажды созданная цепочка хранится в памяти и отражает ВСЕ изменения, которые пользователь может произвести в любом параметре любого пайпа входящего в цепочку. Вы можете сохранить цепочку вашого геоинформационного анализа в БД и использовать повторно как элемент библиотеки. Будучи загруженной в память, цепочка немедленно отражает текущий результат, принимая во внимание все изменения в данных, которые могли произойти с момента ее последнего использования. Фактически, Geomedia не хранит результаты запросов никогда, она их получает в реальном времени, храня лишь правила получения результата (в цепочках пайпов).
Например: для предыдущего примера по поиску дома в Киеве, можно независимо и в любой момент менять параметры количества комнат и удаленности(радиуса) от школы. Т.к. все это увязано в цепочку пайпов, результат будет тут же отображаться в графическом (на карте) или табличном видах.
Сама логика динамики в Geomedia настолько изумительно эффектна, что является непременным атрибутом любого рассказа о Geomedia, семинара или живой демонстрации продукта. Мы ждем всех, кого это заинтересовало- присылайте заявки на прохождение семинара по адресу info@am-gis.com.ua.
Дискретные программные компонентыПайпы важны с точки зрения архитектуры ПО. Разработчикам больше не нужно создавать сложные компоненты анализа. Пайп может быть создан для каждого элемента, требующего анализа. Создав маленькие, более качественно определяемые компоненты, разработчики улучшают стабильность ПО. Также поддерживается намного более гибкое окружение для создания команд для конечного пользователя.
РезюмеПайп является программным компонентом, потребляющим и создающим данные в форме рекордсетов. Пайпы интенсивно используются в архитектуре GeoMedia. Пайпы расширяют серверный интерфейс GDO, обеспечивающий возможность для представления и управления данными. Еще больше возможностей возникает ввиду того, что все продукты семейства GeoMedia поддерживают механизм пайпов.
Впечаталяющим фактом является то, что смоделированная с помощью пайпов логика геоинформационного анализа в настольной ГИС GeoMedia может быть с легкостью использования одной кнопки перенесена в интернет проект с помощью Geomedia WebMap Publisher и может работать в рамках Інтернет приложения или веб-сервиса на основе серверного продукта Geomedia WebMap.
Создание веб-проектов является курсом, который проводит компания Арт-мастер в собственном учебном центре. В рамках курса пользователи учаться использовать различные источники данных, создавать цепочки геоинформационного анализа, публиковать данные в виде Інтернет-сайтов. Если вас заинтересовала эта возможность, обращайтесь с запросом по адресу info@am-gis.com.ua.
|