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