Transforming single QgsGeometry object from one CRS to another using PyQGIS? Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Convert from EPSG 3857 to EPSG 4326 QGIS2.18Specifying CRS for QgsCoordinateTransform?Splitting zAware polyline by points using ArcObjects with C#?How do I find the intersection of two polylines in PostGIS?Suitable projection for a map of JapanHelp, I have 10,000+ .shp files covering 3 UTM zones with unknown projectionsHow to Transform Many Projections Into One With SQL ServerChoosing UTM zone to use for large country?Changing projection on each page of data driven pagesHow can I find out what transformation geoserver is using?Looping Projection in ArcGIS ModelBuilder?

If my PI received research grants from a company to be able to pay my postdoc salary, did I have a potential conflict interest too?

Is it ethical to give a final exam after the professor has quit before teaching the remaining chapters of the course?

Amount of permutations on an NxNxN Rubik's Cube

Is it common practice to audition new musicians 1-2-1 before rehearsing with the entire band?

Fundamental Solution of the Pell Equation

What are the out-of-universe reasons for the references to Toby Maguire-era Spider-Man in ITSV

What is the meaning of the new sigil in Game of Thrones Season 8 intro?

Can a new player join a group only when a new campaign starts?

How to tell that you are a giant?

Generate an RGB colour grid

How to down pick a chord with skipped strings?

What is the longest distance a player character can jump in one leap?

Wu formula for manifolds with boundary

How to convince students of the implication truth values?

When a candle burns, why does the top of wick glow if bottom of flame is hottest?

Do I really need recursive chmod to restrict access to a folder?

Extracting terms with certain heads in a function

3 doors, three guards, one stone

T-test, ANOVA or Regression, what's the difference?

How to answer "Have you ever been terminated?"

Where are Serre’s lectures at Collège de France to be found?

Why wasn't DOSKEY integrated with command.com?

2001: A Space Odyssey's use of the song "Daisy Bell" (Bicycle Built for Two); life imitates art or vice-versa?

What do you call the main part of a joke?



Transforming single QgsGeometry object from one CRS to another using PyQGIS?



Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)
Announcing the arrival of Valued Associate #679: Cesar Manara
Unicorn Meta Zoo #1: Why another podcast?Convert from EPSG 3857 to EPSG 4326 QGIS2.18Specifying CRS for QgsCoordinateTransform?Splitting zAware polyline by points using ArcObjects with C#?How do I find the intersection of two polylines in PostGIS?Suitable projection for a map of JapanHelp, I have 10,000+ .shp files covering 3 UTM zones with unknown projectionsHow to Transform Many Projections Into One With SQL ServerChoosing UTM zone to use for large country?Changing projection on each page of data driven pagesHow can I find out what transformation geoserver is using?Looping Projection in ArcGIS ModelBuilder?



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








5















I have a polyline layer with roads in WGS84 that covers several UTM zones. For every road I need to place a set of points at different distances (in metres). To do so I want to reproject each road to respective UTM zone, create points in this UTM zone, reproject points to WGS84 and add them to respectful layer. There is aQgsCoordinateTransform() class that allows to perform transformation for individual points, but it doesn't accept polylines. I guess I could manually disassemble polylines into the set of points, transform each of them and recreate a polyline, but I hope that there is a build-in method or class that I overlooked, that allows to transform individual polylines.










share|improve this question
























  • One option would be to convert your polyline to a polygon, then transformPolygon() that, then just take the outer ring again. Its pretty much just QVector operations all the way down...

    – BradHards
    Sep 21 '15 at 10:11


















5















I have a polyline layer with roads in WGS84 that covers several UTM zones. For every road I need to place a set of points at different distances (in metres). To do so I want to reproject each road to respective UTM zone, create points in this UTM zone, reproject points to WGS84 and add them to respectful layer. There is aQgsCoordinateTransform() class that allows to perform transformation for individual points, but it doesn't accept polylines. I guess I could manually disassemble polylines into the set of points, transform each of them and recreate a polyline, but I hope that there is a build-in method or class that I overlooked, that allows to transform individual polylines.










share|improve this question
























  • One option would be to convert your polyline to a polygon, then transformPolygon() that, then just take the outer ring again. Its pretty much just QVector operations all the way down...

    – BradHards
    Sep 21 '15 at 10:11














5












5








5


1






I have a polyline layer with roads in WGS84 that covers several UTM zones. For every road I need to place a set of points at different distances (in metres). To do so I want to reproject each road to respective UTM zone, create points in this UTM zone, reproject points to WGS84 and add them to respectful layer. There is aQgsCoordinateTransform() class that allows to perform transformation for individual points, but it doesn't accept polylines. I guess I could manually disassemble polylines into the set of points, transform each of them and recreate a polyline, but I hope that there is a build-in method or class that I overlooked, that allows to transform individual polylines.










share|improve this question
















I have a polyline layer with roads in WGS84 that covers several UTM zones. For every road I need to place a set of points at different distances (in metres). To do so I want to reproject each road to respective UTM zone, create points in this UTM zone, reproject points to WGS84 and add them to respectful layer. There is aQgsCoordinateTransform() class that allows to perform transformation for individual points, but it doesn't accept polylines. I guess I could manually disassemble polylines into the set of points, transform each of them and recreate a polyline, but I hope that there is a build-in method or class that I overlooked, that allows to transform individual polylines.







coordinate-system pyqgis geometry line






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jul 29 '17 at 7:53









PolyGeo

54k1782246




54k1782246










asked Sep 21 '15 at 8:44









SS_RebeliousSS_Rebelious

4,64611953




4,64611953












  • One option would be to convert your polyline to a polygon, then transformPolygon() that, then just take the outer ring again. Its pretty much just QVector operations all the way down...

    – BradHards
    Sep 21 '15 at 10:11


















  • One option would be to convert your polyline to a polygon, then transformPolygon() that, then just take the outer ring again. Its pretty much just QVector operations all the way down...

    – BradHards
    Sep 21 '15 at 10:11

















One option would be to convert your polyline to a polygon, then transformPolygon() that, then just take the outer ring again. Its pretty much just QVector operations all the way down...

– BradHards
Sep 21 '15 at 10:11






One option would be to convert your polyline to a polygon, then transformPolygon() that, then just take the outer ring again. Its pretty much just QVector operations all the way down...

– BradHards
Sep 21 '15 at 10:11











2 Answers
2






active

oldest

votes


















12














use QgsGeometry.transform( QgsCoordinateTransform tr ). for example after created your instance of QgsCoordinateTransform with source and dest crs, for each geometry instance do:



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


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



beware that the transformation (applying QgsCoordinateTransform) will change the QgsGeometry instance.






share|improve this answer

























  • Thank you for this answer. The operation gives me back a 0 number and my geometry doesn't seems to be reprojected.

    – SIGIS
    Sep 14 '17 at 8:42











  • can you give more details abut what you did? e.g. wkt of the geom, origin and dest epsg code and all that can be usefl to replicate. Obviously also qgis version and platform. tnx

    – Luigi Pirelli
    Sep 14 '17 at 10:54











  • Ok I missed a step to get a QgsCoordinateSystemReference class in the choosen coordinate eg 2154. It still gave back a 0 but the vertex has changed their coordinate.

    – SIGIS
    Sep 14 '17 at 12:23











  • This codesnippet does not work anymore in QGIS 3.4.4 : TypeError: QgsCoordinateTransform(): arguments did not match any overloaded call: overload 1: too many arguments overload 2: not enough arguments overload 3: not enough arguments overload 4: not enough arguments overload 5: argument 1 has unexpected type 'QgsCoordinateReferenceSystem'

    – Riccardo
    Jan 25 at 15:11







  • 1





    @Riccardo The API has changed and you need to add a third parameter QgsCoordinateTransformContext. You can get it from QgsProject.instance(). So the call should be like QgsCoordinateTransform(crsSrc, crsDest, QgsProject.instance())

    – spatialthoughts
    Apr 4 at 11:19



















3














Old Question, but duckduckgo brings you here for "pyqgis transform single geometry"



Just like Riccardo Pointed out, the accepted answer does not work for scripts in QGIS 3, the situation is explained in the api reference:




Python scripts should utilize the QgsProject.instance() project instance when creating QgsCoordinateTransform. This will ensure that any datum transforms defined in the project will be correctly respected during coordinate transforms. E.g.



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



Using QgsCoordinateTransform in QGIS 3 will transform the geometry instance inplace, and return 0:



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

geom
#[out]: <QgsGeometry: Point (930236.95432910311501473 3567516.9810206750407815)>

