Определить предельные координаты полигона

MapInfo, MapBasic
Ответить
Константин Силкин
Завсегдатай
Сообщения: 447
Зарегистрирован: 21 мар 2012, 07:37
Репутация: 67
Откуда: Воронеж

Определить предельные координаты полигона

Сообщение Константин Силкин » 24 апр 2012, 22:24

Привет всем!
Требуется определить минимальное и максимальное значение координат узлов всех полигонов (в слое или выборке) так, чтобы для каждого полигона была известна эта информация индивидуально. В идеале требуется утилита, которая создаёт в таблице 4 поля (Xmin, Ymin, Xmax, Ymax), в которые вписывает соответствующие значения для каждого объекта. Никто не встречал ничего такого из уже готового?
Заранее благодарен!

SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: Определить предельные координаты полигона

Сообщение SergS » 25 апр 2012, 06:25

зачем чего-то готовое?

если для выборки:

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

set coordsys table selection
select ID, Objectgeography(obj, 1) "MinX", Objectgeography(obj, 2) "MinY", Objectgeography(obj, 3) "MaxX", Objectgeography(obj, 4) "MaxY" from selection into Выборка_с_MBR noselect
Browse * from Выборка_с_MBR
Вместо id - реальный набор имен полей

Если не для выборки, то вместо selection - имя таблицы

Если нужно постоянно хранить такие значения (не представляю зачем - если объект изменится - нужно будет обновлять дополнительно), то добавить в таблицу колонки, например: MinX float
и ...
set coordsys table Таблица
Update Таблица set MinX=Objectgeography(obj, 1)
Update Таблица set MinY=Objectgeography(obj, 2)
...
ну и так далее

Константин Силкин
Завсегдатай
Сообщения: 447
Зарегистрирован: 21 мар 2012, 07:37
Репутация: 67
Откуда: Воронеж

Re: Определить предельные координаты полигона

Сообщение Константин Силкин » 25 апр 2012, 17:41

Привет, SergS!
Спасибо за быстрый ответ. Можно только пояснить что значит "реальный набор имен полей"?

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: Определить предельные координаты полигона

Сообщение dab » 25 апр 2012, 17:53

Выборка данных под названием Selection содержит поля из таблицы, по которой осуществлялась выборка.
В примере SergS запрос включает поле ID, а поле с таким названием может быть, а может и нет в Вашей таблице.
Поэтому, соответственно, в запросе указывайте поля именно Вашей таблицы, то есть "реальный набор имен полей", а не не только ID как в примере.

Константин Силкин
Завсегдатай
Сообщения: 447
Зарегистрирован: 21 мар 2012, 07:37
Репутация: 67
Откуда: Воронеж

Re: Определить предельные координаты полигона

Сообщение Константин Силкин » 25 апр 2012, 18:01

Спасибо, SergS и Дмитрий!
Всё получилось!

Константин Силкин
Завсегдатай
Сообщения: 447
Зарегистрирован: 21 мар 2012, 07:37
Репутация: 67
Откуда: Воронеж

Re: Определить предельные координаты полигона

Сообщение Константин Силкин » 25 апр 2012, 18:43

Рано обрадовался…
Работать-то оно работает, но что выдаёт? Значения отличаются на несколько десятков километров. На картинке видно, что координаты, определённые с помощью запроса в выделенной строке явно не совпадают со сведениями, которые выдаёт MapInfo, когда показывает свойства выделенного объекта. В какой системе координат они вообще были выданы?
Изображение

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: Определить предельные координаты полигона

Сообщение dab » 25 апр 2012, 21:50

Если это Пермь, логично, что окно "Region Object" выдает в 10 зоне Пулково 1942.
То есть в системе координат(СК) карты. Проверить можно "Меню" / "Карта" / "Режимы" / "Проекция"

SergS писал

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

set coordsys table selection
Этой строкой устанавливается СК Selection, что соответствует СК таблицы. Проще всего проверить СК таблицы можно "Меню" / "Файл" / "Сохранить копию" / [указываете таблицу] / "Новое имя" / "Проекция"
По логике там тоже должна быть Гауса-Крюгера (Пулково 1942) зона 10

Что у Вас?

Константин Силкин
Завсегдатай
Сообщения: 447
Зарегистрирован: 21 мар 2012, 07:37
Репутация: 67
Откуда: Воронеж

Re: Определить предельные координаты полигона

Сообщение Константин Силкин » 25 апр 2012, 22:58

