Страница 1 из 1
Поменять местами X и Y у векторных данных
Добавлено: 14 июн 2017, 19:28
Константин Силкин
Добрый день!
Поступил большой набор данных в MapInfo, содержащий много слоёв, в каждом из которых создатели умудрились перепутать координаты X и Y. Объекты в слоях разного типа (точки, полилинии, полигоны), часто смешаны в одном слое. Система координат условная — план-схема (метры). И всё бы ничего, да изображение получается повёрнуто-зеркальное.
Прошу помочь в поиске решения как вернуть координаты на место. Конечно неплохо бы сохранить оформление карты, но на худой конец как-нибудь уж. И ГИС не обязательно MapInfo, если есть относительно удобный способ, то можно в любой программе
Re: Поменять местами X и Y у векторных данных
Добавлено: 14 июн 2017, 20:11
nadiopt
ну я бы вытащила все в таблицы, например путем пакетной конвертации в шейп, потом в опен офис кальк поменяла в дбф колонки местами и подхватила таблицы с координатами в кугисе или аркгисе
Re: Поменять местами X и Y у векторных данных
Добавлено: 14 июн 2017, 20:15
Игорь Лебедь
Re: Поменять местами X и Y у векторных данных
Добавлено: 14 июн 2017, 21:35
Игорь Белов
Очень просто делается средствами MapInfo.
На карте посмотрите крайние координаты. Предположим, объекты всех слоёв помещаются внутри такого прямоугольника:
Код: Выделить всё
┌─── 7510000 ───┐
6100000 6120000
└─── 7490000 ───┘
Добавьте новую систему координат, т. е. впишите в файл MAPINFOW.PRJ строку:
Код: Выделить всё
"Non-Earth YX swapped", 3000, 7, 7, 0, 1, 0, 1, 0, 0, 7490000, 6100000, 7510000, 6120000
Открыв рабочий набор, измените в свойствах карты проекцию на новую. Бинго!
Если же нужно изменить порядок координат в самих слоях, воспользуйтесь
BatchTools: утилитой BatchProj конвертируйте все слои разом в новую систему координат.
Re: Поменять местами X и Y у векторных данных
Добавлено: 15 июн 2017, 23:25
Константин Силкин
Надежда, к сожалению, ваш метод не подходит, т.к. в DBF хранятся только семантические атрибуты, геометрическая метрика же — в SHP.
Игорь (Лебедь), спасибо! Занятный модуль. Установил, попробовал на маленьком наборе данных (20 точек) — работает. А на моих больших — не работает. Точки сбивает все в одну кучу, а полилинии и полигоны вообще исчезают. В таблице атрибутов присутствуют, а на карте не наблюдаются. Не помогает даже инструмент увеличения карты до выделенных в таблице объектов — ничего не видно. В чём причины трудно сказать. Может в объёме данных, может в абстрактности проекции. Quantum GIS не хочет понимать такую проекцию, которая есть в MapInfo — план-схема, подставляет автоматом WGS-84
Игорь (Белов), огромное спасибо! Всё сделал по-вашему и получилось. Отличная утилита. А теперь, если я захочу кому-то передать эти данные, то мне придётся также передавать и изменённый файл MAPINFOW.PRJ?
Re: Поменять местами X и Y у векторных данных
Добавлено: 16 июн 2017, 07:44
Игорь Белов
Константин Силкин писал(а):А теперь, если я захочу кому-то передать эти данные, то мне придётся также передавать и изменённый файл MAPINFOW.PRJ?
Не придётся. Правда, этот кто-то при попытке узнать проекцию слоя через свойства окна карты будет видеть "Широта / Долгота" вместо "План / Схема", но это никому не повредит
Re: Поменять местами X и Y у векторных данных
Добавлено: 16 июн 2017, 07:48
gamm
есть два варианта:
План (а), правильный: грузим в R, и тупо идем по файлу, и меняем координаты у всех объектов местами (на всякий случай правим boundbox, но вроде и так сойдет)
План (б), если программировать лень: выгружаем в MIF/MID, и добавляем в каждый файл MIF строку TRANSFORM (она для всех файлов одинаковая), которая меняет координаты местами - смотрим доку, там аффинное преобразование, делаем
X_new = 0*X_old + 1*Y_old + 0
Y_new = 1*X_old + 0*Y_old + 0
импортируем, и сохраняем
Re: Поменять местами X и Y у векторных данных
Добавлено: 16 июн 2017, 08:14
Игорь Белов
gamm писал(а):План (а), правильный: грузим в R, и тупо идем по файлу, и меняем координаты у всех объектов местами (на всякий случай правим boundbox, но вроде и так сойдет)
Не сойдёт, для MapInfo BBox архиважен.
gamm писал(а):План (б), если программировать лень: выгружаем в MIF/MID, и добавляем в каждый файл MIF строку TRANSFORM (она для всех файлов одинаковая), которая меняет координаты местами - смотрим доку, там аффинное преобразование
TRANSFORM не годится, т. к. осуществляет линейное преобразование:
Код: Выделить всё
TRANSFORM X_множитель, Y_множитель, X_смещение, Y_смещение
План (в)
Редактировать MAPINFOW.PRJ не придётся.
- Утилитой MIFexp экспортируйте слои в MIF/MID.
- Запишите в файл swapxy.prj проекцию, которую хотите видеть в выходных MIF. Для примера выше:
Код: Выделить всё
CoordSys NonEarth Units "m" Bounds (7490000, 6100000) (7510000, 6120000)
Файл swapxy.prj должен быть в текущей директории.
- Утилитой swapxy.exe конвертируйте MIF'ы:
Код: Выделить всё
swapxy.exe "входной файл.MIF" "выходной файл.MIF"
Лучше написать командный файл, который сконвертирует MIF'ы и скопирует MID'ы из одной папки в другую.
- Утилитой BatchMif импортируйте новые MIF'ы.
Re: Поменять местами X и Y у векторных данных
Добавлено: 16 июн 2017, 08:51
Константин Силкин
Спасибо, Игорь! Буду пробовать делать по вашему плану в), если моим контрагентам не понравится иметь дело с нестандартной проекцией
Re: Поменять местами X и Y у векторных данных
Добавлено: 16 июн 2017, 09:16
Игорь Белов
Константин Силкин писал(а):Буду пробовать делать по вашему плану в), если моим контрагентам не понравится иметь дело с нестандартной проекцией
Существуют способы без явной перестановки координат.
План (г)
На мой вкус самый удобный. Развитие того, что было в моём первом посте.
- Добавляем в MAPINFOW.PRJ временную проекцию:
Код: Выделить всё
"Non-Earth affine", 3000, 7, 7, 0, 1, 0, 1, 0, 0, 7490000, 6100000, 7510000, 6120000
- Утилитой BatchProj конвертируем слои во временную проекцию.
- Утилитой MIFexp экспортируем новые слои в MIF/MID.
- Во всех MIF'ах из предложения CoordSys удаляем подстроку
- Утилитой BatchMif импортируем MIF'ы.
План (д)
- Добавляем в MAPINFOW.PRJ новую проекцию:
Код: Выделить всё
"Non-Earth XY #1", 2000, 7, 7490000, 6100000, 7510000, 6120000
Она вполне "стандартна".
- Утилитой MIFexp экспортируем слои в MIF/MID.
- Заменяем предложение CoordSys в каждом MIF'е такой строкой:
Код: Выделить всё
CoordSys NonEarth Units "m" Affine Units "m", 0, 1, 0, 1, 0, 0 Bounds (6100000, 7490000) (6120000, 7510000)
Существует масса способов сделать это быстро.
- Утилитой BatchMif импортируем новые MIF'ы.
- Утилитой BatchProj конвертируем созданные слои в новую проекцию.
Числовые значения границ даны для примера из моего первого поста. В итоге система координат слоёв - обычная план-схема.
Re: Поменять местами X и Y у векторных данных
Добавлено: 16 июн 2017, 09:33
gamm
Линейное пребразование в написанном мной виде просто меняет координаты местами.
[ Сообщение с мобильного устройства ]
Re: Поменять местами X и Y у векторных данных
Добавлено: 16 июн 2017, 09:41
gamm
Мдя, память подвела. Был уверен, что там 6 параметров ...
[ Сообщение с мобильного устройства ]