Получение координат проекции в QGIS

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Аватара пользователя
KOHb
Новоприбывший
Сообщения: 5
Зарегистрирован: 27 окт 2011, 17:35
Репутация: 0
Откуда: Казань

Получение координат проекции в QGIS

Сообщение KOHb » 08 мар 2013, 00:45

Доброго времени суток!

У меня возникла проблема при программировании на Питоне под QGIS. (Пишу плагин)

Суть:

имеется слой в QGIS, который содержит только полигон (импортированный .kml файл)

пытаюсь получить поворотные точки полигона таким образом:

Код: Выделить всё

cLayer = self.iface.mapCanvas().currentLayer()
provider = cLayer.dataProvider()
provider.select()
feat = QgsFeature()
provider.nextFeature(feat)
feat.geometry()
cLayer.setSelectedFeatures([1])        
listOfPoints = feat.geometry().asPolygon()
при выводе listOfPoints (он есть список точек (x,y)) получаю:

(48.724,55.6242)
(48.7038,55.7736)
(48.9478,55.7686)
(48.9364,55.6992)
(48.8732,55.6201)
(48.8043,55.582)
(48.724,55.6242)

Вопрос: существуют ли методы/функции/классы, которые позволят мне получить плоские/прямоугольные/спроецированные координаты этих точек?

(я новичок, студент, не судите строго за ошибки/неточности/неясности, которые Вы обнаружите)

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: Получение координат проекции в QGIS

Сообщение dab » 08 мар 2013, 07:02

Через transform()

Код: Выделить всё

crsLayer = cLayer.crs()
crsPulkovo42_9 = QgsCoordinateReferenceSystem()
defineProj4 = '+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,0,0.35,0.82,-0.12 +units=m +no_defs'
crsPulkovo42_9.createFromProj4(defineProj4)
coordTransForm = QgsCoordinateTransform(crsLayer, crsPulkovo42_9)
geom = feat.geometry()
geom.transform(coordTransForm)

Аватара пользователя
KOHb
Новоприбывший
Сообщения: 5
Зарегистрирован: 27 окт 2011, 17:35
Репутация: 0
Откуда: Казань

Re: Получение координат проекции в QGIS

Сообщение KOHb » 12 мар 2013, 00:07

dab писал(а):Через transform()

Код: Выделить всё

crsLayer = cLayer.crs()
crsPulkovo42_9 = QgsCoordinateReferenceSystem()
defineProj4 = '+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,0,0.35,0.82,-0.12 +units=m +no_defs'
crsPulkovo42_9.createFromProj4(defineProj4)
coordTransForm = QgsCoordinateTransform(crsLayer, crsPulkovo42_9)
geom = feat.geometry()
geom.transform(coordTransForm)

Кажется у меня с этим кодом проблемы. Я его "дописал" таким образом:

Код: Выделить всё

listOfP_2 = geom.asPolygon()
далее я вывожу поворотные точки и получаю какие-то неправильные циферки, также пытаюсь посчитать площадь и получаю ее в градусах, а хочу в кв.м/кв.км

Код: Выделить всё

areaOfP_2 = geom.area()
Примеры :

при проецировании из Google Mercator в WGS 84/UTM zone 39

(-6.11487e+06,0.121247)
(-6.11487e+06,0.353637)
(-6.11487e+06,0.262702)
(-6.11487e+06,0.131351)
(-6.11487e+06,-0.0202078)
(-6.11487e+06,0.121247)

при проецировании из WGS 84 в WGS 84/UTM zone 39

(-6.29901e+06,13800)
(-6.2932e+06,40221.9)
(-6.26354e+06,29772)
(-6.26472e+06,14888.1)
(-6.28986e+06,-2297.46)
(-6.29901e+06,13800)

Где я ошибаюсь? Познать transform() из документации не сильно получилось, нужно ли разбираться с proj4?

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: Получение координат проекции в QGIS

Сообщение dab » 12 мар 2013, 06:49

Непосредственно по Вашим точкам (Казань) из первого поста, команды с консоли при активном слое и одном полигоне

Код: Выделить всё

cLayer = qgis.utils.iface.mapCanvas().currentLayer()
crsLayer = cLayer.crs()
defineProj4 = '+proj=utm +zone=39 +datum=WGS84 +units=m +no_def'
crsUTM39N = QgsCoordinateReferenceSystem()
crsUTM39N.createFromProj4(defineProj4)
coordTransForm = QgsCoordinateTransform(crsLayer, crsUTM39N)
feat = QgsFeature()
cLayer.dataProvider().nextFeature(feat)
geom = feat.geometry()
geom.transform(coordTransForm)
Проверяем и получаем всё в метрах

Код: Выделить всё

print geom.asPolygon()
[[(355969,6.18327e+06), (371255,6.18223e+06), (370310,6.17453e+06), (366069,6.16585e+06), (361597,6.16175e+06), (356690,6.16661e+06), (355969,6.18327e+06)]]

print geom.area()
238924943.915
Что такое listOfPoints() ? В API QGIS не нашел :(

PS
Если нужны значения координат - вот так из консоли

Код: Выделить всё

for ring in geom.asPolygon():
...     for point in ring:
...         print point.x()
...         print point.y()

Аватара пользователя
KOHb
Новоприбывший
Сообщения: 5
Зарегистрирован: 27 окт 2011, 17:35
Репутация: 0
Откуда: Казань

Re: Получение координат проекции в QGIS

Сообщение KOHb » 15 мар 2013, 01:37

Благодарю, кажется проблема решена. listOfPoints это мною придуманная переменная, хранит поворотные точки полигона списком.

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: Amazon [Bot] и 5 гостей