16

I am using QGIS 1.7.4-Wroclaw and working with an SHP layer in WGS84. I want to buffer out to a certain number of kilometers from this layer using the ftools buffer tool.

I understand that the buffer tool always uses the layer units, which for WGS84 are decimal degrees. We all know that degrees don't convert consistently to meters, so how should I go about making my buffers?

Is it necessary for me to convert the shapefiles to a different CRS that natively uses meters?

If so, how do I choose one?

5
  • What are the extents of your shapefile? We'd need this information to recommend a CRS.
    – nhopton
    Commented Jan 29, 2013 at 12:28
  • Yes, you'll have to reproject the Shapefile first (using fTools' "Reproject layer" tool, for example). Which projection is best depends on where your area is (longitude / latitude) and how large it is.
    – Jake
    Commented Jan 29, 2013 at 12:28
  • Thanks, @Jake and @nhopton! I'm buffering from several points in northern Taiwan, but the buffers will be in the range of 1000-2000km (covering about half of China as well as Taiwan).
    – Evan
    Commented Jan 29, 2013 at 13:12
  • 1
    This map is defined with a geographic coordinate system (latitude/longitude) but the map extents suggests that it is actually a projected coordinate system (e.g., Mercator). If so, the results from line or area measurements will be incorrect. To fix this, explicitly set an appropriate map coordinate system using the Settings:Project Properties menu.
    – Ger
    Commented Jan 29, 2013 at 14:00
  • It's just a cropped Natural Earth file, actually, so it's just in WGS84.
    – Evan
    Commented Jan 29, 2013 at 14:57

2 Answers 2

15

For this application, I would use an Azimuthal Equidistant projection centered in the middle of your source points. This projection has the nice feature of all radial distances around the center of the projection being accurate.

That particular projection is not part of QGIS standard projections. You can define your own using Settings/Custom CRS with the command string +proj=aeqd +lat_0=24.5 +lon_0=121.5, but unfortunately, custom projections can't be used by the fTools Reprojection tool. Instead, you can transform your dataset on the command line using the command

ogr2ogr points_reprojected.shp points.shp -t_srs "+proj=aeqd +lat_0=24.5 +lon_0=121.5"

Then you can do the buffering in QGIS using the points_reprojected.shp shapefile.

A 2000km buffer around a point in north Taiwan looks like a circle in an orthographic projection centered on the point:

... and squashed in WGS84:

2
  • Thanks - reprojecting to Azimuthal Equidistant then buffering worked beautifully! In fact, I was already using that projection for on the fly projection, I just didn't realize it would have the units I needed. But I didn't have to use the command line to reproject: Layer > Save as... did the trick (after defining the custom CRS).
    – Evan
    Commented Jan 29, 2013 at 15:04
  • @Evan: Glad to hear it! If you consider your question answered, you can mark it as such by clicking the tick mark next to the answer
    – Jake
    Commented Jan 29, 2013 at 15:05
1

Hum, interesting. As a first try I think I'd have a look at generating the (huge) buffers as KML. You can do this here:

http://www.thesamestory.com/kmlcircle/

You will need to enter the lat/lon for a point and a buffer distance. What you get back is a KML file containing the circle. Have a look at this in Google Earth and if it's okay, load it into QGIS.

enter image description here

4
  • 1
    Unfortunately, QGIS Lisboa does not like the generated kml file.
    – AndreJ
    Commented Jan 29, 2013 at 14:17
  • QGIS doesn't like the file name. Try changing it to (say) "circle1.kml". But I should have checked. N.
    – nhopton
    Commented Jan 29, 2013 at 14:32
  • Okay, load the file into Google Earth and then save as KML. Then change the file name from the default name. ogr2ogr converts the file to SHP quite nicely too. N.
    – nhopton
    Commented Jan 29, 2013 at 14:35
  • Jake's solution ended up working out perfectly for me, but this could be a good way to do it too. I'll keep it in mind. Thanks!
    – Evan
    Commented Jan 29, 2013 at 15:15

Your Answer

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

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