Поменять местами X и Y у векторных данных
-
- Завсегдатай
- Сообщения: 420
- Зарегистрирован: 21 мар 2012, 07:37
- Репутация: 67
- Откуда: Воронеж
Поменять местами X и Y у векторных данных
Добрый день!
Поступил большой набор данных в MapInfo, содержащий много слоёв, в каждом из которых создатели умудрились перепутать координаты X и Y. Объекты в слоях разного типа (точки, полилинии, полигоны), часто смешаны в одном слое. Система координат условная — план-схема (метры). И всё бы ничего, да изображение получается повёрнуто-зеркальное.
Прошу помочь в поиске решения как вернуть координаты на место. Конечно неплохо бы сохранить оформление карты, но на худой конец как-нибудь уж. И ГИС не обязательно MapInfo, если есть относительно удобный способ, то можно в любой программе
Поступил большой набор данных в MapInfo, содержащий много слоёв, в каждом из которых создатели умудрились перепутать координаты X и Y. Объекты в слоях разного типа (точки, полилинии, полигоны), часто смешаны в одном слое. Система координат условная — план-схема (метры). И всё бы ничего, да изображение получается повёрнуто-зеркальное.
Прошу помочь в поиске решения как вернуть координаты на место. Конечно неплохо бы сохранить оформление карты, но на худой конец как-нибудь уж. И ГИС не обязательно MapInfo, если есть относительно удобный способ, то можно в любой программе
- nadiopt
- Гуру
- Сообщения: 4744
- Зарегистрирован: 29 янв 2009, 13:27
- Репутация: 495
- Ваше звание: хрюкало
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Поменять местами X и Y у векторных данных
ну я бы вытащила все в таблицы, например путем пакетной конвертации в шейп, потом в опен офис кальк поменяла в дбф колонки местами и подхватила таблицы с координатами в кугисе или аркгисе
ин гроссен фамилен нихт клювен клац клац
- Игорь Лебедь
- Завсегдатай
- Сообщения: 452
- Зарегистрирован: 24 апр 2010, 19:47
- Репутация: 101
- Откуда: Город в клёнах и акациях
- Контактная информация:
- Игорь Белов
- Гуру
- Сообщения: 2231
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1504
- Откуда: Казань
Re: Поменять местами X и Y у векторных данных
Очень просто делается средствами MapInfo.
На карте посмотрите крайние координаты. Предположим, объекты всех слоёв помещаются внутри такого прямоугольника:
Добавьте новую систему координат, т. е. впишите в файл MAPINFOW.PRJ строку:
Открыв рабочий набор, измените в свойствах карты проекцию на новую. Бинго!
Если же нужно изменить порядок координат в самих слоях, воспользуйтесь BatchTools: утилитой BatchProj конвертируйте все слои разом в новую систему координат.
На карте посмотрите крайние координаты. Предположим, объекты всех слоёв помещаются внутри такого прямоугольника:
Код: Выделить всё
┌─── 7510000 ───┐
6100000 6120000
└─── 7490000 ───┘
Код: Выделить всё
"Non-Earth YX swapped", 3000, 7, 7, 0, 1, 0, 1, 0, 0, 7490000, 6100000, 7510000, 6120000
Если же нужно изменить порядок координат в самих слоях, воспользуйтесь BatchTools: утилитой BatchProj конвертируйте все слои разом в новую систему координат.
The purpose of computing is insight, not numbers
-
- Завсегдатай
- Сообщения: 420
- Зарегистрирован: 21 мар 2012, 07:37
- Репутация: 67
- Откуда: Воронеж
Re: Поменять местами X и Y у векторных данных
Надежда, к сожалению, ваш метод не подходит, т.к. в DBF хранятся только семантические атрибуты, геометрическая метрика же — в SHP.
Игорь (Лебедь), спасибо! Занятный модуль. Установил, попробовал на маленьком наборе данных (20 точек) — работает. А на моих больших — не работает. Точки сбивает все в одну кучу, а полилинии и полигоны вообще исчезают. В таблице атрибутов присутствуют, а на карте не наблюдаются. Не помогает даже инструмент увеличения карты до выделенных в таблице объектов — ничего не видно. В чём причины трудно сказать. Может в объёме данных, может в абстрактности проекции. Quantum GIS не хочет понимать такую проекцию, которая есть в MapInfo — план-схема, подставляет автоматом WGS-84
Игорь (Белов), огромное спасибо! Всё сделал по-вашему и получилось. Отличная утилита. А теперь, если я захочу кому-то передать эти данные, то мне придётся также передавать и изменённый файл MAPINFOW.PRJ?
Игорь (Лебедь), спасибо! Занятный модуль. Установил, попробовал на маленьком наборе данных (20 точек) — работает. А на моих больших — не работает. Точки сбивает все в одну кучу, а полилинии и полигоны вообще исчезают. В таблице атрибутов присутствуют, а на карте не наблюдаются. Не помогает даже инструмент увеличения карты до выделенных в таблице объектов — ничего не видно. В чём причины трудно сказать. Может в объёме данных, может в абстрактности проекции. Quantum GIS не хочет понимать такую проекцию, которая есть в MapInfo — план-схема, подставляет автоматом WGS-84
Игорь (Белов), огромное спасибо! Всё сделал по-вашему и получилось. Отличная утилита. А теперь, если я захочу кому-то передать эти данные, то мне придётся также передавать и изменённый файл MAPINFOW.PRJ?
- Игорь Белов
- Гуру
- Сообщения: 2231
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1504
- Откуда: Казань
Re: Поменять местами X и Y у векторных данных
Не придётся. Правда, этот кто-то при попытке узнать проекцию слоя через свойства окна карты будет видеть "Широта / Долгота" вместо "План / Схема", но это никому не повредитКонстантин Силкин писал(а):А теперь, если я захочу кому-то передать эти данные, то мне придётся также передавать и изменённый файл MAPINFOW.PRJ?
The purpose of computing is insight, not numbers
-
- Гуру
- Сообщения: 4057
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Поменять местами X и Y у векторных данных
есть два варианта:
План (а), правильный: грузим в R, и тупо идем по файлу, и меняем координаты у всех объектов местами (на всякий случай правим boundbox, но вроде и так сойдет)
План (б), если программировать лень: выгружаем в MIF/MID, и добавляем в каждый файл MIF строку TRANSFORM (она для всех файлов одинаковая), которая меняет координаты местами - смотрим доку, там аффинное преобразование, делаем
X_new = 0*X_old + 1*Y_old + 0
Y_new = 1*X_old + 0*Y_old + 0
импортируем, и сохраняем
План (а), правильный: грузим в R, и тупо идем по файлу, и меняем координаты у всех объектов местами (на всякий случай правим boundbox, но вроде и так сойдет)
План (б), если программировать лень: выгружаем в MIF/MID, и добавляем в каждый файл MIF строку TRANSFORM (она для всех файлов одинаковая), которая меняет координаты местами - смотрим доку, там аффинное преобразование, делаем
X_new = 0*X_old + 1*Y_old + 0
Y_new = 1*X_old + 0*Y_old + 0
импортируем, и сохраняем
- Игорь Белов
- Гуру
- Сообщения: 2231
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1504
- Откуда: Казань
Re: Поменять местами X и Y у векторных данных
Не сойдёт, для MapInfo BBox архиважен.gamm писал(а):План (а), правильный: грузим в R, и тупо идем по файлу, и меняем координаты у всех объектов местами (на всякий случай правим boundbox, но вроде и так сойдет)
TRANSFORM не годится, т. к. осуществляет линейное преобразование:gamm писал(а):План (б), если программировать лень: выгружаем в MIF/MID, и добавляем в каждый файл MIF строку TRANSFORM (она для всех файлов одинаковая), которая меняет координаты местами - смотрим доку, там аффинное преобразование
Код: Выделить всё
TRANSFORM X_множитель, Y_множитель, X_смещение, Y_смещение
Редактировать MAPINFOW.PRJ не придётся.
- Утилитой MIFexp экспортируйте слои в MIF/MID.
- Запишите в файл swapxy.prj проекцию, которую хотите видеть в выходных MIF. Для примера выше:
Файл swapxy.prj должен быть в текущей директории.
Код: Выделить всё
CoordSys NonEarth Units "m" Bounds (7490000, 6100000) (7510000, 6120000)
- Утилитой swapxy.exe конвертируйте MIF'ы:
Лучше написать командный файл, который сконвертирует MIF'ы и скопирует MID'ы из одной папки в другую.
Код: Выделить всё
swapxy.exe "входной файл.MIF" "выходной файл.MIF"
- Утилитой BatchMif импортируйте новые MIF'ы.
- Вложения
-
- swapxy.zip
- Утилита меняет порядок координат в файле MIF
- (29.53 КБ) 360 скачиваний
The purpose of computing is insight, not numbers
-
- Завсегдатай
- Сообщения: 420
- Зарегистрирован: 21 мар 2012, 07:37
- Репутация: 67
- Откуда: Воронеж
Re: Поменять местами X и Y у векторных данных
Спасибо, Игорь! Буду пробовать делать по вашему плану в), если моим контрагентам не понравится иметь дело с нестандартной проекцией
- Игорь Белов
- Гуру
- Сообщения: 2231
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1504
- Откуда: Казань
Re: Поменять местами X и Y у векторных данных
Существуют способы без явной перестановки координат.Константин Силкин писал(а):Буду пробовать делать по вашему плану в), если моим контрагентам не понравится иметь дело с нестандартной проекцией
План (г)
На мой вкус самый удобный. Развитие того, что было в моём первом посте.
- Добавляем в MAPINFOW.PRJ временную проекцию:
Код: Выделить всё
"Non-Earth affine", 3000, 7, 7, 0, 1, 0, 1, 0, 0, 7490000, 6100000, 7510000, 6120000
- Утилитой BatchProj конвертируем слои во временную проекцию.
- Утилитой MIFexp экспортируем новые слои в MIF/MID.
- Во всех MIF'ах из предложения CoordSys удаляем подстроку
Код: Выделить всё
Affine Units "m", 0, 1, 0, 1, 0, 0
- Утилитой 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 конвертируем созданные слои в новую проекцию.
Последний раз редактировалось Игорь Белов 16 июн 2017, 11:26, всего редактировалось 3 раза.
The purpose of computing is insight, not numbers
-
- Гуру
- Сообщения: 4057
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Поменять местами X и Y у векторных данных
Линейное пребразование в написанном мной виде просто меняет координаты местами.
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
-
- Гуру
- Сообщения: 4057
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Поменять местами X и Y у векторных данных
Мдя, память подвела. Был уверен, что там 6 параметров ...
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 45 гостей