Поменять местами X и Y у векторных данных
- 
				Константин Силкин
 - Завсегдатай
 - Сообщения: 448
 - Зарегистрирован: 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
 - Откуда: Город в клёнах и акациях
 - Контактная информация:
 
- Игорь Белов
 - Гуру
 - Сообщения: 2241
 - Зарегистрирован: 04 янв 2011, 22:00
 - Репутация: 1514
 - Откуда: Казань
 
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
						- 
				Константин Силкин
 - Завсегдатай
 - Сообщения: 448
 - Зарегистрирован: 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?
- Игорь Белов
 - Гуру
 - Сообщения: 2241
 - Зарегистрирован: 04 янв 2011, 22:00
 - Репутация: 1514
 - Откуда: Казань
 
Re: Поменять местами X и Y у векторных данных
Не придётся. Правда, этот кто-то при попытке узнать проекцию слоя через свойства окна карты будет видеть "Широта / Долгота" вместо "План / Схема", но это никому не повредитКонстантин Силкин писал(а):А теперь, если я захочу кому-то передать эти данные, то мне придётся также передавать и изменённый файл MAPINFOW.PRJ?
The purpose of computing is insight, not numbers
						- 
				gamm
 - Гуру
 - Сообщения: 4177
 - Зарегистрирован: 15 окт 2010, 08:33
 - Репутация: 1107
 - Ваше звание: программист
 - Откуда: Казань
 
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
импортируем, и сохраняем
- Игорь Белов
 - Гуру
 - Сообщения: 2241
 - Зарегистрирован: 04 янв 2011, 22:00
 - Репутация: 1514
 - Откуда: Казань
 
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 КБ) 438 скачиваний
 
 
The purpose of computing is insight, not numbers
						- 
				Константин Силкин
 - Завсегдатай
 - Сообщения: 448
 - Зарегистрирован: 21 мар 2012, 07:37
 - Репутация: 67
 - Откуда: Воронеж
 
Re: Поменять местами X и Y у векторных данных
Спасибо, Игорь! Буду пробовать делать по вашему плану в), если моим контрагентам не понравится иметь дело с нестандартной проекцией
			
									
									
						- Игорь Белов
 - Гуру
 - Сообщения: 2241
 - Зарегистрирован: 04 янв 2011, 22:00
 - Репутация: 1514
 - Откуда: Казань
 
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
						- 
				gamm
 - Гуру
 - Сообщения: 4177
 - Зарегистрирован: 15 окт 2010, 08:33
 - Репутация: 1107
 - Ваше звание: программист
 - Откуда: Казань
 
Re: Поменять местами X и Y у векторных данных
Линейное пребразование в написанном мной виде просто меняет координаты местами.
[ Сообщение с мобильного устройства ]
			
									
									
						[ Сообщение с мобильного устройства ]
- 
				gamm
 - Гуру
 - Сообщения: 4177
 - Зарегистрирован: 15 окт 2010, 08:33
 - Репутация: 1107
 - Ваше звание: программист
 - Откуда: Казань
 
Re: Поменять местами X и Y у векторных данных
Мдя, память подвела. Был уверен, что там 6 параметров ...
[ Сообщение с мобильного устройства ]
			
									
									
						[ Сообщение с мобильного устройства ]
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 25 гостей