Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Introducción a Programación y Fundamentos con chaowei yang Traducido del inglés al español - www.onlinedoctranslator.com https://www.onlinedoctranslator.com/es/?utm_source=onlinedoctranslator&utm_medium=pdf&utm_campaign=attribution Introducción a SIG Programación y Fundamentos con Python y ArcGIS® http://taylorandfrancis.com Introducción a SIG Programación y Fundamentos con Python y ArcGIS® chaowei yang Con la colaboración de Manzhu Yu Qunying Huang Zhen Long Li Sol mínimo kai liu yongyao jiang Jizhe Xia Prensa CRC Grupo Taylor & Francis 6000 Broken Sound Parkway NW, Suite 300 Boca Raton, FL 33487-2742 © 2017 por Taylor & Francis Group, LLC CRC Press es un sello de Taylor & Francis Group, una empresa de Informa No reclamar obras originales del gobierno de EE. UU. Impreso en papel libre de ácido Libro estándar internacional número 13: 978-1-4665-1008-1 (tapa dura) Este libro contiene información obtenida de fuentes auténticas y de gran prestigio. Se han realizado esfuerzos razonables para publicar datos e información confiables, pero el autor y el editor no pueden asumir responsabilidad por la validez de todos los materiales o las consecuencias de su uso. Los autores y editores han intentado localizar a los titulares de los derechos de autor de todo el material reproducido en esta publicación y se disculpan con los titulares de los derechos de autor si no se ha obtenido el permiso para publicar de esta forma. Si algún material con derechos de autor no ha sido reconocido, por favor escríbanos y háganoslo saber para que podamos rectificar en cualquier reimpresión futura. Salvo que lo permita la Ley de derechos de autor de EE. UU., ninguna parte de este libro puede reimprimirse, reproducirse, transmitirse o utilizarse de ninguna forma por ningún medio electrónico, mecánico o de otro tipo, ahora conocido o inventado en el futuro, incluidas las fotocopias, microfilmaciones y grabaciones, o en cualquier sistema de almacenamiento o recuperación de información, sin el permiso por escrito de los editores. Para obtener permiso para fotocopiar o usar material electrónico de este trabajo, acceda awww. derechos de autor.com(http://www.copyright.com/) o comuníquese con Copyright Clearance Center, Inc. (CCC), 222 Rosewood Drive, Danvers, MA 01923, 978-750-8400. CCC es una organización sin fines de lucro que proporciona licencias y registros para una variedad de usuarios. Para las organizaciones a las que la CCC les haya otorgado una licencia de fotocopia, se ha dispuesto un sistema de pago separado. Aviso de marca registrada:Los nombres de productos o empresas pueden ser marcas comerciales o marcas comerciales registradas, y se usan solo para identificación y explicación sin intención de infringir. Visite el sitio Web de Taylor & Francis en http://www.taylorandfrancis.com y el sitio web de CRC Press en http://www.crcpress.com http://www.copyright.com/ http://www.copyright.com/ http://www.copyright.com/ http://www.taylorandfrancis.com http://www.crcpress.com Para los padres de Chaowei Yang, Chaoqing Yang y Mingju Tang, por inculcar continuamente la curiosidad y el espíritu explorador http://taylorandfrancis.com Contenido Prefacio................................................. .................................................... ..................XV Agradecimientos .................................................. .............................................xxx Editor................................................. .................................................... ................XXIII Colaboradores.................................................. .................................................... .....xiv Sección IVisión general 1. Introducción.................................................... .................................................... .3 1.1 Hardware y software de la computadora ............................................... .......3 1.2 SIG y Programación ............................................... ..........................5 1.3 Pitón................................................... .................................................... ...7 1.4 Clase y objeto .................................................. ......................................9 1.5 Modelos de datos SIG ............................................... .....................................10 1.6 UML .............................................. .................................................... ....11 1.7 Experiencia práctica con Python......................................... ......14 1.8 Resumen del capítulo.................................................... ................................dieciséis Problemas................................................. .................................................... .......17 2. Programación Orientada a Objetos.................................................... ...............19 2.1 Lenguaje de Programación y Python ............................................... .19 2.2 Clase y objeto .................................................. .....................................21 2.2.1 Definición de clases ............................................. .......................21 2.2.2 Generación de objetos ............................................. .....................23 2.2.3 Atributos .............................................. ....................................23 2.2.4 Herencia ............................................... ................................25 2.2.5 Composición .................................................. ...............................26 2.3 Punto, polilínea y polígono ............................................... ...................27 2.4 Experiencia práctica con Python......................................... ......30 2.5 Resumen del capítulo................................................... ................................30 Problemas................................................. .................................................... .......31 Sección II PitónProgramación 3. Introducción a Python.................................................... ...............................35 3.1 Soporte orientado a objetos ............................................... .......................35 3.2 Sintaxis .................................................. .................................................... .36 3.2.1 Sensibilidad entre mayúsculas y minúsculas ............................... .........................36 3.2.2 Caracteres especiales ............................................. .....................36 viii viii Contenido 3.2.3 Indentación ............................................... ................................36 3.2.4 Palabras clave .............................................. ....................................37 3.2.5 Asignaciones Múltiples ............................................. ..............38 3.2.6 Espacio de nombres.................................... ................................38 3.2.7 Alcance .............................................. ..........................................38 3.3 Tipos de datos .................................................. .............................................40 3.3.1 Tipos de datos básicos ............................................. ........................40 3.3.2 Tipos de datos compuestos ............................................. ...............42 3.4 Misceláneos .............................................. ......................................48 3.4.1 Variables .............................................. .....................................48 3.4.2 Estilo de código ............................................. ....................................49 3.5 Operadores................................................ .............................................................50 3.6 Declaraciones .............................................. ............................................533.7 Funciones .................................................. .............................................................54 3.8 Experiencia práctica con Python......................................... ......56 3.9 Resumen del capítulo................................................... ................................56 Problemas................................................. .................................................... .......57 4. Estructura de control del lenguaje Python, entrada/salida de archivos, y manejo de excepciones.................................................... ..........................61 4.1 Toma de decisiones .............................................. ................................61 4.2 Bucles ................................................ .................................................... ...64 4.3 Otras estructuras de control ............................................... .....................66 4.4 Entrada/salida de archivos ........................................... ....................................67 4.5 Excepciones .............................................. ............................................69 4.6 Experiencia práctica con Python......................................... ......70 4.6.1 Encuentre la distancia más larga entre dos puntos cualesquiera .......70 4.6.2 Experiencia práctica: E/S, crear y leer un archivo .........70 4.6.3 Experiencia práctica: E/S, control de flujo y archivo .........72 4.6.4 Experiencia práctica: Ingresar datos de puntos GIS desde archivo de texto .................................................. ..........................74 4.7 Resumen del capítulo.................................................... ................................75 Problemas................................................. .................................................... .......75 5. Pensamiento de programación y visualización de datos vectoriales.....................77 5.1 Problema: visualización de datos GIS ........................................... .............77 5.2 Transformación del sistema de coordenadas ........................................... .......80 5.2.1 ¿Cómo determinar el valor de la relación? ..........................................82 5.3 Visualización de datos vectoriales ............................................... .......................84 5.4 Punto, Polilínea, Polígono ............................................... ..........................86 5.5 Pensamiento de programación.................................................. ......................87 5.5.1 Análisis de problemas ............................................. ......................88 5.5.2 Pensar en la programación ........................................... .............88 5.5.3 Igualar patrones de lenguaje de programación y estructura .................................................. ......................89 Contenido ix 5.5.4 Implementar el programa ............................................. ..................89 5.6 Experiencia práctica con Python......................................... ......90 5.6.1 Lectura, análisis sintáctico y análisis de datos de archivos de texto ..................90 5.6.2 Crear Objetos GIS y Verificar Intersección .......................92 5.7 Resumen del capítulo.................................................... ................................95 Problemas................................................. .................................................... .......95 6. Manejo de archivos de forma.................................................... .....................................97 6.1 Manipulación de datos binarios ............................................... ...................97 6.2 Introducción al archivo de forma ........................................... .......................101 6.3 Estructura e interpretación del archivo Shapefile ..................................102 6.3.1 Estructura del archivo principal de un Shapefile ...............................102 6.3.1.1 Encabezado del archivo principal .................................. ......102 6.3.1.2 Registro de funciones ........................................... .........104 6.3.2 Estructura del archivo de índice (.shx) .................................. ...........105 6.3.3 El archivo .dbf ............................................... ...............................107 6.4 Secuencia de Programación General para el Manejo de Shapefiles.........107 6.5 Experiencia práctica con Mini-GIS ............................................... ..108 6.5.1 Visualizar polilíneas y polígonos.......................................108 6.5.2 Interpretar archivos de forma de polilínea .................................. ..109 6.6 Resumen del capítulo.................................................... ...............................113 Problemas................................................. .................................................... .....113 7. Entorno de programación Python.................................................... .....115 7.1 IDE general de Python .................................................. ............................115 7.1.1 Ventanas de programación Python .......................................115 7.1.1.1 GUI de línea de comandos ........................................... .115 7.1.1.2 Interfaz gráfica de usuario interactiva ............................... ........115 7.1.1.3 Programación basada en archivos ...............................116 7.1.2 Configuración del IDE de Python .................................. ................117 7.1.2.1 Resaltar ............................................... ...........117 7.1.2.2 Configuración General de la Ventana de Programación......................................... .......................118 7.1.2.3 Configuración de fuentes para la codificación ..................................118 7.1.3 Depuración ............................................... ...............................118 7.1.3.1 Error de sintaxis ............................................... .............120 7.1.3.2 Excepciones de tiempo de ejecución ..................................121 7.1.3.3 Manejo de excepciones ...............................................122 7.1.3.4 Agregar identificadores de excepción y acciones de limpieza a la lectura/escritura de archivos ..................123 7.2 Módulos de Python ............................................... ..................................124 7.2.1 Introducción al módulo ............................................. ..............125 7.2.2 Configurar módulos ............................................. ........................125 7.2.3 Módulos integrados del sistema ........................................... ...........126 7.3 Gestión de paquetes y Mini-GIS ............................................... ..127 X Contenido 7.3.1 Organización regular de datos GIS....................................127 7.3.2 Paquete Mini-GIS ............................................... .....................128 7.4 Experiencia práctica con Mini-GIS ............................................... ..131 7.4.1 Gestión de paquetes y Mini-GIS ..................................131 7.4.2 Ejecute y practique el paquete Mini-GIS...........................132 7.5 Resumen del capítulo.................................................... ...............................135 Problemas................................................. .................................................... .....135 8. Algoritmos de datos vectoriales.................................................... ..........................137 8.1 Centroide................................................... .............................................................137 8.1.1 Baricentro de un triángulo ............................................... ..............137 8.1.2 Baricentro de un rectángulo.................................................. ............137 8.1.3 Baricentrode un polígono ............................................... ...............138 8.2 Área.................................................. .................................................... ...139 8.2.1 Área de un polígono simple........................................... ..........139 8.2.2 Área de un Polígono con Agujero(s) ........................................... ....140 8.3 Longitud.................................................. ..........................................................141 8.3.1 Longitud de un segmento de línea recta....................................141 8.3.2 Longitud de una polilínea ........................................... ..................142 8.4 Intersección de línea.................................................... ..................................142 8.4.1 Líneas paralelas ............................................. ..........................145 8.4.2 Líneas verticales ............................................. ..........................145 8.5 Punto en Polígono ............................................... ....................................146 8.5.1 Un escenario especial ............................................. ...................146 8.6 Experiencia práctica con Python......................................... ....148 8.6.1 Usar Python para dibujar un polígono y calcular el baricentro ................................................ ..........................148 8.6.2 Usar Python para dibujar polígonos y calcular el área del polígono .............................................. ...............148 8.6.3 Uso de Python para dibujar segmentos de línea y Calcular la intersección .................................................. ....148 8.7 Resumen del capítulo.................................................... ...............................150 Problemas................................................. .................................................... .....150 Sección III Algoritmos SIG Avanzados y su Programación enArcGIS 9. Programación ArcGIS.................................................... ...............................153 9.1 Programación de ArcGIS ............................................... .......................153 9.2 Introducción al Paquete ArcPy ............................................... ..........154 9.2.1 Funciones, clases y módulos de ArcPy ...........................154 9.2.2 Programación con ArcPy en ArcMap....................................155 9.2.3 Programación con ArcPy en la ventana de Python fuera de ArcMap................................................... .....................156 Contenido xi 9.2.4 Uso de los documentos de ayuda.................................... ...........157 9.3 Automatización de ArcTools con Python ............................................... ...158 9.4 Acceso y edición de datos con cursores ..................................160 9.4.1 Cursor de búsqueda ............................................... ..........................160 9.4.2 Actualizar Cursor ............................................... .........................164 9.4.3 Insertar cursor.................................................... ............................164 9.4.4 NúmPy .............................................. .....................................165 9.5 Describir y enumerar objetos ............................................... ..........166 9.5.1 Describir.................................................... ....................................166 9.5.2 Lista .............................................. ............................................167 9.6 Manipulación de objetos complejos ............................................... ........169 9.7 Automatización de la producción de mapas ............................................... ............172 9.8 Creación de ArcTools a partir de secuencias de comandos......................... ..........172 9.9 Manejo de errores y mensajes ............................................... .........176 9.10 Documentos externos y recursos de video ..................................177 9.11 Implementación de cálculos de relaciones espaciales Uso de ArcGIS ................................................. .....................................178 9.12 Resumen.................................................. ............................................180 9.13 Asignación ................................................ ........................................182 10. Algoritmo de datos ráster.................................................... ............................185 10.1 10.2 Datos ráster .................................................. .............................................185 Almacenamiento y compresión de ráster ............................................... ......186 10.2.1 10.2.2 Formatos de datos ráster .............................................. ..........................189 10.3.1 10.3.2 10.3.3 10.3.4 10.3.5 10.3.6 10.3.7 10.3.8 10.3.9 Representación de color y reproducción de trama ..................................191 10.4.1 10.4.2 Análisis de ráster................................................. ....................................196 Experiencia práctica con ArcGIS.................................................... ...198 10.6.1 10.6.2 Codificación de la longitud de ejecución ................................. ..............187 Árbol cuádruple ................................................. ...............................188 10.3 TIFF .................................................. .............................................189 GeoTIFF .................................................. ................................190 I.M.G.................................................. .............................................190 NetCDF.................................................. ..................................190 BMP.................................................. .............................................190 SVG.................................................. ........................................191 jpeg .................................................. ......................................191 GIF.................................................. .............................................191 PNG.................................................. .............................................191 10.4 Representación del color.................................................. ...........191 Representación ráster................................................. ..................194 10.5 10.6 Práctica práctica 10.1: Representaciones de color ráster ..................198 Práctica práctica 10.2: Análisis de datos ráster: Encuentre el área con el rango de elevación entre 60 y 100 y el Tipo de Cobertura Terrestre como “Bosque” ...........199 xi Contenido 10.6.3 Práctica práctica 10.3. Acceda a la información de atributos del conjunto de datos ráster y calcule el área .....200 Resumen del capítulo................................................ .............................205 Problemas................................................. .................................................... .....205 10.7 11. Algoritmos de datos de red.................................................... ......................207 11.1 Representación de la red ............................................... ...................207 11.1.1 Representación básica de la red .............................................207 11.1.2 Redes dirigidas y no dirigidas...................................207 11.1.3 La Matriz de Adyacencia ............................................... .............209 11.1.4 Representación de red en SIG ...............................................209 11.2 Encontrar el camino más corto.................................................. .....................210 11.2.1 Enunciado del Problema ............................................. ..................210 11.2.2 Un enfoquede fuerza bruta para el más corto Algoritmo de ruta ................................................. .....................211 11.2.3 Algoritmo de Dijkstra ............................................... ..................212 11.3 Tipos de análisis de red ............................................... ................214 11.3.1 Enrutamiento .............................................. .....................................214 11.3.2 Instalación más cercana ............................................. ........................214 11.3.3 Áreas de servicio ............................................. ..........................214 11.3.4 Matriz de costos de OD ........................................... ........................216 11.3.5 Problema de generación de rutas para vehículos ............................... ........216 11.3.6 Ubicación-Asignación ............................................. ..................217 11.4 Experiencia práctica con ArcGIS.................................................. ....218 11.5 Resumen del capítulo.................................................... ...............................221 Problemas................................................. .................................................... .....222 12. Algoritmos de datos de superficie.................................................... .........................223 12.1 Superficie 3D y modelo de datos ............................................. ..................223 12.1.1 Datos de superficie ............................................. .............................223 12.1.2 Modelo de datos de superficie ........................................ ..................223 12.1.2.1 Datos discretos ............................................... ............223 12.1.2.2 Datos continuos ............................................... ......225 12.2 Crear datos de modelo de superficie ............................................. ..................228 12.2.1 Crear modelo de superficie de cuadrícula .................................. ......228 12.2.2 Creación de un modelo de superficie TIN .................................. ...229 12.2.3 Conversión entre TIN y RasterSuperficie Modelos .................................................. ....................................229 12.3 Análisis de datos de superficie ........................................... .........................230 12.3.1 Elevación ............................................... ....................................230 12.3.2 Pendiente ............................................... .............................................231 12.3.3 Aspecto ............................................... ......................................232 12.3.4 Análisis hidrológico.................................................. ...............234 12.4 Experiencia práctica con ArcGIS.................................................. ....236 Contenido XIII 12.4.1 Práctica práctica 12.1: Conversión entre DEM, TIN y Contornos ............................................................. ..................236 12.4.2 Práctica práctica 12.2: Generar pendiente y aspecto .....239 12.4.3 Práctica práctica 12.3: Dirección del flujo ...........................239 12.5 Resumen del capítulo.................................................... ...............................242 Problemas................................................. .................................................... .....242 Sección IV AvanzadaTemas 13. Técnicas para mejorar el rendimiento.................................................... ....247 13.1 Problemas ................................................ .............................................247 13.2 Acceso al disco y administración de la memoria ..................................248 13.2.1 Gestión de archivos ............................................... .....................249 13.2.2 Consideración integral ..................................................249 13.3 Procesamiento paralelo y subprocesamiento múltiple ..................................251 13.3.1 Ejecución Secuencial y Concurrente..................................251 13.3.2 Hilos múltiples ............................................... .......................251 13.3.3 Cargar varios Shapefiles al mismo tiempo Uso de subprocesos múltiples .............................................. ..........252 13.3.4 Procesamiento en Paralelo y Cluster, Grid, y computación en la nube .............................................. .........253 13.4 Cálculo de relaciones e índice espacial....................................254 13.4.1 Cuadro delimitador en GIS ............................................... ................255 13.4.2 Índice espacial ............................................... ............................256 13.5 Experiencia práctica con Mini-GIS ............................................... ..257 13.5.1 Carga de datos con RAM como búfer de archivos ..................257 13.5.2 Carga de datos con subprocesos múltiples ..................................258 13.5.3 Comprobación del cuadro delimitador para acelerar la intersección ........258 13.5.4 Intersección de líneas usando el índice R-Tree..................................261 13.6 Resumen del capítulo.................................................... ...............................262 Problemas................................................. .................................................... .....263 14. Temas avanzados.................................................... .............................................265 14.1 Estructura de datos espaciales ............................................... ........................265 14.1.1 Estructura de datos ráster en NetCDF/HDF ...........................265 14.1.2 Aplicación de NetCDF/HDF en el estudio del clima .............266 14.2 Algoritmos y modelado GIS.................................................... ...........270 14.2.1 Datos .............................................. ..........................................270 14.2.2 Análisis de densidad ............................................. .....................271 14.2.3 Análisis de regresión (OLS y GWR) ...............................272 14.3 SIG distribuido.................................................... ....................................275 14.3.1 Arquitectura del sistema ............................................. ...............276 14.3.2 Interfaz de usuario................................................ ..........................277 xiv Contenido 14.4 Pensamiento y computación espaciotemporal....................................280 14.4.1 Problema: simulación y computación de polvo Desafíos .................................................. ........................280 14.4.2 Metodología 1: Uso de computación de alto rendimiento para respaldar la simulación de polvo ...............281 14.4.3 Metodología 2: Utilización del pensamiento espaciotemporal para optimizar la computación de alto rendimiento ..................281 14.4.3.1 Características del agrupamiento de tormentas de polvo: Métodos de programación ............................................282 14.4.3.2 Continuidad espacio-temporal de las tormentas de polvo: método de descomposición .................................. ..283 14.4.3.3 Los eventos de tormentas de polvo están aislados: Modelo anidado ................................................ ........284 14.4.4 Metodología 3: Utilización de la computación en la nube para respaldar el pronóstico de tormentas de polvo ...............................284 14.5 Resumen del capítulo ............................................... ...............................285 Problemas................................................. .................................................... .....286 Referencias.................................................... .................................................... .......287 Índice........................................................................................................ ..................291 Prefacio ¿Por qué otro texto de programación SIG? El sistema de información geográfica (GIS, por sus siglas en inglés) se ha convertido en una herramienta popular que sustenta muchos aspectos de nuestra vida diaria, desde la ruta para el transporte hasta la búsqueda de un restaurante y la respuesta a emergencias. Las prácticas herramientas GIS se desarrollan con diferentes niveles de programación, desde secuencias de comandos, usando python para ArcGIS, hasta la creación de nuevos conjuntos de herramientas desde cero. La cantidad de programación que se necesita para los proyectos depende en gran medida del software GIS, los tipos de aplicaciones y la estructura del conocimiento y los antecedentes del diseñador y desarrollador de la aplicación. Por ejemplo, las secuencias de comandos simples integran aplicaciones de mapas en línea que utilizan mapas de Google. Las aplicaciones de análisis espacial personalizadas utilizan ArcGIS de forma rutinaria con una programación mínima. Muchos desarrollan una aplicación que aprovecha el software de código abierto para administrar big data, modelar fenómenos complejos, o respondiendo a usuarios simultáneos para sistemas en línea populares. El mejor diseño y desarrollo de dichas aplicaciones requiere que los diseñadores y desarrolladores tengan un conocimiento profundo de los principios GIS, así como la habilidad para elegir entre opciones de software comerciales y de código abierto. Para la mayoría de los profesionales de SIG, esto es un desafío porque la mayoría son usuarios finales de herramientas SIG o profesionales de tecnología de la información (TI) con una comprensión limitada de SIG. Para llenar este vacío, durante la última década, Chaowei Yang lanzó un curso introductorio de programación GIS que fue bien recibido. La inscripción continúa aumentando y los estudiantes informan comentarios positivos una vez que están en el lugar de trabajo y utilizan el conocimiento desarrollado en la clase. Para beneficiar a un espectro más amplio de estudiantes y profesionales que buscan materiales de capacitación para desarrollar capacidades de programación GIS, este libro está escrito para integrar y refinar el conocimiento de los autores acumulado a través de cursos y proyectos de investigación asociados. La audiencia de este libro es tanto profesionales de TI para aprender los principios SIG como usuarios de SIG para desarrollar habilidades de programación. Por un lado, este libro proporciona un puente para que los estudiantes y profesionales de SIG aprendan y practiquen la programación. Por otro lado, también ayuda a los profesionales de TI con experiencia en programación a adquirir los fundamentos de GIS para perfeccionar sus habilidades de programación para el desarrollo de GIS. En lugar de intentar competir con la literatura de programación GIS actual, los autores se esfuerzan por interpretar GIS desde un ángulo diferente mediante la integración de algoritmos y programación GIS. Como resultado, este libro proporciona un conocimiento práctico que incluye principios SIG fundamentales, habilidades básicas de programación, desarrollo SIG de código abierto, desarrollo ArcGIS y desarrollo avanzado. XV xvi Prefacio temas Estructurado para desarrollar funciones, aplicaciones y sistemas GIS.s, Se espera que este libro ayude a los estudiantes y profesionales de SIG/TI a ser más competitivos en el mercado laboral de la industria de SIG y TI con las habilidades de programación necesarias. ¿Qué se incluye en el texto? Este libro tiene cuatro secciones. Sección I (Capítulos 1y2) es una descripción general de la programación SIG e introduce la informática y la programación desde una perspectiva práctica. La programación Python (lenguaje de programación integral para ArcGIS) se presenta ampliamente en la Sección II (Capítulos 3mediante8) en el contexto del diseño y desarrollo de un Mini-GIS usando experiencia práctica siguiendo explicaciones de conceptos fundamentales de SIG. Sección III (Capítulos 9 mediante12)se enfoca en algoritmos GIS avanzados e información sobre cómo invocarlos para programar en ArcGIS. Los temas avanzados y la optimización del rendimiento se presentan en la Sección IV (Capítulos 13y14) utilizando el Mini-GIS desarrollado. Capítulo 1introduce computadoras, programación de computadoras y GIS. Además, se analiza el Lenguaje de marcado unificado (UML) para capturar modelos GIS implementados a través de la programación simple de Python.Capitulo 2 presenta características y programación orientada a objetos con ejemplos de tipos básicos de datos vectoriales GIS de punto, polilínea y polígono. Capítulo 3presenta la sintaxis de Python, los operadores, las declaraciones, las características misceláneas de las funciones y el soporte de Python para la programación orientada a objetos. Usando ejemplos SIG,Capítulo 4presenta estructuras de control del lenguaje Python, entrada/salida de archivos y manejo de excepciones.Capítulo 5 presenta el pensamiento de programación utilizando la visualización de datos vectoriales como un ejemplo del flujo de trabajo de este proceso crítico en la programación. Capítulo 6presenta el entorno de programación integrado (IDE) de Python, los módulos, la administración de paquetes y el paquete Mini-GIS.Capítulo 7analiza los formatos de archivos de forma y los pasos sobre cómo manejar los archivos de forma dentro del Mini-GIS.Capítulo 8introduce algoritmos de procesamiento de datos vectoriales e incluye intersección de línea, centroide, área, longitud y punto en polígono. Esta presentación incluye cómo Mini- GIS/ArcGIS admite estos algoritmos. Capítulo 9une las Secciones II y III al presentar la programación de ArcGIS en Python usando ArcPy, el entorno de programación de ArcGIS, herramientas de automatización, acceso a datos, descripción de objetos y corrección de errores.Capítulo 10 presenta algoritmos de datos ráster, incluido el formato, el almacenamiento y la compresión de datos ráster con experiencia práctica en el uso de ArcGIS.Capítulo 11aborda algoritmos de datos de red para representar redes y calcular la ruta más corta en principios y usar ArcGIS.Capítulo 12explora la superficie o Prefacio xvii Representación de datos 3D de datos 3D, conversión de formatos de datos y análisis 3D para elevación, pendiente, aspecto y dirección de flujo con ejemplos en programación ArcGIS. Capítulo 13introduce técnicas de mejora del rendimiento e incluye acceso y gestión de almacenamiento, procesamiento paralelo y subprocesos múltiples, índice espacial y otras técnicas para acelerar GIS como se demuestra en Mini-GIS. Los temas avanzados, incluidos algoritmos y modelado GIS, estructura de datos espaciales, GIS distribuido, pensamiento espaciotemporal y computación, se presentan encapitulo 14. Experiencia práctica Como texto práctico para desarrollar habilidades de programación, este libro hace todo lo posible para garantizar que el contenido sea lo más funcional posible. Para cada principio, algoritmo y elemento fundamental de SIG presentado, se explora un ejemplo como una experiencia práctica usando Mini-GIS y/o ArcGIS con Python. Este flujo de trabajo de aprendizaje ayuda a desarrollar una comprensión profunda de los fundamentos y, naturalmente, se relaciona con los fundamentos y las habilidades de programación. Para el desarrollo de sistemas y código abierto, se presenta un desarrollo paso a paso de un Mini-GIS basado en python. Para el desarrollo de aplicaciones, se adopta ArcGIS para ilustración. El Mini-GIS es un software de código abierto desarrollado para este texto y se puede adoptar para construir otras aplicaciones GIS. ArcGIS, un producto comercial de ESRI, se utiliza para experimentar software comercial de última generación. Para fines de aprendizaje, ArcGIS está disponible de forma gratuita en ESRI. Materiales en línea Este libro viene con los siguientesmateriales en línea: • Diapositivas instructivas para instructores que utilizan este texto para la educación en el aula y profesionales para ayudar en el aprendizaje de la programación GIS. • Códigos de Python para ejercicios de clase y experiencias prácticas y estructurados y etiquetados por capítulo para codificar la secuencia del capítulo. • Mini-GIS como un paquete de código abierto para aprender los fundamentos de GIS y para ejemplificar los principios y algoritmos de GIS. • Respuestas a problemas para que los instructores verifiquen sus soluciones. xviii Prefacio La audiencia y cómo usar este texto Este texto tiene dos funciones: un texto para la construcción sistemática de habilidades de programación SIG y una referencia para identificar una solución Python para algoritmos SIG específicos o funciones desde cero y/o ArcGIS. El texto está destinado a ayudar a cuatro categorías de lectores: • Profesores que enseñan programación GIS o estudiantes GIS que aprenden con un enfoque específico en la experiencia práctica en el aula. • Los programadores que deseen aprender a programar GIS escaneando la Sección I yCapítulos 3y4, seguido de un estudio paso a paso de los capítulos restantes. • Los diseñadores de sistemas GIS más interesados en descripciones de algoritmos, implementación de algoritmos desde cero y ArcGIS para reunir un conocimiento práctico sobre la programación GIS para ayudar en la elección de GIS para el desarrollo futuro. • Profesionales de TI con curiosidad de GIS por los principios de GIS pero omitiendo los ejercicios de programación. La intención de los autores para una audiencia tan amplia se basa en el deseo de cultivar una fuerza laboral profesional competitiva en el desarrollo de SIG, mejorar la literatura de SIG y servir como una introducción práctica a la investigación de SIG. ¿Cómo desarrollamos este texto? El material de texto fue desarrollado por primera vez por el profesor Chaowei Yang en 2004 y se ofreció anualmente en un salón de clases durante la última década. Durante ese lapso de tiempo, muchos estudiantes desarrollaron y mejoraron sus habilidades de programación. Algunos se convirtieron en profesores y conferencistas en universidades y fueron invitados a escribir capítulos de libros específicos. Teniendo en cuenta a la audiencia, se invitó a varios profesores que enseñan programación GIS en diferentes entornos culturales y universitarios a revisar los capítulos del libro. El siguiente es el flujo de trabajo de desarrollo del libro: • Utilizando los materiales de su curso, el profesor Yang estructuró este libro con la ayuda de Irma Shagla, y se contrató la estructura del texto para publicarlo como libro. El profesor asistente Qunying Huang, de la Universidad de Wisconsin, Madison, exploró el uso de las versiones anteriores de los materiales del texto. Los Profesores Asistentes Huang y Zhenlong Li, Universidad de Carolina del Sur, desarrollaron la Sección II del texto en colaboración con el Profesor Yang. Prefacio xix • El Dr. Min Sun, la Sra. Manzhu Yu, el Sr. Yongyao Jiang y el Sr. Jizhe Xia desarrollaron la Sección III en colaboración con el Profesor Yang. • El profesor Yang editó y revisó todos los capítulos para asegurar una estructura y composición comunes. • La Sra. Manzhu Yu y el profesor Yang editaron las diapositivas del curso. • El Profesor Asistente Li, el Sr. Kai Liu, la Sra. Joseph George y la Sra. Zifu Wang editaron Mini-GIS como software para el texto. • Después de completar el texto anterior y los materiales del curso, se invitó a cuatro profesores y dos desarrolladores a revisar el contenido del texto. • Los materiales reunidos para el texto finalmente fueron revisados por varios profesionales, incluidos la Sra. Alena Deveau, el Sr. Rob Culbertson y el profesor George Taylor. • El texto fue formateado por la Sra. Minni Song. • La Sra. Manzhu Yu y el profesor Yang completaron una revisión final de los capítulos, diapositivas, códigos, datos y todos los materiales relevantes. http://taylorandfrancis.com Expresiones de gratitud Este texto es un proyecto a largo plazo que evoluciona del curso "Introducción a la programación GIS" desarrollado y perfeccionado durante la última década en la Universidad George Mason. Muchos estudiantes y profesores brindaron sugerencias constructivas sobre qué incluir, cuál es la mejor manera de comunicar y desafiar a los estudiantes, y quién debe ser considerado como audiencia del texto. El resultado refleja la carrera de programación del profesor Yang desde sus tesis de pregrado en la Universidad del Noreste de China bajo la tutoría del profesor Jinxing Wang. El profesor Yang fue asesorado en programación en el dominio GIS por los profesores Qi Li y Jicheng Chen. Sus mentores académicos en los Estados Unidos, los profesores David Wong y Menas Kafatos, le brindaron apoyo durante muchas décadas y le dieron la oportunidad de impartir el curso que finalmente condujo a este texto. El profesor Yang agradece a los estudiantes brillantes y entusiastas de sus clases en la Universidad George Mason. Sus preguntas y críticas perfeccionaron sus habilidades de enseñanza, mejoraron el contenido y estimularon este esfuerzo de desarrollar un texto. El profesor Yang agradece a su amada esposa, Yan Xiang, y a sus hijos, Andrew, Christopher y Hannah, por complacerlo al robarle un tiempo valioso a la familia para completar el texto. La Sra. Manzhu Yu extiende su gratitud a los muchos colegas que brindaron apoyo y leyeron, escribieron, comentaron y ayudaron en la edición, revisión y formato del texto. La profesora asistente Huang agradece a su maravilloso esposo, Yunfeng Jiang, ya su encantadora hija, Alica Jiang. La Dra. Min Sun agradece a su supervisor de doctorado, el profesor David Wong, por educarla. También agradece a David Wynne, su supervisor en ESRI, donde trabajó como pasante, y a sus otros compañeros de trabajo que, en conjunto, la ayudaron a obtener una comprensión más completa de la programación con productos de ESRI. Por último, pero no menos importante, agradece a sus padres y al adorable perro que la acompañó cuando estaba escribiendo el texto. Yongyao Jiang agradece a su esposa Rui Dong, a su hija Laura ya sus padres Lixia Yao y Yanqing Jiang. xxx http://taylorandfrancis.com Editor chaowei yanges profesor de ciencias de la información geográfica en la Universidad George Mason (GMU). Su interés de investigación es la utilización de principios espaciotemporales para optimizar la infraestructura informática para respaldar los descubrimientos científicos. Fundó el Centro de Computación Espacial Inteligente y el Centro de Innovación Espaciotemporal de la NSF. Se desempeñó como PI o Co-I para proyectos por un total de más de $ 40 millones y financiados por más de 15 agencias, organizaciones y empresas. Ha publicado más de 150 artículos y ha desarrollado varios cursos y programas de capacitación en SIG. Ha asesorado a más de 20 estudiantes de posdoctorado y doctorado que se desempeñan como profesores y científicos en instituciones estadounidenses y chinas muy aclamadas. Recibió muchos premios nacionales e internacionales, como el Premio Presidencial de Administración de Protección Ambiental de EE. UU. en 2009. Todos sus logros se basan en su conocimiento práctico de SIG y sistemas de información geoespacial. Este libro es una colección de conocimientos prácticos sobre cómo desarrollar herramientas GIS desde una perspectiva de programación. El contenido se ofreció en sus clases de programación y algoritmos GIS durante los últimos 10 años (2004–2016) y ha sido adoptado por sus estudiantes y colegas que se desempeñan como profesores en muchas universidades de los Estados Unidos e internacionalmente. XXIII http://taylorandfrancis.com Colaboradores fei hues candidato a doctorado en el NSF Spatiotemporal Innovation Center, George Mason University. Está interesado en utilizar tecnologías de computación enla nube de alto rendimiento para administrar y extraer grandes datos espaciotemporales. Más específicamente, ha optimizado el sistema de almacenamiento distribuido (p. ej., HDFS) y el marco informático paralelo (p. ej., Spark, MapReduce) para administrar, consultar y analizar de manera eficiente grandes conjuntos de datos basados en matrices multidimensionales (p. ej., datos climáticos y sensores remotos). datos). Su objetivo es proporcionar a los científicos capacidades analíticas de datos bajo demanda para liberarlos de las tareas computacionales que consumen mucho tiempo. Qunying Huanges profesor asistente en el Departamento de Geografía de la Universidad de Wisconsin, Madison. Sus campos de especialización incluyen la ciencia de la información geográfica (GIScience), la infraestructura cibernética, la extracción de datos grandes espaciotemporales y el modelado y simulación ambiental a gran escala. Está muy interesada en aplicar diferentes modelos informáticos, como clúster, grid, GPU, computación ciudadana y, especialmente, computación en la nube, para abordar los desafíos informáticos y de big data contemporáneos en la ciencia GIS. Más recientemente, está aprovechando y extrayendo datos de redes sociales para diversas aplicaciones, como respuesta a emergencias, mitigación de desastres y movilidad humana. Ha publicado más de 50 artículos científicos y editado dos libros. yongyao jianges candidato a doctorado en sistemas terrestres y ciencias de la geoinformación en el Centro de Innovación Espaciotemporal NSF, Universidad George Mason. Obtuvo una Maestría (2014) en Ciencias SIG en la Universidad de Clark y una Licenciatura en Ciencias (2012) en teledetección en la Universidad de Wuhan. Su investigación se centra en el descubrimiento de datos, la minería de datos, la semántica y la computación en la nube. Jiang recibió el premio NSF EarthCube Visiting Graduate Student Early-Career Scientist Award (2016), el Microsoft Azure for Research Award (2015) y el primer premio en el Robert Raskin CyberGIS Student Competition (2015). Se desempeña como líder técnico de MUDROD, un proyecto de motor de búsqueda y descubrimiento semántico financiado por el programa AIST de la NASA. Zhen Long Lies profesor asistente en el Departamento de Geografía de la Universidad de Carolina del Sur. La investigación del Dr. Li se centra en la computación espacial de alto rendimiento, el procesamiento/minería de macrodatos y la ciberinfraestructura geoespacial en el área de datos y ciencias GIS computacionales intensivas. La investigación del Dr. Li tiene como objetivo optimizar la infraestructura informática espacial mediante la integración de tecnologías informáticas de vanguardia y principios espaciales para respaldar aplicaciones de dominio como el cambio climático y la gestión de riesgos. xiv xxi Colaboradores kai liues estudiante de posgrado en el Departamento de Geografía y Ciencias de la Geoinformación (GGS) en la Facultad de Ciencias de la Universidad George Mason. Anteriormente, fue académico visitante en el Centro de Computación Espacial Inteligente para la Ciencia del Agua/Energía (CISC) y trabajó durante 4 años en la Oficina de Topografía y Cartografía de Heilongjiang en China. Obtuvo una licenciatura en ciencias de la información geográfica en la Universidad de Wuhan, China. Su investigación se centra en la semántica geoespacial, la gestión de metadatos geoespaciales, la computación en la nube espaciotemporal y la ciencia ciudadana. Sol mínimoes profesor asistente de investigación en el Departamento de Geografía y Ciencias de la Geoinformación de la Universidad George Mason. Sus intereses de investigación incluyen medir la incertidumbre de los atributos en datos espaciales, desarrollar análisis visuales para respaldar la exploración de datos, WebGIS y computación en la nube. Es experta en programación de ArcGIS y también se desempeña como subdirectora del Centro de Innovación Espaciotemporal de la NSF de EE. UU. Jizhe Xiaes profesor asistente de investigación en la Universidad George Mason. Obtuvo un doctorado en sistemas terrestres y ciencias de la geoinformación en la Universidad George Mason en la primavera de 2015. Los intereses de investigación del Dr. Xia son la computación espaciotemporal, la computación en la nube y sus aplicaciones en ciencias geográficas. Propuso una variedad de métodos para utilizar patrones espaciotemporales para optimizar el acceso a big data, la evaluación de la calidad del servicio (QoS) y la aplicación de computación en la nube. Manzhu Yues candidato a doctorado en el Departamento de Geografía y Ciencias de la Geoinformación de la Universidad George Mason. Sus intereses de investigación incluyen metodología espaciotemporal, detección de patrones y aplicaciones espaciotemporales en desastres naturales. Recibió una Beca Presidencial de 2012 a 2015. Ha publicado aproximadamente 10 artículos en revistas de renombre, comoMás unoyIJGIS, y contribuyó como autor importante en varios capítulos de libros. Sección I Visión general http://taylorandfrancis.com 1 Introducción Este capítulo presenta los conceptos básicos de computadora, hardware, software y programación, y establece el contexto para la programación SIG. 1.1 Hardware y software informático Acomputadoraes un dispositivo que tiene la capacidad de realizar diferentes tipos de tareas automatizadas basadas en instrucciones específicas predefinidas por interacciones con los usuarios finales o a través de ellas. Por ejemplo, al hacer clic en el icono de ArcGIS se ejecutará el software ArcGIS. Podemos seleccionar un destino y un punto de partida para activar un análisis de enrutamiento para identificar una ruta de manejo usando Google Maps. Las computadoras son algunas de las tecnologías de más rápida evolución, como lo refleja la capacidad de procesamiento de las pequeñas calculadoras a las supercomputadoras. El tamaño de los dispositivos se ha reducido desde computadoras que ocupan un edificio hasta dispositivos móviles en bolsillos (Figura 1.1). Las interacciones del usuario van desde escribir tarjetas perforadas (primeras computadoras) hasta la interacción humano-computadora, como hablar para invocar una acción o tarea. Hay dos componentes importantes de una computadora (Hwang y Faye 1984): (1) el dispositivo físico que puede realizar el procesamiento automatizado y (2) los paquetes de instrucciones que se pueden configurar para proporcionar una funcionalidad específica, como el procesamiento de textos o el procesamiento de información geográfica. . El primer componente de una computadora, elhardware, es tocable como máquinas físicas. El segundo componente, elsoftware, puede comprarse con el hardware en forma de sistema operativo o instalarse descargándolo en línea. El hardware de la computadora se puede configurar o programar para realizar diferentes tareas; por lo tanto, una computadora también puede llamarse un dispositivo de propósito general. El software varía mucho, ya sea que proporcione capacidad de procesamiento de documentos, gestión financiera, procesamiento de declaraciones de impuestos o simulaciones científicas como el cambio climático o la propagación de enfermedades. Según el tipo de software, se adquiere públicamente (freeware) o es propietario (requiere compra y licencia). Según el uso, el software puede clasificarse como software de sistema, software de aplicación o software integrado (Figura 1.2). El software del sistema se refiere al software básico que debe instalarse para que una computadora funcione. Windows y Linux son ejemplos de software de sistema operativo (SO), un componente esencial de una computadora. Soporte de software de aplicación 3 4 Introducción a la Programación GIS y Fundamentos con Python y ArcGIS® (a) (b) FIGURA 1.1 (a) Supercomputadora de la NASA. (De la supercomputadora de la NASA enhttp://www.nas.nasa.gov/hecc/ resources/pleiades.html.) (b) Otras computadoras: computadora personal(PC), laptop, pad. (De diferentes computadoras enhttp://www.computerdoc.com.au/cuáles-son-los-diferentes-tipos-de-computadoras.) grupos específicos de tareas, como Microsoft Word para el procesamiento de documentos y Microsoft Outlook para correos electrónicos. El software integrado es un tipo de firmware que se graba en el hardware y se convierte en parte de ese hardware. El software integrado existe más tiempo en una computadora que cualquier otro software. El firmware siempre vendrá con el hardware cuando compre una computadora, por lo que no tendrá que cambiar el firmware con tanta frecuencia, especialmente cuando actualice un navegador web o Turbo Tax Return de forma rutinaria. Sistema de información geográfica(GIS) es un tipo de software de aplicación que trata principalmente con información geográfica (Longley et al. 2001). El sistema de posicionamiento global (GPS, Misra y Enge 2006) se utiliza para ubicar lugares geográficos y se puede instalar tanto en automóviles como en teléfonos inteligentes para enrutamiento. El software SIG incluye dos categorías: SIG profesional y SIG ligero. El software GIS profesional, como ArcGIS, proporciona la mayor Software de la aplicacion Word, navegador web, ArcGIS Software del sistema Windows, Linux,... software integrado Hardware FIGURA 1.2 Diferentes tipos de software. http://www.nas.nasa.gov/hecc/resources/pleiades.html http://www.nas.nasa.gov/hecc/resources/pleiades.html http://www.computerdoc.com.au/what-are-the-different-types-of-computers Introducción 5 conjunto completo de funcionalidades GIS para profesionales en el dominio GIS. El software GIS menos intenso, pero popular, que se utiliza para ver el entorno geográfico es la aplicación de mapas en línea, como Google Maps y Google Earth. 1.2 SIG y Programación GIS se origina en varios dominios y se refiere al sistema diseñado para capturar, observar, recopilar, almacenar y administrar datos geográficos y proporcionar herramientas para análisis y visualización espacial (Longley et al. 2001). Los SIG pueden ayudar a obtener datos geográficos que se utilizarán para la toma de decisiones, como la elección de rutas para la respuesta a emergencias. Se sabe que GIS comenzó a partir del programa informático canadiense de inventario de recursos naturales dirigido por Roger Tomlinson en la década de 1960. GIS se está volviendo cada vez más popular en dispositivos móviles como un medio para analizar información y patrones relacionados con el tráfico y el clima. Acuñado por Mike Goodchild, el término "GIS" también puede referirse al campo de la ciencia de la información geográfica ociencia SIG—el estudio de los principios y tecnologías SIG aplicados científicamente (Goodchild 1992). Según los científicos de SIG,ciencia SIGinvolucra sensores remotos, sistemas globales de navegación por satélite y GIS. Además, en varios dominios,Geoinformáticapuede aplicarse a la teledetección, el sistema mundial de navegación por satélite y la información GIS. Estos temas, sin embargo, no serán explorados en este libro. GIS es el sistema que comprende hardware (computadora, dispositivos móviles, GPS), software (ArcGIS o mapeo en línea) y datos (información geográfica) que se pueden utilizar para lograr un conjunto de funcionalidades para un grupo de usuarios. Los tres componentes deben utilizarse para que GIS funcione de manera efectiva. Una diferencia significativa entre GIS y otras aplicaciones de software es su capacidad para administrar y manipular el gran volumen y la complejidad de los datos geográficos, que comprenden información espaciotemporal y de atributos incrustada. El carácter complejo de los datos GIS exige un conjunto específico de software para extraer información para la toma de decisiones. Los paquetes de software maduros están disponibles públicamente, incluido el conjunto más actualizado de software ArcGIS y la última edición del software de mapas web Google Maps. El proceso de desarrollo de software se denominaprogramación. La programación le indica a la computadora que realice una tarea en función de las órdenes. Hay muchos tipos diferentes de niveles de programación (Mitchell 1996). El nivel más bajo para programar se basa en las instrucciones de hardware específicas admitidas por las unidades centrales de procesamiento (CPU) y utilizadas por los desarrolladores de instrumentos inteligentes. Debido a que las instrucciones de la CPU se procesan como una secuencia de 0 y 1, el lenguaje ensamblador se desarrolla para ayudar a los desarrolladores a recordar esas instrucciones. Ambos lenguajes se consideran de bajo nivel y son específicos del hardware. Se han desarrollado lenguajes avanzados para facilitar la 6 Introducción a la Programación GIS y Fundamentos con Python y ArcGIS® comprensión, pero todavía están restringidos por las instrucciones del hardware. Por ejemplo, el lenguaje de programación C se usa comúnmente para desarrollar software (Kernighan y Ritchie 2006). Para hacer que la organización de la programación sea más similar a cómo vemos el mundo, se propuso C++ para admitir la programación orientada a objetos basada en C (Stroustrup 1995). Desde entonces, se han desarrollado y se utilizan muchos lenguajes de programación diferentes en la programación GIS. Por ejemplo, Java es un lenguaje para el desarrollo de aplicaciones multiplataforma propuesto por Sun Microsystems (Arnold et al. 2000). JavaScript se utiliza para realizar una programación de secuencias de comandos (más simple) para manipular objetos dentro de un navegador web. Además de Java y JavaScript, ArcGIS ha agregado recientemente Python a su lista de lenguajes de programación (Van Rossum 2007). ¿Por qué necesitamos la programación GIS? El software GIS maduro y las plantillas de aplicaciones brindan muchas herramientas para realizar nuestras tareas diarias; sin embargo, para comprender los fundamentos de cómo funciona GIS y personalizar el software para problemas específicos, se requiere programación. La siguiente lista proporciona ejemplos de programación: • Software de personalización para la aplicación.: El Servicio de Parques Nacionales está desarrollando una sencilla aplicación web de mapas para permitir que el público en general seleccione y vea de forma interactiva la información de un Parque Nacional en particular. El uso de una herramienta de mapeo en línea como Google Maps y la selección de un parque con el mouse activará una consulta de la información seleccionada para ese parque. En este escenario, necesitamos información geográfica sobre los parques, un programa para la interacción del usuario front-end y un lenguaje de consulta de base de datos que generará resultados para el parque seleccionado. • Automatización de un proceso: suponga que hay 100 conjuntos de datos geográficos recopilados en formato de archivo de texto y necesitamos convertirlos en un archivo de forma, un formato de archivo de datos nativo utilizado por ArcView y ArcGIS, para su posterior procesamiento. ArcGIS puede realizar la conversión una por una, pero hacerlo manualmente 100 veces es monótono. Por lo tanto, una herramienta de secuencias de comandos simple para leer y procesar automáticamente los 100 conjuntos de datos en archivos de forma sería beneficioso. El uso de secuencias de comandos de Python en ArcGIS brinda la capacidad de hacerlo. • Satisfaciendo necesidades GIS simples: Supongamos que hay una empresa de transporte que necesita realizar un seguimiento de las posiciones de los vehículos de su empresa en intervalos de 5 minutos. Sin embargo, la empresa no puede permitirse comprar una licencia de software GIS profesional. Para resolver el problema, la empresa puede usar Python para crear un mapa que muestre la región de servicio de la empresa y las ubicaciones de los vehículos cada 5 minutos. Esta programación puede incluir características de Zoom In/Out y Move/Pan, animaciones basadas en ubicaciones y una selección de uno o varios vehículos.Introducción 7 • Cultivando profesionales GIS avanzados: Suponga que se le pide a un grupo de estudiantes que invente un algoritmo de enrutamiento basado en las condiciones de tráfico pronosticadas y la información de tráfico en tiempo real. Los estudiantes deberán organizar la información de la red de carreteras comparando la velocidad de la red en tiempo real y prevista. Es esencial utilizar la información prevista más precisa en el proceso de enrutamiento. Se necesita programación a lo largo de todo el proceso para la gestión y el enrutamiento de la red, y para reconstruir los resultados en forma de mapa o instrucciones escritas. La información geográfica se ha vuelto cada vez más importante en todos los ámbitos de la vida humana, ya sea para el descubrimiento científico, el pronóstico de desastres naturales, el avance de las tecnologías de observación o la creación de conciencia pública sobre la ubicación y la ruta. Mientras que algunas aplicaciones requieren tecnologías GIS completas para producir resultados valiosos, muchas aplicaciones de información geográfica no requieren sistemas de información geográfica sofisticados. Para el último caso, se utiliza un software de información geoespacial pequeño o de código abierto, mientras que los sistemas GIS comerciales como ArcGIS están disponibles para el primer caso. Para abordar mejor ambas necesidades, es esencial comprender los fundamentos de cómo funciona GIS y su procesamiento básico de información geográfica. En este capítulo se presenta la estructura de fondo para construir tales capacidades: hardware y software informático, GIS y programación, modelos de datos GIS y lenguaje de marcado unificado (UML, Fowler 2004) y Python. Se necesita experiencia práctica en programación para comprender los conceptos y desarrollar las habilidades esenciales utilizadas por los profesionales SIG en su trabajo e investigación. Basado en los fundamentos de SIG, este libro lo ayudará a desarrollar y mejorar las habilidades de programación sistemática y le brindará una comprensión más profunda de los fundamentos de SIG. Debido a su popularidad dentro de la comunidad GIS, Python será el lenguaje de programación principal que se utilizará en este libro. Basado en los fundamentos de SIG, este libro lo ayudará a desarrollar y mejorar las habilidades de programación sistemática y le brindará una comprensión más profunda de los fundamentos de SIG. Debido a su popularidad dentro de la comunidad GIS, Python será el lenguaje de programación principal que se utilizará en este libro. Basado en los fundamentos de SIG, este libro lo ayudará a desarrollar y mejorar las habilidades de programación sistemática y le brindará una comprensión más profunda de los fundamentos de SIG. Debido a su popularidad dentro de la comunidad GIS, Python será el lenguaje de programación principal que se utilizará en este libro. 1.3 pitón Python fue desarrollado originalmente por un programador holandés, Guido van Rossum, en 1990. Según los informes, Van Rossum era fanático de la serie de comedia británica,El circo volador de Monty Python, y al desarrollar el lenguaje de programación de código abierto, tomó prestado el nombre "Python" para el lenguaje y su institución sin fines de lucro, Python Software Foundation. Similar a los lenguajes de programación C++ y Java, Python es un lenguaje orientado a objetos e interactivo. Python es dinámico en el sentido de que utiliza un mecanismo automático de administración de memoria para asignar y liberar memoria para 8 Introducción a la Programación GIS y Fundamentos con Python y ArcGIS® datos (variables). Python y ArcGIS lanzan regularmente nuevas versiones de sus programas; este libro está basado en la versión 2.7 de Python y ArcGIS 10.1. Hay muchas razones para elegir Python, incluidas las siguientes:* • Es excelente para principiantes en programación, pero excelente para expertos. • La sintaxis de Python es muy simple y fácil de aprender. Cuando te familiarices con ellos, sentirás que es realmente muy útil. • Es altamente escalable y muy adecuado para proyectos grandes y pequeños. • Está en una fase de rápido desarrollo. Casi cada medio año, hay un nuevo lanzamiento importante. • Es multiplataforma portátil. Esto significa que un programa escrito en Windows se puede ejecutar con los sistemas operativos Linux o Mac. • Es fácilmente extensible. Siempre puede agregar más funciones de clase a su proyecto actual. • Dispone de potentes bibliotecas estándar. • Muchos terceros también ofrecen paquetes altamente funcionales para su uso. En lugar de desarrollar funciones GIS desde cero, simplemente puede descargar el código fuente e integrarlo en su proyecto. • Es totalmenteorientado a objetoslenguaje, simple pero elegante, estable y maduro. Hay varios pasos para aprender Python para la programación GIS: • Familiarizarse con el concepto de clase y objeto (Capítulos 1y2). • Aprenda la sintaxis de Python, incluidas variables, tipos de datos, estructuras, controles, instrucciones y otras estructuras de programación (Capítulos 1mediante4). • Cree programas de Python desde cero e integre bibliotecas de código abierto para facilitar la programación (Capítulo 5). • Familiarizarse con el entorno de programación de Python (intérprete de Python o editor de texto de Python,Capítulo 6). • Resolver problemas GIS escribiendo código para algoritmos GIS (Capítulos 7 mediante13). Estos componentes se presentan en el orden anterior a lo largo de este libro. Este capítulo presenta conceptos importantes como la programación orientada a objetos, UML y modelos GIS. * http://pythoncard.sourceforge.net/what_is_python.html. http://pythoncard.sourceforge.net/what_is_python.html Introducción 9 1.4 Clase y Objeto Dentro de esta sección, discutiremos dos tipos de conceptos fundamentales: clase y objeto (Rumbaugh et al. 1991). La clase utiliza un conjunto de atributos y comportamientos para representar una categoría de fenómenos del mundo real. Por ejemplo,Figura 1.3 muestra cómo extraer los atributos y comportamientos de los estudiantes. Otro ejemplo son las compras en línea en Amazon o eBay. Tanto los clientes como los productos en línea deben resumirse en clases: • Los clientes tendrían una identificación de cliente, una dirección de envío y una dirección de facturación. El comportamiento del cliente incluiría agregar o eliminar un producto del carrito de compras. • Los productos tendrían un ID de producto, un nombre de producto y un precio de producto. El comportamiento del producto incluiría establecer el precio y sumar la cantidad/cantidad del producto. Un objeto es una instancia específica de una clase. Podemos considerar objetos como instancias de clases asignando valores a sus atributos. Específicamente, una clase es la abstracción de una categoría o colección de entidades del mundo real, mientras que un objeto es una entidad específica del mundo real dentro de la clase. Dentro de una computadora, una clase es la plantilla y un objeto es la entidad específica que ocupa la memoria de la computadora. La computadora puede operar tanto en los atributos como en los comportamientos de un objeto. Por ejemplo, cuando un estudiante inicia sesión en el sistema web de su universidad con un nombre de usuario y una contraseña, el sistema creará un nuevo objeto de estudiante. La computadora lee a cada estudiante como un objeto independiente con varios atributos diferentes (por ejemplo, nombre de usuario, contraseña e ID de estudiante). Después de iniciar sesión, un estudiante puede buscar, registrarse, Capitulo 2presentará cómo definir clases y objetos usando Python. FIGURA 1.3 Un ejemplo de representación de estudiantes con la clase Student. 10Introducción a la Programación GIS y Fundamentos con Python y ArcGIS® 1.5 Modelos de datos SIG Los modelos de datos GIS se utilizan para capturar elementos geoespaciales esenciales de un problema específico (Longley et al. 2001).Hay tres tipos de modelos de datos: datos vectoriales, datos raster y datos especiales. Los modelos de datos vectoriales constan de tipos de modelo de punto, polilínea y polígono. Los datos ráster incluyen celdas igualmente divididas de imágenes y modelos de elevación digitales. Los datos especiales se componen de datos lineales y de red. Este libro destaca diferentes tipos de modelos de datos GIS, pero se centrará principalmente en modelos de datos vectoriales. Un punto puede hacer referencia a una clase de datos vectoriales representados por un par de coordenadas x, y en un espacio bidimensional (2D) o una tupla de coordenadas x, y y z en un espacio tridimensional (3D). Por ejemplo, una ciudad se representa como un punto en un mapamundi. Cada ciudad tiene un grupo de atributos, que incluiría el nombre de la ciudad, la población, el ingreso familiar promedio y los acro-nombres. Otro ejemplo que usa puntos es un mapa que muestra todos los restaurantes dentro de una determinada región. Además de su ubicación puntual, cada restaurante contendrá otra información relevante, incluido su nombre, la capacidad de la sala, la cocina y el año en que abrió. En estos casos, el punto es una clasificación general, mientras que la ciudad o el restaurante es un tipo de clase más específico que contiene diferentes atributos. Al diseñar, cada punto del rectángulo puede representar una clase (Figura 1.4). Este diagrama también se conoce como diagrama de clases UML. La primera fila se refiere al nombre de la clase:Ciudad; la segunda fila se refiere a los atributos de la clase:nombrey ingreso promedio; la tercera fila se refiere a un conjunto de métodos:obtenerNombre, obtenerIngresoPromedio, yescoger un nombre. Las polilíneas son una clase de datos vectoriales representados por una lista de puntos. Por ejemplo, un río se puede representar como una polilínea en un mapa, que luego se puede categorizar como un tipo de clase de polilínea. Una clase de polilínea puede incluir coordenadas de puntos, atributos relevantes y un conjunto de métodos. Otro ejemplo de dataset de polilínea pueden ser carreteras, autopistas e interestatales. Ambos ejemplos son categorías de polilíneas. Los ríos se pueden representar usando UML (Figura 1.5). La primera fila del UML es el sujeto de la clase:Río; la segunda fila incluye los atributos del río:nombreycoordenadas; y la tercera fila se refiere a los métodos que usará el programador:obtenerNombre,establecer coordenadas, yescoger un nombre. FIGURA 1.4 Un diagrama UML para la clase City. Introducción 11 FIGURA 1.5 La clase River incluye tres partes. FIGURA 1.6 La clase County incluye tres partes. Los polígonos son otra clase de datos vectoriales que también están representados por una lista de puntos; sin embargo, con los polígonos, el primer y el último punto son los mismos. Por ejemplo, en el mapa del estado de Virginia, un condado específico, como el condado de Fairfax, se puede representar como un polígono. El condado es un tipo de clase de polígono, que incluye una lista de puntos, atributos relevantes y un conjunto de métodos. Los países en un mapa mundial también se pueden representar como polígonos. En cualquier caso, tanto el condado como el país son tipos de polígonos. Como se muestra enFigura 1.6, la primera fila es el nombre del asunto:Condado; la segunda fila son los atributos del sujeto:nombreypoblación; y la tercera fila se refiere a los métodos:obtenerNombre,conjuntoPoblación, yescoger un nombre . Desarrollar más métodos requerirá agregar más métodos y atributos a cada clase para capturar la evolución de los modelos de datos y la funcionalidad del software; Los diagramas UML se utilizan para estandarizar su representación. Esta sección utiliza diagramas de clases y estándares UML relevantes para las clases de puntos, polilíneas y polígonos. 1.6 UML En 1997, el Grupo de Gestión de Objetos (OMG)*creó el UML para registrar el diseño del software para la programación. Diseñadores y programadores de software * Ver Dios mío enhttp://www.omg.org/. http://www.omg.org/ 12Introducción a la Programación GIS y Fundamentos con Python y ArcGIS® use UML para comunicar y compartir el diseño. Similar al idioma inglés en el que nos comunicamos compartiendo nuestras ideas hablando o escribiendo, UML se usa para modelar una aplicación o problema de forma orientada a objetos. El modelado UML se puede utilizar para facilitar todo el diseño y desarrollo de software. El diagrama UML se utiliza para capturar la lógica de programación. Hay dos tipos de diagramas que discutiremos específicamente: diagramas de clases y diagramas de objetos (Figura 1.7). El diagrama de clases UML puede representar una clase usando tres partes: nombre, atributos y métodos. Los atributos y métodos tienen tres accesibilidades diferentes: pública (+), privada (-) y protegida (#). Los atributos y métodos normalmente se representan en el siguiente formato: • Atributos: atributo de accesibilidad Nombre: tipo de datos del atributo, por ejemplo, +nombre: Cadena • Métodos: nombre del método de accesibilidad (argumentos del método): tipo de devolución del método, por ejemplo, +setName(name:String): void Público se refiere al método/atributos a los que pueden acceder otras clases. Ninguna otra clase puede acceder a métodos/atributos privados. Otras clases no pueden acceder a los métodos/atributos protegidos, excepto aquellas clases heredadas de esta clase (se explica a continuación). Hay varias relaciones fundamentales entre diferentes clases: dependencia, herencia, composición y agregación. La dependencia representa una clase dependiente de otra. La herencia es una relación importante en la que una clase es un subtipo de otra clase.Figura 1.8ilustra la dependencia entre la geometría y los sistemas de coordenadas en el sentido de que la existencia de la geometría depende de un sistema de coordenadas. Esta relación está representada por una línea discontinua y una flecha desde la geometría hasta la clase del sistema de coordenadas. La relación entre un punto, una línea y un polígono se clasifican dentro de la clase de geometría. La agregación y la composición son otras dos relaciones importantes en UML. La agregación representa la relación "tiene un" en UML. Por ejemplo, un estado es una agregación de varios condados (Figura 1.9a). La composición representa, o “posee” la relación. Por ejemplo, una clase multipunto puede estar compuesta por dos o más puntos (Figura 1.9b). La relación se puede cuantificar por el número de elementos involucrados. Por ejemplo, una línea incluye más de 2 puntos y un estado incluye más de 0 condados. Hay seis tipos diferentes de esta relación de multiplicidad (Figura 1.10). Un multipunto se compone de dos o más puntos (Figura 1.9b) y un estado se agrega por cero o más condados. Un objeto es uninstanciaciónde una clase El diagrama de objetos muestra una vista completa o parcial de la estructura del sistema modelo en un momento específico. Entonces, el estado Introducción 13 D ia gr am a Es tr uc tu ra di ag ra m a Co m po rt am ie nt o di ag ra m a Cl as e di ag ra m a Co m po ne nt e di ag ra m a O bj et o di ag ra m a Ac tiv id ad di ag ra m a ca so d e us o di ag ra m a Co m pu es to es tr uc tu ra di ag ra m a Es ta do m áq ui na di ag ra m a Pe rf il di ag ra m a D es pl ie gu e di ag ra m a Pa qu et e di ag ra m a In te ra cc ió n di ag ra m a In te ra cc ió n vi si ón g en er al di ag ra m a Se cu en ci a di ag ra m a Co m un ic ac ió n di ag ra m a M om en to di ag ra m a N ot ac ió n: U M L FI G U RA 1 .7 El d ia gr am a de c la se s y el d ia gr am a de o bj et os u til iz ad os e n es te li br o. 14Introducción a la Programación GIS y Fundamentos con Python y ArcGIS® Geometría Sistema coordinado Punto Línea Polígono FIGURA 1.8 Herencia y dependencia. (a)
Compartir