Область по углам карты

MapInfo, MapBasic
Ответить
VAD
Новоприбывший
Сообщения: 6
Зарегистрирован: 01 мар 2009, 17:44
Репутация: 0

Область по углам карты

Сообщение VAD » 04 апр 2009, 21:22

Здравствуйте!!! Столкнулся с проблемой, подскажите если можете. Суть такова...
Имеется область (обычный прямоугольник) и необходимо поместить ее в окно карты
по значениям:
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 и т.п), не получилось.

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: Область по углам карты

Сообщение Boris » 05 апр 2009, 11:16

Из описания задача не ясна совершенно. И прямоугольник и окно карты. Напишите полную задачу.
И особенно не понятно, как именно вращается прямоугольник или для чего?

VAD
Новоприбывший
Сообщения: 6
Зарегистрирован: 01 мар 2009, 17:44
Репутация: 0

Re: Область по углам карты

Сообщение VAD » 05 апр 2009, 14:11

Суть такова имеется полоса, состоящая из множества снимков. Снимки обводятся областями (прямоугольниками). То есть каждая область по контуру повторяет каждый снимок. Полоса изгибается, соответственно меняется положение снимков (соответственно и областей) на экране. Нужно вписать снимок (область) в окно карты. Сначала один, потом второй, третий и т.д. Соответственно надо, чтобы окно карты подстраивалось под конкретную область

У меня мысли такие. Есть функция 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)

Из этого ничего не вышло.... Надеюсь, что объяснил подробно. Спасибо))

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: Область по углам карты

Сообщение Boris » 06 апр 2009, 00:42

Я все равно не понял степень автоматизации ваших задач. Какое именно условие включает именно этот переход. Если вам необходимо это автоматизировать, то скажите до какой степени. Потому как руками это делается 1 движением мышки и двумя нажатиями клавиш:
А) Создаем окно с картой и полосой снимков
Б) Открываем окно Таблица ( Browse) с таблицей контуров снимков
Теперь:
1. выделяем в таблице нужный снимок
2. Нажимаем две комбинации клавиш - Ctrl+A (найти во всех окнах) + Ctrl+W (Снять выделение)
--
Все - ваш снимок максимально расположен на экране.

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: Область по углам карты

Сообщение Boris » 06 апр 2009, 00:46

Да, забыл добавить - раз это работает по нажатию клавиш - значит это стандартные (ну по крайней мере начиная с некоторой версии) команды. Их текст можно увидеть в списке команд меню - файле 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


VAD
Новоприбывший
Сообщения: 6
Зарегистрирован: 01 мар 2009, 17:44
Репутация: 0

Re: Область по углам карты

Сообщение VAD » 07 апр 2009, 20:47

Видимо все таки плохо объяснил)))
Необходимо вписать область в окно карты, целиком и без лишнего места

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: Область по углам карты

Сообщение Boris » 08 апр 2009, 09:37

Если вообще ничего не вышло, то самый возможный вариант - таблица, окно и ВНУТРЕННЯЯ система координат 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

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

Run Menu M_QUERY_UNSELECT
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 ] } ] 
- Устанавливает центр окна и его ширину в единицах проекта. Внешние границы окна - при этом НЕ меняются. Только происходит центрирование и задание масштаба.

Ответить

Вернуться в «MapInfo»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя