www.map-info.ru :: Просмотр темы - Округление координат узлов
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  
На страницу 1, 2  След.
 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
Софочка



Зарегистрирован: 13.02.2007
Сообщения: 11

СообщениеДобавлено: Вт Фев 13, 2007 8:49 am    Заголовок сообщения: Округление координат узлов Добавить ответ со ссылкой на данный текст

Здравствуйте!
Наши заказчики требуют, чтобы у любого узла любого объекта координата была с точностью до 2 знаков после запятой, в нашем случае, при измерении в метрах, до сотых долей метра.
В справке по Mapbasic нашла только, что точность координат уменьшается при увеличении экстремумов таблицы. Методом "научного тыка" нашла, что при экстремумах 0-30 000 000 получается нужная мне точность - до сотых.
При мЕньших же экстремумах, даже если программно задаешь координаты узла, например (100;200), считать их на карте можно как угодно - и (99.9999997;199.99993) и (100.0000001;200.000003).
У конкурентов же видела программу, которая округляет координаты вот каким способом (причем при любых эктремумах): если координата узла была 56.371368, то станет 56.370000. То есть от завершающих нулей избавиться, конечно, не удается, но хоть округляет красиво, а не как у меня - 56.369999.
Не подскажете, каким способом добиться такого округления, как у конкурентов?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
asgs



Зарегистрирован: 22.08.2006
Сообщения: 21
Откуда: Новосибирск

СообщениеДобавлено: Вт Фев 13, 2007 10:35 am    Заголовок сообщения: Re: Округление координат узлов Добавить ответ со ссылкой на данный текст

Софочка писал(а):

У конкурентов же видела программу, которая округляет координаты вот каким способом (причем при любых эктремумах): если координата узла была 56.371368, то станет 56.370000.


Округляет координаты в каком месте - на строке состояния MapInfo, в семантике таблицы, в окне сообщений или еще где? В зависимости от этого может быть разная реализация. В простейшем виде - форматирование строки с координатами.

Софочка писал(а):

Не подскажете, каким способом добиться такого округления, как у конкурентов?


Перейти на работу к конкурентам :? Это я типа пошутил :D
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Софочка



Зарегистрирован: 13.02.2007
Сообщения: 11

СообщениеДобавлено: Вт Фев 13, 2007 11:14 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Цитата:
Округляет координаты в каком месте - на строке состояния MapInfo, в семантике таблицы, в окне сообщений или еще где?

Координаты (для примера точечного объекта) физически округляются - если для этого точечного Геоинформацию (F7) вызвать - вот там и будет 56.370000, разумеется эта же цифра покажется в строке состояния MapInfo, если на карте поднести курсор мыши со снапом (клавиша S) к этой точке.
Цитата:
в простейшем виде - формирование строки с координатами

так у меня не работает, говорю же. Задаю я строку
Цитата:
insert into tab (obj) values(CreatePoint(100,100))

и система координат не забыта, и таблицу после этой команды сохранила :D . А потом смотрю координаты этой точки в таблице - оно может быть и верно покажется - (100,100), а может и неточно - (100.000002,99.999996). Тьфу, коряво выражаюсь...
Ну я имею ввиду, что таких insert-ов я могу штук 20 сделать, с разными координатами, разумеется, так вот у каких-то точек эти координаты потом в карте видны точно тютелька-в-тютельку, а у каких-то с "хвостами" типа .000002. Причем координаты постоянны, уж если они один раз ровными показались, то и всегда ровными будут, а уж если с "хвостами" - то всегда с ними.
Кстати, забыла сообщить версии MapInfo - от 5.5 до 8.0 имеются, и на всех пробовано. А также свою квалификацию в MapInfo - я не новичок :D, я 5 лет периодически на mapBasice ваяю.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Вт Фев 13, 2007 12:39 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

По этому поводу нужно изучить вопрос о внутреннем представлении кординат в Mapinfo. На этом форуме (или на других популярных) уже обсуждался подобный вопрос. Вся фишка в понятии Bounds у Mapinfo.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Вт Фев 13, 2007 12:40 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Вот, нашел, смотри соседнюю тему "Сетка на карте"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Софочка



Зарегистрирован: 13.02.2007
Сообщения: 11

СообщениеДобавлено: Вт Фев 13, 2007 1:08 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

FedorinoFF, эх... ну ведь писала я, что знаю про экстремумы. И знаю, что чем больше их диапазон, тем меньше точность координат. А для моего случая диапазон экстремумов 0-30 000 000 и дает мне нужную точность.
Но я-то у конкурентов вижу программу, которая умудряется округлять координаты узлов при любых экстремумах, а не путем изменения экстремумов у нужной таблицы.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Вт Фев 13, 2007 1:15 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

А у конкурентов полоса состояния своя или Mapinfo-вская?. Если своя - то написать туда можно хоть "епрст", а когда покажется диалог Mapinfo сос ведениями о координате, то там будет написано совсем другое. Надо понять как и что работает и будет все ясно и про конкурентов и про себя. :-)))
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Вт Фев 13, 2007 1:15 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Эх... Как обычно - вам поможет Инструментарий! :)
Инструмент называется "Точность координат узлов объектов", можно округлять 2-мя способами. Качайте, см.документацию.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Софочка



Зарегистрирован: 13.02.2007
Сообщения: 11

СообщениеДобавлено: Вт Фев 13, 2007 1:24 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Андрей Могильный, а тайну, как оно у вас там реализовано в Инструментарии, не выдадите? :D
Шутки-шутками, но я числюсь в конторе программистом, и начальство меня не поймет, ежели я предложу им что-либо купить, вместо того, чтобы самой работать. Ну и потом, у меня уже спортивный интерес проснулся - ну что же там такого мудреного?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Вт Фев 13, 2007 1:57 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Надо подумать логически. Если Mapinfo сама выдает координаты с одной точностью (кол-вом знаков и т.п.), а кто-то выдает тоже самое но в другом виде, знакчит этот кто-то либо либо сильно внедрился/интегрировался в Mapinfo (поставил хуки или еще что), либо просто не честно играет (что-то не договаривает, работает с оговорками). Как сказал автор - читайте документацию. там все написано.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Софочка



Зарегистрирован: 13.02.2007
Сообщения: 11

СообщениеДобавлено: Вт Фев 13, 2007 2:25 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

FedorinoFF, вы сами-то документацию читали, али так, потрещать зашли? Что мне может дать эта документация?
Цитата:

4.2.13 Точность координат узлов объектов
Описание операции
Утилита производит изменение координат узлов объектов с округлением (или отсечением) до
заданной точности.
Параметры операции
1. В параметрах операции укажите таблицу (слой) в котором будет производиться операция.
2. Задайте количество знаков после запятой, до которых будет производиться округление
координат.
3. Укажите метод - округление или отсечение
Пример: Координата Знаков Округление Отсечение
31 684.8371 3 31 684.8370 31 684.8370
31 684.8371 2 31 684.8400 31 684.8300
31 684.8371 1 31 684.8000 31 684.8000
31 684.8371 0 31 685.0000 31 684.0000
31 684.8371 -1 31 680.0000 31 680.0000
31 684.8371 -2 31 700.0000 31 600.0000
Примечание: Операция обрабатывает выбранный слой целиком. Для обработки только
определенных объектов, селектируйте их и выберите "Selection" в выпадающем списке
таблиц.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Вт Фев 13, 2007 4:17 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Софочка, начните все с начала:
1. как хранятся координаты в Mapinfo.
2. Документация
3. Эксперименты
И главное - не нервничать и думать.
Смотреть как сделано у других полезно, но при этом надо свою голову иметь.
Инструментарий - просто дополнитеолный инструмент к Mapinfo, не более того. Если вы не может понять что написанов документации (я например не совсем понял) - то надо провести несколько опытом. Посмотреть что происходит с таблицей которую "округлили", что там стало с bounds-ами и т.д.

P.S. Потрещать конечно можно - только времени жалко и пользы ни какой.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Нестеров Валерий



Зарегистрирован: 21.03.2006
Сообщения: 492

СообщениеДобавлено: Вт Фев 13, 2007 9:29 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Для точности 3 знака после запятой, у вас должны быть пределы карты от 0 до 2 000 000. Если при этом программно менять координаты узлов, никаких лишних циферок в дальних разрядах не будет (они появляются только в неровных пределах карты, например от 0 до 1 954 000). Точность (минимальное расстояние между соседними узлами) вычислить просто:
((X max) - (X min))/2 000 000 000
то же по "Y".
По грубому карту до двух знаков можно округлить выполнив из меню файл "Сохранить копию" и перед тем, как нажать "Сохранить", тыкните в кнопку "Проекция", затем "Ок" и задайте пределы карты, чтобы протяженность по X и Y была по 20 000 000, например: от 0 до 20 000 000. И теперь сохраняйте. все узлы сдвинутся до 2-го знака. Теперь эту же таблицу снова пересохраните обратно в свои пределы карты (как указывалось выше, желательно в кратные, например 100 тысячам или 1 миллиону). И все, никаких циферок после 2-го знака.
Но повторяю, это грубый вариант, потому, что узлы сдвинутся в ближайший узел загрубленной клетки.
_________________
Жизнь прекрасна!i
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Вт Фев 13, 2007 9:52 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Эх, Валера! У Софочки спортивный интерес к проблеме проснулся, а Вы взяли и все на блюдечке с голубой каемочкой....
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Софочка



Зарегистрирован: 13.02.2007
Сообщения: 11

СообщениеДобавлено: Ср Фев 14, 2007 6:55 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Нестеров Валерий, спасибо за консультацию.
У меня еще дополнительный вопрос открылся.
Нестеров Валерий писал(а):
Для точности 3 знака после запятой, у вас должны быть пределы карты от 0 до 2 000 000. Если при этом программно менять координаты узлов, никаких лишних циферок в дальних разрядах не будет (они появляются только в неровных пределах карты, например от 0 до 1 954 000).

Что такое неровные пределы карты?
То есть если мои точки имеют (для ваших Bounds) координаты меньше 1 954 000, то у них будут проскальзывать лишние циферки, даже если я произведу над таблицей операцию с двойным пересохранением с разными экстремумами? Так мои тетки очень любят такое дело - объекты в неполных координатах без номера зоны (т.е. 6 знаков в числе), а Bounds при этом 0- 26 000 000. :(
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
На страницу 1, 2  След.
Страница 1 из 2

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru