Страница 1 из 1

Деление карты mapinfo на квадраты

Добавлено: 20 фев 2016, 19:32
ИванПрограммист
Здравствуйте!

Есть огромная карта города на mapinfo. Есть пользователи, каждый из которых (пока что) видит всю карту целиком.

Необходимо сделать так, чтобы каждый пользователь мог видеть только свой "рабочий" фрагмент (квадрат) карты.

Важно сделать это, не нарушая целостности карты (не разрезая ее на отдельные файлы-квадраты).

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

Искал в справке, нашел параметр Clipping для SET MAP (в шапке файла рабочего набора). Не знаю, оно-не оно, руководство пользователя очень немногословно. Поиск в Яндексе/Гугле тоже ничего не дал (может, я пропустил).

Уважаемые спецы, подскажите, пожалуйста, есть ли какой-нибудь способ задать в рабочем наборе, чтобы пользователю показывалась лишь определенная часть карты, и не показывалась вся остальная карта?

Если это нельзя сделать в рабочем наборе, то как еще можно сделать?

Спасибо!

UPD: Пользователи редактируют данные. Рисовать не рисуют, но свойства объектов заполняют.

Re: Деление карты mapinfo на квадраты

Добавлено: 20 фев 2016, 19:55
trir
Ключевой вопрос - редактируют ли эти пользователи эти данные?
А так - раздавать пользователям данные через представления с ограничениями

Re: Деление карты mapinfo на квадраты

Добавлено: 20 фев 2016, 20:10
ИванПрограммист
trir писал(а):Ключевой вопрос - редактируют ли эти пользователи эти данные?
А так - раздавать пользователям данные через представления с ограничениями
Редактируют.

Рисовать не рисуют, но свойства объектов заполняют.

Пожалуйста, расскажите немного подробнее про представления с ограничениями.

Re: Деление карты mapinfo на квадраты

Добавлено: 20 фев 2016, 21:16
trir

Re: Деление карты mapinfo на квадраты

Добавлено: 21 фев 2016, 17:03
Boris
Во-первых, это мапинфо, а вы хотите от нее функционал навороченного ГИС-сервера. Если у вас данные в простых таблицах Mapinfo, а не на сервере, то все ваши потуги будут сметены одним движением руки "продвинутого пользователя".
Что бы реализовать ваши желания, надо еще и отключить часть меню пользователям, т.к. кнопка "Set Map Clipping Object " находится в стандартном наборе.
Дальше вы можете реализовать два подхода или их комбинацию:
1. надо ограничить физический вывод объектов на карту - это следует сделать для каждого (редактируемого?) слоя, выводимого в окно карты. Через SQL запрос "Overlap" или "Intersect";
2. ограничить видимую область через Clipping. Для задания области "Clipping" необходимо указать переменную типа Region. Как то вот так:

Код: Выделить всё

Set CoordSys Earth Projection 1, 0
Dim TempClipObject As Object
Create Region Into Variable TempClipObject  1
  5
(-0.372694,0.819188)
(-0.350554,-1.055351)
(1.837638,-1.04797)
(1.830258,0.782288)
(-0.372694,0.819188)
    Pen (1,2,8388863) 
    Brush (1,0,16777215)
    Center (0.732472,-0.118081)
Set Map Clipping Object TempClipObject
UnDim TempClipObject
В любом случае, решение задачи требует либо "ручного" редактирования всех возможных рабочих наборов, либо создания специальной программы, которая будет заполнять рабочий набор для каждого пользователя.
Не плохо будет закрыть рабочий набор для редактирования, превратив его в read-only для пользователей. Кроме того потребуется:
а) открывать все таблицы, не запросы, с атрибутом Hidden;
б) скрыть практически все меню и кнопки;
поскольку, если пользователь сумеет получить имя основной таблицы, на которой построен запрос, или доступ к инструменту "Clipping" или к возможности открывать новое окно, ил доступ к окну MapBasic, все ваши запреты будут ему даже не видны.

Re: Деление карты mapinfo на квадраты

Добавлено: 24 фев 2016, 11:49
ИванПрограммист
Спасибо! Буду пробовать...

Re: Деление карты mapinfo на квадраты

Добавлено: 24 фев 2016, 13:22
Boris
В завершение темы, да и перебирание архивов, напомнили:
Если у вас много атрибутивных данных или они вам важны, то имеет смысл создать "родную" таблицу Mapinfo, в которой атрибутика хранится в файле MDB (СУБД Access). Создается такая таблица через "сохранить как..." и выбрать MS Access. У это есть плюсы:
1) данные хранятся в настольной СУБД. Это немного повышает надежность хранения и с объемами Access работает лучше. К тому же в случае необходимости можно анализировать атрибутивные или производные(площадь, положение) поля через запросы в Access. Там же и строить выходные отчеты и т.п. гораздо проще;
2) можно выполнять расширенную автоматизацию процесса - формочки, каталоги, классификаторы и т.п.
3) часть данных, которые требуют "голой" атрибутики, и не требуют того, что бы оператор обязательно видел карту, как правило таких 80%, можно заносить через MS Access. Там это на один-два порядка делается и быстрее и проще.
С точки зрения mapInfo такая таблица ничем не отличается от обычных таблиц - она в ней проходит как "Native".