Vairāk

Vienu QgsGeometry objektu pārveidot no viena DRS uz citu, izmantojot PyQGIS?

Vienu QgsGeometry objektu pārveidot no viena DRS uz citu, izmantojot PyQGIS?


Man ir poliline slānis ar ceļiem WGS84, kas aptver vairākas UTM zonas. Katram ceļam man jānovieto punktu kopa dažādos attālumos (metros). Lai to izdarītu, es vēlos katru ceļu pārprojektēt uz attiecīgo UTM zonu, izveidot punktus šajā UTM zonā, pārprojektēt punktus uz WGS84 un pievienot tos cieņpilnam slānim. Tur irQgsCoordinateTransform ()klase, kas ļauj veikt transformāciju atsevišķiem punktiem, bet tas nepieņem polilīnijas. Es domāju, ka es varētu manuāli izjaukt polilīnijas punktu kopā, pārveidot katru no tām un atjaunot polilīniju, bet es ceru, ka ir kāda iebūvēta metode vai klase, kuru es neievēroju, kas ļauj pārveidot atsevišķas polilīnijas.


izmantojiet QgsGeometry.transform (QgsCoordinateTransform tr). piemēram, pēc tam, kad esat izveidojis QgsCoordinateTransform eksemplāru ar avotu un dest crs, katram ģeometrijas gadījumam rīkojieties šādi:

sourceCrs = QgsCoordinateReferenceSystem (4326) destCrs = QgsCoordinateReferenceSystem (2154) tr = QgsCoordinateTransform (sourceCrs, destCrs, QgsProject.instance ()) myGeometryInstance.transform (tr)

https://qgis.org/api/classQgsCoordinateTransform.html#aa5ad428819ac020f8f5716e835ab754f

Uzmanieties, ka transformācija (piemērojot QgsCoordinateTransform) mainīs QgsGeometry gadījumu.


Vecais jautājums, bet duckduckgo jūs aizvedīs šeit, lai "Pyqgis pārveidotu vienu ģeometriju"

Tāpat kā Riccardo norādīja, pieņemtā atbilde nedarbojas QGIS 3 skriptiem, situācija ir paskaidrota api atsaucē:

Python skriptiem, veidojot QgsCoordinateTransform, jāizmanto projekta eksemplārs QgsProject.instance (). Tas nodrošinās, ka koordinātu transformāciju laikā tiks pareizi ievēroti visi projektā noteiktie bāzes punktu pārveidojumi. Piem.,

transform = QgsCoordinateTransform (QgsCoordinateReferenceSystem ("EPSG: 3111"), QgsCoordinateReferenceSystem ("EPSG: 4326"), QgsProject.instance ())

Izmantojot QgsCoordinateTransform QGIS 3, ģeometrijas eksemplārs tiks pārveidots lokāli un atgriezīsies 0:

geom = QgsGeometry (QgsPoint (5,20)) sourceCrs = QgsCoordinateReferenceSystem (4326) destCrs = QgsCoordinateReferenceSystem (2154) tr = QgsCoordinateTransform (sourceCrs, destCrs, QgsProject.instance ()) geom.transform ({0} # [ārā]:  back_tr = QgsCoordinateTransform (destCrs, sourceCrs, QgsProject.instance ()) geom.transform (back_tr) # [out]: 0 geom # [out]: 

Ja vēlaties kopēt jau esošu QgsGeometry instanci, QgsGeometry klases konstruktors padarīs šo triku. No dokumentiem:

Klase: QgsGeometry klase qgis.core.QgsGeometry Bāzes: sip.wrapper

Konstruktors

QgsGeometry (QgsGeometry) Kopēšanas konstruktors pieprasīs dziļu objekta kopiju

piemērs:

geom2 = QgsGeometry (geom) geom2 # [out]:  geom # [out]:  geom2.transform (tr) # [out]: 0 geom2 # [out]:  geom # [out]: