I have incorporated a geometry generator into a style in QGIS 3.4 which creates a callout line from a feature to its relevant spatial position.

For reasons out of my control our projects use CRS: EPSG:27700 but some of the layers we need to import use CRS: EPSG:4326. QGIS handles this fine and can plot the features, but the geometry generator cannot.

I know I could convert beforehand but this is not practical for all our users so I just want the expression to handle this for them.

I am looking for a method to convert from '4326' to '27700' within the expression but I am not currently aware if this is possible.

My current geometry generator expression

make_line(make_point($x, $y), make_point("Longitude", "Latitude"))

The "Longitude" and "Latitude" fields relate to the fields in the relevant layer which is projected with EPSG:4326.

  • 1
    Have you tried something with transform($geomerty, 'EPSG:4326', 'EPSG:27700')?
    – Taras
    Jun 28, 2019 at 10:02
  • 1
    Have you had a look at the transform-expression? I am not exactly sure, where to place it, though. Based on Taras comment, I'd say make_line(make_point($x,$y),transform(make_point("Longitude",Latitude"),'EPSG:4326','EPSG:27700')).
    – Erik
    Jun 28, 2019 at 10:02
  • Thank you both - I did not consider this. I have just tried @Erik suggestion but this is still pointing towards the original lat/long position
    – AWGIS
    Jun 28, 2019 at 10:13
  • 1
    Try adding new fields to the attribute table with transform("Longitude",'EPSG:4326','EPSG:27700') and then using these fields instead of Longitude/Latitude.
    – Erik
    Jun 28, 2019 at 11:17
  • 1
    The geometry generator uses the layer's CRS. If the layer is in EPSG:4326 and the lat/long coordinates are also in EPSG:4326, the geometry generator should render make_point("Longitude",Latitude") correctly.
    – csk
    Jul 2, 2019 at 20:38


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.