Вычисление параметров для аффинного преобразования QGIS?

15

У меня есть векторный план этажа (DXF), который я добавил в пустой проект в QGIS с помощью плагина Dxf2Shp.

Я читал учебные пособия и темы StackExchange, но я не могу понять, как "привязать" мой слой?

Я предполагаю, что могу как-то выбрать углы здания и установить широту / долготу.

Моя цель - экспортировать шейп- файл, который я могу использовать с TileMill и TileStache .

Я понял, что координаты проекта на самом деле были координатами широта / долгота:

введите описание изображения здесь

и мне нужно использовать плагин «Affine (Вращение, Перевод, Масштаб)» для «размещения» моего чертежа САПР.

flackend
источник
похожий вопрос: gis.stackexchange.com/questions/23998/…
Подземье

Ответы:

2

Использование OpenJump для вычисления параметров аффинного преобразования дает:

Scale x: 0.02550720529745378
Scale y: 0.025669710194697357
Rotation: -88.6538203230914
Dx: 357101.9 (Translation x)
Dy: 4512814.6 (Translation y)

Эти параметры при правильном применении должны преобразовать ваш шейп-файл из локального CRS, который он использует, в WGS84 / UTM Zone 17 North (EPSG: 32617). В QGIS преобразованные данные затем могут быть экспортированы («сохранены как») в любой требуемый CRS; Google Mercator или lat / lon, например.

Плохая новость заключается в том, что мне никогда не удавалось успешно использовать аффинный плагин QGIS для преобразований, включающих ротацию. По некоторым данным, это работает для других людей, но не для меня, поэтому, должно быть, я что-то не так делаю. Если бы кто-нибудь мог сказать мне, что это, я был бы благодарен.

Была нить здесь на аффинаж векторов , которые хорошо стоят читать. Метод, который я использую для связывания векторов, объясняется здесь внизу первой страницы.

Если вы действительно застряли, вы можете опубликовать ссылку на шейп-файл, и мы все сможем его преобразовать.

Запоздалая мысль Если вы решите попробовать метод OpenJump, вам понадобятся координаты WGS84 / UTM Zone 17 North (EPSG: 32617) для точек широты и долготы:

EPSG:32617: 361154.4 4513930.1
lat/long: 40.764622,-82.645056
shapefile coor: 947.3,1242.8

EPSG:32617: 361152.2 4513850.3
lat/long: 40.763903,-82.645064
shapefile coor: 4050.3,1035.7

EPSG:32617: 361246.5 4513886.7
lat/long: 40.764247,-82.643956
shapefile coor: 2710.5,4765.2
nhopton
источник
2
Похоже, что в QGIS не существует согласованного, простого для объяснения рабочего процесса аффинного преобразования. Ссылка на форум в вашем объяснении мертва. Все поиски, как использовать OpenJump для этой задачи, снова заканчиваются здесь. Есть ли у вас какие-либо обновления по этому поводу?
Бернд В.
Теперь вы можете использовать GRASS v.transform из набора инструментов Sextante для выполнения векторных аффинных преобразований. Документация для этого может быть найдена здесь: grass.osgeo.org/grass64/manuals/v.transform.html, но на самом деле все, что вам нужно будет посмотреть, это формат текстового файла. Н.
Ноптон
27

Сначала вам необходимо спроецировать ваши географические координаты в декартову 2D систему координат, поскольку аффинные преобразования не применяются к географическим системам координат.

Вы можете применить аффинное преобразование из контрольных точек или из параметров преобразования. Плагин QGIS запрашивает у вас параметры преобразования, но для пользователя гораздо чаще иметь контрольные точки.

Из контрольных точек вы можете рассчитать параметры преобразования. Для аффинного преобразования есть 6 параметров преобразования, поэтому вам нужно как минимум 3 контрольные точки (каждая контрольная точка подразумевает 4 координаты: Xsource, Ysource, Xtarget, Ytarget), но рекомендуется, чтобы большее количество контрольных точек имело избыточность и, следовательно, могло применяться Наименьшие квадраты, которые дадут вам оценку качества трансформации. Помните, что аффинные преобразования могут вращать, сдвигать, масштабировать (даже применяя различные факторы к каждой оси) и наклонять геометрию.

Контрольные точки должны иметь форму:

X SOURCE: Xs
Y SOURCE: Ys
X TARGET: Xt
Y TARGET: Yt

Параметры:

a: Scale X 
e: Scale Y
d: Rotation X
b: Rotation Y
c: Translation X
f: Translation Y

И мы знаем:

Xt = X*a + Y*b + c
Yt = X*d + Y*e + f

Итак, вам необходимо решить эту систему уравнений (для 3 контрольных точек):

¦ Xs1 Ys1 1 0 0 0 ¦ | a ¦   ¦ Xt1 ¦
¦ Xs2 Ys2 1 0 0 0 ¦ ¦ b ¦   ¦ Xt2 ¦ 
¦ Xs3 Ys3 1 0 0 0 ¦ ¦ c ¦ = ¦ Xt3 ¦ 
¦ 0 0 0 Xs1 Ys1 1 ¦ ¦ d ¦   ¦ Yt1 ¦ 
¦ 0 0 0 Xs2 Ys2 1 ¦ ¦ e ¦   ¦ Yt2 ¦ 
¦ 0 0 0 Xs3 Ys3 1 ¦ ¦ f ¦   ¦ Yt3 ¦

Где параметры a, b, c, d, e и f неизвестны.

Как только вы вычислите параметры a, b, c, d, e и f (например, с помощью этого интерактивного решателя уравнений ), поместите их в интерфейс плагина QGIS следующим образом:

X' = a*x + b*y + c
Y' = d*x + e*y + f

или:

Параметры аффинного преобразования

Я думаю, что это решает ваши два вопроса.

Герман Каррильо
источник