Страница 1 из 1
Область по углам карты
Добавлено: 04 апр 2009, 21:22
VAD
Здравствуйте!!! Столкнулся с проблемой, подскажите если можете. Суть такова...
Имеется область (обычный прямоугольник) и необходимо поместить ее в окно карты
по значениям:
x_min = ObjectGeography(objcopy, OBJ_GEO_MINX)
y_min = ObjectGeography(objcopy, OBJ_GEO_MINY)
x_max = ObjectGeography(objcopy, OBJ_GEO_MAXX)
y_max = ObjectGeography(objcopy, OBJ_GEO_MAXY)
То есть по углам, правый верхний и левый нижний.
если область поворачивается, то соответственно необходимо менять размер карты (масштаб заданный!)
Может и не менять масштаб, а просто вписать по углам.
Перерыл все руководство и справочник, но ничего...
Пробовал через MapperInfo() (MAPPER_INFO_MINX и т.п), не получилось.
Re: Область по углам карты
Добавлено: 05 апр 2009, 11:16
Boris
Из описания задача не ясна совершенно. И прямоугольник и окно карты. Напишите полную задачу.
И особенно не понятно, как именно вращается прямоугольник или для чего?
Re: Область по углам карты
Добавлено: 05 апр 2009, 14:11
VAD
Суть такова имеется полоса, состоящая из множества снимков. Снимки обводятся областями (прямоугольниками). То есть каждая область по контуру повторяет каждый снимок. Полоса изгибается, соответственно меняется положение снимков (соответственно и областей) на экране. Нужно вписать снимок (область) в окно карты. Сначала один, потом второй, третий и т.д. Соответственно надо, чтобы окно карты подстраивалось под конкретную область
У меня мысли такие. Есть функция ObjectGeography(), которая определяет минимальные и максимальные координаты прямоугольного покрытия выбранной области
x_min = ObjectGeography(objcopy, OBJ_GEO_MINX)
y_min = ObjectGeography(objcopy, OBJ_GEO_MINY)
x_max = ObjectGeography(objcopy, OBJ_GEO_MAXX)
y_max = ObjectGeography(objcopy, OBJ_GEO_MAXY)
И полученные значения, я хотел использовать вместо значений функции MapperInfo() которая определяет минимальную и максимальную координату карты, показанного в окне
min_x = MapperInfo(map_win_id,MAPPER_INFO_MINX)
min_y = MapperInfo(map_win_id,MAPPER_INFO_MINY)
max_x = MapperInfo(map_win_id,MAPPER_INFO_MAXX)
max_y = MapperInfo(map_win_id,MAPPER_INFO_MAXY)
Из этого ничего не вышло.... Надеюсь, что объяснил подробно. Спасибо))
Re: Область по углам карты
Добавлено: 06 апр 2009, 00:42
Boris
Я все равно не понял степень автоматизации ваших задач. Какое именно условие включает именно этот переход. Если вам необходимо это автоматизировать, то скажите до какой степени. Потому как руками это делается 1 движением мышки и двумя нажатиями клавиш:
А) Создаем окно с картой и полосой снимков
Б) Открываем окно Таблица ( Browse) с таблицей контуров снимков
Теперь:
1. выделяем в таблице нужный снимок
2. Нажимаем две комбинации клавиш - Ctrl+A (найти во всех окнах) + Ctrl+W (Снять выделение)
--
Все - ваш снимок максимально расположен на экране.
Re: Область по углам карты
Добавлено: 06 апр 2009, 00:46
Boris
Да, забыл добавить - раз это работает по нажатию клавиш - значит это стандартные (ну по крайней мере начиная с некоторой версии) команды. Их текст можно увидеть в списке команд меню - файле MAPINFOW.MNU. Это "чистые" команды на MB:
Код: Выделить всё
'** Find Selection submenu ****************************************************
Create Menu "Fin&d Selection" As
"In Current &Map Window\tCtrl+G/W^G"
HelpMsg "Select an item/row and find the selection in the front map window."
calling 312,
"In All &Windows\tCtrl+A/W^A"
HelpMsg "Select an item/row and find the selection in all windows."
calling 306
Re: Область по углам карты
Добавлено: 07 апр 2009, 20:47
VAD
Видимо все таки плохо объяснил)))
Необходимо вписать область в окно карты, целиком и без лишнего места
Re: Область по углам карты
Добавлено: 08 апр 2009, 09:37
Boris
Если вообще ничего не вышло, то самый возможный вариант - таблица, окно и ВНУТРЕННЯЯ система координат MapInfo - разные. По умолчанию MI держит и вычисляет внутренние данные в проекции 1,0 - WGS84 градусы-минуты.
Для того, что бы явно ее сменить используется команда
Set CoordSys...
----
Если вам не жалко терять текущее выделение, или наоборот, вам нужно, что бы команда работала именно с выделенным объектом (объектами), то самое простое - использовать команды, которые я указал выше. Вот последовательность действий:
1. выделяем объект
2. переходим в окно, в котором надо его верно отобразить
3. выполняем команду: Ctrl+G
Код: Выделить всё
Run Menu M_QUERY_FIND_SELECTION_CURRENT_MAP
M_QUERY_FIND_SELECTION_CURRENT_MAP = 312
4. если необходимо - снимаем выделение Ctrl+W
M_QUERY_UNSELECT=304
------
Небольшие границы - всегда остаются, MI не точно вычисляет границы экрана ил скорее всего плохо вычисляет ширину полос прокрутки.
------
Функция MapperInfo - не устанавливает границ окна. Окно устанавливается двумя командами:
1.
Код: Выделить всё
Set Window window_id
[ Position ( x, y ) [ Units paper_units ] ]
[ Width win_width [ Units paper_units ] ]
[ Height win_height [ Units paper_units ] ]
- устанавливаются границы и размер ЛЮБОГО окна в единицах монитора
2.
Код: Выделить всё
Set Map
[ Window window_id ]
[ Center ( longitude, latitude ) [ Smart Redraw ] ]
[ Clipping { Object clipper | Off | On } | Using
[Display { All | PolyObj } | Overlay ] } ]]
[ Zoom { zoom_distance [ Units dist_unit ] |
Entire [ Layer layer_id ] } ]
- Устанавливает центр окна и его ширину в единицах проекта. Внешние границы окна - при этом НЕ меняются. Только происходит центрирование и задание масштаба.