¿Convertir las coordenadas proyectadas a lat / lon usando Python?

39

Supongo que esta es una pregunta básica pero parece que no puedo encontrar o reconocer la solución.

Este sitio devuelve

Point:
X: -11705274.6374
Y: 4826473.6922

cuando busca con el primer valor clave de 000090 como ejemplo. Supongo que esto es una referencia espacial y algo de lo que es.

Estoy buscando instrucciones o ejemplos de cómo convertir esto a latitud y longitud usando Python.

    
pregunta Vincent 28.11.2013 - 02:42

5 respuestas

77

La forma más sencilla de transformar coordenadas en Python es pyproj , es decir, Interfaz Python a la biblioteca PROJ.4 . De hecho:

from pyproj import Proj, transform

inProj = Proj(init='epsg:3857')
outProj = Proj(init='epsg:4326')
x1,y1 = -11705274.6374,4826473.6922
x2,y2 = transform(inProj,outProj,x1,y1)
print x2,y2

devuelve -105.150271116 39.7278572773

    
respondido por el Antonio Falciano 29.11.2013 - 11:04
33

De manera predeterminada, el sitio al que se vincula utiliza el Sistema de referencia espacial EPSG 3857 (WGS84 Web Mercator). Encontré esta información aquí .

Puede especificar otro Sistema de referencia espacial ingresando el EPSG deseado en el formulario debajo de Spatial Reference o puede convertir las coordenadas devueltas con Python.

Por ejemplo, puede utilizar enlaces de Python GDAL para convertir este punto del sistema de coordenadas proyectado (EPSG 3857) a un sistema de coordenadas geográficas (EPSG 4326).

import ogr, osr

pointX = -11705274.6374 
pointY = 4826473.6922

# Spatial Reference System
inputEPSG = 3857
outputEPSG = 4326

# create a geometry from coordinates
point = ogr.Geometry(ogr.wkbPoint)
point.AddPoint(pointX, pointY)

# create coordinate transformation
inSpatialRef = osr.SpatialReference()
inSpatialRef.ImportFromEPSG(inputEPSG)

outSpatialRef = osr.SpatialReference()
outSpatialRef.ImportFromEPSG(outputEPSG)

coordTransform = osr.CoordinateTransformation(inSpatialRef, outSpatialRef)

# transform point
point.Transform(coordTransform)

# print point in EPSG 4326
print point.GetX(), point.GetY()

Esto devuelve para tu punto las coordenadas de -105.150271116 39.7278572773 .

    
respondido por el ustroetz 28.11.2013 - 06:19
6

La salida no es un sistema de referencia espacial / de coordenadas , es un par de coordenadas. Necesitas saber cuál es la referencia espacial para reproyectar las coordenadas.

Sin embargo, eso no es necesario en este caso. Simplemente pase una referencia espacial de salida apropiada al servicio y devolverá las coordenadas en Lon / Lat.

Aquí está page con coordenadas de salida en formato Lon / Lat usando el sistema de referencia espacial geográfica WGS-84 ( EPSG 4326 ).

    
respondido por el Luke 28.11.2013 - 02:53
5

afalciano tiene la respuesta correcta pero quería incluir una variante de uso de pyproj.

Para es necesario que conozcas la cadena proj4 y que sea un poco más rápido.

import pyproj
p = pyproj.Proj("+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
lon, lat = p(x, y, inverse=True)
print lat, lon
    
respondido por el Marcel Wilson 15.04.2016 - 18:26
1

Encontré esta publicación al buscar formas de hacerlo dentro de QGIS. Como se describe en aquí , el método utilizado se ve así:

def convertProjection(self,x,y,from_crs,to_crs):
    crsSrc = QgsCoordinateReferenceSystem(from_crs)
    crsDest = QgsCoordinateReferenceSystem(to_crs)
    xform = QgsCoordinateTransform(crsSrc, crsDest)
    pt = xform.transform(QgsPoint(x,y))
    return pt.x, pt.y

# Remove the "EPSG:" part
from_crs = 3857
to_crs = 4326
x = -11705274.6374    
y = 4826473.6922
lon, lat = self.convertProjection(x,y,from_crs, to_crs)
    
respondido por el Toivo Säwén 09.12.2016 - 11:27

Lea otras preguntas en las etiquetas