Чи можна встановити проект CRS за допомогою команди Python?


10

Чи можливо встановити проектну CRS проекту в QGIS за допомогою команди Python?

У моєму випадку користувач повинен відкрити QGIS, запустити свій письмовий плагін, і цей плагін буде завантажувати просторові дані, що мають код epsg 31467 (зона Гаусса Крюгера 3). На жаль, CRS за замовчуванням QGIS - це WGS84, тому я потрапляю в проблеми з одиницями та масштабом.

Першим моїм підходом було використання цього коду:

    my_crs = core.QgsCoordinateReferenceSystem(31467, core.QgsCoordinateReferenceSystem.EpsgCrsId)
    self.iface.mapCanvas().mapRenderer().setDestinationCrs(my_crs)

Це змінюється (після того, як дані вже візуалізуються) CRS до зони Гаусса Крюгера 3. Принаймні код espg у правому нижньому куті змінився. Одиниці все ще в градусах, і масштаб абсолютно невірний. 1: 5000 у Гаусса Крюгера - 1: 528822376 у WGS 84 (у моєму випадку - у QGIS). Після встановлення проекту CRS вручну у властивостях проект crs дійсно GK3, і масштаб та одиниці є правильними.

Отже, моє питання: чи можу я встановити проект CRS іншим способом, ніж я це зробив? Я хочу уникати ручного способу.


Я вирішив проблему, додавши наступний код:

qgis.utils.iface.mapCanvas().setMapUnits(0)
qgis.utils.iface.mapCanvas().refresh()

Це встановлює одиниці вимірювання, і масштаб оновлюється автоматично. 0 означає метри, 1 - для ступні, 2 - для ступеня, а 3 - для невідомого.

Відповіді:


7

Так, можливо. Плагін Openlayers від Sourcepole автоматично встановлює CRS на EPSG: 3857.

Подивіться на openlayers_layers.py та openlayers_plugin.py.


8

Трохи пізно відповісти, але у випадку, якщо хтось переходить на цю сторінку з google, не встановлюючи плагін, http://www.purplelinux.co.nz надає добру інформацію про це.

Приклад, знайдений у фіолетовому Linux (який працює чудово), пропонує наступне:

if iface.mapCanvas().mapRenderer().hasCrsTransformEnabled():
    my_crs = core.QgsCoordinateReferenceSystem(4326,core.QgsCoordinateReferenceSystem.EpsgCrsId)
    iface.mapCanvas().mapRenderer().setDestinationCrs(my_crs)


І ви навіть можете створити CRS, зателефонувавши:

QgsCoordinateReferenceSystem("PROPERTY:ID")

що було б:

QgsCoordinateReferenceSystem("EPSG:31467")

який IMHO робить код набагато читабельнішим.


1
Зверніть увагу, що код призначений для QGIS 2.X, і ви повинні побачити інші відповіді, перелічені тут для коду QGIS3
Містер

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.