Вывести координаты объекта
-
- Гуру
- Сообщения: 879
- Зарегистрирован: 17 июн 2010, 23:14
- Репутация: 207
- Откуда: Москва
Вывести координаты объекта
Возникла нелепая и непонятная задача. Есть некоторый точечный объект в проекции WGS84. Допустим у него есть координаты (при просмотре с карты) 133.782341 48.584622 (долгота, широта). При этом если я хочу банально вывести выборку, содержащие колонки CentroidY(obj), CentroidX(obj), MapInfo выведет мне координаты, ограниченные 4 знаками, то есть 133.782 и 48.5846. То же самое произойдёт, если я создам колонки и обновлю их выражениями центроидов. Чтобы вывести полные координаты объектов, которые MapInfo туда записывает, мы экспортировали выборку в mif или чаще всего в dbf. Но это долго и неудобно. А есть ли возможность всё-таки заставить MapInfo отображать полные координаты, а не сокращённые ?
Последний раз редактировалось Slinger 21 июн 2013, 23:13, всего редактировалось 3 раза.
- Игорь Белов
- Гуру
- Сообщения: 2240
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1513
- Откуда: Казань
Re: Вывести координаты объекта
Хотите увидеть все шесть знаков после десятичной точки, измените тип колонки на Decimal (xx, 6).
The purpose of computing is insight, not numbers
-
- Гуру
- Сообщения: 879
- Зарегистрирован: 17 июн 2010, 23:14
- Репутация: 207
- Откуда: Москва
Re: Вывести координаты объекта
Но для этого мне придётся создать свои колонки типа Decimal. А могу ли я вывести все знаки через запрос. А-ля запрос - sql запрос и т.д. ?
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Вывести координаты объекта
функция Format$ выдаст вам все цифры какие там есть:
дает результат:
Код: Выделить всё
print centroidx(selection.obj)
print format$(centroidx(selection.obj),"#0.000#############")
Но если вам нужно для целей сравнения, то эти десятые доли в формате Float есть и вы можете сравнивать с любым своим числом не опасаясь, что их нет, раз они не видны.492086.88
492086.87552136887
- Игорь Белов
- Гуру
- Сообщения: 2240
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1513
- Откуда: Казань
Re: Вывести координаты объекта
Если через SQL-запрос, то укажите в качестве выводимых колонок выражения такого вида:
Координаты будут без десятичных точек, но градусы красиво отобьются от дробных частей неразрывными пробелами.
Код: Выделить всё
CentroidX(obj)*1e6, CentroidY(obj)*1e6
The purpose of computing is insight, not numbers
-
- Гуру
- Сообщения: 879
- Зарегистрирован: 17 июн 2010, 23:14
- Репутация: 207
- Откуда: Москва
Re: Вывести координаты объекта
Эх, знал же, что надо смотреть в сторону функции format. Спасибо за помощь!
Вот если бы ещё удалось так же через запрос, а не через применение сторонних утилит, вывести результаты в формате ГМС (сразу с характерными значками отображения градусов, минут и секунд), то это был бы просто подарок. Может кто сталкивался ?
Вот если бы ещё удалось так же через запрос, а не через применение сторонних утилит, вывести результаты в формате ГМС (сразу с характерными значками отображения градусов, минут и секунд), то это был бы просто подарок. Может кто сталкивался ?
-
- Активный участник
- Сообщения: 216
- Зарегистрирован: 21 окт 2009, 13:29
- Репутация: 28
- Откуда: Новосибирск
Re: Вывести координаты объекта
Есть в наборе программ "Пересчет градусов" - позволяет пересчитать градусы минуты секунды в десятичные градусы и обратно. Единственный минус - ставит одинаковый разделитель (т.е. нельзя указать что бы после градусов был знак градуса, а после минут знак минут). Так же есть в стандартном наборе программа "Записать координаты объекта" ( "Извлечь координат" в старых версиях) - позволяет записать координаты объектов в таблицу.
Но я, обычно, отдельно рассчитываю градусы, минуты и секунды, а потом объединяю их в одной колонке с нормальными разделителями.
Но я, обычно, отдельно рассчитываю градусы, минуты и секунды, а потом объединяю их в одной колонке с нормальными разделителями.
- Игорь Белов
- Гуру
- Сообщения: 2240
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1513
- Откуда: Казань
Re: Вывести координаты объекта
Вот Вам подарок:Slinger писал(а):Вот если бы ещё удалось так же через запрос, а не через применение сторонних утилит, вывести результаты в формате ГМС (сразу с характерными значками отображения градусов, минут и секунд), то это был бы просто подарок.
Код: Выделить всё
Int(CentroidX(obj)) + "° " + Int((CentroidX(obj) - Int(CentroidX(obj)))* 60) + "' " + (CentroidX(obj) * 60 - Int(CentroidX(obj) * 60)) * 60 + """", Int(CentroidY(obj)) + "° " + Int((CentroidY(obj) - Int(CentroidY(obj)))* 60) + "' " + (CentroidY(obj) * 60 - Int(CentroidY(obj) * 60)) * 60 + """"
The purpose of computing is insight, not numbers
-
- Гуру
- Сообщения: 879
- Зарегистрирован: 17 июн 2010, 23:14
- Репутация: 207
- Откуда: Москва
Re: Вывести координаты объекта
ErnieBoyd
В очередной раз огромное спасибо!
В очередной раз огромное спасибо!
- Institor
- Активный участник
- Сообщения: 243
- Зарегистрирован: 22 апр 2011, 08:10
- Репутация: 27
- Откуда: Хабаровск
Re: Вывести координаты объекта
Да, сколько лет уже существует mapinfo, а функции отображения градусов как не было, так и нет...
Кстати, подозреваю, что с кавычками в вышеприведенном запросе будут проблемы (сейчас проверить не могу, к сожалению, все на работе лежит).
Кстати, подозреваю, что с кавычками в вышеприведенном запросе будут проблемы (сейчас проверить не могу, к сожалению, все на работе лежит).
-
- Гуру
- Сообщения: 879
- Зарегистрирован: 17 июн 2010, 23:14
- Репутация: 207
- Откуда: Москва
Re: Вывести координаты объекта
Institor
Будут, если их сохранять в .qry. Чтобы не было, нужно подправить .qry и вместо 4-х подряд идущих кавычек поставить 6 штук. Тогда всё будет корректно.
Будут, если их сохранять в .qry. Чтобы не было, нужно подправить .qry и вместо 4-х подряд идущих кавычек поставить 6 штук. Тогда всё будет корректно.
- Игорь Белов
- Гуру
- Сообщения: 2240
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1513
- Откуда: Казань
Re: Вывести координаты объекта
Отличный ответ, Slinger!
Действительно серьёзный недостаток вышеприведённого кода в том, что он не адаптирован для отрицательных значений. Вот содержимое файла .QRY с кодом, пригодным для положительных и отрицательных значений:
Формат вывода совпадает с тем, что MapInfo показывает в окне карты. Очевидно, код можно адаптировать под другие форматы. Вот вариант, выводящий нули в десятках минут и секунд, а также округляющий секунды до 0,1:
Действительно серьёзный недостаток вышеприведённого кода в том, что он не адаптирован для отрицательных значений. Вот содержимое файла .QRY с кодом, пригодным для положительных и отрицательных значений:
Код: Выделить всё
Fields {Sgn(CentroidX(obj)) * Int(Abs(CentroidX(obj))) + "° " + Int((Abs(CentroidX(obj)) - Int(Abs(CentroidX(obj))))* 60) + "' " + (Abs(CentroidX(obj)) * 60 - Int(Abs(CentroidX(obj)) * 60)) * 60 + """""", Sgn(CentroidY(obj)) * Int(Abs(CentroidY(obj))) + "° " + Int((Abs(CentroidY(obj)) - Int(Abs(CentroidY(obj))))* 60) + "' " + (Abs(CentroidY(obj)) * 60 - Int(Abs(CentroidY(obj)) * 60)) * 60 + """"""}
Tables {Table1}
Where {}
Group {}
Order {}
Into {Query1}
Browse
Код: Выделить всё
Fields {Sgn(CentroidX(obj)) * Int(Abs(CentroidX(obj))) + "° " + Right$(Str$(Int((Abs(CentroidX(obj)) - Int(Abs(CentroidX(obj)))) * 60) + 100), 2) + "' " + Mid$(Str$(Round((Abs(CentroidX(obj)) * 60 - Int(Abs(CentroidX(obj)) * 60)) * 60, 0.1) + 100), 2, 4) + """""", Sgn(CentroidY(obj)) * Int(Abs(CentroidY(obj))) + "° " + Right$(Str$(Int((Abs(CentroidY(obj)) - Int(Abs(CentroidY(obj)))) * 60) + 100), 2) + "' " + Mid$(Str$(Round((Abs(CentroidY(obj)) * 60 - Int(Abs(CentroidY(obj)) * 60)) * 60, 0.1) + 100), 2, 4) + """"""}
The purpose of computing is insight, not numbers
-
- Гуру
- Сообщения: 879
- Зарегистрирован: 17 июн 2010, 23:14
- Репутация: 207
- Откуда: Москва
Re: Вывести координаты объекта
Интересный код, спасибо, ушло в коллекцию
Нам, правда, нолики в минутах/секундах не принципиальны, поэтому я через банальный Round округляю доли секунд.

Нам, правда, нолики в минутах/секундах не принципиальны, поэтому я через банальный Round округляю доли секунд.
Код: Выделить всё
Fields {Int(CentroidY(obj)) + "° " + Int((CentroidY(obj) - Int(CentroidY(obj)))* 60) + "' " + Round((CentroidY(obj) * 60 - Int(CentroidY(obj) * 60)) * 60, 0.01) + """""", Int(CentroidX(obj)) + "° " + Int((CentroidX(obj) - Int(CentroidX(obj)))* 60) + "' " + Round((CentroidX(obj) * 60 - Int(CentroidX(obj) * 60)) * 60, 0.01) + """"""}
- agrozema
- Активный участник
- Сообщения: 152
- Зарегистрирован: 05 мар 2013, 15:36
- Репутация: 85
Re: Вывести координаты объекта
Доброе утро! Ситуация такая. С помощью (подсказок и советов Daba - спасибо ему большое) я конвертнул точки (штук 180) из WGS в МСК, и возникла проблема, Либо необходимо по этим точкам построить полигон, либо как-то выдернуть координаты каждой точки.
- ginpetr
- Завсегдатай
- Сообщения: 385
- Зарегистрирован: 21 июн 2011, 12:07
- Репутация: 140
- Откуда: Орск
- Контактная информация:
Re: Вывести координаты объекта
Вывести список координат точек в нужной системе координат можно так (в окне Mapbasic):
set coordsys ... (параметры координатной системы начиная с "Eart Projection..." из файла Mapinfow.prj)
Browse
RowID "Номер",
CentroidX(Object) "X",
CentroidY(Object) "Y"
From Таблица_с_точками
set coordsys ... (параметры координатной системы начиная с "Eart Projection..." из файла Mapinfow.prj)
Browse
RowID "Номер",
CentroidX(Object) "X",
CentroidY(Object) "Y"
From Таблица_с_точками
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость