Да, как правильно отметил Mitrich, в формате TAB (в файле *.map) координаты хранятся в виде целых чисел.
Каждой системе координат присваивается охват для сохранения в TAB-формате, и точность по X может отличаться от точности по Y.
Для вычисления точности записи координат необходимо взять длину охвата системы координат и разделить её на 2 миллиарда (2 000 000 000).
Дополнительную информацию можно найти здесь:
https://mapinfo.ru/article/mapinfo_precision
Разберем ваш случай:
bgnik писал(а): ↑31 май 2024, 13:35
Рисую току на карте (план-схема, метры). Координаты выставляю с 6-ю знаками после запятой (и даже больше, до 9). Не сохраняя карты создаю ее mid/mif копию. Смотрю mif в блокноте: координаты такие, как я создал.
Формат mif/mid не имеет ограничений на точность координат, поэтому координаты не округляются.
Сохраняю таблицу. Координаты сразу округляются до 4-х знаков.
При вашем охвате [-100 000; 100 000] точность составляет (100000 - (-100000)) / 2000000000 = 0,0001. При сохранении координаты округляются до этого значения.
Делаю mid/mif после этого, смотрю новый mif в блокноте: координаты 4 знака.
Координаты уже округлены при сохранении, поэтому в mif/mid записываются округленные координаты.
Я бы не заморачивался этим, если бы в реальном модуле при аналогичных процедурах, но более запутанных, когда в таблицу вставляются объекты, таблица сохраняется, а затем из нее вытаскиваются записи в другую, а там оказываются только два знака после запятой. А вот этого уже недостаточно.
Как это объяснить и можно ли побороть?
Для точного ответа на проблему нужно изучить процесс более подробно. Однако вероятно, проблема связана с точностью хранения координат в TAB-формате.
Значение точности отображения в настройках карты никакого влияния не оказывает.
Да, это значение отображает только точность отображения.
Относительно выбора охвата можно дать несколько рекомендаций:
1) Длина охвата по X должна быть равна длине охвата по Y.
2) Минимум и максимум охвата по X и Y не обязательно должны быть одинаковыми.
3) Избегайте установки длины охвата так, чтобы коэффициент перед степенью 10 был дробным числом.
4) Лучше всего, если коэффициент перед степенью 10 у длины охвата будет равен 2 (двум): 200 000 000; 2 000 000; 20 000 и т.д. Тогда коэффициент перед степенью 10 у точности будет 1, например: 0,1; 0,001; 0,00001.
5) Длина охвата должна быть 2×(10 в степени a) для точности 1×(10 в степени a-9). Если длина диапазона равна 1×(10 в степени a), то точность будет 5×(10 в степени a-10).
Пример охвата:
(500000; 200000) (700000; 400000)
Точность охвата:
X: (700000 - 500000) / 2000000000 = 0,0001
Y: (400000 - 200000) / 2000000000 = 0,0001