вторник, 12 ноября 2013 г.

Экзотический рецепт использования Mapinfo.


В стародавние времена, когда стала проблескивать перспектива публикации геоданных в на просторах интернет, появилась задача быстренько смастерить прототип некой интернет страницы, на которой можно увидеть фрагмент карты Mapino, подготовленный на основании некоего семантического запроса...
На тот момент я еще только начинал осваивать Mapinfo, а в каком состоянии был MapXtreme сейчас я уже не припомню. В любом случае, времени на освоение новых технологий не было.
Итак, начнем с условия задачи.
Дано: некоторое количество однотипных рабочих наборов. семантическая БД с объектами, имеющими свое представление в одном из рабочих наборов. семантический объект, в зависимости от своего типа, располагается в определенной таблице рабочего набора.
Требуется: на некой web-странице, предоставить возможность выбора критериев поиска объекта и показать фрагмент соответствующего рабочего набора, с выделенным объектом, найденным в результате выполнения параметризованного поиска.
Исходя из имеющихся знаний и умений, мы с коллегой сошлись на "простом", в теоретическом плане, решении и организовали сервер приложений, который отвечал на запросы пользователей и взаимодействовал с MapInfo через COM-интерфейс.
Схема взаимодействия получилась такой:
Моя задача состояла в реализации взаимодействия с Mapinfo.
Основной проблемой явились однотипные рабочие наборы, а именно: невозможно открыть в Mapinfo две таблицы с одинаковым псевдонимом (alias).
Есть ли у Вас план, мистер Фикс?
Вот чем мне нравится разработка, так это то, что нет "правильных" и "неправильных" решений. Есть "работающие" или "не работающие" решения. Задачи можно решать разными способами, а это есть творчество, приносящее чувство глубокого удовлетворения. :-)
Придумалось оригинальное решение: каждый новый рабочий набор парсить и исправлять перед открытием в Mapinfo с целью присвоения всем таблицам рабочего набора уникальных псевдонимов. После этого, открывать рабочий набор и регистрировать информацию о нем, его открытых окнах и таблицах в специальных служебных таблицах. Все эти телодвижения нужны для того, чтобы знать в какой из таблиц производить поиск, какое из окон масштабировать по найденному объекту. Кроме этого, регистрация рабочего набора делается с целью предотвращения повторных открытий одного и того же файла.
После того как рабочий набор открыт, остаются сущие пустяки: найти объект по Идентификатору в нужной таблице нужного рабочего набора, масштабировать окно рабочего набора по найденному объекту и сохранить окно в графический файл.

В общем, оно заработало!!!
Честно скажу, что нет информации о тестировании под нагрузкой, но суть не в этом.
Сам процесс увлекает!

Комментариев нет: