4

What's the simplest way to make equidistant circles in PostGIS/QGIS? (my software versions are Postgres 9.3, PostGIS is 2.1, QGIS 2.10)

I tried this in PostGIS, but the circles that come near or across North pole get broken:

WITH series AS (SELECT generate_series(1, 10, 1) AS i)
SELECT
    st_buffer('point(82.9216 55.0292)'::geography, i * 1000000) buff,
    i AS id
FROM series;

enter image description here

Another attempt was to use MultiRingBuffer plugin, but it makes circles only in the selected crs, and this makes ellipses: 1,000 km wide east-west and 2,000 km wide north-south.

The horizontal segment is about 2,700 km, the vertical is 4,000 km, but they appear near the same ring. This ellipse has north-south "radius" (in real ground distance) twice bigger than east-west, in other words, it's not just a projection issue.

enter image description here

[edit] SOLUTION (see details in the answer below)

  • create a custom projection, here's my one

    +proj=aeqd  +R=6371000 +lat_0=<city latitude> +lon_0=<city longitude>
    
  • create a ESRI Shapefile layer in this custom projection, with your city in the center (you might need another layer in usual projections with your city there, to know where to put the point).

  • create buffers with Multi Ring Buffer or something else (check for units, I got metres)
  • change project's projection to Pseudo Mercator (3857)
  • transform polygons into lines (vector tools) and cut out the part near 180 longitude, so that they don't cross the entire map
culebrón
  • 2,314
  • 2
  • 23
  • 32
  • 1
    In the custom aeqd projection, your city will always be at (0;0). You can insert the coordinates as delimited text. – AndreJ Aug 03 '15 at 14:55
  • @AndreJ can't find where I can create or edit a point and set coordinates by text. Can you show a screenshot, please? – culebrón Aug 03 '15 at 15:35
  • Just create a text file with X,Y 0,0 in two lines with any text editor, then use Add Delimited Text Layer (the icon with the comma) to load it as a new layer. If you are prompted for the CRS, choose your custom aeqd, else use Set CRS for layer to set it. – AndreJ Aug 03 '15 at 17:53

2 Answers2

8

The best CRS for making equidistant circles is a custom azimuthal equidistant projection based on the center point:

+proj=aeqd  +R=6371000 +lat_0=51 +lon_0=7

After creating the circle, you might need to densify the geometries. Displaying the circles in any other CRS might give you ellipses, but that's the difference between equidistant and non equidistant projections.

EPSG:3857 Web Mercator is definitely NOT an equidistant projection.

AndreJ
  • 76,698
  • 5
  • 86
  • 162
  • By ellipses I meant ground distance "ellipses", as you can see it's radius is 2000 km east-west, and 4000 km north-south. – culebrón Aug 02 '15 at 16:45
  • 1
    Ok, the solution was: 1) create a projection as you suggest 2) create a layer in this projection (originally I used 4326, and buffers were calculated in this projection, not in the custom one) 3) create buffers with Multi Ring Buffer as @Slslam suggested 4) change project, ahem, projection to Pseudo Mercator. – culebrón Aug 02 '15 at 17:22
  • Accepting this answer as projection was the key problem. – culebrón Aug 02 '15 at 17:23
1

I think this is answered at here. To me, the best is using QGIS plugin called Multi Ring Buffer , details at here.

Learner
  • 3,496
  • 18
  • 34
  • The weird thing is what CRS should we use to make equidistant, not equi-degree circles? I updated the question. – culebrón Aug 02 '15 at 10:39
  • I think you shoud use "Psudo Web Mercator". BTW My QGIS just crashed, so needs time.I think correct "Shape", "Area", "Distance" and "Direction" can not be achieved by one projection system, one is good for one. Have a look http://gis.stackexchange.com/questions/5579/what-is-the-right-solution-and-map-projection-to-compute-distances-between-poi – Learner Aug 02 '15 at 10:55
  • Or try https://plugins.qgis.org/plugins/MultiDistanceBuffer/ and let me know. – Learner Aug 02 '15 at 11:50