Страница 1 из 1

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

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

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

Добавлено: 25 апр 2012, 06:25
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)
...
ну и так далее

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

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

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

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

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

Добавлено: 25 апр 2012, 18:01
Константин Силкин
Спасибо, SergS и Дмитрий!
Всё получилось!

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

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

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

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

SergS писал

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

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

Что у Вас?

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 27 апр 2012, 05:39
SergS
даже интересно стало.
можете таблицу сбросить? (или любой ее фрагмент)

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

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

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

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

P.S. При экспорте таблицы в csv-файл у иксов впереди восьмёрки

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

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

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

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

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

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