СК таблицы и окна карты именно эта, т.е. 10 зона Гаусса-Крюгера. Однако результат запроса вывел объекты в 8-ю зону. Это я ещё могу легко скомпенсировать. Но, если не обращать внимание на этот фокус, то остаётся непонятным сдвиг X и Y на несколько десятков километров относительно истинного положения. Пробовал кстати менять СК на "Широта/Долгота" — эффект тот же. Отсюда понял, что результат запроса выдаётся в какой-то особенной СК, не связанной с СК таблицы

SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: Определить предельные координаты полигона

Сообщение SergS » 26 апр 2012, 05:23

Константин Силкин писал(а):Отсюда понял, что результат запроса выдаётся в какой-то особенной СК, не связанной с СК таблицы
все таки проверьте СК карты. Информация об объекте выдается в СК окна карты. Можно попробовать получить значения МБР в этой системе. Для этого - сделать карту активной, переключиться на окно mapbasic, выполнить команду
set coordsys window frontwindow()
ну а потом все по прежнему

PS: проверил весь алгоритм, все работает, так что проверьте вот это утверждение :
Константин Силкин писал(а):СК таблицы и окна карты именно эта, т.е. 10 зона Гаусса-Крюгера
чтобы исключить накладки (типа, ошибочно сделать set coordsys для выборки, которая к делу отношения не имеет), вместо

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

set coordsys  table selection
выполнить так:

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

set coordsys  table settlement
(я так понимаю - именно settlement является у вас жертвой изысканий)

Константин Силкин
Завсегдатай
Сообщения: 447
Зарегистрирован: 21 мар 2012, 07:37
Репутация: 67
Откуда: Воронеж

Re: Определить предельные координаты полигона

Сообщение Константин Силкин » 26 апр 2012, 22:39

СК уточнил. Однозначно 10 зона.
Поменял в запросе secelction на имя таблицы.
Результат ровно прежний. Т.е. неправильный

SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: Определить предельные координаты полигона

Сообщение SergS » 27 апр 2012, 05:39

даже интересно стало.
можете таблицу сбросить? (или любой ее фрагмент)

PS: менять то стоило не в запросе, а в предложении set coordsys...

Константин Силкин
Завсегдатай
Сообщения: 447
Зарегистрирован: 21 мар 2012, 07:37
Репутация: 67
Откуда: Воронеж

Re: Определить предельные координаты полигона

Сообщение Константин Силкин » 27 апр 2012, 15:38

SergS писал(а): менять то стоило не в запросе, а в предложении set coordsys...
Поменял в обоих местах для надёжности.
Таблицу прилагаю.

Временами, признаюсь, мне кажется, что у меня видения. Полистаю таблицу и вижу десятки в начале иксов. А потом вдруг возвращаются восьмёрки. Пару раз замечал. Во второй даже лицезрел целую минуту эту десятку в первой строке, а щёлкнул мышкой по строке и десятка превратилась в восьмёрку… Похоже, что MapInfo надо мной издевается.

P.S. При экспорте таблицы в csv-файл у иксов впереди восьмёрки
Вложения
settlement-polygon_GK10.rar
Архив с таблицей MapInfo
(1.12 МБ) 260 скачиваний

SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: Определить предельные координаты полигона

Сообщение SergS » 28 апр 2012, 05:14

Каюсь, не смог воспроизвести описанную вами ситуацию. прогнал весь алгоритм на вашей таблице - результат вот:
Безимени-1.jpg
Безимени-1.jpg (193.23 КБ) 10015 просмотров

Константин Силкин
Завсегдатай
Сообщения: 447
Зарегистрирован: 21 мар 2012, 07:37
Репутация: 67
Откуда: Воронеж

Re: Определить предельные координаты полигона

Сообщение Константин Силкин » 01 май 2012, 14:18

Спасибо за участие, SergS!
Я уже понял, что это MapInfo шутки шутит так. Если серьёзно, то вероятно как-то влияют другие неучтённые настройки. А может версия MapInfo имеет значение. У вас я вижу, более ранняя, чем у меня (11). Но, раз уж вы всё равно получили этот результат, не могли бы вы прислать его в любом виде (кроме таблицы MapInfo).
Заранее благодарен, с праздником вас!

Константин Силкин
Завсегдатай
Сообщения: 447
Зарегистрирован: 21 мар 2012, 07:37
Репутация: 67
Откуда: Воронеж

Re: Определить предельные координаты полигона

Сообщение Константин Силкин » 05 май 2012, 08:22

Спасибо всем, кто мне помогал! Задачу решил путём построчного перебора таблицы и вывода результатов в текстовый файл

Ответить

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

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

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