2011-03-07 12 views
12

estoy usando el "buffer" método de la API de GEOS para crear un círculo sobre la base de un punto y un radio en GeoDjango, de acuerdo con esta respuesta: GeoDjango: How to create a circle based on point and radius¿Cómo convierto kilómetros en grados en Geodjango/GEOS?

Como señaló un comentarista, usted tiene que convertir el radio en km a grados ... pero ¿cómo? Supongo que es una fórmula rápida pero es griego para mí. Estaría agradecido por cualquier punteros.

+2

1 grado lat es aproximadamente 110.567 km en el ecuador a 111.699 km en los polos. Este [enlace] (http://www.movable-type.co.uk/scripts/gis-faq-5.1.html) puede ser de su interés. La conversión se basa en la circunferencia de la división de tierra en 360 grados. – DTing

+0

@Kriegar, debe publicar eso como respuesta, el enlace solo vale +1 :) – sarnold

Respuesta

12

La respuesta puede depender de la ubicación en la tierra. Cerca del ecuador, 1 km equivaldrá aproximadamente a 0.008 grados (1 km/40,000 km * 360 grados) de latitud y longitud, pero cerca de los polos, 1 km equivaldrá aproximadamente a 0.008 grados de latitud, pero podría tener muchos grados de longitud. (Si está a 1 km del polo, 1 km de viaje 'al oeste' le daría aproximadamente 57 grados de longitud al oeste.)

Pero, si el API solo quiere grados a lo largo de un gran círculo como medida, tal vez ' d sea suficiente para usar (n km/40,000 km * 360 grados). Al menos, 40,000km es "lo suficientemente bueno para mí" :) números más precisos are available.

+0

Muchas gracias, eso es lo suficientemente preciso para mí. – Jonas

6

1 deg lat es aproximadamente 110.567 km en el ecuador a 111.699 km en los polos.

Este link podría ser de su interés. La conversión se basa en la circunferencia de la división de tierra en 360 grados.

1 deg de largo es también aproximadamente 111 km en el ecuador y -> 0 mientras vas a los polos.

+0

¡Excelente! Gracias. :) – sarnold

0

distancia = grado * pi * diámetro/360

Usando una estimación aproximada de la radio de la Tierra: 6378 kilometros

1 Grado @ en el ecuador o a lo largo de la longitud es: 111,317 kilometros

1 grado lo largo de una latitud en latutide x grado es: (grados * pi * diámetro/360) * cos (latitud)

Así @ 60 latitud: 55 659 m en la dirección de longitud.

3

El buffer en la API django de GEOS creará un búfer usando las unidades que use su sistema de coordenadas actual.

Si está almacenando todo en 4326 (en lat/long degrees), tendrá que encontrar alguna forma complicada de convertir KM en grados. Pero ahora su buffer se distorsionará severamente cuanto más al norte vaya.

Una mejor solución es volver a proyectar su geometría en una proyección que mantenga el área, y con frecuencia ese tipo de proyección puede rastrear unidades en metros.

Por ejemplo, si va a crear zonas buffer en América del Norte, puede utilizar esta proyección que utiliza metros http://spatialreference.org/ref/sr-org/7314/

He aquí un ejemplo de cómo hacer que el uso de Django GEOS API:

from django.contrib.gis.geos import Point 

    # Defines a point in lat/long 
    p = Point(-70, 50) 

    # This projection defines lat/long coordinate system 
    p.srid = 4326 

    # Transform into the 7314 projection using the OGC WKT format to define that projection 
    p.transform('PROJCS["NA Lambert Azimuthal Equal Area",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["degree",0.0174532925199433]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["false_easting",0.0],PARAMETER["false_northing",0.0],PARAMETER["longitude_of_center",-100.0],PARAMETER["latitude_of_center",45.0],UNIT["meter",1.0]]') 

    # Creates a buffered polygon of 1000 meters in radius 
    poly = p.buffer(1000) 
Cuestiones relacionadas