¿Hay una manera fácil de transformar objetos Shapely (a saber, polígonos y polígonos múltiples) de una proyección a otra sin tener que cavar y extraer coordenadas a mano?
De hecho, ni siquiera me importa si son objetos Shapely en este punto, solo quiero pasar características y una proyección, y recuperar un conjunto de características reproyectadas.
¿Existe este tipo de funcionalidad o debe codificarse a mano?
python
coordinate-system
shapely
pyproj
Chris Fonnesbeck
fuente
fuente
fiona.transform
parece tener lo que necesitas.Respuestas:
Si bien Shapely no entiende de forma nativa los sistemas de coordenadas,
shapely.ops.transform()
puede hacerlo junto conpyproj
. Sipyproj.Proj
puede comprender sus dos sistemas de coordenadas, entonces se puede convertir en una función con la que se puede transformar bien.De los documentos bien formados :
fuente
itertools
módulo, puede hacerloproject = lambda x, y: pyproj.transform(pyproj.Proj(init='epsg:4326'), pyproj.Proj(init='epsg:26913'), x, y)
y luegog2 = transform(project, g1)
.Transformer
. Ver aquí: pyproj4.github.io/pyproj/stable/gotchas.htmlSi bien no es una solución bien proporcionada, el uso de GeoPandas permite una proyección relativamente sencilla. Por ejemplo, si queremos convertir un shapefile a ESPG 4326:
fuente
Si está usando pyproj2, es mucho más fácil usar un Transformer. Aquí hay un ejemplo:
Esto también es mucho más rápido, porque pyproj no necesita recrear la proyección para cada punto.
fuente