Страница 1 из 1

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

Добавлено: 08 мар 2013, 00:45
KOHb
Доброго времени суток!

У меня возникла проблема при программировании на Питоне под 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)

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

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

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

Добавлено: 08 мар 2013, 07:02
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)

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

Добавлено: 12 мар 2013, 00:07
KOHb
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?

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

Добавлено: 12 мар 2013, 06:49
dab
Непосредственно по Вашим точкам (Казань) из первого поста, команды с консоли при активном слое и одном полигоне

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

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()

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

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