Más

Proyección de shapefile para Matplotlib Basemap


Prefacio: Primera vez que trabaja con datos GIS.

Estoy usando la biblioteca de mapas base de Python para superponer datos en mapas.

El tutorial que estoy usando incluye un shapefile para Londres (london_wards.shp).

Utilizo el método de los límites para obtener el rectángulo delimitador mínimo.

s = "/ data / london_wards.shp" shp = fiona.open (s) shp.bounds

(-0.5103750689005356, 51.28676016315085, 0.3340155643740321, 51.691874116909894)

Esta es la latitud, longitud (51.5072 ° N, 0.1275 ° W) de Londres.

Paso estos límites a una instancia de mapa base.


A continuación, hice lo mismo para los shapefiles obtenidos de SF OpenData.

Sin embargo, los límites aparentemente no son latitud, longitud.

s = "/ data / sfpd_districts.shp" shp = fiona.open (s) shp.bounds

(5979385.3163340045, 2085856.3243659574, 6024751.466714004, 2131290.9014959573)

Entonces, no puedo pasarlos al mapa base.

Varios shapefiles de SF OpenData tienen unidades similares devueltas de shp.bounds.

¿Cuáles son estos valores?

¿Cómo se convierten a latitud, longitud para su uso posterior?


Use directamente el módulo GDAL en lugar de usarlo a través de (Geo) Django:

from osgeo import osr ori = osr.SpatialReference () desti = osr.SpatialReference () ori.ImportFromProj4 ("+ init = EPSG: 2227") desti.ImportFromProj4 ("+ init = EPSG: 4326") transformación = osr.CoordinateTransformation ( ori, desti) transformación1.TransformPoint (5979385.3163340045, 2085856.3243659574) (-122.5129551683127, 37.706167841402952, 0.0)

o el módulo pyproj (conpreserve_units = Verdaderoporque pyproj asume que sus coordenadas están en metros y este no es el caso de EPSG: 2227):

desde pyproj import Proj, transform ori = Proj (init = 'epsg: 2227', preserve_units = True) dest = Proj (init = 'EPSG: 4326', preserve_units = True) transform (ori, dest, x, y) (- 122.51295516831273, 37.706167841402959)

Combinar con Fiona:

desde pyproj import Proj, transforme import fiona desde fiona.crs import from_epsg con fiona.open ("/ data / sfpd_districts.shp") como shp ori = Proj (shp.crs, preserve_units = True), dest = Proj (init = ' EPSG: 4326 ', preserve_units = True) con fiona.open (' / data / sfpd_districtsWGS84.shp ',' w ',' ESRI Shapefile ', shp.schema.copy (), crs = from_epsg (4326) como salida: para punto en shp: x, y = punto ['geometría'] ['coordenadas'] punto ['geometría'] ['coordenadas'] = transformar (ori, dest, x, y) salida.write (punto)

Python: cómo usar el mapa base matplotlib con shapefiles

para un proyecto en mi universidad, quiero usar Python 2.7 para mostrar un mapa de una ciudad (alemana), principalmente las carreteras y, al final, incluir la ubicación geográfica de varios puntos de servicio. Tengo conocimientos básicos de Python y siento que no tengo acceso a los pasos que debo seguir para alcanzar mi objetivo.

Usé el mapa base para restringir el área con lon y lat donde está la ciudad. Luego quise usar un shapefile para incluir las carreteras que se han proporcionado, pero recibí el mensaje de error "RuntimeError: No se puede poner un solo artista en más de una figura". A pesar de buscar, no pude encontrar una solución. Aquí está el código que utilicé:

Luego obtuve las API de Google Maps, pero me parece que no puedo usarlas para entregar un mapa. Además, al cargar el contenedor de pygmaps se bloquea: "ImportError: No hay módulo llamado pygmaps", y de todos modos, no sabría cómo usarlo.

¿Alguien aquí sabe qué pasos podría tomar para cumplir con mi objetivo? Estaría realmente muy agradecido por un consejo. ¡Gracias por adelantado!


Imurointi kaikille saataville arkkitehtuureille
Arkkitehtuuri Versio Paketin koko Koko asennettuna Tiedostot
alfa (epävirallinen siirros) 1.2.2 + dfsg-1 + b1 93,1 nudos435,0 kt [tiedostoluettelo]
amd64 1.2.2 + dfsg-1 + b1 93,9 nudos427,0 nudos [tiedostoluettelo]
arm64 1.2.2 + dfsg-1 + b1 92,3 nudos423,0 nudos [tiedostoluettelo]
armel 1.2.2 + dfsg-1 + b1 91,6 nudos416,0 nudos [tiedostoluettelo]
armhf 1.2.2 + dfsg-1 + b1 91,7 quilates404,0 nudos [tiedostoluettelo]
hppa (epävirallinen siirros) 1.2.2 + dfsg-1 93,3 nudos425,0 nudos [tiedostoluettelo]
i386 1.2.2 + dfsg-1 + b1 95,6 nudos424,0 nudos [tiedostoluettelo]
m68k (epävirallinen siirros) 1.2.2 + dfsg-1 + b1 92,1 nudos417,0 nudos [tiedostoluettelo]
mips64el 1.2.2 + dfsg-1 + b1 91,5 nudos425,0 nudos [tiedostoluettelo]
mipsel 1.2.2 + dfsg-1 + b1 91,8 nudos422,0 nudos [tiedostoluettelo]
ppc64 (epävirallinen siirros) 1.2.2 + dfsg-1 + b1 95,4 nudos501,0 nudos [tiedostoluettelo]
ppc64el 1.2.2 + dfsg-1 + b1 95,0 nudos435,0 kt [tiedostoluettelo]
riscv64 (epävirallinen siirros) 1.2.2 + dfsg-1 + b1 91,2 nudos411,0 nudos [tiedostoluettelo]
s390x 1.2.2 + dfsg-1 + b1 92,1 nudos427,0 nudos [tiedostoluettelo]
sh4 (epävirallinen siirros) 1.1.0 + dfsg-3 104,1 nudos477,0 kt [tiedostoluettelo]
sparc64 (epävirallinen siirros) 1.1.0 + dfsg-3 96,4 nudos519,0 kt [tiedostoluettelo]
x32 (epävirallinen siirros) 1.2.1 + dfsg-1 + b2 100,0 nudos437,0 kt [tiedostoluettelo]

Esta página también está disponible en los siguientes idiomas (Cómo configurar el idioma predeterminado del documento):


Загрузить для всех доступных архитектур
Архитектура Размер пакета В установленном виде Файлы
amd64 243,0 Кб884,0 Кб [список файлов]
arm64 210,3 Кб798,0 Кб [список файлов]
armel 238,4 Кб910,0 Кб [список файлов]
armhf 212,4 Кб706,0 Кб [список файлов]
i386 248,5 Кб891,0 Кб [список файлов]
mips 229,6 Кб870,0 Кб [список файлов]
mips64el 228,8 Кб892,0 Кб [список файлов]
mipsel 231,9 Кб870,0 Кб [список файлов]
ppc64el 222,9 Кб906,0 Кб [список файлов]
s390x 223,7 Кб891,0 Кб [список файлов]

Эта страница также доступна на следующих языках (Как установить язык по умолчанию):

Чтобы сообщить о проблеме, связанной с веб-сайтом, отправьте сообщение (на английском) в английском) в сравьтом. Прочую контактную информацию см. на странице Debian Как с нами связаться.

Авторские права & copy 1997 - 2021 SPI Inc. См. условия лицензии. Debian это торговый знак компании SPI Inc. Об этом сайте.


Загрузить для всех доступных архитектур
Архитектура Версия Размер пакета В установленном виде Файлы
alfa (неофициальный перенос) 1.2.2 + dfsg-1 + b1 93,1 Кб435,0 Кб [список файлов]
amd64 1.2.2 + dfsg-1 + b1 93,9 Кб427,0 Кб [список файлов]
arm64 1.2.2 + dfsg-1 + b1 92,3 Кб423,0 Кб [список файлов]
armel 1.2.2 + dfsg-1 + b1 91,6 Кб416,0 Кб [список файлов]
armhf 1.2.2 + dfsg-1 + b1 91,7 Кб404,0 Кб [список файлов]
hppa (неофициальный перенос) 1.2.2 + dfsg-1 93,3 Кб425,0 Кб [список файлов]
i386 1.2.2 + dfsg-1 + b1 95,6 Кб424,0 Кб [список файлов]
m68k (неофициальный перенос) 1.2.2 + dfsg-1 + b1 92,1 Кб417,0 Кб [список файлов]
mips64el 1.2.2 + dfsg-1 + b1 91,5 Кб425,0 Кб [список файлов]
mipsel 1.2.2 + dfsg-1 + b1 91,8 Кб422,0 Кб [список файлов]
ppc64 (неофициальный перенос) 1.2.2 + dfsg-1 + b1 95,4 Кб501,0 Кб [список файлов]
ppc64el 1.2.2 + dfsg-1 + b1 95,0 Кб435,0 Кб [список файлов]
riscv64 (неофициальный перенос) 1.2.2 + dfsg-1 + b1 91,2 Кб411,0 Кб [список файлов]
s390x 1.2.2 + dfsg-1 + b1 92,1 Кб427,0 Кб [список файлов]
sh4 (неофициальный перенос) 1.1.0 + dfsg-3 104,1 Кб477,0 Кб [список файлов]
sparc64 (неофициальный перенос) 1.1.0 + dfsg-3 96,4 Кб519,0 Кб [список файлов]
x32 (неофициальный перенос) 1.2.1 + dfsg-1 + b2 100,0 Кб437,0 Кб [список файлов]

Эта страница также доступна на следующих языках (Как установить язык по умолчанию):

Чтобы сообщить о проблеме, связанной с веб-сайтом, отправьте сообщение (на английском) в английском) в сравьтом. Прочую контактную информацию см. на странице Debian Как с нами связаться.

Авторские права & copy 1997 - 2021 SPI Inc. См. условия лицензии. Debian это торговый знак компании SPI Inc. Об этом сайте.


Python | Tutorial: Introducción a Cartopy

