Usted podría utilizar la proj4 biblioteca para describir un círculo con el gran círculo de la distancia.
Por ejemplo, aquí está 3000 kilometros radio de Edimburgo, Tokio, Ciudad del Cabo y Quito en wgs84/Equirectangular. Sólo Quito es vagamente 'la ronda', debido a su proximidad al ecuador. También he añadido en una sola densificado habló de la línea en un azimut de 36 grados (aprox NE)
Si cambiamos a un azimutal equidistante de proyección centrada en Edimburgo, verás el radio alrededor de Edimburgo resolver un círculo...
En Mercator (como su aplicación web), puedes ver más distorsión a medida que se aleja de la línea del ecuador, pero los amortiguadores son más elíptica.
El siguiente código en python que hace que (requiere pyproj y bien formada)
import pyproj
from shapely.geometry import Polygon, MultiPoint, LineString
import math
def geodesicpointbuffer(longitude, latitude,
segments, distance_m,
geom_type=MultiPoint):
"""
Creates a buffer in meters around a point given as long, lat in WGS84
Uses the geodesic, so should be more accurate over larger distances
:param longitude: center point longitude
:param latitude: center point latitude
:param segments: segments to approximate (more = smoother)
:param distance_m: distance in meters
:param geom_type: shapely type (e.g. Multipoint, Linestring, Polygon)
:return: tuple (proj4 string, WKT of buffer geometry)
"""
geodesic = pyproj.Geod(ellps='WGS84')
coords = []
for i in range(0, segments):
angle = (360.0 / segments) * float(i)
x1, y1, z1 = geodesic.fwd(lons=longitude,
lats=latitude,
az=angle,
dist=distance_m,
radians=False)
coords.append((x1, y1))
# makes a great circle for one spoke.
if i==200:
example = geodesic.npts(longitude,latitude,x1,y1,1000)
coords2 = []
for xx,yy in example:
coords2.append((xx,yy))
coords2.append((x1,y1)) # make sure we include endpoint ;-)
flight = LineString(coords2)
print(flight.wkt)
ring = geom_type(coords)
return "+init=EPSG:4326", ring.wkt
def main():
# example : Cape Town. 3000km buffer.
spec, wkt = geodesicpointbuffer(18.4637082653, -33.8496404007, 2000, 3000000.0, Polygon)
print(spec)
print(wkt)
if __name__ == "__main__":
main()
Puede pegar el WKT de salida en QGIS usando el útil QuickWKT plugin.
Usted podría utilizar otros métodos - como coneypylon mencionado, podría crear un círculo en una costumbre a la misma distancia de proyección en metros, centrada en su punto de partida. Me parece sin embargo que para las grandes distancias que hay un error que se arrastra (sólo un par de km a 2000 km, pero intercontinental distancias de estos errores se pueden montar)
De la memoria, la mmqgis plugin permite el almacenamiento en búfer en el km. No estoy seguro de qué método se utiliza, sin embargo.
Tenga en cuenta que usted podría tener problemas para renderizar polígonos en QGIS que cruzar el antimeridian si estás empezando en Asia - ogr2ogr con el -wrapdateline opción puede ayudar aquí. Usted puede encontrar que esto es menos de un problema con openlayers/folleto, si mal no recuerdo permiten longitudes de más de 180 y menos de -180.
Hay una buena valoración crítica sobre geodésica de almacenamiento en búfer aquí en el blog de esri.