воскресенье, 20 октября 2013 г.

Бабушкин рецепт получения нужной точности координат в Mapinfo.

Когда-то давно, на заре моего освоения Mapinfo, кто-то из коллег обратил внимание на то, что при смене границ (Bounds) у таблицы, происходит изменение значений координат узлов фигур. Как следствие, происходило и изменение площади объекта.
Будучи человеком любопытным, я начал копать интернет на эту тему. Вот тогда я и  нашел чудный сайт  www.paris-pc-gis.com, зеркало которого располагается по новой ссылке. Помимо нужной мне информации, там было еще много чего вкусного и полезного.
Итак, вот что удалось выяснить.
Для внутреннего хранения и обработки координат, MapInfo использует внутреннюю виртуальную сетку, таким образом, как я понимаю, производится переход к целочисленной математике.
Ширина и высота границы таблицы делится на 2000000000 (2 миллиарда) и получается точность по каждому измерению, независимо от принятых единиц измерения длины.
Получаем простые формулы для получения точности по каждой координате:
Точность по X: dX = (MaxX - MinX)/2000000000
Точность по X: dY = (MaxY - MinY)/2000000000

При диапазоне карты 2000000 м по ширине, точность будет 1 мм.
При диапазоне карты 200000 м по ширине, точность будет 0,1 мм.

Рисунок, иллюстрирующий расположение объекта на "сетке" координат
 А вот что происходит с объектом при изменении границы таблицы.
Система координат исходной таблицы:
CoordSys NonEarth Units "m" Bounds (0, 0) (2000000000, 2000000000)
Система координат измененной таблицы:
CoordSys NonEarth Units "m" Bounds (0, 0) (2500000000, 2500000000).

Для просмотра информации об СК очень удобно использовать штатный инструмент из комплекта утилит Mapinfo "Coordsys Bound Manager" (в русской версии она называется "Границы рамки карты")
 А вот его интерфейс


Теперь координаты объектов всегда будут у вас под контролем.
Ссылка на файлы примеров

Комментариев нет: