Как поменять местами X и Y в полигональном слое?
-
- Завсегдатай
- Сообщения: 324
- Зарегистрирован: 14 фев 2010, 20:42
- Репутация: 0
Как поменять местами X и Y в полигональном слое?
Есть полигональный слой в DD. В нем перепутан X и Y. Как это можно исправить? По сути нужно отразить (Mirror) относительно оси ((0,0) (1,1)) только никак не соображу как это сделать кроме как в AutoCAD. Может prj какой нибудь хитрый написать?
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: Как поменять местами X и Y в полигональном слое?
Можно в GRASS (координаты в примере прямоугольные, XY):
v.db.select XY_vertex layer=2
Аттрибуты точек справа (номер точки, x, y):
v.db.select YX_vertex
Если нужно, могу описать сам процесс.
Аттрибуты точек слева (номер точки, x, y):v.db.select XY_vertex layer=2
Код: Выделить всё
cat|x|y
1|195.020747|929.460581
2|396.26556|668.049793
3|313.278008|454.356846
4|375.518672|381.742739
5|437.759336|410.788382
6|570.539419|531.120332
7|493.775934|844.39834
8|284.232365|962.655602
9|195.020747|929.460581
v.db.select YX_vertex
Код: Выделить всё
cat|x|y
1|929.460581|195.020747
2|668.049793|396.26556
3|454.356846|313.278008
4|381.742739|375.518672
5|410.788382|437.759336
6|531.120332|570.539419
7|844.39834|493.775934
8|962.655602|284.232365
9|929.460581|195.020747
Редактор материалов, модератор форума
-
- Завсегдатай
- Сообщения: 324
- Зарегистрирован: 14 фев 2010, 20:42
- Репутация: 0
Re: Как поменять местами X и Y в полигональном слое?
Был бы крайне признателен!
-
- Завсегдатай
- Сообщения: 478
- Зарегистрирован: 25 фев 2009, 09:00
- Репутация: 14
- Откуда: Новороссийск-Краснодар-Москва
Re: Как поменять местами X и Y в полигональном слое?
А Вы не пробовали это сделать в QGIS??
Модули-Geoprocessing-Affine(Rotation, Translation, Scale)
Модули-Geoprocessing-Affine(Rotation, Translation, Scale)
- Вложения
-
- transformation.jpg (50.33 КБ) 15210 просмотров
-
- Завсегдатай
- Сообщения: 324
- Зарегистрирован: 14 фев 2010, 20:42
- Репутация: 0
Re: Как поменять местами X и Y в полигональном слое?
Я думал над этим модулем, но не смог сообразить, какие нужно забить параметры чтобы добиться требуемого эффекта. И можно ли с его помощью вообще сделать Mirror т. к. математику аффинного преобразования представляю себе весьма приблизительно.
-
- Завсегдатай
- Сообщения: 478
- Зарегистрирован: 25 фев 2009, 09:00
- Репутация: 14
- Откуда: Новороссийск-Краснодар-Москва
Re: Как поменять местами X и Y в полигональном слое?
для того чтобы повернуть на 90 градусов надо в полях Rotation X и Roatation Y ввести 90, тогда шейп будет повернут на 90 градусов. Для выполнения этой операции должен быть включен режим редактирования.
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: Как поменять местами X и Y в полигональном слое?
А это точно афинное преобразование? Я что-то не уверен..
Вернемся к GRASS.
Метод проверен на единичном простом полигоне в произвольных прямоуг. координатах XY. Будет ли он работать (и как?)
в слое с сотнями объектов и, например, в ?? СК и ?? проекции -- отдельный вопрос..
Вернемся к GRASS.
Метод проверен на единичном простом полигоне в произвольных прямоуг. координатах XY. Будет ли он работать (и как?)
в слое с сотнями объектов и, например, в ?? СК и ?? проекции -- отдельный вопрос..
- Импортируем векторные данные в GRASS
- Есть вект. слой XY_polygon. Надо получить координаты вершин.
- Сначала преобразуем границы полигона в линии:
Код: Выделить всё
v.type in=XY_polygon out=XY_line type=boundary,line
- Вытаскиваем в отдел. слой вершины (вертексы):
У слоя точек получается 2 таблицы аттрибутов (1 - от производной линии, 2 - собственно точки), нам нужна вторая.
Код: Выделить всё
v.to.points -v in=XY_line out=XY_vertex
- Добавляем к 2 таблице два новых поля -- X и Y:
Код: Выделить всё
v.db.addcol map=XY_vertex layer=2 columns='x DOUBLE PRECISION,y DOUBLE PRECISION'
- Заносим в новые поля таблицы координаты наших точек:
Код: Выделить всё
v.to.db map=XY_vertex layer=2 option=coor col=x,y
- Теперь самое интересное: экспорт точек в ASCII-файл и тут же импорт их назад в новый слой, но со сменой
полей координатСлой XY_vertex при экспорте в текстовый файл выдаетКод: Выделить всё
v.out.ascii input=XY_vertex layer=2 format=point | v.in.ascii output=YX_vertex x=2 y=1 cat=3
> v.out.ascii input=XY_vertex layer=2 format=point
195.02074689|929.46058091|1
396.26556017|668.04979253|2
313.2780083|454.35684647|3
375.5186722|381.74273859|4
437.7593361|410.78838174|5
570.53941909|531.12033195|6
493.77593361|844.39834025|7
284.23236515|962.65560166|8
195.02074689|929.46058091|9
и по "каналу" (|) импортируем назад, но со сменой полей
... v.in.ascii output=YX_vertex x=2 y=1 cat=3
т.о. X и Y меняются местами. - Создаем таблицу для нового слоя точек:
Код: Выделить всё
v.db.addtable map=YX_vertex columns='cat int, x double precision, y double precision'
- Заносим в табл. координаты точек:
Код: Выделить всё
v.to.db map=YX_vertex option=coor col=x,y
- Теперь главная проблема -- КАК собрать новый полигон из точек? В данном простом случае я вручную соединил
вершины линией, но как собрать "на автомате", пока не знаю. - Чтобы увидеть новый полигон, задаем перед этим под него текущий регион:
, далее d.vect или GUI.
Код: Выделить всё
g.region vect=YX_vertex
- Чтобы посмотреть старый полигон, делаем:
, далее d.vect или GUI.
Код: Выделить всё
g.region vect=XY_vertex
Редактор материалов, модератор форума
-
- Завсегдатай
- Сообщения: 257
- Зарегистрирован: 10 июн 2009, 12:21
- Репутация: 0
- Откуда: Екатеринбург
- Контактная информация:
Re: Как поменять местами X и Y в полигональном слое?
иSaimon писал(а):повернуть на 90 градусов надо в полях Rotation X и Roatation Y ввести 90, тогда шейп будет повернут на 90 градусов.
это разные вещи. Надо повернуть оси + отразить относительно одной из нихkryl писал(а):поменять X и Y.
-
- Завсегдатай
- Сообщения: 478
- Зарегистрирован: 25 фев 2009, 09:00
- Репутация: 14
- Откуда: Новороссийск-Краснодар-Москва
-
- Завсегдатай
- Сообщения: 324
- Зарегистрирован: 14 фев 2010, 20:42
- Репутация: 0
Re: Как поменять местами X и Y в полигональном слое?
Отразить то модуль отражает (с параметрами ScaleX: 1, ScaleY: -1), а вот RotationX:90 RotationY:90 дают невообразимо странный результат с коверканьем масштаба
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: Как поменять местами X и Y в полигональном слое?
Если доразобраться с созданием "отраженного" полигона из точек и проекциями/СК, то метод вполне рабочий. Можно сделать шелл-скрипт (если в linux) или на питоне, но это надо уметь ..
А так, будут вопросы -- постараюсь ответить.

А так, будут вопросы -- постараюсь ответить.
Редактор материалов, модератор форума
-
- Завсегдатай
- Сообщения: 324
- Зарегистрирован: 14 фев 2010, 20:42
- Репутация: 0
Re: Как поменять местами X и Y в полигональном слое?
А в параметрах v.transform доступных из QGIS вообще нет rotation, это баг или фитча?
-
- Завсегдатай
- Сообщения: 324
- Зарегистрирован: 14 фев 2010, 20:42
- Репутация: 0
Re: Как поменять местами X и Y в полигональном слое?
Спасибо, но пока наверное попробую через v.transform так как это на первый взгляд прощеamuriy писал(а):Если доразобраться с созданием "отраженного" полигона из точек и проекциями/СК, то метод вполне рабочий. Можно сделать шелл-скрипт (если в linux) или на питоне, но это надо уметь ..![]()
А так, будут вопросы -- постараюсь ответить.
-
- Завсегдатай
- Сообщения: 324
- Зарегистрирован: 14 фев 2010, 20:42
- Репутация: 0
Re: Как поменять местами X и Y в полигональном слое?
v.transform input=test@kirov output=test_a3@kirov yscale=-1 zrot=90
Вроде работает
Вроде работает
-
- Завсегдатай
- Сообщения: 324
- Зарегистрирован: 14 фев 2010, 20:42
- Репутация: 0
Re: Как поменять местами X и Y в полигональном слое?
Выводы:
и плагин аффинного преобразования в QGIS и QGIS-овский интерфейс к ГАССовскому v.transform работают с ошибками и нуждаются в переработке
и плагин аффинного преобразования в QGIS и QGIS-овский интерфейс к ГАССовскому v.transform работают с ошибками и нуждаются в переработке
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя