Страница 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)
Кажется у меня с этим кодом проблемы. Я его "дописал" таким образом:
далее я вывожу поворотные точки и получаю какие-то неправильные циферки, также пытаюсь посчитать площадь и получаю ее в градусах, а хочу в кв.м/кв.км
Примеры :
при проецировании из 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 это мною придуманная переменная, хранит поворотные точки полигона списком.