Soy nuevo en esto también y he estado estudiando sobre el tema recientemente.
Aquí hay un método que encontré usando el paquete python gdal (el paquete osr está incluido en gdal). El paquete de gdal es bastante poderoso, pero la documentación podría ser mejor.
Esto se deriva de una discusión aquí: http://www.mail-archive.com/[email protected]/msg12398.html
import osr
def transform_utm_to_wgs84(easting, northing, zone):
utm_coordinate_system = osr.SpatialReference()
utm_coordinate_system.SetWellKnownGeogCS("WGS84") # Set geographic coordinate system to handle lat/lon
is_northern = northing > 0
utm_coordinate_system.SetUTM(zone, is_northern)
wgs84_coordinate_system = utm_coordinate_system.CloneGeogCS() # Clone ONLY the geographic coordinate system
# create transform component
utm_to_wgs84_transform = osr.CoordinateTransformation(utm_coordinate_system, wgs84_coordinate_system) # (<from>, <to>)
return utm_to_wgs84_transform.TransformPoint(easting, northing, 0) # returns lon, lat, altitude
Y aquí está el método para la conversión de un lat, lon en WGS84 (lo más informe de las unidades de GPS) a UTM:
def transform_wgs84_to_utm(lon, lat):
def get_utm_zone(longitude):
return (int(1+(longitude+180.0)/6.0))
def is_northern(latitude):
"""
Determines if given latitude is a northern for UTM
"""
if (latitude < 0.0):
return 0
else:
return 1
utm_coordinate_system = osr.SpatialReference()
utm_coordinate_system.SetWellKnownGeogCS("WGS84") # Set geographic coordinate system to handle lat/lon
utm_coordinate_system.SetUTM(get_utm_zone(lon), is_northern(lat))
wgs84_coordinate_system = utm_coordinate_system.CloneGeogCS() # Clone ONLY the geographic coordinate system
# create transform component
wgs84_to_utm_transform = osr.CoordinateTransformation(wgs84_coordinate_system, utm_coordinate_system) # (<from>, <to>)
return wgs84_to_utm_transform.TransformPoint(lon, lat, 0) # returns easting, northing, altitude
También encontré que si ya tiene instalado django/gdal y conoce el código EPSG para la zona UTM en la que está trabajando, puede usar la transformada Point()
() método.
from django.contrib.gis.geos import Point
utm2epsg = {"54N": 3185, ...}
p = Point(lon, lat, srid=4326) # 4326 = WGS84 epsg code
p.transform(utm2epsg["54N"])
No te culpo por pensar que fue algo simple. Me convertí la semana pasada de Lat/Lon a Easting/Northing para Miller Projection y todavía estoy celebrando dentro. – wonderchook
¿Por qué su función requiere zona? ¿No deberías solo necesitar el este, el hemisferio norte? –
@Franki: Porque las coordenadas UTM son relativas a las zonas predefinidas. [UTM en Wikipedia] (http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system). – Hubro