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

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

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

Сообщение Константин Силкин »

Привет всем!
Требуется определить минимальное и максимальное значение координат узлов всех полигонов (в слое или выборке) так, чтобы для каждого полигона была известна эта информация индивидуально. В идеале требуется утилита, которая создаёт в таблице 4 поля (Xmin, Ymin, Xmax, Ymax), в которые вписывает соответствующие значения для каждого объекта. Никто не встречал ничего такого из уже готового?
Заранее благодарен!
SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

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

Сообщение SergS »

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

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

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

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: Определить предельные координаты полигона

Сообщение Константин Силкин »

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

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

Сообщение dab »

Выборка данных под названием Selection содержит поля из таблицы, по которой осуществлялась выборка.
В примере SergS запрос включает поле ID, а поле с таким названием может быть, а может и нет в Вашей таблице.
Поэтому, соответственно, в запросе указывайте поля именно Вашей таблицы, то есть "реальный набор имен полей", а не не только ID как в примере.
Константин Силкин
Завсегдатай
Сообщения: 447
Зарегистрирован: 21 мар 2012, 07:37
Репутация: 67
Откуда: Воронеж

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

Сообщение Константин Силкин »

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

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

Сообщение Константин Силкин »

Рано обрадовался…
Работать-то оно работает, но что выдаёт? Значения отличаются на несколько десятков километров. На картинке видно, что координаты, определённые с помощью запроса в выделенной строке явно не совпадают со сведениями, которые выдаёт MapInfo, когда показывает свойства выделенного объекта. В какой системе координат они вообще были выданы?
Изображение
Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

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

Сообщение dab »

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

SergS писал

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

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

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

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

Сообщение Константин Силкин »

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

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

Сообщение SergS »

Константин Силкин писал(а):Отсюда понял, что результат запроса выдаётся в какой-то особенной СК, не связанной с СК таблицы
все таки проверьте СК карты. Информация об объекте выдается в СК окна карты. Можно попробовать получить значения МБР в этой системе. Для этого - сделать карту активной, переключиться на окно 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: Определить предельные координаты полигона

Сообщение Константин Силкин »

СК уточнил. Однозначно 10 зона.
Поменял в запросе secelction на имя таблицы.
Результат ровно прежний. Т.е. неправильный
SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

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

Сообщение SergS »

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

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

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

Сообщение Константин Силкин »

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

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

P.S. При экспорте таблицы в csv-файл у иксов впереди восьмёрки
Вложения
settlement-polygon_GK10.rar
Архив с таблицей MapInfo
(1.12 МБ) 260 скачиваний
SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

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

Сообщение SergS »

Каюсь, не смог воспроизвести описанную вами ситуацию. прогнал весь алгоритм на вашей таблице - результат вот:
Безимени-1.jpg
Безимени-1.jpg (193.23 КБ) 10024 просмотра
Константин Силкин
Завсегдатай
Сообщения: 447
Зарегистрирован: 21 мар 2012, 07:37
Репутация: 67
Откуда: Воронеж

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

Сообщение Константин Силкин »

Спасибо за участие, SergS!
Я уже понял, что это MapInfo шутки шутит так. Если серьёзно, то вероятно как-то влияют другие неучтённые настройки. А может версия MapInfo имеет значение. У вас я вижу, более ранняя, чем у меня (11). Но, раз уж вы всё равно получили этот результат, не могли бы вы прислать его в любом виде (кроме таблицы MapInfo).
Заранее благодарен, с праздником вас!
Константин Силкин
Завсегдатай
Сообщения: 447
Зарегистрирован: 21 мар 2012, 07:37
Репутация: 67
Откуда: Воронеж

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

Сообщение Константин Силкин »

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

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

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

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