back_tr = QgsCoordinateTransform(destCrs, sourceCrs, QgsProject.instance())
geom.transform(back_tr)
#[out]: 0

geom
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>


If you want to copy an already existing QgsGeometry Instance, the QgsGeometry class constructor will make the trick. From the docs:




Class: QgsGeometry
class qgis.core.QgsGeometry
Bases: sip.wrapper



Constructor



QgsGeometry(QgsGeometry) Copy constructor will prompt a deep copy of the object




example:



geom2 = QgsGeometry(geom)
geom2
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>
geom
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>
geom2.transform(tr)
#[out]: 0
geom2
#[out]: <QgsGeometry: Point (930236.95432910579256713 3567516.98102056747302413)>
geom
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>





share|improve this answer

























  • OMG, using project as an argument for transformation looks like a terrible design to me...

    – SS_Rebelious
    Mar 8 at 20:50






  • 1





    I was just copying the docs there.

    – Javier JC
    Mar 8 at 21:23











Your Answer








StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "79"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f163645%2ftransforming-single-qgsgeometry-object-from-one-crs-to-another-using-pyqgis%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























2 Answers
2






active

oldest

votes








2 Answers
2






active

oldest

votes









active

oldest

votes






active

oldest

votes









12














use QgsGeometry.transform( QgsCoordinateTransform tr ). for example after created your instance of QgsCoordinateTransform with source and dest crs, for each geometry instance do:



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


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



beware that the transformation (applying QgsCoordinateTransform) will change the QgsGeometry instance.






share|improve this answer

























  • Thank you for this answer. The operation gives me back a 0 number and my geometry doesn't seems to be reprojected.

    – SIGIS
    Sep 14 '17 at 8:42











  • can you give more details abut what you did? e.g. wkt of the geom, origin and dest epsg code and all that can be usefl to replicate. Obviously also qgis version and platform. tnx

    – Luigi Pirelli
    Sep 14 '17 at 10:54











  • Ok I missed a step to get a QgsCoordinateSystemReference class in the choosen coordinate eg 2154. It still gave back a 0 but the vertex has changed their coordinate.

    – SIGIS
    Sep 14 '17 at 12:23











  • This codesnippet does not work anymore in QGIS 3.4.4 : TypeError: QgsCoordinateTransform(): arguments did not match any overloaded call: overload 1: too many arguments overload 2: not enough arguments overload 3: not enough arguments overload 4: not enough arguments overload 5: argument 1 has unexpected type 'QgsCoordinateReferenceSystem'

    – Riccardo
    Jan 25 at 15:11







  • 1





    @Riccardo The API has changed and you need to add a third parameter QgsCoordinateTransformContext. You can get it from QgsProject.instance(). So the call should be like QgsCoordinateTransform(crsSrc, crsDest, QgsProject.instance())

    – spatialthoughts
    Apr 4 at 11:19
















12














use QgsGeometry.transform( QgsCoordinateTransform tr ). for example after created your instance of QgsCoordinateTransform with source and dest crs, for each geometry instance do:



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


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



beware that the transformation (applying QgsCoordinateTransform) will change the QgsGeometry instance.






share|improve this answer

























  • Thank you for this answer. The operation gives me back a 0 number and my geometry doesn't seems to be reprojected.

    – SIGIS
    Sep 14 '17 at 8:42











  • can you give more details abut what you did? e.g. wkt of the geom, origin and dest epsg code and all that can be usefl to replicate. Obviously also qgis version and platform. tnx

    – Luigi Pirelli
    Sep 14 '17 at 10:54











  • Ok I missed a step to get a QgsCoordinateSystemReference class in the choosen coordinate eg 2154. It still gave back a 0 but the vertex has changed their coordinate.

    – SIGIS
    Sep 14 '17 at 12:23











  • This codesnippet does not work anymore in QGIS 3.4.4 : TypeError: QgsCoordinateTransform(): arguments did not match any overloaded call: overload 1: too many arguments overload 2: not enough arguments overload 3: not enough arguments overload 4: not enough arguments overload 5: argument 1 has unexpected type 'QgsCoordinateReferenceSystem'

    – Riccardo
    Jan 25 at 15:11







  • 1





    @Riccardo The API has changed and you need to add a third parameter QgsCoordinateTransformContext. You can get it from QgsProject.instance(). So the call should be like QgsCoordinateTransform(crsSrc, crsDest, QgsProject.instance())

    – spatialthoughts
    Apr 4 at 11:19