Actualmente hay dos bibliotecas principales de Python para trazar datos geográficos en el mapa: Cartopy y Basemap. Los nuevos usuarios deben usar Cartopy ya que el soporte Cartopy reemplazará a Basemap y se espera que el soporte para Basemap concluya en 2020. Por lo tanto, este tutorial se enfocará en Cartopy. Si desea utilizar el mapa base (por ejemplo, para trazar en "3D"), aquí hay un par de enlaces a tutoriales y ejemplos existentes para ayudarlo a comenzar. Además, muchos de los conceptos descritos aquí pueden resultar útiles para comprender el mapa base.

  • Trazar datos de temperatura de superficie GFS en un mapa
  • Enmascare las superficies terrestres para trazar un mapa de la temperatura de la superficie del mar y la capa de hielo del GFS
  • Trazar un mapa regional de la temperatura superficial con los estados de EE. UU.
  • Utilizar el transformar función para trazar datos GFS en una proyección de mapa diferente

Este tutorial accede al servidor de datos NOMADS usando la biblioteca netCDF4, si no está familiarizado con esto, le recomiendo que vea mi tutorial sobre cómo leer datos NetCDF.


Empezando - Tomando datos GFS:
El siguiente código se usa para comenzar con este tutorial, esencialmente, importa todos los módulos requeridos, extrae los datos GFS del servidor de datos NOMADS y los carga en arreglos. Una vez que se cargan los datos, el resto del tutorial se centrará en Cartopy.

Ahora que sus datos están cargados, inicializamos una figura y una subtrama usando la palabra clave "proyección" de matplotlibs para enlazar a la biblioteca Cartopy. Una vez que haya adjuntado el paquete Cartopy a su subtrama, hay una serie de objetos y clases adicionales que puede agregar a su figura. En el primer ejemplo, lo demostraré invocando el atributo "Coastlines" para trazar continentes en el mapa.

Ahora, su figura y subtrama están definidas. La Cartopy "PlateCarree ()"La proyección es una proyección de mapa cilíndrica básica que acepta información de coordenadas en forma de pares de coordenadas lat / lon. Los datos lat / lon pueden ser 1D o 2D, pero básicamente, si su información de coordenadas es lat / lon, su proyección es PlateCarree (). Puede pasar 2 palabras clave a PlateCarree ( longitud_central y globo terráqueo), pero en la mayoría de los casos, no será necesario. Ocasionalmente, restablezco central_longitude a 180, en lugar de su cero predeterminado.

El código para trazar el mapa es:

Y obtendrás una imagen similar a esta:

Temperatura de la superficie GFS de Cartopy

Ahora, digamos que desea enmascarar áreas terrestres y agregar hielo marino al mapa, para enfocarse en los océanos.
Agregar el hielo marino es fácil, todo lo que necesita es que tire del icecsfc variable de los datos de GFS, y trazarla sobre el mapa de temperatura de la superficie:

Usamos la funcionalidad numpy mask (ma) para enmascarar las celdas de la cuadrícula donde la capa de hielo es menor al 10%.
Para enmascarar áreas terrestres, utilizamos el "Característica de Cartopy", que maneja shapefiles. El módulo Cartopy Feature se conecta sin problemas al conjunto de datos de la Tierra Natural y permite a cualquiera trazar una gran cantidad de diferentes conjuntos de datos GIS sin necesidad de descargar shapefiles individuales de antemano. La interfaz incluso tiene muchas funciones predefinidas, incluyendo la tierra. Esto hace que enmascarar las áreas terrestres sea muy fácil.

En el código anterior, el "add_feature", y la función" LAND "predefinida del paquete Cartopy Feature se suministra con un par de argumentos básicos de palabras clave. Poniéndolo todo junto:

Ejecutar el código anterior le dará una imagen como esta:

GFS SST y cubierta de hielo marino


Ahora, acerquemos los Estados Unidos y agreguemos estados al mapa. Para recortar la extensión, el "set_extent"se utiliza la función:

La lista corresponde a los límites lon / lat de [la longitud más occidental, la longitud más oriental, la latitud más meridional, la latitud más septentrional] y el argumento crs indica qué transformada se está aplicando. Para agregar los estados, debe definir los estados de la base de datos de Natural Earth. el argumento "escala"

Al cambiar la extensión y agregar los estados, obtendrá un mapa que se ve así:


Para este ejemplo, usaré la API Overpass para extraer todas las ciudades principales de Portugal del proyecto OpenStreetMaps.

La API Overpass es una API de solo lectura que ofrece partes seleccionadas personalizadas de los datos del mapa de OSM. Actúa como una base de datos en la web: el cliente envía una consulta a la API y recupera el conjunto de datos que corresponde a la consulta.

(.) estas coordenadas se especifican en la base de datos de OSM y en la API OverPass proyectando verticalmente los puntos reales a los nodos en el elipsoide WGS84.

Importemos algunos módulos de Python que vamos a utilizar:

El sistema de consultas de la API de Overpass es un poco complicado. Aquí está la descripción del lenguaje de consulta: Overpass API Query Language.

Llamemos al objeto API y hagamos una consulta:

La respuesta es un diccionario de Python que contiene los datos.

Usemos la lista de comprensión de Python para extraer las coordenadas y los nombres de las ciudades.

Las listas por comprensión proporcionan una forma concisa de crear listas. Las aplicaciones comunes son hacer nuevas listas donde cada elemento es el resultado de algunas operaciones aplicadas a cada miembro de otra secuencia o iterable, o crear una subsecuencia de esos elementos que satisfacen una determinada condición.

geometry.shape es un método de forma para obtener una descripción de geometría dentro de un diccionario y transformarla en un objeto de forma. Luego, llamamos al método .xy para obtener las coordenadas reales.

Puede dividir esta celda en pasos para comprenderla mejor (así es como aprendí Python).

nombres es una lista que contiene los nombres de las ciudades. Vamos a ver:

coords es una lista que contiene pares de coordenadas. Revisemos la primera entrada de la lista:

Aquí, llamamos hstack de numpy para hacer una pila horizontal en el objeto coords. De esta forma apilamos longitudes y latitudes en diferentes matrices 1d.


Proyección de shapefile para el mapa base de Matplotlib - Sistemas de información geográfica

La biblioteca de protocolo de transferencia de archivos (FTP) de Python se utiliza para analizar los datos de la estación meteorológica del sistema automatizado de observación de la superficie (ASOS) disponible públicamente del Centro Nacional de Datos Climáticos de EE. UU. (NCDC). Varias herramientas programáticas disponibles en Python se utilizan para automatizar el análisis de datos meteorológicos, así como para visualizar los datos resultantes.

El NEO-6 es un módulo GPS en miniatura diseñado por u-blox para recibir actualizaciones de hasta 22 satélites en 50 canales diferentes que utilizan trilateración para aproximar la posición fija de un dispositivo receptor cada segundo (o menos, para algunos módulos). El módulo particular utilizado en este tutorial, el NEO-6M, es capaz de actualizar su posición cada segundo y se comunica con una placa Arduino mediante comunicación serie UART. El NEO-6M utiliza el protocolo de la Asociación Nacional de Electrónica Marina (NMEA) que proporciona información temporal y de geolocalización, como la hora media de Greenwich (GMT), latitud, longitud, altitud y velocidad aproximada del rumbo. La placa NEO-6M y Arduino también se emparejará con un módulo SD para crear un registrador portátil que actúa como un rastreador GPS recuperable.

En esta serie de tutoriales, el kit de herramientas de mapa base de Python y varias otras bibliotecas se utilizan para explorar el Satélite ambiental operativo geoestacionario-16 (GOES-16), disponible públicamente. En esta primera entrada, se introducirá lo siguiente: adquisición de datos satelitales, comprensión de archivos de datos satelitales, mapeo de información geográfica en Python y trazado de la temperatura de la superficie terrestre del satélite (LST) en un mapa.

Cálculo de latitud y longitud a partir de un archivo de datos GOES-R L1b. Los archivos de radiancia del GOES-R L1b contienen datos de radiancia e información de escaneo de geometría en radianes. Esta información no es suficiente para trazar datos de radiancia geográfica directamente desde el archivo; sin embargo, después de algunas manipulaciones geométricas que aprovechan la posición del satélite y los parámetros del elipsoide, podemos derivar los valores de latitud y longitud de los ángulos de exploración unidimensionales y trazar nuestros datos en formatos proyectados familiares. a muchas herramientas de información geográfica.


Finalmente, dibujaremos los paralelos (líneas de latitud) y meridianos (líneas de longitud) en el mapa. La forma más sencilla de definir el rango y el intervalo para los paralelos y meridianos es con el módulo numpy de matplotlib & # 8217s. Debido a que estamos viendo un área ampliada, tenemos un poco más de flexibilidad sobre cómo definimos las cosas. Para los propósitos de este ejemplo, definiré los paralelos y meridianos para todo el mundo, mostrando cada múltiplo de 10. Si está mirando un área más grande, probablemente desee mostrar cada múltiplo de 30 aproximadamente.

Después de definir el rango y el intervalo, debemos definir cómo se etiquetan en el gráfico. Las figuras en matplotlib siempre se muestran dentro de un cuadro, y usamos una lista de valores booleanos para decirle a matplotlib en qué lados del cuadro deseamos mostrar etiquetas, en el formato [izquierda, derecha, arriba, abajo]. Aquí, etiquetaremos líneas de latitud en los lados superior y derecho del cuadro, que indicaremos con [Falso, Verdadero, Verdadero, Falso]. Las líneas de longitud se mostrarán en la parte inferior e izquierda del cuadro, que se pueden indicar con [Verdadero, Falso, Falso, Verdadero].


Proyección de shapefile para el mapa base de Matplotlib - Sistemas de información geográfica

Figura 1. PySAL dentro de la caja de herramientas de procesamiento de QGIS: análisis de puntos calientes de las tasas de homicidio en los condados del sur de EE. UU.

Python es un lenguaje popular para la programación geoespacial y el desarrollo de aplicaciones. Esta entrada proporciona una descripción general de los diferentes modos de desarrollo que se pueden adoptar para la programación GIS con Python y analiza la historia de la adopción de Python en la comunidad GIS. Se examinan las diferentes capas de la pila de desarrollo geoespacial en Python, lo que le da al lector una comprensión de la amplitud que Python ofrece al desarrollador de SIG. Se identifican desarrollos futuros y problemas más amplios relacionados con la interoperabilidad y los ecosistemas de programación.

Rey, S.J. (2017). Python para GIS. El cuerpo de conocimientos sobre ciencia y tecnología de la información geográfica (Edición del tercer trimestre de 2017), John P. Wilson (ed). DOI: 10.22224 / gistbok / 2017.3.4

Esta entrada se publicó por primera vez el 19 de agosto de 2017. No existen ediciones anteriores.

pila de desarrollo: un grupo de programas de software que trabajan juntos para lograr un resultado específico o para llevar a cabo una tarea analítica particular

lenguaje interpretado: un lenguaje de programación en el que sus instrucciones se ejecutan directamente sin compilación previa en instrucciones en lenguaje máquina

software de código abierto: código de software que está disponible gratuitamente y puede ser modificado y redistribuido

Python es un lenguaje interpretado de código abierto y orientado a objetos creado por Guido von Rossum en 1991. Desde su lanzamiento, Python ha tenido una adopción generalizada en muchos dominios problemáticos. Esta popularidad surge de las atractivas características del idioma. Primero, como lenguaje de múltiples paradigmas, Python admite tanto la programación estructurada como la orientación a objetos. En segundo lugar, Python es un lenguaje interpretado que se presta a ciclos rápidos de creación de prototipos y desarrollo. Core Python está escrito en lenguaje C y esto ha permitido implementaciones de Python en muchas plataformas y sistemas operativos. La biblioteca estándar rica y versátil hace que Python sea adecuado para muchos proyectos.

GIScience es una de las muchas disciplinas científicas en las que Python ha encontrado una audiencia receptiva. Desde una perspectiva científica, el énfasis en la legibilidad, el soporte multiplataforma y los bajos costos de inicio han hecho de Python un excelente lenguaje para la colaboración entre científicos de SIG. Algunas de estas mismas características también posicionan a Python como un lenguaje maravilloso para enseñar conceptos de ciencia GIS; de hecho, Python se usa cada vez más como primer idioma en los planes de estudio de ciencias de la computación. Python es un excelente primer lenguaje, sin embargo, esto no debe tomarse como un significado limitado, ya que se han implementado muchas aplicaciones a gran escala y ampliamente utilizadas en Python, un excelente ejemplo es Dropbox.

Dada su creciente popularidad, esta entrada primero proporciona una descripción general de los diferentes modos de desarrollo que se pueden adoptar para la programación GIS con Python y analiza la historia de la adopción de Python en la comunidad GIS. A esto le sigue un sondeo de la pila de programación GIS para que el lector comprenda la amplitud que Python ofrece al desarrollador GIS. La conclusión analiza los posibles desarrollos futuros y cuestiones más amplias relacionadas con la interoperabilidad y los ecosistemas de programación.

Como lenguaje de scripting, Python ofrece flexibilidad en los diferentes modos de desarrollo para la programación geoespacial. Estos pueden tomar la forma de usar Python para extender la funcionalidad de un SIG de escritorio, al desarrollo de una aplicación de escritorio independiente completa para análisis geoespacial especializado y el uso de Python para scripts científicos y computación interactiva en un entorno de shell.

3.1 Aplicaciones de escritorio

Python juega un papel central para las aplicaciones geoespaciales de escritorio. A partir de la versión 9.0 de ArcGIS, Esri incluyó Python como lenguaje de programación central. Su ArcPy El paquete proporciona una interfaz para herramientas, funciones, clases y módulos de geoprocesamiento. Una función arcpy define una parte particular de la funcionalidad, por ejemplo, existen funciones para enumerar ciertos conjuntos de datos, acceder a las propiedades de un conjunto de datos y actualizar geodatabases. Además, los scripts de Python se pueden usar dentro de ArcGIS o desde fuera de ArcGIS, y se pueden desarrollar y distribuir cajas de herramientas de Python adicionales a los usuarios de ArcGIS aprovechando las herramientas de Python distutils módulo.

El paquete GIS de código abierto QGIS utiliza Python como lenguaje de programación de diversas formas. Una consola de Python está disponible a través de la interfaz gráfica de usuario (GUI) de QGIS para proporcionar un shell interactivo que se puede utilizar para crear un script de la sesión existente. Esto admite la experimentación con la API de QGIS y permite al usuario crear un flujo de trabajo que, en última instancia, se puede guardar como un script para su posterior reutilización.

Python también se ha utilizado para desarrollar Procesando framework como parte de QGIS. Este es un entorno de geoprocesamiento que se puede emplear para ejecutar algoritmos nativos o externos / de terceros desde dentro de QGIS. La Figura 1 muestra un ejemplo del uso de la herramienta PySAL desde dentro de la caja de herramientas Procesamiento para llevar a cabo un análisis de puntos calientes de una variable de privación de recursos en 1990 para los condados del sur de EE. UU.

Además de estos dos paquetes GIS de escritorio, Python se ha utilizado para desarrollar otras aplicaciones geoespaciales independientes. Los ejemplos principales están relacionados con el proyecto PySAL e incluyen: GeoDaSpace, un paquete para análisis de regresión espacial CAST: Crime Analytics in Space-Time y STARS (Space-Time Analysis of Regional Systems). Estos paquetes se desarrollan utilizando Python y envuelven la funcionalidad geoespacial avanzada dentro de una GUI. Estas aplicaciones son posibles debido a la existencia de múltiples bibliotecas científicas disponibles para Python que se resumen a continuación.

3.2 Programación geoespacial computacional intensiva

Muchas veces, en la informática científica, los investigadores escriben código para expresar sus ideas, hacer prototipos o explorar datos. Este tipo de programación oportunista requiere un entorno informático flexible para facilitar la exploración abierta. El ecosistema de Python ofrece un rico conjunto de herramientas para este tipo de computación científica interactiva.

IPython amplía el intérprete interactivo de Python para proporcionar un entorno de shell completo para la computación interactiva y exploratoria. IPython, rico en funciones, ofrece finalización de tabulaciones, introspección de objetos, historial de comandos y acceso al shell del sistema operativo, lo que resulta en un intérprete superior para la computación científica que el ofrecido por el intérprete de Python integrado.

El proyecto IPython ha evolucionado y ha dado lugar a Jupyter. El portátil Jupyter amplía el enfoque basado en consola para la computación interactiva al proporcionar una aplicación basada en la web que puede abarcar todo el proceso de computación científica, desde el desarrollo, la documentación y la ejecución del código hasta la presentación y diseminación real de los resultados. Jupyter consta de dos componentes. La primera es una herramienta basada en navegador que combina texto, código y medios enriquecidos para respaldar la creación interactiva de documentos científicos. El segundo componente es el documento del cuaderno, que es la codificación real de todo el contenido que está visible en la aplicación web. Los documentos del cuaderno se implementan como JavaScript Object Notation (JSON), lo que facilita el control de versiones y el intercambio con colaboradores.

El desarrollo geoespacial cubre una amplia diversidad de tareas. Para proporcionar una descripción general de la pila de programación geoespacial en Python, la Tabla 1 resume los paquetes selectivos de cada capa en la pila. Los paquetes seleccionados son los más populares o que se encuentran comúnmente para cada tipo de funcionalidad, y debe tenerse en cuenta que la lista no es exhaustiva en su cobertura, pero está destinada a proporcionar un puntero de primera parada para los desarrolladores de Python que buscan abordar una tarea en particular. .

Descripción

Interfaz a la biblioteca de abstracción de datos geoespaciales

API a capa OGR (Vector) de GDAL

Leer y escribir datos ráster geoespaciales

Análisis espacial determinista

Resumiendo rásteres usando geometrías vectoriales

Operaciones espaciales similares a pandas en tipos geométricos

Interfaz PROJ4 para transformaciones cartográficas

Visualización a través de mapas de folletos interactivos

Navegadores de bibliotecas de visualización interactiva

Canalización de gráficos de visualización de big data

Análisis estadístico espacial

Modelado de interacción espacial

Agrupación en clústeres espacialmente restringida

Interfaz de programación del cliente para el servicio web OGC

Transmisión de ETL para datos geoespaciales

Tabla 1. Pila de programación geoespacial de Python

4.1 Entrada / Salida de datos espaciales

Todo análisis espacial comienza con la lectura de datos geoespaciales. Una de las características clave que distinguen al análisis de datos espaciales es la rica variedad de formatos de datos espaciales. Esto presenta un gran desafío para el desarrollador geoespacial, ya que simplemente no se encuentran paquetes únicos para todos.

Como es común para muchos de los paquetes en la pila geoespacial, el enfoque adoptado para implementar la entrada (y salida) de archivos ha sido envolver las bibliotecas C existentes que se han utilizado ampliamente para el propósito en cuestión. En este caso, la biblioteca de destino es la Biblioteca de abstracción de datos geoespaciales (GDAL) que proporciona traductores para leer y escribir datos espaciales raster y vectoriales. En la pila de Python, se han desarrollado dos bibliotecas diferentes que apuntan a estos componentes. Fiona se centra en la funcionalidad OGR (vector), mientras que rasterio proporciona una envoltura similar para exponer la funcionalidad ráster de GDAL. Esto permite la lectura y escritura de formatos como GeoTIFF a través de una API de Python que se basa en numpy Matrices N-D para un cálculo eficiente.

4.2 Geoprocesamiento

Una vez que los datos geoespaciales se leen en la memoria, una variedad de operaciones geométricas y manipulaciones están disponibles para su procesamiento posterior. Para los datos vectoriales, estos toman la forma de operaciones teóricas de conjuntos y manipulación de características planas. El paquete Bien proporcionado envuelve el geos biblioteca para almacenamiento en búfer, intersección, dilatación, diferenciación y una serie de otros tipos de operadores espaciales en objetos vectoriales. La funcionalidad para el resumen focal, zonal y de los rásteres es ofrecida por el rasterstats paquete. Rasterstats también puede admitir la consulta de rásteres utilizando geometrías vectoriales. Por ejemplo, un desarrollador puede encontrar la elevación de un DEM almacenado en un archivo TIF basado en un objeto vectorial puntual, o generar estadísticas resumidas para la elevación dentro de los límites de un objeto poligonal (es decir, media, máxima, estándar de elevación dentro de una zona) .

Ambos conjuntos de estas operaciones espaciales se encuentran comúnmente en el caso de uso de derivar nuevas variables espaciales. Luego, estos se utilizan más arriba en la pila geoespacial para el análisis estadístico. Por sí solos, los paquetes en la pila de geoprocesamiento (es decir, fiona y shapely) no están destinados a cubrir el análisis estadístico posterior de los objetos / capas derivados. Más bien, se ven como componentes críticos de una tubería geoespacial en la que se encadenan diferentes paquetes para implementar un flujo de trabajo en particular. El paquete geopandas puede verse como una forma de facilitar este tipo de flujo de trabajo y canalización. Se basa en la funcionalidad de fiona y bien proporcionado para el geoprocesamiento, pero se inspira en el popular paquete de manipulación de datos generales pandas que es la principal biblioteca para procesar datos en la pila computacional de Python.

Para que los datos de diferentes formatos y fuentes estén adecuadamente armonizados e integrados, la funcionalidad para convertir entre diferentes sistemas de referencia de coordenadas se proporciona a través del pyproj paquete. pyproj es un Cython contenedor que proporciona una interfaz Python al PROJ.4 biblioteca para transformaciones cartográficas y cálculos geodésicos.

4.3 Geovisualización y cartografía

La visualización y el mapeo de datos geoespaciales en Python tuvo sus orígenes en el mapeo a escala global implementado en el paquete. mapa base. Mapa base no implementa el trazado real per se, pero se basa en Proj4.C para transformar coordenadas en una proyección de mapa específica y luego emplea matplotlib, la biblioteca de visualización principal en Python, para realizar el trazado real de contornos, imágenes u objetos vectoriales en las coordenadas proyectadas. Mapa base sus orígenes se basaron en el apoyo de la oceanografía y la meteorología, y con el tiempo su funcionalidad ha evolucionado para apoyar otras disciplinas, desde la biología hasta la geología y la geofísica.

cartopy es un paquete destinado a la elaboración sencilla de mapas para el análisis y la visualización de datos. Adopta un enfoque orientado a objetos para definir proyecciones de mapas y proporciona una interfaz simple e intuitiva para la visualización a través de matplotlib. cartopy confía en PROJ.4 por su funcionalidad de proyección, y bien proporcionado para leer shapefiles. Similar a mapa base, Cartopy se creó originalmente para respaldar la investigación meteorológica, pero se ha expandido para respaldar la cartografía en una amplia gama de dominios científicos.

Mientras tanto mapa base y cartopy Interfaz con matplotlib Para la visualización, varios paquetes de mapeo de Python se dirigen a los navegadores web como plataforma para la visualización. Folio es uno de los primeros de estos, que proporciona una interfaz Python para el folleto biblioteca javascript para mapeo interactivo basado en web. Folio también incluye mejoras de la Vincent / Vega marco para incorporar marcadores y gráficos aumentados en la visualización geoespacial. Folium interactúa con varios servicios populares de conjuntos de mosaicos, incluidos OpenStreetMap, Mapbox, y Estambre, con apoyo para GeoJSON y TopoJSON formatos de datos espaciales.

Aunque no están diseñados específicamente para mapeo y geovisualización, dos paquetes de visualización de Python recientes justifican su inclusión aquí. Bokeh es parecido a Folio ya que se dirige a los navegadores web modernos para su visualización. Lo hace a través del estilo del D3.js biblioteca para visualización basada en datos, con énfasis en la interactividad de alto rendimiento para grandes conjuntos de datos. Datashader es un componente de Bokeh que implementa una canalización de gráficos para representar representaciones de conjuntos de datos masivos mediante agrupamiento, agregación y transformaciones. It is notable that the impressive capabilities of Datashader often feature geospatial applications (https://github.com/bokeh/datashader).

Before leaving the visualization layer of the Python geospatial stack, two additional points need to be made. First, there is an active focus in the Python scientific community on effective color maps for scientific visualization. This work intersects with that of cartographers designing color schemes for choropleth mapping. In the Python world the popular packages are palettable y colormap. Second, the visualization component of the Python scientific stack is rapidly evolving so readers are encouraged to use this section as an entry point not a final destination.

4.4 Spatial Statistical Analysis

PySAL is a library of spatial analysis functions for spatial data. It consists of modules that cover exploratory spatial data analysis which includes global and local measures of spatial autocorrelation - popular methods to detect spatial clustering and hot spots. PySAL also provides functionality for spatial regression, space-time analysis, regionalization, map classification and a host of geocomputational modules. PySAL began at a time when very little of the geospatial Python stack existed and, as such, it also includes functionality for lower levels of the stack out of necessity. Over time, PySAL has added modules that interface with many other newer packages in the stack (shapely, geopandas, cartopy, etc).

PySAL focuses primarily on vector spatial formats and covers statistical analysis for attributes associated with polygons, points and networks. Geostatistical data analysis is associated with the statistical analysis of fields commonly encountered in the geosciences where phenomena such as temperature, precipitation, air quality are modeled as a surface using methods such as kriging and various spatial interpolation approaches. The objective in much of this work is to generate predictions for a continuum of locations based on a discrete set of observed locations for the process at hand. In the Python stack, geostatistics is an area that has been underdeveloped to date as there have been a few starts of projects but intermittent development - one example being pykriging.

4.5 Spatial Modeling

Mesa is a package that implements functionality to develop and apply agent-based models. These models can be used to simulate autonomous agents embodied with behavioral rules on a grid layout to assess the impacts of their behaviors and interactions on the system as a whole. The classic example of ABM is the Schelling model of segregation featured as a key demonstration in the Mesa package.

clusterpy provides a library of spatially constrained clustering algorithms that can be used to group primitive geographic areas or points into a smaller number of regions for subsequent analysis. For example, in geodemographics, census tracts can be defined based on both socioeconomic similarity as well as geographical contiguity. The inclusion of the latter constraint differentiates regionalization from more general multivariate clustering.

4.6 Web and Distributed

Increasingly, scientific workflows have been moving towards web based and distributed frameworks, and spatial analysis is no exception. Here libraries that provide for middleware linking different analytical and processing functionality together as individual services are required. In the Python geospatial stack a growing number of packages implement specifications from the Open Geospatial Consortium to facilitate web based geoprocessing and analysis. Stetl offers a toolkit for extraction, transformation, and loading (ETL) of geospatial data. OWSlib implements key OGC standards via a Pythonic interface including, web mapping service (WMS), web feature service (WFS), sensor model language (SensorML), and WaterML among some 17 other services. Both Stetl y OWSlib are part of the GeoPython organization which develops numerous geospatial projects.

4.7 Package Considerations

The packages listed in Table 1 represent only a fraction of what is available to the geospatial developers working in Python. It should also be kept in mind that the placing of a package in a specific layer is somewhat fluid since a particular package may afford functionality that spans multiple layers of the stack. For example, because Geopandas has fiona and PySAL among its dependencies, it can provide access to the core functionality of those packages via its namespace. The richness and diversity of the geospatial packages are testaments to the core strengths of the underlying scientific computing stack in Python where packages such as numpy y scipy together with the development affordances of the Python ecosystem itself provide for an excellent development paradigm. As well, there are packages in the broader Python scientific stack that can be called upon to implement geospatial functionality. Por ejemplo, network-x provides a wealth of methods for analyzing networks and graphs, while scikit-image is a powerful library for image analysis.

There are a few issues that GIS developers need to keep in mind, particularly when developing GIS applications with Python for different platforms. A key issue is the management of the Python installation alongside third-party packages. Both ArcGIS y QGIS install their own Python interpreters in directories that are specific to those applications. This can be a source of confusion if the developer also has other Python installations on the same machine, particularly when it comes to installing additional packages. Python offers a number of approaches towards package management (pepita being the main one), and Python distributions such as Anaconda and Enthought also provide their own package managers.

Python and the related GIS software ecosystem are very active and undergoing constant growth. To enhance one’s proficiency, it is important to keep up with these developments so that workflows can remain current by taking advantage of advances in the language itself and packages in the broader ecosystem. While predictions about the future are always challenging, the seeds of a few developments can already be seen emerging. The first is an increasing emphasis on the importance of interoperability between Python and other languages. Packages such as RPy allow for bidirectional interfaces between Python and R so that a developer can leverage the strengths of each language in the same workflow. This also serves to widen the scope of the GIScience programming stack.

A related area to keep abreast of is the set of tools that allow for extension of Python by wrapping external libraries written in lower level languages such as C, C++, and Fortran. Cython, numba, y swig provide methods to target bottlenecks in a Python code base to be replaced with more computationally efficient libraries. The extensibility of Python using these tools means that initial prototyping of a GIScience application can rely on pure Python in a developer-efficient manner. Only after the full functionality of the application is implemented should attention turn to optimizations and, in many cases, this turns out to be a small fraction of the code base. In these instances, the extension frameworks can prove invaluable.

The world of parallel and distributed high performance computing has advanced remarkably in the past decade and the Python ecosystem exemplifies this. Although a comprehensive coverage of related packages is beyond the current scope (packages for cloud, distributed and high performance computing in Python can be found at https://wiki.python.org/moin/ParallelProcessing), one exemplar package to note is Dask. A flexible parallel library for analytic computing, Dask is built around two components: dynamic task scheduling that optimizes interactive computational workloads, and big data collections that enable out-of-memory or distributed processing of parallel data arrays and dataframes.

A fourth important thread is the rise of open science. Stressing the need for improved transparency, reproducibility, and replication, the open science movement is leading to new types of development paradigms such as Docker containers, conda environments and the notebook viewer that enable sharing of snippets of code and even complete workflows that reproduce the analysis underlying a particular scientific paper. Familiarity with these tools will be increasingly important for Python GIS development.

Open science also has parallels in the open government and open data movements that are driving transparency, sharing, and reuse of government collected data. These have fostered collaborative projects bringing together academic researchers, government and industry to fashion computing solutions targeting social and environmental issues. Given that many of these projects involve geospatial data and analysis, Python capable GIScientists can play a central role in these efforts.