Taller realizado durante las 13as Jornadas Internacionales gvSIG en Valencia y las 4as Jornadas gvSIG de México. Explica las funcionalidades básicas del módulo de programación y un ejemplo de manejo de datos e inserción de un geoproceso en la Toolbox.
Este documento proporciona una introducción al desarrollo guiado por pruebas (TDD) y al framework de pruebas PHPUnit. Explica qué es TDD, su ciclo de desarrollo basado en pruebas, y las diferencias con el desarrollo guiado por funcionalidades. También describe la instalación, uso y ejemplos básicos de PHPUnit, el popular framework para automatizar pruebas unitarias en PHP.
Este documento discute las opciones para integrar código C++ con Python. Explica que Python es útil para productividad mientras que C++ es mejor para desempeño. Presenta opciones como Python/C API, Cython, SWIG y Boost para crear interfaces entre los lenguajes. Recomienda que SWIG es popular pero que Boost es mejor para ambientes C++, aunque requiere más conocimiento de C++. Finalmente, enfatiza que Python y C++ pueden trabajar juntos de forma efectiva.
Extendiendo aplicaciones en C y C++ con PythonAngel Freire
Este documento explica cómo extender aplicaciones en C y C++ usando Python. Detalla la API de CPython que permite interpretar código Python desde otros lenguajes como C y C++. Explica cómo inicializar e interpretar código Python, crear y manipular objetos Python, y manejar la memoria a través del conteo de referencias. Proporciona un ejemplo completo de cómo llamar una función Python desde C++ e imprimir el resultado.
Taller evento TestingUY 2015 - Técnicas de Automatización Going from GOOD to ...TestingUy
Expositores: Federico Regueira, Diego Tortoriello y Gonzalo Ciosek Infocorp
Resumen:
Demostración del uso de un framework de automatización para interacción directa con objetos de una página web.
Se propone hacer una presentación teórica de la automatización de pruebas sobre Selenium, sus obstáculos típicos y cómo superarlos mediante el uso de otro framework; creando scripts de automatización más robustos y con mayor mantenibilidad.
Asimismo, se propone hacer una práctica en conjunto con los participantes, para que puedan ver y entender por un medio más tangible, la diferencia y ventajas que esta nueva estrategia nos brinda.
Python es un lenguaje de programación interpretado de alto nivel, multiplataforma y de código abierto. Se introdujo a fines de los 80 y sigue los principios del "Zen de Python" que enfatizan la legibilidad del código y soluciones simples. Python se puede usar para crear aplicaciones web, de escritorio y scripts. Es popular porque es fácil de aprender y permite comenzar proyectos rápidamente.
Python es un lenguaje de programación interpretado y de tipado dinámico creado por Guido van Rossum a principios de los 90. El documento introduce Python y explica sus características principales como su sintaxis simple y gran cantidad de librerías. También cubre conceptos básicos como variables, tipos de datos, operadores y ejemplos de programas sencillos en Python.
Este documento proporciona una introducción al desarrollo guiado por pruebas (TDD) y al framework de pruebas PHPUnit. Explica qué es TDD, su ciclo de desarrollo basado en pruebas, y las diferencias con el desarrollo guiado por funcionalidades. También describe la instalación, uso y ejemplos básicos de PHPUnit, el popular framework para automatizar pruebas unitarias en PHP.
Este documento discute las opciones para integrar código C++ con Python. Explica que Python es útil para productividad mientras que C++ es mejor para desempeño. Presenta opciones como Python/C API, Cython, SWIG y Boost para crear interfaces entre los lenguajes. Recomienda que SWIG es popular pero que Boost es mejor para ambientes C++, aunque requiere más conocimiento de C++. Finalmente, enfatiza que Python y C++ pueden trabajar juntos de forma efectiva.
Extendiendo aplicaciones en C y C++ con PythonAngel Freire
Este documento explica cómo extender aplicaciones en C y C++ usando Python. Detalla la API de CPython que permite interpretar código Python desde otros lenguajes como C y C++. Explica cómo inicializar e interpretar código Python, crear y manipular objetos Python, y manejar la memoria a través del conteo de referencias. Proporciona un ejemplo completo de cómo llamar una función Python desde C++ e imprimir el resultado.
Taller evento TestingUY 2015 - Técnicas de Automatización Going from GOOD to ...TestingUy
Expositores: Federico Regueira, Diego Tortoriello y Gonzalo Ciosek Infocorp
Resumen:
Demostración del uso de un framework de automatización para interacción directa con objetos de una página web.
Se propone hacer una presentación teórica de la automatización de pruebas sobre Selenium, sus obstáculos típicos y cómo superarlos mediante el uso de otro framework; creando scripts de automatización más robustos y con mayor mantenibilidad.
Asimismo, se propone hacer una práctica en conjunto con los participantes, para que puedan ver y entender por un medio más tangible, la diferencia y ventajas que esta nueva estrategia nos brinda.
Python es un lenguaje de programación interpretado de alto nivel, multiplataforma y de código abierto. Se introdujo a fines de los 80 y sigue los principios del "Zen de Python" que enfatizan la legibilidad del código y soluciones simples. Python se puede usar para crear aplicaciones web, de escritorio y scripts. Es popular porque es fácil de aprender y permite comenzar proyectos rápidamente.
Python es un lenguaje de programación interpretado y de tipado dinámico creado por Guido van Rossum a principios de los 90. El documento introduce Python y explica sus características principales como su sintaxis simple y gran cantidad de librerías. También cubre conceptos básicos como variables, tipos de datos, operadores y ejemplos de programas sencillos en Python.
Esta presentación tiene como objetivo conocer los aspectos básicos de PyQt4 y como realizar aplicaciones en Python con interfaces de usuario usando esta biblioteca.
Este documento presenta un tutorial introductorio sobre Python. Explica brevemente qué es Python, por qué es un lenguaje popular, cómo instalarlo e incluye un ejemplo de "Hola Mundo". Luego procede a explicar conceptos básicos de Python como tipos de datos, controles de flujo, orientación a objetos, módulos, entre otros temas. El documento parece estar dirigido a principiantes con el objetivo de enseñar los fundamentos del lenguaje Python de una manera simple y didáctica.
El documento habla sobre el lenguaje de programación C++. Explica que C++ fue creado a mediados de los 1980 por Bjarne Stroustrup como una extensión del lenguaje C, abarcando paradigmas de programación estructurada, genérica y orientada a objetos. También describe cómo escribir y compilar programas en C++ en un entorno Linux usando el compilador GCC y diferentes tipos de instrucciones como declarativas, de asignación, selectivas y repetitivas.
Python es un lenguaje de programación de propósito general creado a principios de los 90 por Guido van Rossum. Es interpretado, de tipado dinámico, multiplataforma y de código abierto. En Python, las variables se usan para almacenar y manipular datos sin necesidad de declarar su tipo, el cual se determina en tiempo de ejecución.
Python es un lenguaje de programación de código abierto, de alto nivel y multiplataforma que permite la creación de scripts y programas complejos de manera fácil. Ofrece tipos de datos, módulos reutilizables, y una gran cantidad de librerías para trabajar con datos geoespaciales y SIG, incluyendo la manipulación de shapefiles y raster a través de bibliotecas como Shapely y GDAL.
Mini clase Intro Programación Python UTN Profesorado 2015Mariano Reingart
Introducción a la programación de computadoras con Python
Presentación del lenguaje de programación Python
Motivaciones y estudios relacionados
Descargas - Instalación
Estructuras básicas (condicionales, ciclos, funciones)
Demostración
Feedback
Bonus track (trabajo de los alumnos con raspberry pi, desarrollo web, niños)
Este documento presenta una introducción a las herramientas y marcos de pruebas unitarias en PHP. Se discuten varios marcos xUnit como PHPUnit, Simple Test y Atoum. También se describen herramientas para la integración continua y la calidad de código como PHP QA Tools, Scrutinizer CI y Travis CI. Finalmente, se explican conceptos como test dobles y funcionales con PHPUnit y Selenium.
Este documento presenta una introducción a la concurrencia en Java, incluyendo temas como threads, Runnable, Callable, synchronized, Atomic, Future, ExecutorService, ThreadPool, ForkJoinPool, ForkJoinTask, ParallelStream y la ley de Amdahl. Proporciona código de ejemplo para ilustrar el uso de threads, comunicación entre threads, Executors y CompletableFuture. El objetivo es llevar al lector de principiante a competente en conceptos básicos de concurrencia en Java.
Python es un popular lenguaje de programación dinámico que se remonta a finales de los 80. Es de propósito general pero se usa comúnmente para scripts. Es de código abierto, de alto nivel, portable e interpretado. Se puede instalar desde python.org y tiene características como tipos de datos simples, estructuras de control como if/else y bucles, funciones, y aplicaciones populares como YouTube y la NASA.
Este documento presenta una introducción a Angular y resume errores comunes en JavaScript. Explica conceptos clave como Single Page Apps y frameworks, y por qué Angular es útil para construir aplicaciones dinámicas. Luego detalla errores comunes como el uso de variables globales y type wrappers, y recomienda el uso de punto y coma, comparaciones estrictas y parseInt con base. Finalmente, ofrece enlaces a ejemplos básicos de Angular.
Este documento presenta una introducción a Python. En 3 oraciones o menos:
El documento introduce Python como un lenguaje de programación interpretado, de tipado dinámico y fuerte, multiplataforma y orientado a objetos. Explica brevemente los tipos de datos en Python como números, cadenas, vectores y otros, y proporciona ejemplos de código. Además, compara Python con C y Java con el ejemplo "Hola Mundo" y explica cómo instalar Python en diferentes sistemas operativos.
Este documento resume Jumpshot, una herramienta para visualizar el rendimiento de programas paralelos basada en registros de bitácoras. Explica que Jumpshot permite el análisis post mortem mediante la visualización de líneas de tiempo y histogramas generados a partir de archivos de registro CLOG. También describe los requisitos para sistemas de visualización, la historia de herramientas similares y las ventajas e inconvenientes del uso de Java para implementar Jumpshot.
Introducción a la programación del amigo botjhonsoomelol
Este documento proporciona instrucciones paso a paso para configurar el entorno de desarrollo necesario para programar el robot AmigoBot en Visual C++ 2008, incluida la instalación de software como Aria, MobileSim y MinGW. También incluye un ejemplo de código para conectarse al robot, establecer su velocidad y detenerlo cuando los sensores detecten objetos a una distancia específica.
MPI es una interfaz estándar para comunicación entre procesos en sistemas distribuidos. Fue diseñado por un consorcio de empresas y laboratorios para permitir programación paralela en sistemas sin memoria compartida. MPI define funciones para inicializar procesos, comunicación punto a punto y colectivas, y tipos de datos personalizados. OpenMPI es una implementación de código abierto ampliamente usada.
Este documento presenta una introducción a Python. Explica que Python fue creado por Guido van Rossum y que es un lenguaje de programación muy legible y poderoso a pesar de ser minimalista. También describe algunas características clave de Python como su sintaxis basada en tabulación, su capacidad multiplataforma y su amplia biblioteca estándar.
Este documento describe cómo usar Python para automatizar tareas de geoprocesamiento en ArcGIS mediante scripts. Explica que Python es un lenguaje de programación fácil de usar e integrado a ArcGIS que permite escribir código para realizar operaciones como cortar shapefiles. Además, presenta un ejemplo de script de Python que realiza un clip de shapefiles usando un shapefile de corte y almacena los resultados.
Este documento introduce los conceptos básicos de testing y provee ejemplos de unit testing y functional testing en PHP. Explica que el unit testing sirve para probar el correcto funcionamiento de módulos individuales de código, mientras que el functional testing prueba las funcionalidades de la aplicación completa. También cubre temas como test driven development, mocks, herramientas de testing como PHPUnit, y métodos comunes para validar resultados en los tests.
1) El documento habla sobre cambios en la revista "PC Paso a Paso" y en el proyecto "Hack x Crack". Se creará un nuevo núcleo de gestión formado por miembros del foro para retomar los objetivos iniciales.
2) La revista pasará a ser bimestral en lugar de mensual mientras se asientan los nuevos cimientos del proyecto.
3) Se anuncian cambios continuos en diferentes áreas como la maquetación y el contenido para mejorar la revista.
Esta presentación tiene como objetivo conocer los aspectos básicos de PyQt4 y como realizar aplicaciones en Python con interfaces de usuario usando esta biblioteca.
Este documento presenta un tutorial introductorio sobre Python. Explica brevemente qué es Python, por qué es un lenguaje popular, cómo instalarlo e incluye un ejemplo de "Hola Mundo". Luego procede a explicar conceptos básicos de Python como tipos de datos, controles de flujo, orientación a objetos, módulos, entre otros temas. El documento parece estar dirigido a principiantes con el objetivo de enseñar los fundamentos del lenguaje Python de una manera simple y didáctica.
El documento habla sobre el lenguaje de programación C++. Explica que C++ fue creado a mediados de los 1980 por Bjarne Stroustrup como una extensión del lenguaje C, abarcando paradigmas de programación estructurada, genérica y orientada a objetos. También describe cómo escribir y compilar programas en C++ en un entorno Linux usando el compilador GCC y diferentes tipos de instrucciones como declarativas, de asignación, selectivas y repetitivas.
Python es un lenguaje de programación de propósito general creado a principios de los 90 por Guido van Rossum. Es interpretado, de tipado dinámico, multiplataforma y de código abierto. En Python, las variables se usan para almacenar y manipular datos sin necesidad de declarar su tipo, el cual se determina en tiempo de ejecución.
Python es un lenguaje de programación de código abierto, de alto nivel y multiplataforma que permite la creación de scripts y programas complejos de manera fácil. Ofrece tipos de datos, módulos reutilizables, y una gran cantidad de librerías para trabajar con datos geoespaciales y SIG, incluyendo la manipulación de shapefiles y raster a través de bibliotecas como Shapely y GDAL.
Mini clase Intro Programación Python UTN Profesorado 2015Mariano Reingart
Introducción a la programación de computadoras con Python
Presentación del lenguaje de programación Python
Motivaciones y estudios relacionados
Descargas - Instalación
Estructuras básicas (condicionales, ciclos, funciones)
Demostración
Feedback
Bonus track (trabajo de los alumnos con raspberry pi, desarrollo web, niños)
Este documento presenta una introducción a las herramientas y marcos de pruebas unitarias en PHP. Se discuten varios marcos xUnit como PHPUnit, Simple Test y Atoum. También se describen herramientas para la integración continua y la calidad de código como PHP QA Tools, Scrutinizer CI y Travis CI. Finalmente, se explican conceptos como test dobles y funcionales con PHPUnit y Selenium.
Este documento presenta una introducción a la concurrencia en Java, incluyendo temas como threads, Runnable, Callable, synchronized, Atomic, Future, ExecutorService, ThreadPool, ForkJoinPool, ForkJoinTask, ParallelStream y la ley de Amdahl. Proporciona código de ejemplo para ilustrar el uso de threads, comunicación entre threads, Executors y CompletableFuture. El objetivo es llevar al lector de principiante a competente en conceptos básicos de concurrencia en Java.
Python es un popular lenguaje de programación dinámico que se remonta a finales de los 80. Es de propósito general pero se usa comúnmente para scripts. Es de código abierto, de alto nivel, portable e interpretado. Se puede instalar desde python.org y tiene características como tipos de datos simples, estructuras de control como if/else y bucles, funciones, y aplicaciones populares como YouTube y la NASA.
Este documento presenta una introducción a Angular y resume errores comunes en JavaScript. Explica conceptos clave como Single Page Apps y frameworks, y por qué Angular es útil para construir aplicaciones dinámicas. Luego detalla errores comunes como el uso de variables globales y type wrappers, y recomienda el uso de punto y coma, comparaciones estrictas y parseInt con base. Finalmente, ofrece enlaces a ejemplos básicos de Angular.
Este documento presenta una introducción a Python. En 3 oraciones o menos:
El documento introduce Python como un lenguaje de programación interpretado, de tipado dinámico y fuerte, multiplataforma y orientado a objetos. Explica brevemente los tipos de datos en Python como números, cadenas, vectores y otros, y proporciona ejemplos de código. Además, compara Python con C y Java con el ejemplo "Hola Mundo" y explica cómo instalar Python en diferentes sistemas operativos.
Este documento resume Jumpshot, una herramienta para visualizar el rendimiento de programas paralelos basada en registros de bitácoras. Explica que Jumpshot permite el análisis post mortem mediante la visualización de líneas de tiempo y histogramas generados a partir de archivos de registro CLOG. También describe los requisitos para sistemas de visualización, la historia de herramientas similares y las ventajas e inconvenientes del uso de Java para implementar Jumpshot.
Introducción a la programación del amigo botjhonsoomelol
Este documento proporciona instrucciones paso a paso para configurar el entorno de desarrollo necesario para programar el robot AmigoBot en Visual C++ 2008, incluida la instalación de software como Aria, MobileSim y MinGW. También incluye un ejemplo de código para conectarse al robot, establecer su velocidad y detenerlo cuando los sensores detecten objetos a una distancia específica.
MPI es una interfaz estándar para comunicación entre procesos en sistemas distribuidos. Fue diseñado por un consorcio de empresas y laboratorios para permitir programación paralela en sistemas sin memoria compartida. MPI define funciones para inicializar procesos, comunicación punto a punto y colectivas, y tipos de datos personalizados. OpenMPI es una implementación de código abierto ampliamente usada.
Este documento presenta una introducción a Python. Explica que Python fue creado por Guido van Rossum y que es un lenguaje de programación muy legible y poderoso a pesar de ser minimalista. También describe algunas características clave de Python como su sintaxis basada en tabulación, su capacidad multiplataforma y su amplia biblioteca estándar.
Este documento describe cómo usar Python para automatizar tareas de geoprocesamiento en ArcGIS mediante scripts. Explica que Python es un lenguaje de programación fácil de usar e integrado a ArcGIS que permite escribir código para realizar operaciones como cortar shapefiles. Además, presenta un ejemplo de script de Python que realiza un clip de shapefiles usando un shapefile de corte y almacena los resultados.
Este documento introduce los conceptos básicos de testing y provee ejemplos de unit testing y functional testing en PHP. Explica que el unit testing sirve para probar el correcto funcionamiento de módulos individuales de código, mientras que el functional testing prueba las funcionalidades de la aplicación completa. También cubre temas como test driven development, mocks, herramientas de testing como PHPUnit, y métodos comunes para validar resultados en los tests.
1) El documento habla sobre cambios en la revista "PC Paso a Paso" y en el proyecto "Hack x Crack". Se creará un nuevo núcleo de gestión formado por miembros del foro para retomar los objetivos iniciales.
2) La revista pasará a ser bimestral en lugar de mensual mientras se asientan los nuevos cimientos del proyecto.
3) Se anuncian cambios continuos en diferentes áreas como la maquetación y el contenido para mejorar la revista.
MRTG es una herramienta gratuita de código abierto que genera gráficos del tráfico de red a partir de datos recopilados mediante SNMP de routers, switches y otros dispositivos de red. Se puede instalar y usar en Windows y Linux para monitorear el tráfico de red de forma gráfica y detectar posibles problemas de rendimiento. El documento explica cómo instalar y configurar MRTG, crear gráficos y visualizar el tráfico de red de forma sencilla.
Este documento presenta Pseint, un intérprete de pseudocódigo multiplataforma. Explica cómo Pseint permite editar algoritmos en pseudocódigo o mediante diagramas de flujo, ejecutar el pseudocódigo de forma paso a paso, y exportar diagramas de flujo. También incluye un ejemplo simple de pseudocódigo "Hola Mundo" y explica cómo generar su diagrama de flujo correspondiente usando Pseint.
El documento describe la estructura básica de un programa en C++. Explica que un programa en C++ debe incluir cabeceras, la función principal "main", y las sentencias de código dentro de llaves. También detalla cada parte como las librerías, parámetros de la función main, y que el programa termina cuando se cierra la función main.
El documento describe la estructura básica de un programa en C++. Explica que un programa en C++ debe incluir cabeceras, la función principal "main", y declarar variables y sentencias dentro de llaves. También detalla cada parte como incluir librerías, declarar variables, realizar operaciones y retornar valores.
Este documento describe las ventajas de usar Vim como editor de texto y como instalar y usar el plugin Python-mode para Vim. Explica las diferencias entre IDEs y editores de texto, las características clave de Vim como la edición modal y su alta personalización, y proporciona una demostración de Python-mode. También incluye enlaces a recursos adicionales para aprender Vim y encontrar plugins útiles.
Este documento presenta Python como un lenguaje de programación de propósito general, interpretado y orientado a objetos. Explica que Python fue creado por Guido van Rossum y que es un lenguaje simple y legible similar a Perl. También describe algunas herramientas básicas de Python como el intérprete interactivo y cómo ejecutar programas Python guardados en archivos.
El documento describe los elementos básicos de un programa en C++, incluyendo la estructura, funciones, variables, operadores y sentencias de control. Explica cómo crear un programa simple que asigne el resultado de sumar dos números a una variable y devuelva un valor. También cubre temas como incluir bibliotecas, mostrar mensajes por pantalla y realizar operaciones matemáticas básicas.
Documento Formativo de Symfony2 en el que explica desde qué es Symfony hasta los primeros pasos básicos: instalación, configuración, entidades, Twig, YAML...
El documento presenta tres ejemplos de pseudocódigo. El primero calcula el área de un rectángulo ingresando la base y la altura. El segundo suma y multiplica dos notas ingresadas por el usuario. El tercero determina si un número es positivo, negativo o cero.
1) El documento presenta una introducción al programa PSeInt, el cual permite escribir programas en pseudocódigo de forma sencilla. 2) Explica cómo instalar PSeInt y describe su interfaz, incluyendo el área de trabajo y los botones de comando que facilitan la escritura de código. 3) Presenta conceptos básicos de programación como variables, operadores, estructuras condicionales y repetitivas usando este lenguaje.
Este documento introduce conceptos básicos de programación en Python como variables, funciones, tipos de datos, bucles y clases. También presenta herramientas como Pastebin y Github para compartir código. Explica cómo crear un entorno virtual con virtualenv y pip para instalar Django y gestionar las dependencias de un proyecto. Finalmente, propone cuatro ejercicios prácticos para aplicar los conceptos aprendidos.
Conceptos básicos y aplicaciones prácticas de programación para SEOnacho mascort
Este documento presenta conceptos básicos y aplicaciones prácticas de programación para SEO. Explica por qué es útil aprender a programar para mejorar la comprensión de la web, automatizar procesos y comunicarse mejor con desarrolladores. Recomienda JavaScript y Python como lenguajes para principiantes y describe tipos de datos, operadores, condicionales, bucles y funciones. Luego, detalla tres casos prácticos de programación para SEO como comprobar URLs canónicas, realizar auditorías sitio web y consultas de tendencias de Google.
PASOS PARA LA SOLUCION DE PROBLEMAS - HTMLfelipeforero72
El documento describe los pasos para resolver problemas mediante la programación de computadoras. Estos incluyen: 1) definir el problema, 2) analizarlo, 3) seleccionar la mejor solución, 4) diagramar el flujo lógico, 5) probarlo manualmente, 6) codificar el programa, 7) compilarlo, 8) probarlo en la computadora, 9) documentarlo. El proceso implica iteraciones para corregir errores hasta lograr que el programa funcione correctamente.
El documento describe los pasos para resolver problemas mediante la programación de computadoras. Estos incluyen: 1) definir el problema, 2) analizarlo, 3) seleccionar la mejor solución, 4) diagramar el flujo lógico, 5) probarlo manualmente, 6) codificar el programa, 7) compilarlo, 8) probarlo en la computadora, 9) documentarlo. El proceso implica iteraciones para corregir errores hasta lograr que el programa funcione correctamente.
C++ es un potente lenguaje de programación orientado a objetos que evolucionó del lenguaje C. Aún se usa para desarrollar videojuegos, sistemas operativos, aplicaciones de escritorio y más, debido a su versatilidad y rendimiento. Un programador experto en C++ es muy demandado para proyectos tecnológicos complejos.
Este documento proporciona instrucciones para crear y manejar proyectos en Code::Blocks. Explica cómo descargar e instalar el software, crear un nuevo proyecto seleccionando el lenguaje C++, y compilar y ejecutar el código dentro del entorno de desarrollo integrado. También cubre la creación de archivos .h y .cpp, el uso del depurador para inspeccionar variables, y el soporte para diferentes compiladores como GCC.
Este informe describe la décima práctica de un estudiante en el desarrollo de un programa en Eclipse. El objetivo era comprender la entrada y salida de datos en Eclipse y aprender a usar sentencias como "for". El estudiante creó un programa que permite ingresar un número y muestra su tabla de multiplicar usando un ciclo "for" y salida de datos por consola.
Similar a Taller de Introducción a Scripting con gvSIG (20)
Este documento ha sido elaborado por el Observatorio Ciudadano de Seguridad Justicia y Legalidad de Irapuato siendo nuestro propósito conocer datos sociodemográficos en conjunto con información de incidencia delictiva de las 10 colonias y/o comunidades que del año 2020 a la fecha han tenido mayor incidencia.
Existen muchas más colonias que presentan cifras y datos en materia de seguridad, sin embargo, en este primer acercamiento lo que se prevées darle al lector una idea de como se encuentran las colonias analizadas, tomando como referencia los datos del INEGI 2020, datos del Secretariado Ejecutivo del Sistema Nacional de Seguridad Pública del 2020 al 2023 y las bases de datos propias que desde el 2017 el Observatorio Ciudadano ha recopilado de manera puntual con datos de las vıć timas de homicidio doloso, accidentes de tránsito, personas lesionadas por arma de fuego, entre otros indicadores.
Minería de Datos e IA Conceptos, Fundamentos y Aplicaciones.pdfMedTechBiz
Este libro ofrece una introducción completa y accesible a los campos de la minería de datos y la inteligencia artificial. Cubre todo, desde conceptos básicos hasta estudios de casos avanzados, con énfasis en la aplicación práctica utilizando herramientas como Python y R.
También aborda cuestiones críticas de ética y responsabilidad en el uso de estas tecnologías, discutiendo temas como la privacidad, el sesgo algorítmico y transparencia.
El objetivo es permitir al lector aplicar técnicas de minería de datos e inteligencia artificial a problemas reales, contribuyendo a la innovación y el progreso en su área de especialización.
Reporte homicidio doloso descripción
Reporte que contiene información de las víctimas de homicidio doloso registradas en el municipio de Irapuato Guanajuato durante el periodo señalado, comprende información cualitativa y cuantitativa que hace referencia a las características principales de cada uno de los homicidios.
La información proviene tanto de medios de comunicación digitales e impresos como de los boletines que la propia Fiscalía del Estado de Guanajuato emite de manera diaria a los medios de comunicación quienes publican estas incidencias en sus distintos canales.
Podemos observar cantidad de personas fallecidas, lugar donde se registraron los eventos, colonia y calle así como un comparativo con el mismo periodo pero del año anterior.
Edades y género de las víctimas es parte de la información que incluye el reporte.
LINEA DE TIEMPO Y PERIODO INTERTESTAMENTARIOAaronPleitez
linea de tiempo del antiguo testamento donde se detalla la cronología de todos los eventos, personas, sucesos, etc. Además se incluye una parte del periodo intertestamentario en orden cronológico donde se detalla todo lo que sucede en los 400 años del periodo del silencio. Basicamente es un resumen de todos los sucesos desde Abraham hasta Cristo
Informe de violencia mayo 2024 - Multigremial Mayo.pdf
Taller de Introducción a Scripting con gvSIG
1. 1
Taller de Scripting en gvSIG
Óscar Martínez
omartinez@gvsig.com
Twitter: @masquesig
2. 2
Índice
● Iniciación al Módulo de Scripting
– Preparación del proyecto
– Ejecución de tu primer script
– Nociones básicas de Python
– Funcionalidades del Módulo de Scripting
● Proceso a desarrollar
– Problema
– Solución
● Integración en la Caja de Herramientas
– Creación del geoproceso
– Acceso con gvpy
4. 4
Iniciación al Módulo de Scripting
Preparación del proyecto
● Para seguir el siguiente Taller es necesario una versión de
gvSIG 2.3.1 o en adelante.
● Puedes descargar la versión deseada desde aquí
● Versión portable: es un fichero comprimido que con solo
descomprimir ya puede ejecutar gvSIG. La ruta no debe de
contener espacios en blanco ni estar situada directamente
sobre el raiz. Ejemplo válido: C:/gvsig-desktop/gvSIG-2.3…/
● Versión instalable: para realizar el taller deberás de instalar
unas herramientas complementarias. Una vez abierto gvSIG
desde el Administrador de Complementos → Instalación
estandar, deberás de buscar el complemento
ScriptingComposerTools e instalarlo. Esta es una serie de
herramientas que facilitan el desarrollo con gvSIG.
5. 5
Iniciación al Módulo de Scripting
Preparación del proyecto
● Los ejemplos realizados durante este taller los puedes
descargar desde este enlace.
● Es un fichero paquete de gvSIG que puede ser instalado
desde el Administrador de Complementos → Instalación
desde Archivo y seleccionando el paquete Taller de Scripting
como en la imagen.
6. 6
Iniciación al Módulo de Scripting
Preparación del proyecto
● Abrir gvSIG versión portable 2.3.1
● Ejecutar el fichero: gvsig-desktop.cmd
● Este fichero abre una consola que ejecuta gvSIG y que
podremos consultar en caso de errores críticos durante el
desarrollo en tiempo real. Otra forma sería consultar los logs
de la carpeta dentro de la portable: /home/gvSIG/gvSIG.log
● Para un uso normal de gvSIG se recomienda abrir el .exe o el
.vbs.
13. 13
Iniciación al Módulo de Scripting
Ejecución de tu primer script
● Abrir el Módulo de Scripting. Diferentes herramientas
– Lanzador de Scripts para ejecución rápida de scripts ya
hechos
– Editor de Scripts. Con lo que vamos a trabajar
– Consola de Jython para pruebas (no recomendada de
usar)
14. 14
Iniciación al Módulo de Scripting
Ejecución de tu primer script
● Editor de scripts. Donde haremos todo el trabajo de
desarrollo.
15. 15
Iniciación al Módulo de Scripting
Ejecución de tu primer script
● Crearemos una carpeta nueva para el taller donde meteremos nuestros
nuevos scripts
● Botón de Nuevo
● Seleccionar un nombre: taller_scripting
● Tipo: Folder
● Importante: Seleccionar la carpeta donde crear la carpeta. En /User/
16. 16
Iniciación al Módulo de Scripting
Ejecución de tu primer script
● Crearemos un script nuevo
● Botón de Nuevo
● Seleccionar un nombre: script01
● Tipo: Script
● Language: Python
● Importante: seleccionar la carpeta donde guardar. Carpeta
taller_scripting. Seleccionar en la lista.
17. 17
Iniciación al Módulo de Scripting
Ejecución de tu primer script
● Una vez creado el script, se queda abierto en pantalla.
● Aparece la pestaña de script01
● El script aparece en nuestro editor abierto y listo para edición.
18. 18
Iniciación al Módulo de Scripting
Ejecución de tu primer script
● Si realizamos una modificación la pestaña se pondrá en negrita.
● Para que un script se ejecute con su última versión, hay que
grabar siempre antes de ejecutar. Esto lo podemos hacer
usando:
– Guardar + Ejecutar
● O con la forma recomendada:
– Botón de guardar y ejecutar a la vez:
– También podemos usar F5 en el editor para guardar y
lanzar
19. 19
Iniciación al Módulo de Scripting
Ejecución de tu primer script
● Presionamos el botón o F5 y veremos que se ejecuta el
script.
● Importante: gvSIG siempre busca una función main() para
ejecutar. Por tanto, siempre debe existir esta función.
● Vemos la salida por consola
21. 21
Iniciación al Módulo de Scripting
Nociones básicas de Python
● Pequeña aclaración:
– La sintaxis que se usa es la de Python
– Realmente el motor que estamos usando es el de Jython.
Es una implementación de Python en Java. Esta versión
se usara para tareas de scripting sobre plataformas Java
como lo es gvSIG.
Es importante conocer esto para usos más avanzados y
compatibilidad con otras librerías
22. 22
Iniciación al Módulo de Scripting
Nociones básicas de Python
● En el script01 creado,
vamos a copiar y pegar el
siguiente código, con
unas nociones básicas de
Python que vamos a
explicar.
● Salida por consola:
# encoding: utf-8
import gvsig
def main(*args):
#Uso del condicional
numero = 2
if numero > 1:
print "numero mayor a 1"
elif numero == 1:
print "numero igual a 1"
else:
print "Cualquier otra opcion"
# Recorriendo una lista
lista = [1, 2, 3]
for n in lista:
nuevoValor = n + 10
print "Valor de la lista: ", nuevoValor
# Ejecutar una funcion con un parametro
texto = "hola mundo"
ejecutar(texto)
def ejecutar(valor):
print "Valor: ",valor
Running script slj.
numero mayor a 1
Valor de la lista: 11
Valor de la lista: 12
Valor de la lista: 13
Valor: hola mundo
Script slj terminated.
23. 23
Iniciación al Módulo de Scripting
Nociones básicas de Python
● Indentación: Los espacios en blanco delante de las líneas
es la forma que tiene Python de agrupar las líneas que
pertenecer a una estructura o función.
● En gvSIG estos espacios en blanco se representan con
puntos pequeños para tener una correcta visualización.
● Vemos como hay 4 espacios delante de todas las líneas de la
función main
● Lo recomendable es usar 2 o 4 espacios. Siempre que lo
tengas en cuenta no hay problema mientras uses lo mismo.
24. 24
Iniciación al Módulo de Scripting
Nociones básicas de Python
● Indentación:
– Vemos que dentro de las estructuras condicionales (if) o
bucles (for), las líneas que tienen que ir dentro de esa
estructura
– Estas dos líneas se ejecutaran
por cada iteración del for mientras
va recorriendo la lista. Comparten
la misma indentación.
25. 25
Iniciación al Módulo de Scripting
Nociones básicas de Python
● Comentarios:
– Se pueden insertar comentarios poniendo delante el signo #
– De esta forma Python no ejecutará lo que contenta esa línea
– Puedes explicar las funciones
– Tomar apuntes en tus script
– Etc..
– Si añades o borras alguna de estas
líneas, la ejecución del script no se verá
afectada
● Importante: la primera línea de encoding
es un comentario que utiliza Python para la ejecución de los
script. No se debe de modificar
26. 26
Iniciación al Módulo de Scripting
Nociones básicas de Python
● Declarar variables:
– En Python se declaran variables, ya sean números, textos,
booleans (True or False), etc, solamente escribiendo el
nombre de la variable y dándole valor
– Aquí estamos modificando el valor
de una variable por el valor de otra
variable + 10
27. 27
Iniciación al Módulo de Scripting
Nociones básicas de Python
● Estructuras
– Condicional if: Estructura muy sencilla y de uso común.
Basicamente indica que si se cumple una condición (if) se ejecute
lo de dentro de ella. Si no se cumple comprobaría si existe otra
condición (elif)
y comprobaría su valor.
Si no se cumple ningun ejecutaría
lo contenido en el else.
● Si se agrupan como en el ejemplo
if / elif / else
en el momento que se cumple una
acaba la ejecución del if y saltaría
a lo siguiente. En este caso, se
cumple el if (linea 8), ejecutaria línea 9, y pasaría a la línea 15
28. 28
Iniciación al Módulo de Scripting
Nociones básicas de Python
● Estructuras
– Bucle (for): Es una estructura que ejecuta el mismo código de forma
repetida.
– En este ejemplo, se crea una lista
que contiene tres valores, los que
va a recorrer uno a uno.
lista = [1, 2, 3]
– Dentro del for cogerá el valor,
le sumara 10, y lo imprimirá por
consola con el print.
– Consta de una parte que se repite: “Valor de
la lista” y añadido el nuevo valor calculado
– Resultado del for por consola:
Valor de la lista: 11
Valor de la lista: 12
Valor de la lista: 13
29. 29
Iniciación al Módulo de Scripting
Nociones básicas de Python
● Funciones: Se pueden crear agrupaciones de código que hagan una
determinada función. Como ya hemos comentado gvSIG ejecutara la
función main() del script. Pero podemos crear nuevas funciones.
● En este caso creamos una función ejecutar(valor) que lo que hace es
coger un parámetro y realizar un print con él.
● Esta definida con la misma indentación que
la función main. Ningún espacio delante.
● Declaramos la función y establecemos que
tiene un parámetro (valor)
● Dentro de la función main llamamos a esta
función nueva, pasándole una variable “texto
Al ejecutar esta parte del script mostrará por
consola:
Valor: hola mundo
30. 30
Iniciación al Módulo de Scripting
Nociones básicas de Python
● Import: Los imports se encuentran en la parte inicial del script. Hacen importaciones de las
librerías que vamos a utilizar en el desarrollo.
● Por ejemplo, en este caso usamos la librería gvsig con un:
import gvsig
● De esta forma en nuestro código podríamos usar las funciones que están en la librería gvsig
escribiendo:
gvsig.funcion()
● Por ejemplo:
layer = gvsig.currentLayer()
● Esta línea haría que usásemos la función de
currentLayer(), designada para capturar la capa
activa en nuestra vista y la almacenaría en
una variable llamada layer.
● Si solo deseamos importar una función usaremos:
from gvsig import currentLayer
● De esta forma tendríamos que indicar solamente la función:
layer = currentLayer()
32. 32
Iniciación al Módulo de Scripting
Funcionalidades del Módulo de Scripting
● Para ayudar en el desarrollo se han creado una sería de herramientas.
● Se denominan ScriptingComposerTools y podemos comprobar si están
instaladas mirando en la carpeta de Addons
● Además aparecerán ya algunas herramientas en la barra de menu como
el icono del Abeille.
● En las versiones portables debería de ir instalado por defecto.
● En las instalables se puede descargar
desde el Administrador de Complementos.
33. 33
Iniciación al Módulo de Scripting
Funcionalidades del Módulo de Scripting
● Teniendo el script anterior abierto. Tal que así:
34. 34
Iniciación al Módulo de Scripting
Funcionalidades del Módulo de Scripting
● Herramientas de búsqueda:
– Pulsando Control + F estando en el script
35. 35
Iniciación al Módulo de Scripting
Funcionalidades del Módulo de Scripting
● Herramientas de búsqueda:
– Find References: para buscar clases,
funciones en diferentes carpetas, etc.
– Aparece en la pestaña references los
resultados
– Puedes clickar para ir directamente a ellos
– Ejemplo busqueda: ejecutar
36. 36
Iniciación al Módulo de Scripting
Funcionalidades del Módulo de Scripting
● Code Navigator: Navegador de código. Este navegador sirve para ver
la estructura del script y moverse rápidamente por ella, clickando en la
parte que queremos ir.
– Aparece en las pestañas de scripts. Abajo a la izquierda.
37. 37
Iniciación al Módulo de Scripting
Funcionalidades del Módulo de Scripting
● Nota: Para volver a ver nuestros scripts solo hay que presionar en
Scripts.
38. 38
Iniciación al Módulo de Scripting
Funcionalidades del Módulo de Scripting
● Javadocs: Herramienta para navegar en la documentación
de gvSIG directamente dentro del Módulo de Scripting.
– Tiene diversa documentación offline y online
– Desde documentación de Java a de Scripting
– Diversas pestañas Contents, Classes, Bookmarks,
Config. Principal la de Bookmarks para iniciados.
– Otra forma de acceder a la documentación
asegurandose que es la más nueva en la web:
– http://downloads.gvsig.org/download/web/es/build/html/index.html
– Se accede desde:
– Aparece abajo izquierda.
40. 40
Iniciación al Módulo de Scripting
Funcionalidades del Módulo de Scripting
● Abeille: Herramienta para la generación de interfaces
visuales.
● Se accede mediante el menú o mediante el icono.
41. 41
Iniciación al Módulo de Scripting
Funcionalidades del Módulo de Scripting
● Abeille: La primera vez que se ejecuta es posible que pida
seleccionar dónde guardar el proyecto inicial. Esto podemos
hacerlo en cualquier carpeta del ordenador ya que no se
utilizará.
● (No va a ser necesario para el taller)
● Para ello:
●
Presionamos Aceptar.
Ya permitirá crear
ficheros nuevos de
interfaz.
Guardar siempre como
xml.
42. 42
Iniciación al Módulo de Scripting
Funcionalidades del Módulo de Scripting
● Abeille: Con esta herramienta crearemos los interfaces
usando ficheros xml.
● Hay una guía completa del uso de Abeille en la
documentación:
● http://downloads.gvsig.org/download/web/es/build/html/scripting_devel_guide/2.3/interfaces_visuales.html
● El aspecto de la herramienta es:
43. 43
Iniciación al Módulo de Scripting
Funcionalidades del Módulo de Scripting
● Lint: Es una herramienta avanzada para el análisis de
errores de código. No tienen por qué ser errores críticos. El
script puede funcionar correctamente y aún aparecer errores
aquí.
– Al ejecutarse aparece abajo al lado de la consola
44. 44
Iniciación al Módulo de Scripting
Funcionalidades del Módulo de Scripting
Recordatorio:
● Organización del Módulo de Scripting:
– Todos los addons de scripting que tengamos
instalados deberían de estar en la carpeta de Addons.
– Llamamos addons a herramientas completas que
tienen ciertas necesidades a la hora de ejecutarse en
gvSIG.
– Los que instalemos a través del Administrados de
Complementos aparecerán siempre en la carpeta de
addons.
47. 47
Proceso a desarrollar
Problema
● Necesidad de una usuaria de gvSIG que no encuentra una
herramienta adecuada que exista actualmente para cumplir
sus necesidades de trabajo.
● Realiza la consulta en la Lista de usuarios.
[Gvsig_usuarios] Actualizar atributos con dados de otros vectores
21/09/2017 18:23
Hola todos,
debería actualizar en campo de atributos de una capa vectorial (linear)
con el valor del mismo atributo en una otra capa vectorial (polígonos)
solamente donde hay intersection de los dos capas (dentro los
polígonos).
Alguien tiene idea si se puede hacer en gvSIG con uno de los vector
tools?
Gracias
Silvia
48. 48
Proceso a desarrollar
Problema
● Planteamiento:
– Input: 2 capas
● Una de lineas (en este taller usaremos de puntos por ser
mas clara de ver)
● Una de polígonos
– Objetivo:
● Actualizar el valor de un campo de las entidades de una
capa, con los valores de la otra capa, allí donde
interseccionen.
50. 50
Proceso a desarrollar
Problema
● Planteamiento:
– Capa de puntos
● Con un campo vacio o con valores que queremos actualizar
con los valores del polígono con el que intersecan.
51. 51
Proceso a desarrollar
Problema
● Planteamiento:
– Ejemplo: Punto 101 que se encuentra dentro del polígono
seleccionado (aparece abajo tabla de atributos del polígono)
– Actualizar el campo UFE del punto con el campo que elijamos
del polígono que interseca anterior.
52. 52
Proceso a desarrollar
Problema
● Planteamiento:
– Buscaríamos que si elegimos el campo NM_ESTADO, el campo
del punto apareciera.
– Esto se haría para toda la capa.
–
● Ventajas de utilizar la API de gvSIG. En este taller, el ejemplo lo
hacemos sobre dos capas shapes en local, pero este mismo
desarrollo se podría aplicar sobre capas externas en servidores.
Siempre que se utilice gvSIG para añadir un servicio, podremos
trabajar con él usando una API común.
● No cambia nada entre tratar con capas vectoriales a tratar con
bases de datos. Una vez cargado, la forma de trabajar es la
misma.
55. 55
Proceso a desarrollar
Solución 1: Acceso a datos
● 1.2. Acceso a los stores: Almacenes de datos
– 1.2.1 Acceso a la Vista.
Vemos que muestra,
por ejemplo, el nombre
de la Vista usando
getName() sobre la
Vista
56. 56
Proceso a desarrollar
Solución 1: Acceso a datos
● 1.2. Acceso a los stores: Almacenes de datos
– 1.2.2. Clase de los objetos. Podemos usar la función type
para saber con que objeto estamos tratando.
– Por consola vemos que es de tipo DefaultViewDocument
– Esta clase podríamos buscarla en los Javadocs. Aquí
– Vemos que sí que tiene un método getName.
57. 57
Proceso a desarrollar
Solución 1: Acceso a datos
● 1.2. Acceso a los stores: Almacenes de datos
– 1.2.3 Nosotros necesitamos acceder a sus almacenes de
datos, así que usamos el método getLayer
– Este método tiene un parámetro, que es el nombre de la capa
a la que acceder.
● Capa A Puntos: “puntos_brasil”
● Capa B Polígonos: “UFEBRASIL”
– Introduciremos estos nombres de las capas a usar en dos
variables al inicio de la función main()
– Recuerda: En python los campos de tipo texto van con
comillas
58. 58
Proceso a desarrollar
Solución 1: Acceso a datos
● 1.2. Acceso a los stores: Almacenes de datos
– 1.2.4: Teniendo la Vista en la variable view, usamos
getLayer sobre ella. Hacemos un print para comprobar
que está cogiendo las capas, y además haremos que
muestra de qué tipo son.
–
59. 59
Proceso a desarrollar
Solución 1: Acceso a datos
● 1.2. Acceso a los stores: Almacenes
de datos
– 1.2.5: Si no escribiste bien el nombre de
la capa aparecerá un valor None
– Debes usar el mismo nombre exacto que
aparece en la Tabla de Contenidos de la
Vista para encontrarlo)
60. 60
Proceso a desarrollar
Solución 1: Acceso a datos
● 1.2. Acceso a los stores: Almacenes de datos
– 1.2.6: Accedemos a sus almacenes de datos usando
getFeatureStore de cada capa
– Nota: Los print se utilizan para ir comprobando los datos
de salida. Puedes dejarlos o irlos borrando según avanza
el taller.
# encoding: utf-8
import gvsig
def main(*args):
capaA = "puntos_brasil"
capaB = "UFEBRASIL"
view = gvsig.currentView() #Acceso a la Vista actual
lyrA = view.getLayer(capaA)
lyrB = view.getLayer(capaB)
fsA = lyrA.getFeatureStore() #Acceso a los feature stores -> fsA
fsB = lyrB.getFeatureStore()
61. 61
Proceso a desarrollar
Solución 1: Acceso a datos
● 1.3. Acceso a las entidades
– 1.3.1: Si queremos recorrer los
valores que contienen estos
almacenes, tendremos que pedirle
un set de estos valores al
almacén de datos.
– Recorreremos la capa
UFEBRASIL
– Esto se hace mediante el método
getFeatureSet() → setB
– Este set de valores podemos
recorrerlo con un bucle(for)
62. 62
Proceso a desarrollar
Solución 1: Acceso a datos
● 1.3. Acceso a las entidades
– 1.3.2: en fB, estamos accediendo a los objetos feature que contienen
los datos de cada entidad.
– Por ejemplo, si queremos acceder al valor del campo NM_ESTADO
hay que hacer un get(nombre_del_campo) sobre la entidad.
– Nota para avanzados: si no sabes que métodos se usan sobre las
entidades, puedes consultar el objeto DefaultFeature en los Javadocs
– Para ello, vamos a añadir dos líneas al inicio: crear dos variables que
contengan el nombre los campos para cada capa que nos interesan
63. 63
Proceso a desarrollar
Solución 1: Acceso a datos
● 1.3. Acceso a las entidades
– 1.3.3: Ahora, accedemos a los valores del campo fieldB,
que están en las entidades de la capaB (UFEBRASIL).
– Sería algo similar a que cada entidad le pregunta un
get(“NM_ESTADO”)
– Por consola vemos los
valores de ese campo:
# encoding: utf-8
import gvsig
def main(*args):
capaA = "puntos_brasil"
capaB = "UFEBRASIL"
fieldA = "UFE"
fieldB = "NM_ESTADO"
view = gvsig.currentView()
lyrA = view.getLayer(capaA)
lyrB = view.getLayer(capaB)
fsA = lyrA.getFeatureStore()
fsB = lyrB.getFeatureStore()
setB = fsB.getFeatureSet()
for fB in setB:
print fB.get(fieldB)
Running script script02.
RONDÔNIA
ACRE
AMAZONAS
RORAIMA
PARÁ
...
64. 64
Proceso a desarrollar
Solución 2: Trabajando con geometrías
● 2.1 Acceso a las geometrías
– 2.1.1 Acceder a las geometrías. Esto se hace mediante el
método getDefaultGeometry sobre las entidades. De la
misma forma que habíamos hecho el get.
– En este caso vamos a almacenar el acceso a este
geometría en la variable geomB
– OJO: Aquí realmente no se guarda la geometría, sino la
dirección interna que usa el ordenador para saber dónde
está almacenada. Una vez acabemos de usar el set de
datos en el for esta dirección dará error. Hay otras formas
de hacer esto si quisiéramos guardar la geometría.
...
setB = fsB.getFeatureSet()
for fB in setB:
geomB = fB.getDefaultGeometry()
...
65. 65
Proceso a desarrollar
Solución 2: Trabajando con geometrías
● 2.1 Acceso a las geometrías
– 2.1.2. Una vez hemos
accedido a la geometría
tenemos una gran cantidad de
métodos para usar según el
tipo de geometría que sea. Por
ejemplo, al ser polígono
podemos usar el cálculo de su
extensión con area() o su
centroide con centroid().
– En consola vemos el area y el
centroide.
– OJO: El area la calcula con las
unidades de la capa. Si no es
una capa en metros tipo UTM
no será correcto este cálculo.
66. 66
Proceso a desarrollar
Solución 2: Trabajando con geometrías
● 2.1 Acceso a las
geometrías
– 2.1.3. Para buscar la
intersección de cada
punto con cada región,
tenemos que recorrer por
cada región todos los
puntos que se encuentran
en la otra capa, la capa de
puntos se recorrerá
muchas veces.
– Cada vez que gastamos
un set (cuando acabamos
de recorrerlo)
desaparecen de memoria.
Así que si queremos
usarlo de nuevo tenemos
que llamarlo otra vez.
67. 67
Proceso a desarrollar
Solución 2: Trabajando con geometrías
● 2.1 Acceso a las geometrías
– 2.1.4. En resumen, cogemos una región (poligono) y
comprobamos si algún punto intersecciona con esa región.
– La intersección la conseguimos con dos geometrías y el
método intersects(..).
– Las geometrías tienen este método y el parámetro que le
pasamos es otra geometría.
– El método intersects devuelve True si hay intersección, y
False si no la hay
– Metiendo un condicional hacemos que solo se ejecute lo
de dentro cuando encuentre una intersección.
68. 68
Proceso a desarrollar
Solución 2: Trabajando con geometrías
● 2.1 Acceso a las geometrías
– 2.1.5. ..(sigue explicación)
– Cuando encuentra una intersección, salta un valor
True, y la condición if True: se cumple. Entonces,
se ejecuta el print. En el print estaría mostrando las
dos entidades que interseccionan.
– Le hemos dicho que muestre valores de la entidad
fB, luego añada un “ con “, y entonces muestre el
punto que intersecta (fA).
Running script script02.
3, 13, AMAZONAS, NORTE, Polygon:2DM con 101, , POINT (-58.81266572531654
-3.952878786125586)
EntidadB interseca con EntidadA
69. 69
Proceso a desarrollar
Solución 3: Editar entidades
● 3.1 Editando las entidades
– 3.1.1 Una vez encontrado la región con la que
intersecan los puntos, hay que actualizar el
campo del punto, por el campo deseado de la
región.
Campo fieldA del punto
actualizarlo con el
Campo fieldB de la región (polígono)
70. 70
Proceso a desarrollar
Solución 3: Editar entidades
● 3.1 Editando las entidades
– 3.1.2 Primero hay que poner en edición la capa
de puntos. Para actualizar una capa hay que
poner en edición tu almacen de datos. En este
caso el featureStore que tenemos en fsA.
– Añadiríamos esta línea antes del primer bucle
(for)
71. 71
Proceso a desarrollar
Solución 3: Editar entidades
● 3.1 Editando las entidades
– 3.1.3. Siempre que editamos
capas no podemos correr el
riesgo de que, si ocurre un error,
se quede la capa en modo de
edición.
– Desde código vamos a
solucionar esto con un try/finally.
– Esto significa que, si ocurre
algún error de código, sea lo
que sea, terminará la edición de
la capa después de que ocurra
el error
– El código se quedaría como
aquí.
– Ten cuidado con la indentación
– Solo quedaría completar el
código donde aparece el pass
# encoding: utf-8
import gvsig
def main(*args):
capaA = "puntos_brasil"
capaB = "UFEBRASIL"
fieldA = "UFE"
fieldB = "NM_ESTADO"
try:
view = gvsig.currentView()
lyrA = view.getLayer(capaA)
lyrB = view.getLayer(capaB)
fsA = lyrA.getFeatureStore()
fsB = lyrB.getFeatureStore()
setB = fsB.getFeatureSet()
fsA.edit()
for fB in setB:
geomB = fB.getDefaultGeometry()
setA = fsA.getFeatureSet()
for fA in setA:
geomA = fA.getDefaultGeometry()
if geomB.intersects(geomA):
pass
finally:
fsA.finishEditing()
72. 72
Proceso a desarrollar
Solución 3: Editar entidades
● 3.1 Editando las entidades
– 3.1.4. Editar entidades: Queremos actualizar fA con valores de fB.
– 1) Obtenemos el valor a actualizar de la región (entidad fB) con:
v = fB.get(fieldB)
– 2) Obtenemos una entidad que podamos editar de la capa de puntos
(editable feature A (efA)) con:
efA = fA.getEditable()
– 3) Modificamos con el valor (v) el campo deseado (fieldA) en esa entidad
ahora editable (efA):
efA.set(fieldA, v)
– 4) Actualizamos el set de datos (setA) con la entidad editable (efA) para que
se modifiquen los valores:
setA.update(efA)
– 5) Todo lo anterior no se grabará si no cerramos la edición del almacen de la
capa. Eso se debe realizar solo al acabar de hacer todas las
modificaciones:
fsA.finishEditing()
73. 73
Proceso a desarrollar
Solución 3: Editar entidades
● 3.1 Editando las entidades
– 3.1.5. Colocando este código, el script estaría
terminado y quedaría así: # encoding: utf-8
import gvsig
def main(*args):
capaA = "puntos_brasil"
capaB = "UFEBRASIL"
fieldA = "UFE"
fieldB = "NM_ESTADO"
try:
view = gvsig.currentView()
lyrA = view.getLayer(capaA)
lyrB = view.getLayer(capaB)
fsA = lyrA.getFeatureStore()
fsB = lyrB.getFeatureStore()
setB = fsB.getFeatureSet()
fsA.edit()
for fB in setB:
geomB = fB.getDefaultGeometry()
setA = fsA.getFeatureSet()
for fA in setA:
geomA = fA.getDefaultGeometry()
if geomB.intersects(geomA):
v = fB.get(fieldB)
efA = fA.getEditable()
efA.set(fieldA, v)
setA.update(efA)
finally:
fsA.finishEditing()
74. 74
Proceso a desarrollar
Solución 4: Ejecución
● 4.1. Resultado
– 4.1.1 Si ejecutamos el script final, veremos que se
actualiza la tabla de de Atributos de puntos_brasil
– Nota: para acceder a la Tabla de Atributos, click
derecho sobre la capa y “Tabla de Atributos”
75. 75
Proceso a desarrollar
Solución 4: Ejecución
● 4.1. Resultado
– 4.1.2. Si lo ejecutamos con los campos: fieldA=”UFE”,
fieldB=”NM_ESTADO” veremos como cambian los
datos.
– Es posible que tengas que cerrar y abrir la tabla de
Atributos para actualizar la visualización
76. 76
Proceso a desarrollar
Solución 4: Ejecución
● 4.1. Resultado
– 4.1.3. Ahora con los campos: fieldA=”UFE”,
fieldB=”NM_REGIAO” veremos como cambian los
datos.
78. 78
Integración en la Caja de Herramientas
Creación del geoproceso
● 5.1 Crear un script nuevo:
– script03
79. 79
Integración en la Caja de Herramientas
Creación del geoproceso
● 5.2 Import al inicio del scripts necesarios
# encoding: utf-8
import gvsig
from gvsig import geom
from gvsig.commonsdialog import *
from gvsig.libs.toolbox import *
from es.unex.sextante.gui import core
from es.unex.sextante.gui.core import NameAndIcon
from es.unex.sextante.gui.core import SextanteGUI
from org.gvsig.geoprocess.lib.api import GeoProcessLocator
80. 80
Integración en la Caja de Herramientas
Creación del geoproceso
● 5.3 Implementar una clase nueva CopyAttributeProcess con
dos métodos:
class CopyAttributeProcess(ToolboxProcess):
def defineCharacteristics(self):
..
def processAlgorithm(self):
..
81. 81
Integración en la Caja de Herramientas
Creación del geoproceso
● 5.4 Definir parámetros de entrada.
– Nombre del proceso en self.setName(), aparecerá en
la toolbox
– Grupo al que pertenecerá
– Establecer el nombre del parámetro, la descripción, el
tipo, y si es de uso obligatorio.
def defineCharacteristics(self):
"""Definir los parametros de entrada y salida de nuestro proceso. """
# Fijamos el nombre con el que se va a mostrar nuestro proceso
self.setName("Actualizar atributo con capa con la que interseca")
# Indicamos el grupo en el que aparecera
self.setGroup("Vectorial")
params = self.getParameters()
# Indicamos que precisamos un parametro LAYER, del tipo poligono y que es obligatorio
params.addInputVectorLayer("LAYER A","Capa a actualizar",SHAPE_TYPE_POINT , True)
params.addInputVectorLayer("LAYER B",u"Capa de intersección", SHAPE_TYPE_POLYGON, True)
params.addTableField("FIELD A", "Campo a actualizar", "LAYER A", True)
params.addTableField("FIELD B", u"Campo de intersección", "LAYER B", True)
82. 82
Integración en la Caja de Herramientas
Creación del geoproceso
● 5.5 Definir proceso
– Podemos casi copiar y pegar el proceso anterior realizado, con lo siguientes
cambios.
– Captura de parámetros a través de la interfaz: Ahora en vez de devolvernos el
nombre, ya nos devuelve directamente el almacén de datos (store)
– Eliminariamos el view, lyrA y lyrB que teníamos del script anterior
– Capturamos los parámetros a traves del params = self.getParameters(), este se
encarga de capturar los datos de la interfaz seleccionados por el usuario.
– Diferencia: los campos los almacena con la posición en el esquema de la capa.
No afecta a nuestro código ya que el método fB.get(“nombreField”) también
admite que le pases un número con fB.get(posicion).
def processAlgorithm(self):
""" Esta operacion es la encargada de realizar nuestro
proceso. """
params = self.getParameters()
lyrA = params.getParameterValueAsVectorLayer("LAYER A")
lyrB = params.getParameterValueAsVectorLayer("LAYER B")
fieldA = params.getParameterValueAsInt("FIELD A")
fieldB = params.getParameterValueAsInt("FIELD B")
try:
#view = gvsig.currentView()
#lyrA = view.getLayer(capaA)
#lyrB = view.getLayer(capaB)
...
83. 83
Integración en la Caja de Herramientas
Creación del geoproceso
● 5.6 Definir proceso
– El código completo del método processAlgorithm
quedaría así.
def processAlgorithm(self):
""" Esta operacion es la encargada de realizar nuestro proceso. """
params = self.getParameters()
lyrA = params.getParameterValueAsVectorLayer("LAYER A")
lyrB = params.getParameterValueAsVectorLayer("LAYER B")
fieldA = params.getParameterValueAsInt("FIELD A")
fieldB = params.getParameterValueAsString("FIELD B")
try:
#view = gvsig.currentView()
#lyrA = view.getLayer(capaA)
#lyrB = view.getLayer(capaB)
fsA = lyrA.getFeatureStore()
fsB = lyrB.getFeatureStore()
setB = fsB.getFeatureSet()
fsA.edit()
for fB in setB:
geomB = fB.getDefaultGeometry()
setA = fsA.getFeatureSet()
for fA in setA:
geomA = fA.getDefaultGeometry()
if geomB.intersects(geomA):
v = fB.get(fieldB)
efA = fA.getEditable()
efA.set(fieldA, v)
setA.update(efA)
finally:
fsA.finishEditing()
return True
84. 84
Integración en la Caja de Herramientas
Creación del geoproceso
● 5.7 Registar geoproceso
– La función main contendrá el registro del geoproceso
– Este código lo que hace es introducir el proceso en la
Toolbox
– Una vez lo tenemos todo en el script lo podemos
ejecutar.
def main(*args):
# Creamos nuesto geoproceso
process = CopyAttributeProcess()
# Lo registramos entre los procesos disponibles en el grupo de "Scripting"
process.selfregister("Scripting")
# Actualizamos el interface de usuario de la Toolbox
process.updateToolbox()
print “Proceso registrado”
85. 85
Integración en la Caja de Herramientas
Creación del geoproceso
● 5.8 Comprobación
– Aparece en la Caja de Herramientas (Toolbox)
86. 86
Integración en la Caja de Herramientas
Creación del geoproceso
● 5.9 Comprobación del Interfaz
– Tiene la interfaz correcta para los parámetros
introducidos.
87. 87
Integración en la Caja de Herramientas
Creación del geoproceso
● 5.10 Ejecución correcta
– Comprobar que actualiza los campos deseados
88. 88
Integración en la Caja de Herramientas
Creación del geoproceso
● 5.11 Autorun
– Si queremos que el proceso se añada a gvSIG cada vez
que este arranque, deberíamos de crear unos ficheros
extras dentro de nuestro paquete:
● Fichero __init__.py que puede estar vacio
● Fichero autorun.py que se ejecutará automáticamente
al abrir gvSIG
89. 89
Integración en la Caja de Herramientas
Creación del geoproceso
● 5.12 Autorun
– El fichero autorun tendrá un import de la clase del
geoproceso que hemos creado
– La ejecución del registro que en el anterior script estaba en
la función main.
90. 90
Integración en la Caja de Herramientas
Creación del geoproceso
● 5.13 Autorun
– En el código de ejemplo que se adjunta como parte de
este taller, el fichero autorun no se ejecuta ya que está
desactivado, y gvSIG lo ignora al iniciarse. Este se puede
activar desde la pestaña de propiedades.
92. 92
Integración en la Caja de Herramientas
Acceso con gvpy
● 6. Objetivo de gvpy:
– Permitir la ejecución de los geoprocesos que se
encuentran en la Toolbox de forma sencilla desde
scripting.
– Se ejecutan con una única línea de código
93. 93
Integración en la Caja de Herramientas
Acceso con gvpy
● 6.1 Crear un script nuevo:
– script04
94. 94
Integración en la Caja de Herramientas
Acceso con gvpy
● 6.2 Script para lanzar el proceso con gvpy
● Ojo: Por un bug esto no funcionará para este
proceso (al no tener capas de salida ocurre un
error).
Se ha corregido y estará para la próxima gvSIG
2.4 por eso lo enseño de todas formas.
95. 95
Integración en la Caja de Herramientas
Acceso con gvpy
● 6.3 Script para lanzar el proceso con gvpy
El código necesario para ejecutar el proceso
desde otro script, una vez estuviera ya en la Caja
de Geoprocesos
# encoding: utf-8
import gvsig
from gvsig.libs import gvpy
def main(*args):
v = gvpy.runalg("CopyAttributeProcess", "puntos_brasil", "UFEBRASIL", 1, 3)