12












12








12







use QgsGeometry.transform( QgsCoordinateTransform tr ). for example after created your instance of QgsCoordinateTransform with source and dest crs, for each geometry instance do:



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


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



beware that the transformation (applying QgsCoordinateTransform) will change the QgsGeometry instance.






share|improve this answer















use QgsGeometry.transform( QgsCoordinateTransform tr ). for example after created your instance of QgsCoordinateTransform with source and dest crs, for each geometry instance do:



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


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



beware that the transformation (applying QgsCoordinateTransform) will change the QgsGeometry instance.







share|improve this answer














share|improve this answer



share|improve this answer








edited Apr 10 at 8:39

























answered Sep 21 '15 at 13:25









Luigi PirelliLuigi Pirelli

1,623811




1,623811












  • Thank you for this answer. The operation gives me back a 0 number and my geometry doesn't seems to be reprojected.

    – SIGIS
    Sep 14 '17 at 8:42











  • can you give more details abut what you did? e.g. wkt of the geom, origin and dest epsg code and all that can be usefl to replicate. Obviously also qgis version and platform. tnx

    – Luigi Pirelli
    Sep 14 '17 at 10:54











  • Ok I missed a step to get a QgsCoordinateSystemReference class in the choosen coordinate eg 2154. It still gave back a 0 but the vertex has changed their coordinate.

    – SIGIS
    Sep 14 '17 at 12:23











  • This codesnippet does not work anymore in QGIS 3.4.4 : TypeError: QgsCoordinateTransform(): arguments did not match any overloaded call: overload 1: too many arguments overload 2: not enough arguments overload 3: not enough arguments overload 4: not enough arguments overload 5: argument 1 has unexpected type 'QgsCoordinateReferenceSystem'

    – Riccardo
    Jan 25 at 15:11







  • 1





    @Riccardo The API has changed and you need to add a third parameter QgsCoordinateTransformContext. You can get it from QgsProject.instance(). So the call should be like QgsCoordinateTransform(crsSrc, crsDest, QgsProject.instance())

    – spatialthoughts
    Apr 4 at 11:19


















  • Thank you for this answer. The operation gives me back a 0 number and my geometry doesn't seems to be reprojected.

    – SIGIS
    Sep 14 '17 at 8:42











  • can you give more details abut what you did? e.g. wkt of the geom, origin and dest epsg code and all that can be usefl to replicate. Obviously also qgis version and platform. tnx

    – Luigi Pirelli
    Sep 14 '17 at 10:54











  • Ok I missed a step to get a QgsCoordinateSystemReference class in the choosen coordinate eg 2154. It still gave back a 0 but the vertex has changed their coordinate.

    – SIGIS
    Sep 14 '17 at 12:23











  • This codesnippet does not work anymore in QGIS 3.4.4 : TypeError: QgsCoordinateTransform(): arguments did not match any overloaded call: overload 1: too many arguments overload 2: not enough arguments overload 3: not enough arguments overload 4: not enough arguments overload 5: argument 1 has unexpected type 'QgsCoordinateReferenceSystem'

    – Riccardo
    Jan 25 at 15:11







  • 1





    @Riccardo The API has changed and you need to add a third parameter QgsCoordinateTransformContext. You can get it from QgsProject.instance(). So the call should be like QgsCoordinateTransform(crsSrc, crsDest, QgsProject.instance())

    – spatialthoughts
    Apr 4 at 11:19

















Thank you for this answer. The operation gives me back a 0 number and my geometry doesn't seems to be reprojected.

– SIGIS
Sep 14 '17 at 8:42





Thank you for this answer. The operation gives me back a 0 number and my geometry doesn't seems to be reprojected.

– SIGIS
Sep 14 '17 at 8:42













can you give more details abut what you did? e.g. wkt of the geom, origin and dest epsg code and all that can be usefl to replicate. Obviously also qgis version and platform. tnx

– Luigi Pirelli
Sep 14 '17 at 10:54





can you give more details abut what you did? e.g. wkt of the geom, origin and dest epsg code and all that can be usefl to replicate. Obviously also qgis version and platform. tnx

– Luigi Pirelli
Sep 14 '17 at 10:54













Ok I missed a step to get a QgsCoordinateSystemReference class in the choosen coordinate eg 2154. It still gave back a 0 but the vertex has changed their coordinate.

– SIGIS
Sep 14 '17 at 12:23





Ok I missed a step to get a QgsCoordinateSystemReference class in the choosen coordinate eg 2154. It still gave back a 0 but the vertex has changed their coordinate.

– SIGIS
Sep 14 '17 at 12:23













This codesnippet does not work anymore in QGIS 3.4.4 : TypeError: QgsCoordinateTransform(): arguments did not match any overloaded call: overload 1: too many arguments overload 2: not enough arguments overload 3: not enough arguments overload 4: not enough arguments overload 5: argument 1 has unexpected type 'QgsCoordinateReferenceSystem'

– Riccardo
Jan 25 at 15:11






This codesnippet does not work anymore in QGIS 3.4.4 : TypeError: QgsCoordinateTransform(): arguments did not match any overloaded call: overload 1: too many arguments overload 2: not enough arguments overload 3: not enough arguments overload 4: not enough arguments overload 5: argument 1 has unexpected type 'QgsCoordinateReferenceSystem'

– Riccardo
Jan 25 at 15:11





1




1





@Riccardo The API has changed and you need to add a third parameter QgsCoordinateTransformContext. You can get it from QgsProject.instance(). So the call should be like QgsCoordinateTransform(crsSrc, crsDest, QgsProject.instance())

– spatialthoughts
Apr 4 at 11:19






@Riccardo The API has changed and you need to add a third parameter QgsCoordinateTransformContext. You can get it from QgsProject.instance(). So the call should be like QgsCoordinateTransform(crsSrc, crsDest, QgsProject.instance())

– spatialthoughts
Apr 4 at 11:19














3














Old Question, but duckduckgo brings you here for "pyqgis transform single geometry"



Just like Riccardo Pointed out, the accepted answer does not work for scripts in QGIS 3, the situation is explained in the api reference:




Python scripts should utilize the QgsProject.instance() project instance when creating QgsCoordinateTransform. This will ensure that any datum transforms defined in the project will be correctly respected during coordinate transforms. E.g.



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



Using QgsCoordinateTransform in QGIS 3 will transform the geometry instance inplace, and return 0:



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

geom
#[out]: <QgsGeometry: Point (930236.95432910311501473 3567516.9810206750407815)>

back_tr = QgsCoordinateTransform(destCrs, sourceCrs, QgsProject.instance())
geom.transform(back_tr)
#[out]: 0

geom
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>


If you want to copy an already existing QgsGeometry Instance, the QgsGeometry class constructor will make the trick. From the docs:




Class: QgsGeometry
class qgis.core.QgsGeometry
Bases: sip.wrapper



Constructor



QgsGeometry(QgsGeometry) Copy constructor will prompt a deep copy of the object




example:



geom2 = QgsGeometry(geom)
geom2
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>
geom
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>
geom2.transform(tr)
#[out]: 0
geom2
#[out]: <QgsGeometry: Point (930236.95432910579256713 3567516.98102056747302413)>
geom
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>





share|improve this answer

























  • OMG, using project as an argument for transformation looks like a terrible design to me...

    – SS_Rebelious
    Mar 8 at 20:50






  • 1





    I was just copying the docs there.

    – Javier JC
    Mar 8 at 21:23















3














Old Question, but duckduckgo brings you here for "pyqgis transform single geometry"



Just like Riccardo Pointed out, the accepted answer does not work for scripts in QGIS 3, the situation is explained in the api reference:




Python scripts should utilize the QgsProject.instance() project instance when creating QgsCoordinateTransform. This will ensure that any datum transforms defined in the project will be correctly respected during coordinate transforms. E.g.



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



Using QgsCoordinateTransform in QGIS 3 will transform the geometry instance inplace, and return 0:



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

geom
#[out]: <QgsGeometry: Point (930236.95432910311501473 3567516.9810206750407815)>

back_tr = QgsCoordinateTransform(destCrs, sourceCrs, QgsProject.instance())
geom.transform(back_tr)
#[out]: 0

geom
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>


If you want to copy an already existing QgsGeometry Instance, the QgsGeometry class constructor will make the trick. From the docs:




Class: QgsGeometry
class qgis.core.QgsGeometry
Bases: sip.wrapper



Constructor



QgsGeometry(QgsGeometry) Copy constructor will prompt a deep copy of the object




example:



geom2 = QgsGeometry(geom)
geom2
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>
geom
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>
geom2.transform(tr)
#[out]: 0
geom2
#[out]: <QgsGeometry: Point (930236.95432910579256713 3567516.98102056747302413)>
geom
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>





share|improve this answer

























  • OMG, using project as an argument for transformation looks like a terrible design to me...

    – SS_Rebelious
    Mar 8 at 20:50






  • 1





    I was just copying the docs there.

    – Javier JC
    Mar 8 at 21:23













3












3








3







Old Question, but duckduckgo brings you here for "pyqgis transform single geometry"



Just like Riccardo Pointed out, the accepted answer does not work for scripts in QGIS 3, the situation is explained in the api reference:




Python scripts should utilize the QgsProject.instance() project instance when creating QgsCoordinateTransform. This will ensure that any datum transforms defined in the project will be correctly respected during coordinate transforms. E.g.



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



Using QgsCoordinateTransform in QGIS 3 will transform the geometry instance inplace, and return 0:



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

geom
#[out]: <QgsGeometry: Point (930236.95432910311501473 3567516.9810206750407815)>

back_tr = QgsCoordinateTransform(destCrs, sourceCrs, QgsProject.instance())
geom.transform(back_tr)
#[out]: 0

geom
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>


If you want to copy an already existing QgsGeometry Instance, the QgsGeometry class constructor will make the trick. From the docs:




Class: QgsGeometry
class qgis.core.QgsGeometry
Bases: sip.wrapper



Constructor



QgsGeometry(QgsGeometry) Copy constructor will prompt a deep copy of the object




example:



geom2 = QgsGeometry(geom)
geom2
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>
geom
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>
geom2.transform(tr)
#[out]: 0
geom2
#[out]: <QgsGeometry: Point (930236.95432910579256713 3567516.98102056747302413)>
geom
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>





share|improve this answer















Old Question, but duckduckgo brings you here for "pyqgis transform single geometry"



Just like Riccardo Pointed out, the accepted answer does not work for scripts in QGIS 3, the situation is explained in the api reference:




Python scripts should utilize the QgsProject.instance() project instance when creating QgsCoordinateTransform. This will ensure that any datum transforms defined in the project will be correctly respected during coordinate transforms. E.g.



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



Using QgsCoordinateTransform in QGIS 3 will transform the geometry instance inplace, and return 0:



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

geom
#[out]: <QgsGeometry: Point (930236.95432910311501473 3567516.9810206750407815)>

back_tr = QgsCoordinateTransform(destCrs, sourceCrs, QgsProject.instance())
geom.transform(back_tr)
#[out]: 0

geom
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>


If you want to copy an already existing QgsGeometry Instance, the QgsGeometry class constructor will make the trick. From the docs:




Class: QgsGeometry
class qgis.core.QgsGeometry
Bases: sip.wrapper



Constructor



QgsGeometry(QgsGeometry) Copy constructor will prompt a deep copy of the object




example:



geom2 = QgsGeometry(geom)
geom2
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>
geom
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>
geom2.transform(tr)
#[out]: 0
geom2
#[out]: <QgsGeometry: Point (930236.95432910579256713 3567516.98102056747302413)>
geom
#[out]: <QgsGeometry: Point (5 19.99999999999911182)>






share|improve this answer














share|improve this answer



share|improve this answer








edited Mar 8 at 23:39

























answered Mar 8 at 14:44









Javier JCJavier JC

663




663












  • OMG, using project as an argument for transformation looks like a terrible design to me...

    – SS_Rebelious
    Mar 8 at 20:50






  • 1





    I was just copying the docs there.

    – Javier JC
    Mar 8 at 21:23

















  • OMG, using project as an argument for transformation looks like a terrible design to me...

    – SS_Rebelious
    Mar 8 at 20:50






  • 1





    I was just copying the docs there.

    – Javier JC
    Mar 8 at 21:23
















OMG, using project as an argument for transformation looks like a terrible design to me...

– SS_Rebelious
Mar 8 at 20:50





OMG, using project as an argument for transformation looks like a terrible design to me...

– SS_Rebelious
Mar 8 at 20:50




1




1





I was just copying the docs there.

– Javier JC
Mar 8 at 21:23





I was just copying the docs there.

– Javier JC
Mar 8 at 21:23

















draft saved

draft discarded
















































Thanks for contributing an answer to Geographic Information Systems Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f163645%2ftransforming-single-qgsgeometry-object-from-one-crs-to-another-using-pyqgis%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Romeo and Juliet ContentsCharactersSynopsisSourcesDate and textThemes and motifsCriticism and interpretationLegacyScene by sceneSee alsoNotes and referencesSourcesExternal linksNavigation menu"Consumer Price Index (estimate) 1800–"10.2307/28710160037-3222287101610.1093/res/II.5.31910.2307/45967845967810.2307/2869925286992510.1525/jams.1982.35.3.03a00050"Dada Masilo: South African dancer who breaks the rules"10.1093/res/os-XV.57.1610.2307/28680942868094"Sweet Sorrow: Mann-Korman's Romeo and Juliet Closes Sept. 5 at MN's Ordway"the original10.2307/45957745957710.1017/CCOL0521570476.009"Ram Leela box office collections hit massive Rs 100 crore, pulverises prediction"Archived"Broadway Revival of Romeo and Juliet, Starring Orlando Bloom and Condola Rashad, Will Close Dec. 8"Archived10.1075/jhp.7.1.04hon"Wherefore art thou, Romeo? To make us laugh at Navy Pier"the original10.1093/gmo/9781561592630.article.O006772"Ram-leela Review Roundup: Critics Hail Film as Best Adaptation of Romeo and Juliet"Archived10.2307/31946310047-77293194631"Romeo and Juliet get Twitter treatment""Juliet's Nurse by Lois Leveen""Romeo and Juliet: Orlando Bloom's Broadway Debut Released in Theaters for Valentine's Day"Archived"Romeo and Juliet Has No Balcony"10.1093/gmo/9781561592630.article.O00778110.2307/2867423286742310.1076/enst.82.2.115.959510.1080/00138380601042675"A plague o' both your houses: error in GCSE exam paper forces apology""Juliet of the Five O'Clock Shadow, and Other Wonders"10.2307/33912430027-4321339124310.2307/28487440038-7134284874410.2307/29123140149-661129123144728341M"Weekender Guide: Shakespeare on The Drive""balcony"UK public library membership"romeo"UK public library membership10.1017/CCOL9780521844291"Post-Zionist Critique on Israel and the Palestinians Part III: Popular Culture"10.2307/25379071533-86140377-919X2537907"Capulets and Montagues: UK exam board admit mixing names up in Romeo and Juliet paper"Istoria Novellamente Ritrovata di Due Nobili Amanti2027/mdp.390150822329610820-750X"GCSE exam error: Board accidentally rewrites Shakespeare"10.2307/29176390149-66112917639"Exam board apologises after error in English GCSE paper which confused characters in Shakespeare's Romeo and Juliet""From Mariotto and Ganozza to Romeo and Guilietta: Metamorphoses of a Renaissance Tale"10.2307/37323537323510.2307/2867455286745510.2307/28678912867891"10 Questions for Taylor Swift"10.2307/28680922868092"Haymarket Theatre""The Zeffirelli Way: Revealing Talk by Florentine Director""Michael Smuin: 1938-2007 / Prolific dance director had showy career"The Life and Art of Edwin BoothRomeo and JulietRomeo and JulietRomeo and JulietRomeo and JulietEasy Read Romeo and JulietRomeo and Julieteeecb12003684p(data)4099369-3n8211610759dbe00d-a9e2-41a3-b2c1-977dd692899302814385X313670221313670221

Creating closest line along the point''s azimuth using PostgreSQL Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Drawing line between points at specific distance in PostGIS?How to efficiently find the closest point over the dateline?How to find the nearest point by using PostGIS function?PostGIS nearest point with LATERAL JOIN in PostgreSQL 9.3+Creating a table and inserting selected streets using plpgsql functionsCreating a table that stores Distances and other columnSaving select query results (year wise) from PostgreSQL/PostGIS to text filesWhat is the information behind this geometry?How to give start and end vertex ids dynamically in pgr_dijkstra?Point to Polygon nearest distance DS_distance is not using geography index & knn <-> or <#> does not give result in orderLine to point conversion with start point and end point detection?

Crop image to path created in TikZ? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Crop an inserted image?TikZ pictures does not appear in posterImage behind and beyond crop marks?Tikz picture as large as possible on A4 PageTransparency vs image compression dilemmaHow to crop background from image automatically?Image does not cropTikzexternal capturing crop marks when externalizing pgfplots?How to include image path that contains a dollar signCrop image with left size given