I am trying to create buffer zones in meters/kilometers around a series of sites in Montreal, Canada. I used Google maps to obtain the coordinates for each site, and saved them in a .csv file. After importing my .csv file using the open data source manager, and adding an .shp layer I downloaded from the government of Canada, I get an initial map that looks like this:

Initial map I get when I import my .shp and .csv layers

First inconsistency: I notice that even though my site layer CRS is projected in web mercator, the default from Google maps (EPSG:4326 WGS83), but my project and layer CRS is EPSG:3347 Statistics Lambert Canada, however both layers align just fine after I import my points file

Open Data manager Window when I import my points file (.csv).

When I try to create my buffer zones, I find I can only use degrees, and QGIS suggests reprojecting my points file into a local CRS.

When I try creating buffer zones directly after importing my .csv points, I'm unable to meters/kilometers because of the layer's current CRS (EPSG:4326 WGS83).

I then change the points file CRS to match that of the project, and my sites end up somewhere in the Pacific ocean, despite the matching CRS (EPSG 3347)!

Sites after reprojecting to EPSG:3347 Statistics Lambert Canada, the project CRS.

I tried the solution from a similar post at Delimited text layer doesn't align with shapefile, but it didn't do the trick since my points were already aligned with the .shp file after importing them.

What am I missing ?

How can I use a local coordinate system to allow buffer zones in meters/kilometers, while keeping both layers aligned ?


1 Answer 1


You are getting confused between different ways QGIS can treat CRSs in layers and in a project.

Each layer has a CRS defined. Probably your CSV file of POIs is in EPSG:4326 (latitude, long), some layer or other is in "Web Mercator" (EPSG:3857), and probably your "shape file from the goverment" is in EPSG:3347 (a number of government-sourced maps are).

Your project and map canvas is also in some CRS. Usually, it's the CRS of the first layer added. That appears to be EPSG:3347.

When you then add another layer in a different CRS, QGIS reprojects it on the fly so it displays properly. However, when you do processing -- like buffers -- on a layer, it does it in that layer's native CRS. In the case of your point CSV, that's EPSG:4326. Since you want to buffer in metres, not degrees (the native unit of EPSG:4326), QGIS suggest you reproject. In this case, your best choice is to reproject to EPSG:3347.

The rest seems as if rather than reprojecting to EPSG:3347, you've merely told QGIS to set EPSG:3347 as the CRS, e.g. from the right click menu in the layer tree. It then interprets the existing latitude and longitude numbers as meters from the origin in EPSG:3347, which is why they are wildly off. This is intended if the wrong CRS were assigned. That is not your case. The right CRS (4326) is assigned given how the points are specified, you merely want to change that.

Therefore, either export (right click / Export / Save features as...) your point layer as a new layer with CRS EPSG:3347 specified, or use the Vector / Data Management / Reproject processing algorithm to do the same. This will recalculate the x,y, values of the points in the new CRS. You can then buffer in that CRS, in metres.

One should always buffer in a locally suitable projected CRS, such as what you have (for Montreal), or UTM/MTM. Never in EPSG:4326 (in degrees) or in EPSG:3857 (the scale is wrong off the equator.)

  • It worked ! :D Thank you so much for your help.
    – E. dex
    Mar 20, 2021 at 14:05

Not the answer you're looking for? Browse other questions tagged or ask your own question.