desarrollo de herramientas en python para …
TRANSCRIPT
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y TOPOGRAacuteFICOS
ESCUELA POLITEacuteCNICA SUPERIOR DE AacuteVILA Maacutester en Geotecnologiacuteas Cartograacuteficas
en Ingenieriacutea y Arquitectura
Proyecto Final de Maacutester Alumno D Juan Pedro Garciacutea Tendero
Ingeniero Teacutecnico en Topografiacutea
Tutor EPSA D Joseacute Antonio Martiacuten Jimeacutenez
Co - tutor D David Hernaacutendez Loacutepez Dr Ingeniero en Geodesia y Cartografiacutea
Aacutevila septiembre de 2011
A mis dos mujeres mi hija Emma y mi esposa Sonia
Agradecimientos
He de agradecer su dedicacioacuten a mis dos tutores en este Proyecto Final de Maacutester
Deseo mostrar mi gratitud a D Joseacute Antonio Martiacuten Jimeacutenez quien supervisoacute y tutorizoacute este Proyecto desde la Universidad de Salamanca Escuela Politeacutecnica Superior de Aacutevila
Muy especialmente quiero agradecer a D David Hernaacutendez Loacutepez su dedicacioacuten y apoyo en la ejecucioacuten de esta tarea Por las tardes de verano dedicadas a la resolucioacuten de dudas o planteamientos al proyecto y por la confianza que depositoacute en miacute al aceptar ser mi tutor De la misma manera espero haber estado a la altura esperada en la consecucioacuten de los objetivos que desde el primer momento me planteoacute
Resumen
Como Ingeniero Teacutecnico en Topografiacutea numerosas han sido las necesidades de disponer de herramientas informaacuteticas para los distintos caacutelculos necesarios desde la etapa de estudiante en la Universidad como una vez incurso en la vida laboral Desde el simple caacutelculo de un acimut y distancia entre dos puntos medidas de superficies encerradas en poliacutegonos irregulares datos de replanteo de puntos caacutelculo de previsioacuten de errores o las diferentes transformaciones de coordenadas de grandes cantidades de puntos entre unas proyecciones y otras y entre distintos Sistemas de Referencia Coordenados Partiendo de esta necesidad y de la existencia de la libreriacutea ldquoGeotoprdquo en Octave del Profesor y Co-tutor de este proyecto Dr D David Hernaacutendez Loacutepez se han elaborado una serie de herramientas en Python para caacutelculos geodeacutesicos y topograacuteficos en Python principalmente migrando del lenguaje Octave a lenguaje Python Ademaacutes del uso para caacutelculos topograacuteficos en aacutembitos del uso diario de ingenieros Teacutecnicos en Topografiacutea o cualquier Ingenieriacutea afiacuten esta libreriacutea tambieacuten se concibe como una herramienta de uso para el estudiante de estas disciplinas en las Universidades Al tratarse de software libre es perfectamente editable y adaptable a las necesidades de caacutelculo y presentacioacuten que se consideren oportunas La eleccioacuten de Python aunque posteriormente se desarrolle maacutes se debe a que se trata de un lenguaje de programacioacuten faacutecil de aprender potente y en auge Tiene eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de plataformas El inteacuterprete de Python y la extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables y se pueden distribuir libremente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
1
TABLA DE CONTENIDOS
1 OBJETIVOS DEL TRABAJO 3
2 CONTEXTO DEL PROYECTO 4
21 iquestPOR QUEacute SOFTWARE LIBRE 4
22 LENGUAJES DE PROGRAMACIOacuteN 7
23 PARADIGMAS DE PROGRAMACIOacuteN 8
24 iquestPOR QUEacute PYTHON 9
241 Caracteriacutesticas de Python 9
3 INSTRUMENTACIOacuteN Y SOFTWARE EMPLEADOS PHYTON 12
31 INTRODUCCIOacuteN A PYTHON 12
311 Guiacutea de aprendizaje de Python por Guido Van Rossum v24 16
3111 Llamar al inteacuterprete 17
3112 Moacutedulos 22
3113 El camino de buacutesqueda de moacutedulos 23
3114 Ficheros Python ldquoCompiladosrdquo 23
3115 Moacutedulos estandar 24
3116 Paquetes 24
3117 Importar de un paquete 27
3118 Referencias internas al paquete 28
32 FUNCIONES INCLUIDAS EN NUMPY POR CATEGORIacuteAS (ARRAY CREATION) 28
4 METODOLOGIacuteA 36
41 ESTRUCTURA DE LA LIBRERIacuteA GEOTOPO 36
42 DOCUMENTADO DE FUNCIONES 42
43 FUNCIONES IMPLEMENTADAS 47
431 Libreriacutea en Python ldquogeotopogeneralrdquo 47
432 Libreriacutea en Python ldquogeotopotopografiardquo 50
433 Libreriacutea en Python ldquogeotopogeodesiardquo 52
434 Libreriacutea en Python ldquogeotopoproy_cartograficasrdquo 60
435 Libreriacutea en Python ldquogeotopotransformacionrdquo 70
5 APLICABILIDAD DE LA LIBRERIacuteA Y CONCLUSIONES FINALES 73
51 CASOS PRAacuteCTICOS TOPOGRAFIacuteA 77
511 Implementacioacuten del coacutedigo topo_praacutectica1 77
512 Impresioacuten del fichero de salida de resultados topo_praacutectica1 81
513 Salida de resultados topo_praacutectica2 81
514 Salida de resultados topo_praacutectica3 82
515 Salida de resultados topo_praacutectica4 83
52 CASOS PRAacuteCTICOS GEODESIA 83
521 Implementacioacuten del coacutedigo geo_praacutectica1 84
522 Impresioacuten del fichero de salida de resultados geo_praacutectica1 86
523 Salida de resultados geo_praacutectica2 87
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
2
524 Salida de resultados geo_praacutectica3 88
525 Salida de resultados geo_praacutectica4 89
526 Salida de resultados geo_praacutectica5 90
6 CONCLUSIONES FINALES 91
7 LIacuteNEAS FUTURAS DE ACTUACIOacuteN 92
8 ANEJO 93
81 EQUIVALENCIAS ENTRE FUNCIONES EN MATLAB Y PYTHON 93
9 BIBLIOGRAFIacuteA 97
10 PAacuteGINAS WEB CONSULTADAS 98
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
3
1 OBJETIVOS DEL TRABAJO Dentro del marco general de la guiacutea docente del Maacutester en Geotecnoloacutegias Cartograacuteficas en Ingenieriacutea y Arquitectura impartido por la Escuela Politeacutecnica Superior de Aacutevila de la Universidad de Salamanca se establece como requisito para la obtencioacuten de esta titulacioacuten la realizacioacuten de un proyecto final de maacutester A tal fin responde el presente trabajo en el que se ha optado por la realizacioacuten de un proyecto de desarrollo de herramientas en Python para caacutelculos geodeacutesicos y topograacuteficos Como Ingeniero Teacutecnico en Topografiacutea numerosas han sido las necesidades de disponer de herramientas informaacuteticas para los distintos caacutelculos necesarios desde la etapa de estudiante en la Universidad como una vez incurso en la vida laboral Desde el simple caacutelculo de un acimut y distancia entre dos puntos medidas de superficies encerradas en poliacutegonos irregulares datos de replanteo de puntos caacutelculo de previsioacuten de errores o las diferentes transformaciones de coordenadas de grandes cantidades de puntos entre unas proyecciones y otras y entre distintos Sistemas de Referencia Coordenados Partiendo de esta necesidad y de la existencia de la libreriacutea ldquoGeotoprdquo en Octave del Profesor y Co-tutor de este proyecto Dr D David Hernaacutendez Loacutepez se han elaborado una serie de herramientas en Python para caacutelculos geodeacutesicos y topograacuteficos en Python principalmente migrando del lenguaje Octave a lenguaje Python Ademaacutes del uso para caacutelculos topograacuteficos en aacutembitos del uso diario de ingenieros Teacutecnicos en Topografiacutea o cualquier Ingenieriacutea afiacuten esta libreriacutea tambieacuten se concibe como una herramienta de uso para el estudiante de estas disciplinas en las Universidades Al tratarse de software libre es perfectamente editable y adaptable a las necesidades de caacutelculo y presentacioacuten que se consideren oportunas La eleccioacuten de Python aunque posteriormente se desarrolle maacutes se debe a que se trata de un lenguaje de programacioacuten faacutecil de aprender y potente Tiene eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de plataformas El inteacuterprete de Python y la extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables y se pueden distribuir libremente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
4
2 CONTEXTO DEL PROYECTO Dentro de los objetivos de este proyecto se encuentra el aprendizaje y desarrollo de herramientas con software libre y tambieacuten la eleccioacuten de Python al tratarse de un lenguaje de programacioacuten que aunque parece novedoso esta encontrando gran aceptacioacuten en entornos docentes y tambieacuten en el desarrollo de programacioacuten en la empresa privada
21 iquestPOR QUEacute SOFTWARE LIBRE Muchiacutesimos gobiernos de todo el mundo estaacuten empezando a ver al software libre como una poderosa herramienta para disminuir sus costos de administracioacuten reducir la dependencia tecnoloacutegica y fomentar sus industrias locales de software Las razones principales que impulsan la migracioacuten de los sistemas de informacioacuten de las administraciones puacuteblicas al software libre son
Ahorro econoacutemico El bajo o nulo coste de los productos libres permiten a las PYMES servicios y ampliar sus infraestructuras sin que se vean mermados sus intentos de crecimiento por no poder hacer frente al pago de cantidades en licencias
Independencia tecnoloacutegica mayor transparencia aumento de la interoperabilidad permite auditar el coacutedigo fuente etc El secretismo tenoloacutegico es uno de los grandes frenos y desequilibrios existentes para el desarrollo en el modelo de propiedad intelectual
Fomenta el desarrollo local y la industria nacional de software La praacutectica totalidad de los concursos para desarrollo de software para la administracioacuten puacuteblica pasan por compatibilizar con productos de la factoriacutea de Microsoft por lo que garantiza la perpetuacioacuten e ingresos hacia Microsoft y no favorece a las empresas locales que pudieran ofrecer productos equivalentes Ademaacutes de la reduccioacuten de costes por uso de software libre iquestqueacute podriacutean aportar esas inversiones si los beneficiados fuesen empresas del propio estado en lugar de mandar a una compantildeiacutea extranjera esas enormes cantidades de dinero
Facilita la adaptacioacuten a las necesidades concretas de las administraciones en materia linguumliacutestica legislativa de accesibilidad e imagen
El conocimiento generado es puacuteblico Fomento de la libre competencia al basarse en servicios y no licencias
Uno de los modelos de negocio que genera el software libre es la contratacioacuten de servicios de atencioacuten al cliente Este sistema permite que las compantildeiacuteas que den el servicio compitan en igualdad de condiciones a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
5
no poseer la propiedad del producto del cual dan el servicio
Tratamiento seguro de los datos y la informacioacuten Formatos estaacutendar Los formatos estaacutendar permiten una
interoperatividad maacutes alta entre sistemas evitando incompatibilidades Los estaacutendares de facto son vaacutelidos en ocasiones para lograr una alta interoperatividad si se omite el hecho que estos exigen el pago de royalities a terceros y por razones de mercado no interesa que se perpetuacuteen mucho tiempo
Sistemas sin puertas traseras y maacutes seguros El acceso al coacutedigo fuente permite que tanto hackers como empresas de seguridad de todo el mundo puedan auditar los programas por lo que la existencia de puertas traseras es iloacutegica ya que se pondriacutea en evidencia y contraviene el intereacutes de la comunidad que es la que lo genera
Correccioacuten maacutes raacutepida y eficiente de fallos El funcionamiento e intereacutes conjunto de la comunidad ha demostrado solucionar maacutes raacutepidamente los fallos de seguridad en el software libre algo que desgraciadamente en el software propietario es maacutes difiacutecil y costoso
Meacutetodos simples y unificados de gestioacuten de software Actualmente la mayoriacutea de distribuciones de linux incorporan alguno de los sistemas que unifican el meacutetodo de instalacioacuten de programas libreriacuteas etc Por parte de los usuarios Asiacute se permite el acceso a las miles de aplicaciones existentes de forma segura y gratuita a la par que evitan tener que recurrir a paacuteginas web de dudosa eacutetica desde las que los usuarios instalan sin saberlo spyware o virus informaacuteticos en sus sistemas Este sistema de acceso y gestioacuten del software se hace praacutecticamente utoacutepico si se extrapola al mercado propietario
Sistema en expansioacuten El software libre ya no es una promesa es una realidad y se utiliza en sitemas de produccioacuten por algunas de las empresas tecnoloacutegicas maacutes importantes como IBM Sun Microsystems Google Hewlett-Packard etc Paradoacutejicamente incluso Microsoft que posee sus propias herramientas emplea GNU Linux en muchos de sus servidores
Entre los paiacuteses maacutes adeptos al software libre sus desarrollos y alcance de sus
proyectos de migracioacuten se encuentran de la siguiente manera ALEMANIA Alemania es el paiacutes con mayor uso del software libre del mundo No
soacutelo estaacute presente en todas sus dependencias gubernamentales y universidades sino que tiene programas multimillonarios para el desarrollo de aplicaciones libres En 2009 destinoacute maacutes de 500 millones de Euros al proyecto ldquoOpen Source and Green ITrdquo El software libre es tan importante para los alemanes que incluso el 59 de sus empresas lo utiliza el argumento maacutes utilizado no es la reduccioacuten de costos sino la posibilidad de poder modificar el coacutedigo fuente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
6
BRASIL Fue el primer paiacutes en migrar masivamente sus sistemas de informacioacuten a alternativas open source Se llevoacute a cabo en primera instancia en el estado de Riacuteo Grande luego se realizoacute a escala nacional
ARGENTINA Existen varias iniciativas estatales que apuntan a fomentar el desarrollo de software libre Actualmente el software libre estaacute implementado en algunas provincias siendo Santa Fe el maacuteximo exponente de utilizacioacuten doacutende todo el software ha sido liberado bajo licencia GPL
FRANCIA La Asamblea Nacional utiliza software libre en todos sus sistemas y terminales de trabajo Francia viene tomando impulso en el desarrollo de software open source existen iniciativas para que el 20 del software contratado por la Administracioacuten Puacuteblica sea libre para el 2012 tambieacuten ofrece beneficios fiscales para las agrupaciones de usuarios y desarrolladores de SL
ESPANtildeA Espantildea se ha apostado como uno de los mayores impulsores mundiales del uso de software libre Actualmente existen 200 empresas proveedoras de soluciones 100 comunidades de usuarios y 180 centros educativos donde el software de coacutedigo abierto es una realidad cotidiana Muchos ayuntamientos y universidades ya se pasaron a sistemas open source
A principios de 2010 se presentoacute un proyecto liderado por la Plataforma Tecnoloacutegica Espantildeola de Software y Servicios con el apoyo del Plan Avanza Dicho plan pretende colocar a Espantildea a la par del resto de Europa en el disentildeo y uso de software libre de confianza y calidad similares a los comerciales Este proyecto llamado Vulcano trata de unificar el trabajo de distintas universidades centros tecnoloacutegicos y empresas que hasta el momento habiacutean dedicado sus esfuerzos al aacutembito de la educacioacuten
En un entrevista ofrecida por David Saacutenchez Director de Comunicacioacuten y Relaciones Instituciones en CENATIC que es el Centro Nacional de Referencia de Aplicacioacuten de las Tecnologiacuteas de la informacioacuten y la Comunicacioacuten basadas en Fuentes Abiertas podemos encontrar httpwwwmuylinuxcom20110407entrevistamos-a-david-sanchez-de-cenatic
CENATIC es una Fundacioacuten Puacuteblica Estatal del gobierno de Espantildea promovida por el Ministerio de Industria Turismo y Comercio y la Junta de Extremadura que ademaacutes cuenta en su patronato con las comunidades autoacutenomas de Andaluciacutea Aragoacuten Asturias Cantabria Cataluntildea Islas Balares Paiacutes Vasco y Galicia asiacute como las empresas Atos Origin Telefoacutenica y Grupo Aacutepex
Su trabajo es promover el conocimiento y uso del software libre en todos los aacutembitos de la sociedad con especial atencioacuten en las administraciones puacuteblicas las empresas el sector tecnoloacutegico proveedor o usuario de tecnologiacuteas libres y las comunidades de desarrollo a traveacutes de proyectos especiacuteficos para cada uno de estos sectores
ldquo La apuesta a del Administracioacuten del Estado por el software libre se inicioacute ya en los 90 cuando el entonces ministerio para las Administraciones Puacuteblicas llevoacute a cabo la primera gran migracioacuten a software libre de 1375 servidores Llegaron tambieacuten proyectos como el del Principado de Asturias para generar de forma colaborativa un
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
7
marco basado en software libre que permitioacute crear cluacutester de empresas locales capaces de aportar servicios de eAdministracion que de otra manera tendriacutean que haber contratado fuera de su comunidadrdquo
ldquo O el proyecto de gvSIG de la Conselleriacutea d‟Infrestructures i Transport de la Generalitat Valenciana un sistema de informacioacuten geograacutefico que cuenta con un tejido empresarial local alrededor del proyecto y estaacuten haciendo de la Comunidad Valenciana el nuacutecleo maacutes activo a nivel mundial de desarrollo GIS en entornos libres Tambieacuten es muy conocido el proyecto de Red Tecnoloacutegica Educativa de la Junta de Extremadura con Linex como primera distribucioacuten regional y concepto pionero adoptado ya por 7 comunidades autoacutenomasrdquo ldquoFinalmente a nivel de administracioacuten local hasta el 80 de los grandes ayuntamientos cuentan hoy en diacutea con proyectos de software libre siendo quizaacute el maacutes destacado el del Ayuntamiento de Zaragozardquo
22 LENGUAJES DE PROGRAMACIOacuteN Un lenguaje de programacioacuten es un lenguaje artificial que puede ser usado para controlar el comportamiento de una maacutequina especialmente una computadora Estos se componen de un conjunto de reglas sintaacutecticas y semaacutenticas que permiten expresar instrucciones que luego seraacuten interpretadas Debe distinguirse de ldquolenguaje informaacuteticordquo que es una definicioacuten maacutes amplia puesto que estos incluyen otros lenguajes como son el HTML o PDF que dan formato a un texto y no es programacioacuten en siacute misma El programador es el encargado de utilizar un lenguaje de programacioacuten para crear un conjunto de instrucciones que al final constituiraacute un programa o subprograma informaacutetico En su uso un lenguaje de programacioacuten puede acercarse a la forma humana de expresarse y por eso este tipo de lenguajes es llamado de alto nivel Esto significa que utilizan palabras y formas en sus estructuras que se asemejan al lenguaje natural (especialmente al ingleacutes) En cambio aquellos lenguajes que se aproximan maacutes a la forma en la cual la computadora se maneja son llamados lenguajes de bajo nivel Esto significa que lo que el programador deba escribir se acercaraacute al lenguaje maacutequina que es en definitiva lo que las computadoras pueden interpretar De todas maneras un lenguaje de programacioacuten difiere en muchos aspectos de un lenguaje humano Un coacutedigo escrito en un lenguaje de programacioacuten especiacutefico siempre se interpreta de la misma manera (no como los idiomas humanos ambiguos) los errores son mucho maacutes significativos (a tal punto de que un coacutedigo puede volverse ininterpretable por la computadora) etc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
8
El coacutedigo fuente es el conjunto de instrucciones que conforman un programa (o subprograma o moacutedulo) El coacutedigo fuente debe ser compilado para poder ser interpretado y ejecutado por la computadora La compilacioacuten traduce el coacutedigo fuente (que depende del lenguaje de programacioacuten) a un lenguaje maacutequina (que depende del sistema de la maacutequina) Existen lenguajes del tipo script que son directamente ejecutados por un inteacuterprete y no necesitan compilacioacuten Los lenguajes de programacioacuten pueden clasificarse empleando distintos meacutetodos y puntos de vista Esta clasificacioacuten se basa en el paradigma que utilizan Se debe aclarar que existen muchos maacutes paradigmas y subparadigmas de programacioacuten no incluidos dentro de los mencionados Ademaacutes todaviacutea hay conflictos en las definiciones y alcances de ciertos paradigmas
23 PARADIGMAS DE PROGRAMACIOacuteN Un paradigma de programacioacuten provee (y determina) la visioacuten y meacutetodos de un programador en la construccioacuten de un programa o subprograma Diferentes paradigmas resultan en diferentes estilos de programacioacuten y en diferentes formas de pensar la solucioacuten de problemas (con la solucioacuten de muacuteltiples ldquoproblemasrdquo se construye una aplicacioacuten) Los lenguajes de programacioacuten son basados en uno o maacutes paradigmas (Veacutease Programacioacuten en muacuteltiples paradigmas) Por ejemplo Smalltalk y Java son lenguajes basados en el paradigma orientado a objetos El lenguaje de programacioacuten Scheme en cambio soporta soacutelo programacioacuten funcional En cambio Python soporta muacuteltiples paradigmas Clasificacioacuten por paradigmas de programacioacuten Paradigma Imperativo describe la programacioacuten como una secuencia instrucciones o comandos que cambian el estado de un programa El coacutedigo maacutequina en general estaacute basado en el paradigma imperativo Su contrario es el paradigma declarativo En este paradigma se incluye el paradigma procedimental (procedural) entre otros Paradigma Declarativo No se basa en el coacutemo se hace algo (coacutemo se logra un objetivo paso a paso) sino que describe (declara) coacutemo es algo En otras palabras se enfoca en describir las propiedades de la solucioacuten buscada dejando indeterminado el algoritmo (conjunto de instrucciones) usado para encontrar esa solucioacuten Es maacutes complicado de implementar que el paradigma imperativo tiene desventajas en la eficiencia pero ventajas en la solucioacuten de determinados problemas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
9
Paradigma Estructurado la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Ademaacutes la programacioacuten se controla con secuencia seleccioacuten e iteracioacuten Permite reutilizar coacutedigo programado y otorga una mejor compresioacuten de la programacioacuten Es contrario al paradigma inestructurado de poco uso que no tiene ninguna estructura es simplemente un ldquobloquerdquo como por ejemplo los archivos batch (bat) Paradigma Orientado a Objetos estaacute basado en la idea de encapsular estado y operaciones en objetos En general la programacioacuten se resuelve comunicando dichos objetos a traveacutes de mensajes (programacioacuten orientada a mensajes) Se puede incluir -aunque no formalmente- dentro de este paradigma el paradigma basado en objetos que ademaacutes posee herencia y subtipos entre objetos Ej Simula Smalltalk C++ Java Visual Basic NET etc Su principal ventaja es la reutilizacioacuten de coacutedigos y su facilidad para pensar soluciones a determinados problemas Paradigma Funcional este paradigma concibe a la computacioacuten como la evaluacioacuten de funciones matemaacuteticas y evita declarar y cambiar datos En otras palabras hace hincapieacute en la aplicacioacuten de las funciones y composicioacuten entre ellas maacutes que en los cambios de estados y la ejecucioacuten secuencial de comandos (como lo hace el paradigma procedimental) Permite resolver ciertos problemas de forma elegante y los lenguajes puramente funcionales evitan los efectos secundarios comunes en otro tipo de programaciones Paradigma loacutegico se basa en la definicioacuten de reglas loacutegicas para luego a traveacutes de un motor de inferencias loacutegicas responder preguntas planteadas al sistema y asiacute resolver los problemas Ej prolog Otros paradigmas y subparadigmas son paradigma orientado al sujeto paradigma heuriacutestico paradigma reflectante programacioacuten basada en reglas paradigma basado en restricciones programacioacuten basada en prototipos etc
24 iquestPOR QUEacute PYTHON
241 Caracteriacutesticas de Python
Python es un lenguaje de programacioacuten de tipo script creado por Guido van Rossum a principios de los antildeos 90 cuyo nombre proviene del grupo ldquoMonty Pythonrdquo El objetivo es un lenguaje con una sintaxis muy limpia y con un coacutedigo legible Python es un lenguaje de programacioacuten multiparadigma Esto significa que maacutes que forzar a los programadores a adoptar un estilo particular de programacioacuten permite varios estilos programacioacuten orientada a objetos programacioacuten imperativa funcional estructurada
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
10
etc Otros paradigmas estaacuten soportados mediante el uso de extensiones Los lenguajes de script (lenguajes interpretados de muy alto nivel como Perl y Python) gozan de creciente importancia e implantacioacuten en el mundo del software libre Python es un lenguaje de programacioacuten faacutecil de aprender y potente Dispone de eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos simple pero eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de las plataformas En Python no hay terminadores de sentencia (como el punto y como de CC++Java) ni marcas de iniciofin de bloque (como las llaves de esos mismos lenguajes) La indentacioacuten como forma de marcar bloques elimina errores propios de los lenguajes citados y que son frecuentes en los estudiantes y tambieacuten en los programadores profesionales sentencias condicionales sin accioacuten por antildeadir un punto y coma incorrectos bucles con una sola sentencia cuando parece que hay dos o maacutes (por omisioacuten de llaves con un sangrado inadecuado del programa) sentencias con semaacutentica ldquoalteradardquo por usar una coma cuando corresponde un punto y coma o por omitir un punto y coma al declarar un registro antes de una funcioacuten etc La indentacioacuten soacutelo resulta molesta cuando el tamantildeo de un bloque de cierta profundidad excede del tamantildeo de la ventana del editor Python es un lenguaje interpretado Los lenguajes interpretados permiten ciclos de desarrollo breves (edicioacuten y ejecucioacuten) que animan a los estudiantes a experimentar Python dispone de un entorno de ejecucioacuten que ayuda a detectar los errores (incluyendo aquellos que soacutelo se manifiestan en ejecucioacuten) sentildealaacutendolos con mensajes muy informativos Python ofrece ademaacutes un entorno interactivo con el que es posible efectuar pequentildeas pruebas o disentildear incrementalmente las soluciones a los problemas La contrapartida de que se trate de un lenguaje interpretado es obviamente la menor velocidad de ejecucioacuten Python puede considerarse pseudocoacutedigo ejecutable Es muy expresivo y su sintaxis sencilla interfiere poco en la implementacioacuten de algoritmos asiacute que resulta un buen sustituto del pseudocoacutedigo con la ventaja de que los algoritmos codificados en Python siacute son ejecutables Python ofrece un rico conjunto de estructuras de datos flexibles El tipo lista de python (un vector dinaacutemico heterogeacuteneo) permite introducir con naturalidad el concepto de secuencia y presentar los algoritmos baacutesicos de manejo de secuencias Que la indexacioacuten empiece siempre en 0 ayuda a dar el salto a C C++ o Java El entorno de ejecucioacuten proporciona comprobacioacuten de validez de los iacutendices eliminando asiacute una de las principales fuentes de problemas de C y C++ El hecho de que las listas sean
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
11
redimensionables elimina al programador la necesidad de tomar decisiones acerca de la longitud maacutexima de los vectores demasiado pronto Por otra parte Python es un lenguaje muy ortogonal una vez se ha aprendido a manejar listas por ejemplo se sabe manejar cadenas ya que ambos tipos son secuenciales y presentan conjuntos de operadores con igual nombre y semaacutentica Ademaacutes de listas y cadenas Python ofrece tuplas (listas inmutables) y diccionarios (vectores asociativos) Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc No es que haya que presentar todos los moacutedulos pero sirve para ayudar a consultar la documentacioacuten de las bibliotecas disponibles favorece la programacioacuten eficiente
Python es orientado a objetos A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulos en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar al de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
El inteacuterprete de Python y su extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables para las plataformas maacutes importantes en la sede web de Python httppythonorg y se pueden distribuir libremente La misma sede contiene tambieacuten distribuciones y direcciones de muchos moacutedulos programas y herramientas Python de terceras partes ademaacutes de documentacioacuten adicional Es faacutecil ampliar el inteacuterprete de Python con nuevas funciones y tipos de datos implementados en C o C++ (u otros lenguajes a los que se pueda acceder desde C) Python es tambieacuten adecuado como lenguaje de extensioacuten para aplicaciones adaptables al usuario Algunas de las empresas que usan Python son Google Yahoo Industrial Light amp Magic Walt Disney NASA SGI Inc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
12
3 INSTRUMENTACIOacuteN Y SOFTWARE EMPLEADOS PHYTON
31 INTRODUCCIOacuteN A PYTHON Como se comentoacute en el punto anterior Python
es orientado a objetos (realmente es multiparadigma aceptando distintos tipos de paradigmas) A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulo en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar a l de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc
Entre estas bibliotecas cabe mencionar Numpy Numpy es un moacutedulo de Python escrito en C que define los vectores numeacutericos las matrices y las operaciones entre ellos Ademaacutes de las funciones sobre vectores y matrices tambieacuten incluye funciones trigonomeacutetricas del tipo sin cos tan etc Numpy es el paquete fundamental necesario para programacioacuten cientiacutefica con Python Contiene entre otras cosa
Un poderoso N-dimensional objeto vector Sofisticadas funciones Herramientas para integracioacuten con coacutedigo de C C++ y Fortram Uacutetiles de algebra lineal Transformada de Fourier y capacidades de
nuacutemeros aleatorios Ademaacutes de sus usos cientiacuteficos obvios NumPy tambieacuten se puede utilizar como un eficiente multi-dimensional contenedor de datos geneacutericos Pueden ser definidos tipos arbitrarios de datos Esto permite integrar a la perfeccioacuten y raacutepidamente con una amplia variedad de bases de datos El objeto principal de Numpy es el vector homogeacuteneo multidimensional Eacuteste es una tabla de elementos (generalmente nuacutemeros) todos del mismo tipo indexados por una tupla de enteros positivos Por ldquomultidimensionalrdquo entendemos que los vectores pueden tener varias dimensiones de ejes El nuacutemero de ejes se llamaraacuten a menudo ldquorangordquo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
13
Por ejemplo las coordenadas de un punto en el espacio 3D seriacutea [1 2 1] que
representariacutea un vector de rango 1 de longitud 3 Otro ejemplo seriacutea
[[ 1 0 0]
[ 0 1 2]]
que representa un array de rango 2 (2 dimensiones) Para maacutes informacioacuten mirar
Numpy Glossary
Otras libreriacuteas importantes en Python son Scipy es otra libreriacutea que usa Numpy El desarrollo de Scipy comenzoacute en el antildeo 2001 Sus oriacutegenes se remontan al paquete con extensiones numeacutericas para Python denominado Numeric Posteriormente aparecioacute Numarray con la intencioacuten de construir un paquete maacutes flexible y de limpiar el coacutedigo aunque resultoacute ser maacutes lengo para caacutelculos matriciales en pocas dimensiones En el antildeo 2005 el principal impulsor de Scipy Travis Oliphant reunificoacute ambos en un uacutenico paquete que integrse las ventajas de ambos y se denominoacute Numpy considerado el nuacutecleo de Scipy Scipy en siacute mismo se concibe actualmente como una extensioacuten de las funcionalidades de Numpy
Scipy posee moacutedulos para optimizacioacuten de funciones integracioacuten funciones especiales resolucioacuten de ecuaciones diferenciales ordinarias y otros muchos aspectos
Puede ser usado con Linux Windows y ha sido tambieacuten compilado para Sun y Mac
Scipy es un proyecto de software libre que ha sido patrocinado por una compantildeiacutea Enthought inc
Su organizacioacuten se estructura en subpaquetes que se pueden considerar especializados en dominios cientiacuteficos determinados Podemos encontrar estos paquetes seguacuten la ayuda de scipy (v046)
stats -- Statistical Functions sparse -- Sparse matrix lib -- Python wrappers to external libraries linalg -- Linear algebra routines signal -- Signal Processing Tools misc -- Various utilities that dont have another home interpolate -- Interpolation Tools [] optimize -- Optimization Tools [] cluster -- Vector Quantization Kmeans [] fftpack -- Discrete Fourier Transform algorithms []
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
14
io -- Data input and output [] maxentropy -- Routines for fitting maximum entropy models [] integrate -- Integration routines [] liblapack -- Wrappers to LAPACK library [] special -- Special Functions [] libblas -- Wrappers to BLAS library []
Matplotlib es una libreriacutea de Python que facilita la publicacioacuten de calidad de la publicacioacuten interactiva Permite obtener graacuteficas de calidad para publicaciones Su principal submoacutedulo para dibujar es pyplot Mayavi Ipython PIL (Python Imaging Library) Pythonxy EPD (Enthought python distribution $$) hellip Este texto como Memoria de un Proyecto Final de Maacutester no pretende ser ni mucho menos un manual de Python pero siacute son necesarios unos conocimientos previos primero para comprender la filosofiacutea del programador y posteriormente saber las utilidades que podemos obtener al trabajar con Python Para ello vamos a incluir algunos detalles incluidos entro de la Guiacutea de aprendizaje de Python por Guido Van Rossum v24 creador de Python Para la realizacioacuten de este documento se ha consultado como aparece en Bibliografiacutea y Referencias en la Web numerosa documentacioacuten pero como punto de partida parece loacutegico recoger la documentacioacuten de la Guiacutea de aprendizaje del propio creador de Python Python contiene una serie de palabras clave dependientes de la versioacuten de instalacioacuten para asegurarnos de las palabras clave de la versioacuten descargada podemos introducir el siguiente coacutedigo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
15
Palabras clave de Python De la misma manera Python trae consigo ciertas funciones que vienen de serie esto es no es necesario cargarlas desde ninguacuten moacutedulo Dichas funciones dependen de la versioacuten de Python instalada En la paacutegina httpdocspythonorglibraryfunctionshtml Nos encontramos con dicha relacioacuten A modo de resumen eacutestas son (ver paacutegina siguiente)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
16
Funciones internas de Python
311 Guiacutea de aprendizaje de Python por Guido Van Rossum v24
Extractos del documento Si en alguna ocasioacuten hemos escrito un guioacuten para un inteacuterprete de oacuterdenes (o shell script) de UNIX largo puede que hayamos sentido que nos encantariacutea antildeadir una caracteriacutestica maacutes pero ya es tan lento tan grande tan complicadohellip O la caracteriacutestica involucra una llamada al sistema u otra funcioacuten accesible soacutelo desde C El problema en siacute no suele ser tan complejo como para transformar el guioacuten en un programa en C Igual el programa requiere cadenas de longitud variable u otros tipos de datos (como listas ordenadas de nombres de fichero) faacuteciles en sh pero tediosas en C o quizaacute no tengamos tanta soltura con C Otra situacioacuten Quizaacute tengas que trabajar con bibliotecas de C diversas y el ciclo normal en C de escribir-compilar-probar-recompilar es demasiado lento Necesitas desarrollar software con maacutes velocidad Posiblemente has escrito un programa al que vendriacutea bien un lenguaje de extensioacuten y no quieres disentildear un lenguaje escribir y depurar el inteacuterprete y adosarlo a la aplicacioacuten En tales casos Python puede ser el lenguaje que necesitas Python es simple pero es un lenguaje de programacioacuten real Ofrece maacutes apoyo e infraestructura para programas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
17
grandes que el inteacuterprete de oacuterdenes Por otra parte tambieacuten ofrece mucho maacutes comprobacioacuten de errores que C y al ser un lenguaje de muy alto nivel tiene incluidos tipos de datos de alto nivel como matrices flexibles y diccionarios que llevariacutean diacuteas de programacioacuten en C Dados sus tipos de datos maacutes generales se puede aplicar a un rango de problemas maacutes amplio que Awk o incluso Perl pero muchas cosas son al menos igual de faacuteciles en Python que en esos lenguajes Python te permite dividir su programa en moacutedulos reutilizables desde otros programas en Python Viene con una gran coleccioacuten de moacutedulos estaacutendar que puedes utilizar como base de tus programas (o como ejemplos para empezar a aprender Python) Tambieacuten hay moacutedulos incluidos que proporcionan ES de ficheros llamadas al sistema ldquosocketsrdquo y hasta interfaces graacuteficas con el usuario como Tk Python es un lenguaje interpretado lo que ahorra un tiempo considerable en el desarrollo del programa pues no es necesario compilar ni enlazar El inteacuterprete se puede utilizar de modo interacivo lo que facilita experimentar con caracteriacutesticas del lenguaje escribir programas desechables o probar funciones durante el desarrrollo del prgram de la base hacia arriba Tambieacuten es una calculadora muy uacutetil Python permite escribir programas muy compactos y legibles Los programas escritos en Python son normalmente mucho maacutes cortos que sus equivalentes en C o C++ por varios motivos
Los tipos de datos de alto nivel permiten expresar operaciones complejas en una sola sentencia
El agrupamiento de sentencias se realiza mediante sangrado (indentacioacuten) en lugar de beginend o llaves
No es necesario declarar los argumentos ni las variables
Python es ampliable si ya sabes programar en C es faacutecil antildeadir una nueva funcioacuten o moacutedulo al inteacuterprete para realizar operaciones criacuteticas a la maacutexima velocidad o para enlazar programas en Python con bibliotecas que soacutelo estaacuten disponibles en forma binaria (como bibliotecas de graacuteficos especiacuteficas del fabricante) Una vez enganchado puedes enlazar el inteacuterprete de Python a una aplicacioacuten escrita en C y utilizarlo como lenguaje de macros para dicha aplicacioacuten
3111 Llamar al inteacuterprete
En UNIX el inteacuterprete de Python se suele instalar como bdquousrlocalbinpython‟ en aquellas maacutequinas donde esteacute disponible En Windows se instala en el directorio bdquoArchivos de programa‟ o en cualquier otro directorio seleccionado Poner este directorio en la ruta de ejecutables hace posible arrancarlo tecleando en el inteacuterprete de oacuterdenes la orden
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
18
Python
Como la eleccioacuten del directorio donde reside el inteacuterprete es una opcioacuten de instalacioacuten es posible que se halle en otros lugares Consulta con tu guru de Python local o tu administrador de sistemas (por ejemplo bdquousrlocalpython‟ es una alternativa recuente) Teclear un caraacutecter fin de fichero (Control-D en UNIX Control-Z en DOS o Windows) en el inteacuterprete causa la salida del inteacuterprete con un estado cero Si eso no funciona se puede salir del inteacuterprete tecleando las siguientes oacuterdenes bdquoimport sys sysexit()‟ Las opciones de edicioacuten de la liacutenea de oacuterdenes no son muy destacables En UNIX es posible que quien instalara el inteacuterprete en su sistema incluyera soporte para la biblioteca de GNU bdquoreadline‟ que permite una edicioacuten de liacutenea maacutes elaborada y la recuperacioacuten de oacuterdenes anteriores El modo maacutes raacutepido de ver si hay soporte de edicioacuten de liacuteneas es teclear Control-P en cuanto aparece el inteacuterprete Si pita la edicioacuten de liacuteneas estaacute disponible Si no sale nada o sale ^P no estaacute disponible la edicioacuten de liacuteneas y soacutelo se puede utilizar la tecla de borrado para borrar el uacuteltimo caraacutecter tecleado El inteacuterprete funciona como el inteacuterprete de oacuterdenes de UNIX cuando se lo llama con la entrada estaacutendar conectada a un dispositivo tty lee y ejecuta las oacuterdenes interactivamente cuando se le da un nombre de fichero como argumento o se le da un fichero como entrada estaacutendar lee y ejecuta un guion desde ese fichero Otro modo de arrancar el inteacuterprete es bdquopython -c orden [argumento] ‟ que ejecuta las sentencias de orden de forma anaacuteloga a la opcioacuten -c de la liacutenea de oacuterdenes Como las sentencias de Python suelen contener espacios u otros caracteres que la liacutenea de oacuterdenes considera especiales lo mejor es encerrar orden entre dobles comillas por completo
Imagen de la pantalla al abrir Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
19
Hay moacutedulos de Python que son uacutetiles como programas independientes Se los puede llamar mediante ldquopython-m moacutedulo[arg] helliprdquo que ejecuta el fichero de coacutedigo fuente de module como si se hubiera dado el nombre completo en la liacutenea de oacuterdenes Cuando se leen oacuterdenes desde una tty se dice que el inteacuterprete estaacute en modo interacitov En este modo espera a la siguiente orden con el indicador principal que suele ser tras signos ldquomayorrdquo (ldquogtgtgtrdquo) Para las liacuteneas adicionales se utiliza el indicador secundario por omisioacuten tres puntos (ldquohelliprdquo)
Programar en Python puede hacerse de varias maneras seguacuten la necesidad o el gusto de cada persona Para los neoacutefitos mi recomendacioacuten es que utilicen el ambiente graacutefico interactivo llamado IDLE Esta herramienta viene incluiacuteda con el moacutedulo tkinter Ademaacutes de resaltar la sintaxis en colores permite editar archivos fuente y es maacutes amigable al inicio
El IDLE tiene dos ambientes el shell interactivo con tiacutetulo Python Shell en su ventana muestra el prompt gtgtgt y espera un comando y uno o maacutes editores que se abren con el menuacute File --gt New Window Cada editor empieza con el tiacutetulo Untitled en su ventana el cual cambia hasta que se salva a un archivo con File --gt Save As (y subsecuentemente File --gt Save) Cada editor nos permite ejecutar el coacutedigo Python que contiene
Se recomienda crear una carpeta para realizar y guardar los ejemplos Para correr idle cambiar primero a esa carpeta y entonces correr idle En MS- Windows
Cejemplosgt Cpython22idleidle
En Linux
[usuariopc ejemplos]$ idle amp La primera vez que hacemos un ejemplo hemos de intentar hacerlo paso a paso en forma interactiva en el shell tecleando cada comando Es la forma en que aprendemos maacutes que si simplemente copiamos y pegamos Una vez que tecleamos y funcionan las cosas podemos copiar del shell interactivo y pegamos a una ventana de editor y salvamos en un archivo con terminacioacuten py para que conservemos lo que hicimos para siempre
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
20
Imagen del Shell interactivo de IDLE
Acceso a nueva ventana dentro del Shell interactivo de IDLE
Nueva ventana del editor de IDLE Una vez que partiendo de una ventana vacia tenemos nuestro coacutedigo hemos de seleccionar FileSave As para guardar el archivo y tenerlo disponible
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
21
Ventana del editor de IDLE con coacutedigo preparado para guardar
Una vez que nos hemos asegurado de que tenemos el coacutedigo guardado iquestcoacutemo hacemos para ejecutar el programa La respuesta es seleccionando Run Module En caso de seleccionar Run Module antes de guardar el coacutedigo Python nos pide que lo guardemos anteshellip Al seleccionar Run Module Python iraacute interpretando liacutenea por liacutenea y mostrando los resultados a traveacutes del Inteacuterprete Si existiese alguacuten error de sintaxis se avisa del tipo de error y doacutende se produce Una vez corregido el problema se vuelve a intentar el Run Module
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
22
El tener un inteacuterprete permite ir probando partes de programas sobre las que no se estaacute seguro y ver coacutemo reaccionan para poder decidir si se incluyen o no y coacutemo se pueden adaptar Asiacute se estaacute continuamente alternando entre el inteacuterprete y el programa Maacutes informacioacuten en httpdocspythonorglibraryidlehtml
3112 Moacutedulos
Si salimos del inteacuterprete de Python y vuelves a entrar las definiciones que se hayan hecho (funciones y variables) se pierden Por ello si se quiere escribir un programa algo maacutes largo seraacute mejor que se utilice un editor de texto para preparar la entrada del inteacuterprete y ejecutarlo con ese fichero como entrada Esto se llama crear un guioacuten Seguacuten vayan creciendo los programas puede que quieras dividirlos en varios ficheros para facilitar el mantenimiento Puede que tambieacuten quieras utilizar una funcioacuten que has escrito en varios programas sin tener que copiar su definicioacuten en cada programa Para lograr esto Python tiene un modo de poner definiciones en un fichero y utilizarlas en un guioacuten o en una instancia interactiva del inteacuterprete Tal fichero se llama moacutedulo las definiciones de un moacutedulo se pueden importar a otros moacutedulos o al moacutedulo principal (la coleccioacuten de variables accesible desde un guioacuten ejecutado desde el nivel superior y en el modo de calculadora) Un moacutedulo es un fichero que contiene definiciones y sentencias de Python El nombre del fichero es el nombre del moacutedulo con el sufijo ldquopyrdquo Dentro de un moacutedulo el nombre del moacutedulo (como cadena) es accesible mediante la variable global __name__ Un moacutedulo puede contener sentencias ejecutables ademaacutes de definiciones de funciones Estas sentencias sirven para inicializar el moacutedulo Soacutelo se ejecutan la primera vez que se importa el moacutedulo en alguna parte1 Cada moacutedulo tiene su propia tabla de siacutembolos que utilizan todas las funciones definidas por el moacutedulo como tabla de siacutembolos global Por ello el autor de un moacutedulo puede utilizar variables globales dentro del moacutedulo sin preocuparse por conflictos con las variables globales de un usuario del moacutedulo Por otra parte si sabes lo que haces puedes tocar las variables globales de un moacutedulo con la misma notacioacuten utilizada para referirse a sus funciones nombreModnombreElem Los moacutedulos pueden importar otros moacutedulos Es una costumbre no obligatoria colocar todas las sentencias ldquoimportrdquo al principio del moacutedulo (o guioacuten) Los nombres del moacutedulo importado se colocan en la tabla de siacutembolos global del moacutedulo (o guioacuten) que lo importa Existe una variacioacuten de la sentencia import que importa los nombres de un moacutedulo directamente a la tabla de siacutembolos del moacutedulo que lo importa Por ejemplo
gtgtgt from fibo import fib fib2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
23
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto no introduce el nombre del moacutedulo del que se toman los elementos importados en la tabla de siacutembolos local (por lo que en el ejemplo no estaacute definido fibo) Ademaacutes existe una variacioacuten que importa todos los nombres que define un moacutedulo gtgtgt from fibo import
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto importa todos los nombres excepto los que empiezan por un guioacuten bajo (_)
3113 El camino de buacutesqueda de moacutedulos
Cuando se importa un moacutedulo denominado fiambre el inteacuterprete busca un fichero denominado bdquofiambrepy‟ en el directorio actual y luego en la lista de directorios especificada por la variable de entorno PYTHONPATH Tiene la misma sintaxis que la variable de liacutenea de oacuterdenes PATH de UNIX que es una lista de nombres de directorios Cuando PYTHONPATH no tiene ninguacuten valor o no se encuentra el fichero se continuacutea la buacutesqueda en un camino dependiente de la instalacioacuten En UNIX normalmente es bdquousrlocallibpython‟ En realidad se buscan los moacutedulos en la lista de directorios dada por la variable syspath que se inicializa desde el directorio que contiene el guioacuten de entrada (o el directorio actual) PYTHONPATH y el valor por omisioacuten dependiente de la instalacioacuten Esto permite que los programas que saben lo que hacen modifiquen o reemplacen el camino de buacutesqueda de moacutedulos Obseacutervese que como el directorio que contiene el guioacuten bajo ejecucioacuten estaacute en el camino de buacutesqueda de moacutedulos es importante que el moacutedulo no tenga el mismo nombre que un moacutedulo estaacutendar o Python lo intentaraacute cargar el guioacuten como moacutedulo cuando se importe el moacutedulo Normalmente esto provocaraacute errores
3114 Ficheros Python ldquoCompiladosrdquo
Como mejora considerable del tiempo de arranque de programas cortos que utilizan muchos moacutedulos estaacutendar si existe un fichero llamado bdquofiambrepyc‟ en el directorio donde se encuentra bdquofiambrepy‟ se supone que contiene una versioacuten previamente ldquocompilada a byterdquo del moacutedulo fiambre La fecha y hora de la versioacuten de bdquofiambrepy‟
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
24
utilizada para generar bdquofiambrepyc‟ se graba en bdquofiambrepyc‟ y no se considera el fichero bdquopyc‟ si no concuerdan Normalmente no hay que hacer nada para generar el fichero bdquofiambrepyc‟ Siempre que bdquofiambrepy‟ se compile sin errores se hace un intento de escribir la versioacuten compilada a bdquofiambrepyc‟ No se provoca un error si falla el intento Si por cualquier motivo no se escribe completamente el fichero el fichero bdquofiambrepyc‟ resultante seraacute reconocido como no vaacutelido y posteriormente ignorado El contenido del fichero bdquofiambrepyc‟ es independiente de la plataforma por lo que se puede compartir un directorio de moacutedulos entre maacutequinas de diferentes arquitecturas
3115 Moacutedulos estandar
Python viene con una biblioteca de moacutedulos estaacutendar descrita en un documento aparte la Referencia de las bibliotecas Algunos moacutedulos son internos al inteacuterprete y proporcionan acceso a las operaciones que no son parte del nuacutecleo del lenguaje pero se han incluido por eficiencia o para proporcionar acceso a primitivas del sistema operativo como las llamadas al sistema El conjunto de dichos moacutedulos es una opcioacuten de configuracioacuten que tambieacuten depende de la plataforma subyacente Por ejemplo el moacutedulo amoeba soacutelo se proporciona en sistemas que de alguacuten modo tienen acceso a primitivas Amoeba Hay un moacutedulo en particular que merece una especial atencioacuten el moacutedulo sys que es siempre interno en cualquier inteacuterprete de Python Estas variables soacutelo estaacuten definidas si el inteacuterprete estaacute en modo interactivo La variable syspath es una lista de cadenas que determina el camino de buacutesqueda de moacutedulos del inteacuterprete Se inicializa a un valor por omisioacuten tomado de la variable de entorno PYTHONPATH o de un valor por omisioacuten interno si PYTHONPATH no tiene valor Se puede modificar mediante operaciones de lista estaacutendar por ejemplo gtgtgt import sys gtgtgt syspathappend(‟ufsguidolibpython‟)
3116 Paquetes
Los paquetes son un meacutetodo de estructurar el espacio nominal de moacutedulos de Python mediante el uso de ldquonombres de moacutedulos con puntordquo Por ejemplo el nombre de moacutedulo AB hace referencia a un submoacutedulo denominado ldquoBrdquo de un paquete denominado ldquoArdquo Del mismo modo que el uso de moacutedulos evita que los autores de diferentes moacutedulos tengan que preocuparse de los nombres de variables globales de los otros la utilizacioacuten de nombres de moacutedulo con puntos evita que los autores de paquetes multi-moacutedulo como Numpy o Pil (Biblioteca de tratamiento de imagen de
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
25
python) tengan que preocuparse de los nombres de los moacutedulos ajenos Supoacuten que deseas disentildear una coleccioacuten de moacutedulos (un paquete) para tratar de manera uniforme ficheros de sonido y datos de sonido Existen muchos formatos de fichero de sonido (que se suelen distinguir por la extensioacuten como bdquowav‟ bdquoaiff‟ o bdquoau‟) por lo que podriacuteas necesitar crear y mantener una coleccioacuten creciente de moacutedulos de conversioacuten entre los diferentes formatos Tambieacuten existen muchas operaciones posibles sobre los datos de sonido (tales como mezclar antildeadir eco ecualizar o generar un efecto artificial de estereofoniacutea) por lo que ademaacutes estariacuteas escribiendo una serie de moacutedulos interminable para realizar estas operaciones He aquiacute una posible estructura de tu paquete (expresado en teacuterminos de sistema de ficheros jeraacuterquico)
Sonido Paquete de nivel superior __init__py Inicializa el paquete de sonido
Formatos Subpaquete de conversiones de formato de ficheros __init__py leerwavpy escriwavpy leeraiffpy escriaiffpy leeraupy escriaupy Efectos Subpaquete de efectos de sonido __init__py ecopy surroundpy inversopy Filtros Subpaquete de filtros __init__py ecualizadorpy vocoderpy karaokepy
Modelo de estructura paquetemoacutedulo Al importar el paquete Python rastrea los directorios de syspath buscando por el subdirectorio de paquetes Los ficheros bdquo__init__py‟ son necesarios para que Python trate los directorios como contenedores de paquetes Se hace asiacute para evitar que los directorios con nombres
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
26
comunes como bdquotest‟ oculten accidentalmente moacutedulos vaacutelidos que aparezcan maacutes tarde dentro del camino de buacutesqueda En el caso maacutes sencillo bdquo__init__py‟ puede ser un fichero vaciacuteo pero tambieacuten puede ejecutar coacutedigo de inicializacioacuten del paquete o actualizar la variable __all__ descrita posteriormente Los usuarios del paquete pueden importar moacutedulos individuales del paquete por ejemplo import SonidoEfectoseco
De este modo se carga el submoacutedulo SonidoEfectoseco Hay que hacer referencia a eacutel por su nombre completo SonidoEfectosecofiltroeco(entrada salida retardo=07
aten=4)
Un modo alternativo de importar el submoacutedulo es from SonidoEfectos import eco
Asiacute tambieacuten se carga el submoacutedulo eco y se hace disponible sin su prefijo de paquete por lo que se puede utilizar del siguiente modo ecofiltroeco(entrada salida retardo=07 aten=4)
Y otra variacioacuten es importar la funcioacuten o variable deseada directamente from SonidoEfectoseco import filtroeco
De nuevo se carga el submoacutedulo eco pero se hace la funcioacuten filtroeco disponible directamente filtroeco(entrada salida retardo=07 aten=4)
Observa que al utilizar from paquete import elemento el elemento puede ser tanto un submoacutedulo (o subpaquete) del paquete como cualquier otro nombre definido por el paquete como una funcioacuten clase o variable La sentencia import comprueba primero si el elemento estaacute definido en el paquete Si no asume que es un moacutedulo e intenta cargarlo Si no lo consigue se provoca una excepcioacuten ImportError Sin embargo cuando se utiliza la sintaxis
importelementosubelementosubsubelemento cada elemento menos el
uacuteltimo debe ser un paquete El uacuteltimo elemento puede ser un moacutedulo o un paquete
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
27
pero no una clase funcioacuten o variable definida en el nivel superior
3117 Importar de un paquete
Y iquestqueacute ocurre cuando el usuario escribe from SonidoEfectos import En teoriacutea deberiacutea rastrearse el sistema para encontrar queacute submoacutedulos existen en el paquete e importarlos todos Por desgracia esta operacioacuten no funciona muy bien en las plataformas Windows y Mac en las que el sistema de ficheros no tiene una idea muy precisa de las mayuacutesculas de un fichero En estas plataformas no hay un modo garantizado de conocer si un fichero bdquoECOPY‟ deberiacutea ser importado como eco Eco o ECO (por ejemplo Windows 95 tiene la molesta costumbre de mostrar todos los nombres de fichero con la primera letra en mayuacutescula) La restriccioacuten de nombres de fichero DOS (8+3) antildeade otro problema para los nombres de moacutedulo largos La uacutenica solucioacuten es que el autor del paquete proporcione un iacutendice expliacutecito del paquete La sentencia import utiliza la siguiente convencioacuten Si el coacutedigo del bdquo__init__py‟ de un paquete define una lista llamada __all__ se considera que es la lista de nombres de moacutedulos que se deben importar cuando se encuentre from paquete import Depende del autor del paquete mantener la lista actualizada cuando se libere una nueva versioacuten del paquete Los autores del paquete pueden decidir no mantenerlo si no es uacutetil importar del paquete Por ejemplo el fichero bdquoSonidoEfectos__init__py‟ podriacutea contener el siguiente coacutedigo __all__ = [eco surround inverso] Esto significariacutea que from SonidoEfectos import importariacutea los tres submoacutedulos mencionados del paquete Sonido Si __all__ no estaacute definido la sentencia from SonidoEfectos import no importa todos los moacutedulos del subpaquete SonidoEfectos al espacio nominal actual Soacutelo se asegura de que el paquete SonidoEfectos ha sido importado (ejecutando posiblemente el coacutedigo de inicializacioacuten de bdquo__init__py‟) y luego importa cualesquiera nombres definidos en el paquete Esto incluye cualquier nombre definido (y submoacutedulos cargados expliacutecitamente) por bdquo__init__py‟ Tambieacuten incluye cualquier submoacutedulo del paquete expliacutecitamente importado por sentencias import anteriores Mira este coacutedigo import SonidoEfectoseco import SonidoEfectossurround from SonidoEfectos import En este ejemplo los moacutedulos eco y surround se importan al espacio nominal vigente porque estaacuten definidos en el paquete SonidoEfectos cuando se ejecuta la sentencia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
28
fromimport (esto tambieacuten funciona si estaacute definido __all__)
Observa que en general se debe evitar importar de un moacutedulo o paquete ya que suele dar como resultado coacutedigo poco legible Sin embargo se puede usar para evitar teclear en exceso en sesiones interactivas y cuando ciertos moacutedulos esteacuten disentildeados para exportar soacutelo nombres que cumplan ciertas reglas
Recuerda no hay nada incorrecto en utilizar from Paquete import
submoacutedulo_concreto De hecho es la notacioacuten recomendada salvo que el moacutedulo
que importa necesite usar submoacutedulos del mismo nombre de diferentes paquetes
3118 Referencias internas al paquete
Es comuacuten que los submoacutedulos necesiten hacerse referencias cruzadas Por ejemplo el moacutedulo surround podriacutea utilizar el moacutedulo eco De hecho tales referencias son tan comunes que la sentencia import busca antes en el paquete contenedor que en el camino de buacutesqueda de moacutedulos estaacutendar Por ello basta con que el moacutedulo surround use import eco o from eco import filtroeco Si el moacutedulo importado no se encuentra en el paquete actual (el paquete del que el moacutedulo actual es submoacutedulo) la sentencia import busca un moacutedulo de nivel superior con el nombre dado Cuando se estructuran los paquetes en subpaquetes (como el paquete Sonido del ejemplo) no hay un atajo para referirse a los submoacutedulos de los paquetes hermanos y se ha de utilizar el nombre completo del subpaquete Por ejemplo si el moacutedulo SonidoFiltrosvocoder necesita utilizar el moacutedulo eco del paquete SonidoEfectos debe utilizar from SonidoEfectos import eco
32 FUNCIONES INCLUIDAS EN NUMPY POR CATEGORIacuteAS (ARRAY CREATION)
A modo indicativo e introductorio se incluyen las funciones incluidas en la libreriacutea Numpy por categoriacuteas Ver maacutes informacioacuten en httpdocsscipyorgdocnumpy Numerical
arange() arrayrange()
linspace() logspace()
Ones and zeros
empty() empty_like()
eye() identity()
ones() ones_like()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
29
tri() tril() triu()
zeros() zeros_like()
From existing data
array() recarray()
asarray() asanyarray() asmatrix()
copy()
fromarrays() frombuffer() fromfile() fromfunction()
fromiter() loadtxt()
Building matrices
bmat()
diag() diagflat()
mat() matrix()
vander()
Reinterpreting arrays
view()
Types
astype()
cast[]()
int8() int16() int32() int64() int128()
uint8() uint16() uint32() uint64() uint128()
float16() float32() float64() float96() float128()
float256()
complex32() complex64() complex128() complex192()
complex256() complex512()
bool_()
object_()
void() str_() unicode_()
byte() ubyte()
short() ushort()
intc() uintc()
intp() uintp()
int_() uint()
longlong() ulonglong()
single() csingle()
float_() complex_()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
30
longfloat() clongfloat()
Kinds of array
asarray()
asanyarray()
asmatrix()
Changing the number of dimensions
atleast_1d() atleast_2d() atleast_3d()
broadcast()
expand_dims()
squeeze()
Transpose-like operations
rollaxis()
swapaxes()
T transpose()
Reshaping arrays
flat flatten()
ravel()
reshape() shape
Array modification
Joining arrays
append()
column_stack()
concatenate()
dstack() hstack() vstack()
Splitting arrays
array_split()
dsplit() hsplit() split() vsplit()
Enlarging arrays
tile()
repeat()
Adding and removing elements
delete()
insert()
resize()
trim_zeros()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
31
unique()
Rearranging elements
fliplr() flipud()
reshape()
roll()
rot90()
Indexing
[]
take()
put()
putmask()
Indexing syntax
slice()
newaxis
index_exp[]
Generating arrays suitable for indexing
c_[]
r_[]
s_[]
nonzero()
where()
indices()
ix_()
mgrid[]
ogrid()
Indexing-like operations
choose()
where()
compress()
diag() diagonal()
select()
Iterating
flat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
32
ndenumerate()
ndindex()
Logic
[]
all() any()
allclose()
alltrue()
nonzero()
piecewise()
sometrue()
Finding things
argmax() argmin()
searchsorted()
Array statistics
average() mean()
bincount() histogram()
corrcoef()
cov()
max() min() ptp()
median()
std() var()
ufuncs
abs() absolute()
add() multiply()
angle()
arccos() arcsin() arctan()
arccosh() arcsinh() arctanh()
arctan2()
bitwise_and() bitwise_or() bitwise_xor()
ceil() floor() round()
conj() conjugate()
cos() sin() tan()
cosh() sinh() tanh()
fix()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
33
hypot()
logical_and() logical_not() logical_or() logical_xor()
maximum() minimum()
ufunc methods
accumulate()
outer()
reduce()
Functional constructs
apply_along_axis()
apply_over_axis()
vectorize()
Random numbers
beta() binomial() gumbel() poisson() standard_normal()
uniform() vonmises() weibull()
bytes()
permutation()
rand() randint() randn()
random_integers()
random_sample()
ranf()
sample()
seed()
shuffle()
Array math
clip()
cross()
cumprod() cumsum()
diff()
digitize()
dot()
inner()
outer()
inv() pinv()
poly1d()
polyfit()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
34
prod() sum()
tensordot()
vdot()
FFT
fft()
fftfreq()
fftshift()
ifft()
Linear algebra
inv()
lstsq()
solve()
svd()
trace()
Array output
savetxt()
set_printoptions()
tofile()
tolist()
Other
sort() argsort()
binary_repr()
dtype()
fill()
finfo()
generic
imag real
inf nan
item()
lexsort()
ndim
shape
typeDict()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
35
Numpy Functions by Category (uacuteltima edicioacuten 2008-06-13 122659
efectuada por jh)
MoinMoin Powered
Pyt
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
36
4 METODOLOGIacuteA En este apartado se proporciona una descripcioacuten detallada de la metodologiacutea utilizada para el desarrollo e implementacioacuten de la biblioteca Utilizando un paradigma Estructurado de la programacioacuten que considera que la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Esto nos permite reutilizar coacutedigo programado y nos proporciona una mejor comprensioacuten de la programacioacuten En el uacuteltimo paquete de la libreriacutea tambieacuten se ha realizado una incursioacuten a la programacioacuten orientada a objetos con la declaracioacuten de algunas clases
41 ESTRUCTURA DE LA LIBRERIacuteA GEOTOPO En nuestro caso hemos partido del concepto de creacioacuten de una libreriacutea de funciones del aacutembito de la Topografiacutea y Geodesia Esta libreriacutea de Python se estructura como un paquete con el nombre de la libreriacutea ldquogeotopordquo que a su vez contiene 6 paquetes maacutes seguacuten tipologiacutea Asiacute tenemos
Imagen de los paquetes incluidos dentro del paquete (libreriacutea) geotopo
Por orden intuitivo desde el punto de vista de aplicacioacuten de las herramientas tenemos los siguientes paquetes
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
37
general que contiene funciones de tipo general y transversal al resto de herramientas
Moacutedulos implementados dentro de general
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
38
topografia que contiene aplicacioacuten topograacuteficas
Moacutedulos implementados dentro de topografia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
39
geodesia Aplicaciones geodeacutesicas
Moacutedulos implementados dentro de geodesia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
40
proy_cartograficas Herramientas de caacutelculos en diferentes proyeccionesetc
Moacutedulos implementados dentro de proy_cartograficas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
41
transformacioacuten Aplicaciones con modelo de rejilla del IGN y EGM08REDNAP
Moacutedulos implementados dentro de transformacioacuten
aplicaciones Distintos ejemplos de aplicabilidad de las funciones y clases implementadas en los moacutedulos de la libreriacutea
Cada uno de estos paquetes (carpetas) como se ha podido ver contiene a su vez varios moacutedulos y en cada uno de ellos y con su mismo nombre se define una uacutenica funcioacuten por moacutedulo salvo en la carpeta de transformcioacuten donde como se ha comentado antes nos adentramos dentro de la programacioacuten orientada a objetos y en algunos moacutedulos se implementan clases y dentro de estas funciones etc De esta manera al importar una funcioacuten la tenemos que importar desde el modulo que la contenga Dentro de cada carpeta se aprecia la existencia de un fichero llamado __init__py que convierte dicha carpeta en un paquete de Python Se advierte que desde el cierre de esta memoria versioacuten en papel a la entrega total de documentacioacuten puede haberse ampliado el nuacutemero de moacutedulos de la libreriacutea ldquogeotoprdquo que siacute se incluiriacutea en el CD con la implementacioacuten de coacutedigos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
42
42 DOCUMENTADO DE FUNCIONES Se puede documentar una funcioacuten en Python proporcionando una cadena de documentacioacuten (comentarios)
Las comillas triples implican una cadena multiliacutenea Todo lo que haya entre el principio y el final de las comillas es parte de una sola cadena incluyendo los retornos de carro y otras comillas Pueden usarse para definir cualquier cadena pero donde suelen estar maacutes presentes es haciendo de cadena de documentacioacuten Todo lo que hay entre las comillas triples es la cadena de documentacioacuten de la funcioacuten y se usa para explicar lo que hace la funcioacuten En caso de que exista una cadena de documentacioacuten debe ser la primera cosa definida en una funcioacuten (esto es lo primero tras los dos puntos) Teacutecnicamente no es necesario dotar a una funcioacuten de una cadena de documentacioacuten pero debemos de hacerlo siempre En Python esto tiene un incentivo antildeadido la cadena de documentacioacuten estaacute disponible en tiempo de ejecucioacuten como atributo de la funcioacuten
Lecturas complementarias sobre las funciones de documentacioacuten
PEP 257 define las convenciones al respecto de las cadenas de documentacioacuten La Guiacutea de estilo de Python indica la manera de escribir una buena cadena de
documentacioacuten El Tutorial de Python expone convenciones para el espaciado dentro de las
cadenas de documentacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
43
Ejemplo de documentado de funciones con cadena de documentacioacuten
Toda la informacioacuten incluida dentro de una cadena de documentacioacuten de triple comillas estaacute accesible en tiempo de ejecucioacuten Asiacute si pedimos ayuda de una funcioacuten nos aparece toda la informacioacuten incluida en dicha cadena de documentacioacuten
Ejemplo de consulta de la ayuda de las funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
44
En la siguiente web podemos encontrar maacutes informacioacuten sobre el documentado de funciones en Python httpcoderwarcom201106hola-python-la-utilidad-de-los-comentarios Ademaacutes de los comentarios de las funciones en Python como en otros lenguajes de programacioacuten podemos incluir liacuteneas o simples palabras de comentarios En Python se usa el siacutembolo para preceder los comentarios Podemos comentar las liacuteneas de nuestro trabajo
Comentar un grupo de liacuteneas
Determinar el tipo de codificacioacuten Esto es importante para poder usar caracteres especiales como la tilde o la ntilde Generalmente se coloca en la primera liacutenea del programa Existen muchas codificaciones
Poner cabecera a nuestro programa De esta forma identificaremos el nombre del programador la fecha en que se realizoacute y demaacutes datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
45
En el caso que nos atantildee de la libreriacutea geotopo hemos considerado introducir unos comentarios descriptivos de los moacutedulos mediante el caraacutecter y tras la definicioacuten de las funciones se incluyen unas cadenas de documentacioacuten
Ejemplo de la documentacioacuten de moacutedulos y funcioneshellip
Para evitar problemas de codificacioacuten como ha ocurrido durante la implementacioacuten del coacutedigo se han incluido al inicio del mismo dos liacuteneas para solucionar el problema Estas liacuteneas son
Comentarios de los moacutedulos
Cadena de documentacioacuten de funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
46
-- coding iso 8859-1 -
ISO 8859-1 es una norma de la ISO que define la codificacioacuten del alfabeto latino incluyendo diacriacuteticos como letras aceacutentuadas ntilde) y letras especiales necesarios para la escritura de las siguientes lenguas originarias de Europa occidental alemaacuten aragoneacutes asturiano castellano catalaacuten daneacutes escoceacutes espantildeol feroeacutes fineacutes franceacutes gaeacutelico gallego ingleacutes islandeacutes italiano neerlandeacutes noruego portugueacutes sueco y Euskera Tambieacuten conocida como Alfabeto Latino nordm 1 o ISO Latiacuten 1 Esta norma pertenece al grupo de juegos de caracteres de la ISO conocidos como ISOIEC 8859 que se caracterizan por poseer la codificacioacuten ASCII en su rango inicial (128 caracteres) y otros 128 caracteres para cada codificacioacuten con lo que en total utilizan 8 bits -- coding cp1252 -
Si trabajamos con IDLE con el uso de los acentos (en general con los caracteres no ASCII) nos daraacute error Si en el coacutedigo de un programa escribimos una cadena que contenga caracteres no ASCII(acentos ntildeiquestiexcl) al guardar el archivo por primera vez IDLE nos muestra el siguiente mensaje de aviso
Si pulsamos el botoacuten ldquoEdit my filerdquo Al principio del programa se insertaraacute la liacutenea siguiente
-- coding cp1252 --
Que indica el juego de caracteres utilizado en el archivo (cp1252 es el juego de caracteres de Windows para Europa occidental) A partir de entonces podemos guardar el archivo sin problemas Python no tiene una primera o uacuteltima linea exigida pero siacute que es habitual dar la localizacioacuten de Python como primera liacutenea en forma de comentario usrbinpython
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
47
43 FUNCIONES IMPLEMENTADAS A continuacioacuten se incluye una relacioacuten de las funciones implementadas por paquetes Ademaacutes de su nombre y un pequentildeo resumen de su aplicacioacuten se han incluido 3 apartados maacutes En verde Datos de entrada Indica los datos que necesita la funcioacuten Datos de salida Nos muestra si el resultado es uacutenico o una coleccioacuten de resultados (siempre en forma vector en el orden indicado) En rojo Llamadas o ldquoimportacioacutenrdquo de moacutedulos predefinidos del sistema ossys Llamadas a funciones de predefinidas del moacutedulo numpy En morado Llamadas a funciones definidas en esta libreriacutea (geotopo) bien incluidas en el mismo subpaquete que la propia funcioacuten definida o incluida en otro subpaquete De esta manera podemos tener una idea de las funciones implementadas los datos de partida necesarios y los resultados a obtener asiacute como la interrelacioacuten de cada funcioacuten con el resto de funciones de la libreriacutea geotopo Para el caso de cambio de proyeccioacuten o de Sistema de Referencia Coordenado se ha tomado la nomenclatura ldquodesderdquo ldquoardquo ldquoahorardquo Para sentildealar el ldquoardquo se ha elegido el nuacutemero 2 por su pronunciacioacuten to (a) Asiacute por ejemplo para el paso de latitud geodeacutesica a creciente en nombre de la funcioacuten seraacute lat2cre
431 Libreriacutea en Python ldquogeotopogeneralrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 areacor - Caacutelculo de la superficie interior de un poligono sobre el plano
entrada=(matriz) 2columnas xy salida=superficie
import ossys from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
48
busca2col - Localiza la primera fila con los valores recibidos en las dos columnas indicadas
Recibe Valor en la primera y segunda columnas posiciones de las columnas y matriz de busqueda
Devuelve Primera fila que cumple comenzando en 0 entrada=(valorcol1poscol1valorcol2poscol2matriz)
salida=orden de la primera fila que cumple comenzando en 0(oacute -1 si no existe) import ossys
from numpy import shape
busca - Localiza la primera ocurrencia de un nuacutemero en la primera columna de una matriz
entrada=(valormatriz)
salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscacol - Localiza la primera ocurrencia de un nuacutemero en la fila indicada de una matriz
entrada=(valormatriznfil) salida=posicioacuten nuacutemero de columna comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscafil - Localiza la primera ocurrencia de un nuacutemero en la columna indicada de una matriz
entrada=(valormatrizncol) salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
ordena - Ordena las filas de una matriz de menor a mayor seguacuten el contenido de la columna indicada
entrada=(colummatriz) salida=matriz de entrada ordenada
import ossys
from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
49
p_entera - Da la parte entera de un nuacutemero entrada=(nuacutemero) salida=parte entera del nuacutemero
import ossys from numpy import floor
perimetro - Calculo del perimetro de un poliacutegono sobre el plano a partir de las coord de sus veacutertices
entrada=(matriz ) 2columnas xy salida=periacutemetro
import ossys
from numpy import sqrtshape
psdo2rad - Cambio de formato de aacutengulos Pasa del conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex ) a radianes
entrada=(pseudesexa)
salida=radianes
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
rad2psdo - Cambio de formato de aacutengulos Pasa un angulo de radianes al conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex )
entrada=( radianes) salida= pseudesexa
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
50
432 Libreriacutea en Python ldquogeotopotopografiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 acimut - Caacutelculo del acimut entre dos puntos
entrada=(xiyixjyj)
salida=acimut en radianes
import ossys from numpy import arctan2pi
distancia ndash Caacutelculo de la distancia entre dos puntos del mismo
entrada=(xiyixjyj) salida=distancia (misma unidad que coordenadas de entrada
import ossys
from numpy import sqrt
edgcla ndash Caacutelculo del error de una distancia geomeacutetrica utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dgInstrnialtnl)
Dg=distancia geometrica Instr=Matriz de instrumentos
Ni=Altura de instrumento Altp=Altura de prisma
Nl=Nuacutemero de veces de medida de distancia
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edgclaprn ndash Calculo del error de una distancia geometrica utilizando la formulacion claacutesica de teoriacutea de errores Impresioacuten de resultados
entrada=(dgInstrnialtnlfsalida)
dg=distancia geometrica instr=Matriz de instrumentos
ni=Altura de instrumento altp=Altura de prisma
nl=Nuacutemero de veces de medida de distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
51
fsalida=Fichero de salidade datos
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edireh ndash Caacutelculo del error de la lectura horizontal realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(Instrnidisaltpnl)
salida=error de lectura horizontal en radianes
import ossys from numpy import sqrtpi
edirev ndash Caacutelculo del error de la lectura vertical realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(instrni nl) salida=error de lectura cenital en radianes en radianes
import ossys from numpy import sqrtpi
eincz ndash Caacutelculo del error de un desnivel trigonomeacutetrico utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dglvapedgelvInstrni) salida=xpypeplanisolzesolz
import ossys
from numpy import pisqrtcostan
intinv2 ndash Caacutelculo de la interseccioacuten inversa simple en el plano
entrada=(datosinstru)
salida= xpypangmin import ossys
from numpy import sincostanarctan2pizeros
from geotopogeneralordena import ordena
intinv2e ndash Caacutelculo de la interseccioacuten inversa simple en el plano Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru) salida= xpypeplani
import ossys from numpy import shapepisincostanarctan2dottransposezerossqrt
from geotopotopografiaedireh import edireh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
52
intinv3e ndash Caacutelculo de la interseccioacuten inversa 3D simple Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru)
salida= xpypeplanivzpvezp
import ossys from numpy import zerosshapesincos
from geotopotopografiaintinv2e import intinv2e from geotopotopografiadistancia import distancia
from geotopotopografiaedirev import edirev
from geotopotopografiaedgcla import edgcla from geotopotopografiaeincz import eincz
433 Libreriacutea en Python ldquogeotopogeodesiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 aut2lat - paso de latitud autaacutelica a geodeacutesica
entrada=(autnelipsoide) salida=lat
import ossys from numpy import sinarcsin
from geotopogeneralpsdo2rad import psdo2rad from geotopogeneralpsdo2rad import psdo2rad
calcpolo - caacutelculo del polo de la esfera a partir de tres puntos no alineados de la misma de forma que pasen a estar en un mismo paralelo tras realizarse el cambio de polo
entrada(lat1lon1lat2lon2lat3lon3) salida=[latnplonnpcolat]
import ossys from numpy import pisincosarccosarctanarctan2zeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
53
cla2enu - paso de un vector geodeacutesico expresado en componentes polares (observables claacutesicos) a componentes ENU entrada(azvdg)
salida=[ieiniu]
import ossys from numpy import sincoszeros
clhapv - lectura horizontal corregida por altitud del punto visado entrada=(lhzazlat1lat2h2nelipsoide) salida=lhz12c
import ossys
from numpy import sincospi from elipsoide import elipsoide
from radioem import radioem
clhsnlg - lectura horizontal corregida por paso de la seccioacuten normal a la liacutenea geodeacutesica entrada=(lhzs12az12lat1lat2nelipsoide)
salida=lhz12c import ossys
from numpy import sincospi
from elipsoide import elipsoide from radioem import radioem
cre2lat - paso de latitud creciente a geodeacutesica entrada=(crenelipsoide) salida=lat
import ossys
from numpy import sincostanarctanexppi from geotopogeneralpsdo2rad import psdo2rad
from elipsoide import elipsoide
efleutm - paso de la elipse de error de un punto del plano tangente al elipsoide al plano de la proyeccioacuten UTM
entrada=(latlonsemiaesemibeaziaenelipsoidehuso) salida=[semiasimibazia] import ossys from numpy import zerospi from geotopoproy_cartograficaskputm import kputm from geotopoproy_cartograficaskputmh import kputmh from geotopoproy_cartograficasconvutm import convutm from geotopoproy_cartograficasconvutmh import convutmh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
54
elip2esf - determinacioacuten de la esfera tangente al elipsoide en un paralelo indicado entrada=(nelipsoidelat)
salida=[afbe1e2]esfera
import ossys from numpy import zeros
from elipsoide import elipsoide from radiopv import radiopv
elipsoide - calculo los 5 paraacutemetros (afbe1 y 22) de los elipsoides ED50 GRS80 y WGS84 en funcioacuten de un coacutedigo 123 respectivamente entrada=(nelipsoide) 1 2 oacute 3 seguacuten ED50GRS80 oacute WGS84 respectivamente salida=[afbe1e2]
import ossys from numpy import sqrt zeros
enu2cla - paso de un vector geodeacutesico expresado en componentes ENU a componentes polares (observables claacutesicos) entrada=ieiniu salida=[azdgv]
import ossys
from numpy import zerosarcsenarctan2pisqrt
enu2xyz - paso de un vector geodeacutesico expresado en componentes ENU a componentes cartesianas tridimensionales entrada=(latlonieiniu)
salida=[ixiyiz] import ossys
from numpy import sincoszeros
eta_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del primer vertical entrada=(latlon)
salida= eta_ed50
import ossys from numpy import pisqrtcossintan
from elipsoide import elipsoide from radiopv import radiopv
from radioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
55
geo2tri - paso de coordenadas geodeacutesicas a cartesianas tridimensionales para un punto y elipsoide determinados entrada=(latlonhnelipsoide
salida=[XYZ]
import ossys from numpy import cossinzeros
from elipsoide import elipsoide from radiopv import radiopv
lam2lat - caacutelculo de la latitud geodeacutesica que le corresponde a una determinada longitud de arco de meridiano en el elipsoide indicado entrada=(lamnelipsoide salida=lat
import ossys from numpy import cossin
from elipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
lam - caacutelculo de la longitud de arco de meridiano a partir de la latitud geodeacutesica y del elipsoide entrada=(lamnelipsoide
salida=lam import ossys
from numpy import sin cos from elipsoide import elipsoide
lat2aut - paso de latitud geodeacutesica a autaacutelica entrada=(latnelipsoide)
salida=aut import ossys
from numpy import sinlog from elipsoide import elipsoide
lat2cre - paso de latitud geodeacutesica a creciente entrada=(latnelipsoide)
salide=cre import ossys
from numpy import sintanpilog
ond_ed50 - caacutelculo de la ondulacioacuten del geoide de un punto en Ed50 entrada =(latlon) salida=ondulacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
56
import ossys
from numpy import pisqrtcossintan
pdesfcr - problema directo en la esfera con el meacutetodo de cambio de base entrada=(lat1lon1saziresfera) salida=[latlon]
import ossys from numpy import cossintanarcsinarcosarctan2pizerostransposedot
pdg_dif1 - problema directo de la geodesia con la primera derivada entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2azi21] import ossys
from numpy import zerossincostanpi from radiopv import radiopv
from radioem import radioem
pdg_dif2 - problema directo de la geodesia con la primera y segunda derivada entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdg_dif3 - problema directo de la geodesia con la primera segunda y tercera derivada
entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdgrk4o - problema directo de la geodesia seguacuten meacutetodo de integracioacuten numeacuterica de Runge-Kutta de cuarto orden entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2
import ossys from numpy import zerossincostanpisqrt
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
57
from radioem import radioem
piesfcr - problema inverso en la esfera con el meacutetodo de cambio de base entrada=( lat1lon1lat2lon2resfera)
salida=[s12a12] import ossys
from numpy import cossintanarcsenarccosarctan2dotzerospi
pigbsl - problema inverso de la geodesia seguacuten el meacutetodo de Bessel entrada=( lat1lon1lat2lon2nelipsoide)
salida=[ s12a12a21]
import ossys from numpy import zerossincostanarcsinarctanarctan2arccossqrtpi
pigbslm - problema inverso de la geodesia seguacuten el meacutetodo de Bessel modificado por D David Henaacutendez Loacutepez
entrada=( lat1lon1lat2lon2nelipsoide) salida=[ s12a12a21]
import ossys from numpy import cossintanarcsinarcosarctanarctan2zerossqrtpi
from elipsoide import elipsoide
from radiopv import radiopv from piesfcr import piesfcr
from pdesfcr import pdesfcr
piloxo - problema inverso para la curva loxodroacutemica entrada=(lat1lon1lat2lon2nelipsoide)
salida=[dla12]
import ossys from numpy import arctan2coszerospi
from elipsoide import elipsoide from lat2cre import lat2cre
from radiopv import radiopv
from lam import lam
psi_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del meridiano entrada=(latlon) salida=psi_ed50
import ossys
from numpy import pisqrtcossintan from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
58
radioem - radio de curvatura de la elipse meridiana en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radioem
import ossys from numpy import sin
from elipsoide import elipsoide
radioeul - radio de la seccioacuten normal de un determinado acimut a partir del teorema de Euler entrada=(lataznelipsoide)
salida=radieul import ossys
from numpy import sincos from radioem import radioem
from radiopv import radiopv
radiopv - radio de curvatura del primer vertical en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radiopv
import ossys from numpy impor sqrtsin
from elipsoide import elipsoide
rdcae - reduccioacuten de la distancia de la cuerda al arco elipsoide entrada=( dcazlat1nelipsoide) salida=recae
impor ossys from numpy import sincosarcsen
from radioem import radioem from radiopv import radiopv
rdtce - reduccioacuten de la distancia del terreno a la cuerda elipsoide entrada=(dgazlat1h1h2nelipsoide)
salida=rdtce import ossys
from numpy import sincossqrt from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
59
tri2geo - paso de coordenadas cartesianas tridimensionales a geodeacutesicas en un punto y elipsoide determinados entrada=(XYZnelipsoide)
salida=[latlonh]
import ossys from numpy import cossintanarctanarctan2sqrtzeros
from elipsoide import elipsoide from radiopv import radiopv
xyz2clae - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a observables claacutesicos sobre el elipsoide y desnivel elipsoidal entrada=( X1Y1Z1DXDYDZnelipsoide) salida=[s12az12h12]
import ossys from numpy import zeros
from tri2geo import tri2geo
from pigbslm import pigbslm
xyz2clat - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes polares en el terreno entrada=( lat1lon1ixiyiz)
salida=[ dgaz12lv] import ossys
from numpy import zeros from xyz2enu import xyz2enu
from enu2cla import enu2cla
xyz2enu - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes ENU entrada=(latlonIXIYIZ)
salida=[ieiniu]
import ossys from numpy import sincoszeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
60
434 Libreriacutea en Python ldquogeotopoproy_cartograficasrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 calhuso - caacutelculo del huso correspondiente a un punto en la proyeccioacuten UTM a partir de su longitud geodeacutesica entrada=(lon)
salida=huso
import ossys from numpy import
cdel2geo - paso de un punto de la proyeccioacuten ciliacutendrica directa equivalente de Lambert al elipsoide
entrada=(XYLon0TXTYnelipsoide) salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaaut2lat import aut2lat
convestp - caacutelculo de la convergencia de meridianos de un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lonlon0)
salida=convest import ossys
convgk - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0nelipsoide)
salida=convgk
import ossys from numpy import sincostan
from geotopogeodesiaelipsoide import elipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
61
convlamb - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(lonlat0lon0)
salida=convlamb
import ossys from numpy import sin
convutm - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=convutm import ossys
from numpy import tancossinpi
from cahuso import calhuso from geotopogeodesiaelipsoide import elipsoide
convutmh - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso indicado entrada=(latlonnelipsoide)
salida=convutmh
import ossys from numpy import tancossinpi
from geotopogeodesiaelipsoide import elipsoide
dcdgputm - paso de la distancia cuerda en la proyeccioacuten UTM entre dos puntos a la correspondiente a la proyeccioacuten UTM de la liacutenea geoacutedesica que los une en el elipsoide entrada=(lat1lon1lat2lon2nelipsoide
salida=correccioacuten en metros import ossys
from numpy import cos from utm2geo import utm2geo
from geo2utmh import geo2utmh
from calhuso import calhuso from getopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
62
dcesfera - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general conforme en una esfera entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida=dc (reduccioacuten angular de la cuerda en radianes import ossys
from numpy import sincos from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
dcestp - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en la esfera al pasar a la proyeccioacuten estereograacutefica polar entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=dc(reduccioacuten angular de la cuerda en radianes)
import ossys from numpy import cossin
from kplamb import kplamb
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
from geotopogeodesiaradiopv import radiopv
dcgk - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general de Gauss-Kruumlger entrada=(lat1lon1lat2lon2lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos from geo2gk import geo2gk
from gk2geo import gk2geo
from geotopogeodesiaradioem import radioem from geotopogeodesiaradiopv import radiopv
from getopogeodesiaelipsoide import elipsoide
dclamb - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert entrada=(lat1lon1lat2lon2lat0pelipsoide
salida= dc(reduccioacuten angular de la cuerda en radianes)
import ossys
from numpy import sintancosexpzeros from geo2lamb import geo2lamb
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
63
from kdlamb import kdlamb
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
from geotopogeodesiaradiopv import radiopv
dclambf - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert con maacutes precisioacuten que la funcioacuten anterior entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos sin
from kplamb import kplamb from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o from geotopogeodesiaradiopv import radiopv
dcutm - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=( lat1lon1lat2lon2nelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaradioem import radioem
dcutmh - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso indicado entrada=( lat1lon1lat2lon2husonelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh
from utm2geo import utm2geo from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
64
dgpdcutm - paso de la distancia geodeacutesica proyectada en el plano UTM a la distancia correspondiente a la cuerda en esta proyeccioacuten para una geodeacutesica del elipsoide entrada=( lat1lon1lat2lon2snelipsoide)
salida=correccioacuten import ossys
from numpy import cos from geo2utmh import geo2utmh
from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut
esf2esfg - paso de un punto de una esfera a la esfera con cambio de polo Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo
entrada=(latlonlatplonp)
salida=[latlong]
import ossys from numpy import cossintanarcsenarctandotzerospi
from geotopogeodesiapiesfcr import piesfcr
esf2estp - paso de un punto de la esfera a las planas de la proyeccioacuten estereograacutefica polar entrada=(latlonlon0radiotxty)
salida=[xy] estp import ossys
from numpy import zerossincos
esfg2esf - paso de un punto de la esfera con cambio de polo a la esfera original Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo entrada=(latnlonnlatplonp
salida=[lat0lon0giro import ossys
from numpy import cossintanarcsenarctan2dotzerospitranspose from geotopogeodesiapiesfcr import piesfcr
esfc2lat - paso de latitud sobre la esfera a la correspondiente sobre el elipsoide seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
65
salida=lat
import ossys from numpy import sintanarctanpi
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiaelipsoide import elipsoide
estp2esf - paso de un punto de la proyeccioacuten estereograacutefica polar a la esfera entrada=(xylon0radiotxty)
salida=[xy] import ossys
from numpy import zerosarctan2arctansinpi
geo2cdel - paso de un punto del elipsoide a la proyeccioacuten ciliacutendrica directa equivalente de Lambert entrada=( latlonlon0txtynelipsoide)
salida=[XY] import ossys
from numpy import zeros
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialat2aut import lat2aut
geo2esto - paso de una nube de puntos del elipsoide a la proyeccioacuten estereograacutefica oblicua oacuteptima entrada=(latlonlat0lon0txtynelipsoide)
salida=[XY]
import ossys from numpy import
from lat2esc import lat2esc
from esf2esfg import esf2esfg from esf2estp import esf2estp
from geotopogeodesiaradiopv import radiopv
geo2gk - paso de un punto del elipsoide a la proyeccioacuten general de Gauss-Kruumlger entrada=( latlonlon0ptxtynelipsoide)
salida= [xy]gk import ossys
from numpy import costanpizeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesialam import lam
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
66
geo2lamb - paso de un punto del elipsoide a la proyeccioacuten general coacutenica conforme de Lambert entrada=( latlonlat0lon0ptxtynelipsoide)
salida=[xy]lambert
import ossys from numpy import sintancosexpzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
geo2merc - paso de un punto del elipsoide a la proyeccioacuten de Mercator entrada=( latlonlon0txtynelipsoide)
salida= [xy]mercator import ossys
from numpy import zeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialat2cre import lat2cre
geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
import ossys from numpy import zerostancospi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
geo2utmh - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=[XY] UTM
import ossys
from numpy import zerostancospi from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
gk2geo - paso de un punto de la proyeccioacuten general de Gauss-Kruumlger al elipsoide entrada=(XYlon0ptxtynelipsoide)
salida=[latlon]
import ossys
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
67
from numpy import zerostancospi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
kdesfera - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general conforme sobre una esfera Utiliza la integracioacuten numeacuterica de Simpson entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida= kdesfera import ossys
from kpesfera import kpesfera from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o
kdestp - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica de la esfera al proyectarla en la proyeccioacuten estereograacutefica polar Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0radiotxty)
salida=kdestp import ossys
from kpestp import kpestp from esf2estp import esf2estp
from estp2esf import estp2esf
kdgk - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general de Gauss-Kruumlger Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0pnelipsoide)
salida=kdgk import ossys
from geo2gk import geo2gk from gk2geo import gk2geo
from kpgk import kpgk
kdlamb - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica el elipsoide al proyectarla en la proyeccioacuten general coacutenica conforme de Lambert Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=kdlamb import ossys
from geolamb import geolamb from lamb2geo import lamb2geo
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
68
kdutm - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso del primer punto Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2nelipsoide)
salida=kdutm import ossys
from calhuso import calhuso from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kdutmh - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso indicado Utiliza la integracioacuten numeacuterica de Simpson
entrada= lat1lon1lat2lon2husohelipsoide) salida=kdutmh
import ossys from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kpesfera - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general conforme sobre una esfera entrada=( latlat0nelipsoide)
salida=kpesfera import ossys
from numpy import cossintanexp from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaelipsoide import elipsoide
kpestp - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lat)
salida=kpestp import ossys
from numpy import sin
kpgk - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0pnelipsoide)
salida=kpgk
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
69
import ossys
from numpy import sincostan from clahuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
kplamb - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(latlat0pnelipsoide)
salida=kplamb
import ossys from numpy import cossintanexp
from geotopogeodesialat2cre import lat2cre from geotopogeodesiaradiopv import radiopv
kputm - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=kputm
import ossys from numpy import tancossinpi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
kputmh - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=kputmh
import ossys
from numpy import sincostanpi from geotopogeodesiaelipsoide import elipsoide
lamb2geo - paso de un punto de la proyeccioacuten general coacutenica conforme de Lambert al elipsoide entrada=( xylat0lon0ptxtynelipsoide)
salida=[latlon] import ossys
from numpy import sintanarctanpilogsqrtzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
from geotopogeodesiacre2lat import cre2lat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
70
lat2esc - paso de la latitud geodeacutesica sobre el elipsoide a la correspondiente sobre la esfera seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide)
salida=latesfc
import ossys from numpy import sintanarctanpi
from geotopogeodesiaelipsoide import elipsoide
merc2geo - paso de un punto de la proyeccioacuten de Mercator al elipsoide entrada= (xylon0txtynelipsoide)
salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesiacre2lat import cre2lat
utm2geo - paso de un punto de la proyeccioacuten UTM al elipsoide entrada=(XYhusonelipsoide)
salida=[latlon] import ossys
from numpy import sqrtpitancossinzeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
435 Libreriacutea en Python ldquogeotopotransformacionrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 egm08rednap ndash fichero que almacena la clase Egm08rednap para el manejo de geoides en formato egm08rednap Define la funcioacuten getOndulation(selflatitudlongitud) Llama al fichero geoide que a su vez llama a los ficheros EGM08_REDNAP
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
71
entrada=(latitudlongitud)
salida=ondulacioacuten import ossys
from numpy import fromfile reshape from geoide import Geoide
geoide ndash fichero que almacena la clase Geoide para el manejo de geoides en formato egm08rednap La clase Geoide almacena ldquollamardquo a los geoides EGM08_REDNAP de la Peniacutensula o Baleares seguacuten corresponda Define las funciones getNoOndulacioacuten y getOndulacioacuten en funcioacuten de que encuentre las coordenadas de entrada dentro de los ficheros
entrada=(latitudlongitud) salida=ondulacioacuten
import ossys from numpy import fromfile reshapepifloorndarray
ntv2 ndash fichero que almacena la funcioacuten ntv2Espana Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(longitudlatitud) en deg en ED50 salida=(longitud latitud) en deg en ETRS89
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
ntv2_2 ndash fichero que almacena la funcioacuten ntv2Espana Adaptacioacuten del fichero anterior Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz) En la adatacioacuten realizada obtenemos soacutelo los diferenciales de caacutelculo de paso de ED50 a ETRS89 para tomarlo en el caacutelculo de la aproximacioacuten del sentido inverso entre ETRS89 a ED50 El paso de nodos del fichero utilizado es cada 200‟ lo que equivaldriacutea a 6000 m aproximadamente por lo que la aproximacioacuten seriacutea vaacutelida
entrada=(longitudlatitud) en deg en ETRS89 salida=(diflongitud diflatitud) en deg en ED50
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
72
sped2etpy ndash fichero rejilla del IGN Para transformacioacuten de coordenadas en los Sistemas de Referencia ED50 a ETRS89 Adaptado a Python y descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(fichero contenedor de informacioacuten) No entramos con ninguacuten valor
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
73
5 APLICABILIDAD DE LA LIBRERIacuteA Y CONCLUSIONES FINALES Finalmente hemos implementado los 5 subpaquetes de moacutedulos con funciones y clases incluidos en el paquete (libreriacutea) geotopo destinados a caacutelculos topograacuteficos y geodeacutesicos
Estructura final de la libreriacutea geotopo
Como puede verse en el paquete de geotopo se ha incluido un moacutedulo de aplicaciones en las que se han implementado unos ejercicios praacutecticos aplicando las distintas funciones de la libreriacutea Antes de entrar a describir los casos praacutecticos implementados hemos de decir que directamente podemos obtener resultados de cada una de las funiones Asiacute si queremos pasar de coordenadas geograacuteficas a coordenadas utm mirando en la descripcioacuten de las funciones tenemos geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
74
import ossys
from numpy import zerostancospi from calhuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
Pues bien una vez seleccionada la funcioacuten a utilizar abrimos el moacutedulo correspondiente con IDLE
Coacutedigo de la funcioacuten abierto con IDLE
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
75
Imagen de la ejecucioacuten de Run Module
Ejecutando Run Module Python abre el Python Shell En esta pantalla tenemos que introducir el nombre de la funcioacuten a usar geo2utm y entre pareacutentesis los valores que se especifican de entrada en la descripcioacuten de la funcioacuten entrada=(latlonnelipsoide)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
76
Llamada a la ejecucioacuten de la funcioacuten desde Python Shell
Como hemos indicado antes y por su relevancia y empleabilidad en otras funciones con ldquonelipsoiderdquo se entiende un coacutedigo del 1 al 3 que representa cada uno un elipsoides de referencia seguacuten los Sistemas de Referencia Coordenados en este caso 1=ED50 elipsoide Internacional Hayford 1924 2=ETRS89 elipsoide GRS80 y 3=WGS84
Al introducir los datos ejecutamos con Intro Obtenemos 2 valores en forma de vector que respresentan seguacuten la descripcioacuten de la funcioacuten salida=[XY] UTM
Podemos volver a caacutelcular las coordenadas UTM en el SCR ETRS89 (en caso de que lalitud y longitud vinieran dadas en el mismohellip) simplemente copiando la liacutenea de entrada pegaacutendola abajo y cambiando 1 por 2 como iacutendice del elipsoide y volviendo a ejecutar con enter
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
77
Dentro de Python Shell se puede copiar coacutedigo de liacuteneas anteriores y
pegar abajo Para caacutelculos maacutes complejos de mayor nuacutemero de puntos etc a modo de praacutectica se ha implementado el coacutedigo de distintos tipos de caacutelculo de ejemplo Distribuidos en 2 tipologiacuteas diferentes ldquotopografiardquo y ldquogeodesiardquo se han incluido coacutedigos para la resolucioacuten e impresioacuten de distintos tipos de problemas realizando ldquoimportrdquo de funciones declaradas en los moacutedulos de los distintos subpaquetes de geotopo
51 CASOS PRAacuteCTICOS TOPOGRAFIacuteA En total se han realizada 4 casos praacutecticos dentro del apartado de topografiacutea Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica topo_practica1 Del resto soacutelo se ha incluido la salida de datos
511 Implementacioacuten del coacutedigo topo_praacutectica1
usrbinpython
-- coding iso-8859-1 --
-- coding cp1252 --
Praacutectica 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
Datos Coordenadas del punto de estacioacuten
Sistema de referencia local
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmesn)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
78
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
En esta versioacuten de la praacutectica utilizando la libreriacutea geotopo en el caacutelculo de azimutes
periacutemetro y superficie
import ossys
from numpy import matrixarrayshapepizerosconcatenatemeansincossqrt
from geotopotopografiaacimut import acimut
from geotopogeneralperimetro import perimetro
from geotopogeneralareacor import areacor
Radio medio terrestre en metros
rt=63700000
Informacioacuten del punto de estacioacuten El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto de estacioacuten
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Altitud del punto en metros
- Quinta columna- Altura de instrumento en metros
pe=array([[100030242663090376657208150]])
Informacioacuten de las referencias
- Cada fila es un punto de referencia
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Lectura azimutal en grados centesimales
ref=array([[200127863973359492354821][2002322174932757501335646][20033289406282
69902313540][2004261222126827453319067]])
Informacioacuten de los puntos radiados
- Cada fila es una observacioacuten claacutesica a un punto radiado
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Lectura azimutal en grados centesimales
- Tercera columna- Lectura cenital en grados centesimales
- Cuarta columna- Distancia geomeacutetrica en metros
- Quinta columna- Altura de instrumento en metros
rad=array([[30013387131001173422431180][300211877101000083399617200][3003240
5756999039440097150][300433037831000468414996150]])
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos de referencia
Caacutelculo de las dimensiones de la matriz de puntos de referencia
- mref seraacute el nuacutemero de filas el nuacutemero de puntos
- nref seraacute el nuacutemero de columnas 4
[mrefnref]=refshape
Se extrae la informacioacuten del punto de estacioacuten
num_pe=pe[00]
x_pe=pe[01]
y_pe=pe[02]
z_pe=pe[03]
alti_pe=pe[04]
Caacutelculo de azitutes del punto de estacioacuten a cada uno de los puntos radiados
La funcioacuten azimut de la libreriacutea Geotop devuelve el valor en radianes
acimutes=zeros((mref1))
for i in range (1mref+1)
Se leen la identificacioacuten y las coordenadas del punto radiado y se almacenan en variables
temporales
num_pref=ref[i-10]
x_pref=ref[i-11]
y_pref=ref[i-12]
azi_pe_pref=acimut(x_pey_pex_prefy_pref)
acimutes[i-10]=azi_pe_pref2000pi
ref=concatenate((refacimutes)axis=1)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
79
Caacutelculo de la desorientacioacuten de cada direccioacutenccedil
desor=zeros((mref1))
for i in range(1mref+1)
Se leen los valores angulares y se transforman a radianes almacenaacutendose en variables
temporales
lhz_pe_pref=ref[i-13]pi2000
azi_pe_pref=ref[i-14]pi2000
des_pe_pref=azi_pe_pref-lhz_pe_pref
if des_pe_preflt0
des_pe_pref=des_pe_pref+20pi
desor[i-10]=des_pe_pref200pi
ref=concatenate((refdesor)axis=1)
Caacutelculo de la desorientacioacuten media con la funcioacuten de python
des_mean=mean(ref[5])pi200
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos radiados
[mradnrad]=radshape
Caacutelculo de coordenadas polares que se almacenan en la matriz coor_polares
- Primera columna- Nuacutemero entero identificador del punto radiado
- Segunda columna- Azimut en grados centesimales
- Tercera columna- Distancia reducida en metros
Caacutelculo de coordenadas cartesianas que se almacenan en la matriz coor_cart
- Primera columna- Nuacutemero entero identificador del punto del punto radiado
- Segunda columna- Coordenada X
- Tercera columna- Coordenada Y
- Cuarta columna- Altitud
antes se almacenan las coordenadas polares en la matriz coord_polares (numero de
puntoacimutdistancia reducida)
coord_polares=zeros((mrad3))
coord_cart=zeros((mrad4))
for i in range(1mrad+1)
num_prad=rad[i-10]
lhz_pe_prad=rad[i-11]pi2000
lv_pe_prad=rad[i-12]pi2000
dg_pe_prad=rad[i-13]
altp_pe_prad=rad[i-14]
coord_polares[i-10]=num_prad
azi_pe_prad=lhz_pe_prad+des_mean
if azi_pe_pradgt(20pi)
azi_pe_prad=azi_pe_prad-20pi
coord_polares[i-11]=azi_pe_prad2000pi
dr_pe_prad=dg_pe_pradsin(lv_pe_prad)
coord_polares[i-12]=dr_pe_prad
coord_cart[i-10]=num_prad
coord_cart[i-11]= x_pe+dr_pe_pradsin(azi_pe_prad)
coord_cart[i-12]= y_pe+dr_pe_pradcos(azi_pe_prad)
coord_cart[i-13]= z_pe+alti_pe+dg_pe_pradcos(lv_pe_prad)-
altp_pe_prad+042dr_pe_prad2rt
Caacutelculo del periacutemetro de la parcela utilizando la funcioacuten periacutemetro de Geotopo
coord=zeros((mrad2))
for i in range (1mrad+1)
coord[i-10]=coord_cart[i-11]
coord[i-11]=coord_cart[i-12]
perim=perimetro(coord)
Caacutelculo de la superficie de la parcela utilizando la funcioacuten areacor de Geotopo
superficie=areacor(coord)
superficie_error=areacore(coord)
Impresioacuten de resultados
fsalida=open(topopractica1salw)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
80
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
fsalidawrite(TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(nPRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALESn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimaln)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia Localn)
Impresioacuten del paso 1 Paso de coordenadas cartesianas a polares Azimutes
fsalidawrite(n1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada
visualn)
fsalidawrite( Punto Inicial Punto Final Acimut Desorientacioacutenn)
for i in range(1mref+1)
num_pref=ref[i-10]
azi=ref[i-14]
des=ref[i-15]
fsalidawrite(100fnum_pe)
fsalidawrite(150fnum_pref)
fsalidawrite(184fazi)
fsalidawrite(184fndes)
Impresioacuten del paso 2 Caacutelculo de la desorientacioacuten media
fsalidawrite(n2 Caacutelculo de la desorientacioacuten median)
fsalidawrite( Desorientacioacuten media154fn(des_mean200pi))
Impresioacuten del paso 3 Caacutelculo de la coordenadas polares
fsalidawrite(n3 Caacutelculo de las coordenadas polaresn)
fsalidawrite( Punto Acimut Distancian)
for i in range (1mrad+1)
num_prad=coord_polares[i-10]
azi=coord_polares[i-11]
dist=coord_polares[i-12]
fsalidawrite(100fnum_prad)
fsalidawrite(184fazi)
fsalidawrite(184fndist)
Impresioacuten del paso 4 Caacutelculo de la coordenadas cartesianas
fsalidawrite(n4 Caacutelculo de las coordenadas cartesianasn)
fsalidawrite( Punto X Y Zn)
for i in range (1mrad+1)
num_prad=coord_cart[i-10]
x=coord_cart[i-11]
y=coord_cart[i-12]
z=coord_cart[i-13]
fsalidawrite(100fnum_prad)
fsalidawrite(154fx)
fsalidawrite(154fy)
fsalidawrite(154fnz)
Impresioacuten del paso 5 valor del periacutemetro
fsalidawrite(n5 Caacutelculo del periacutemetro de la parcelan)
fsalidawrite( Periacutemetro153f mnperim)
Impresioacuten del paso 6 valor de la superficie de la parcela
fsalidawrite(n6 Caacutelculo de la superficie de la parcelan)
fsalidawrite( Superficie153f m2nsuperficie)
fsalidaclose()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
81
512 Impresioacuten del fichero de salida de resultados topo_praacutectica1
Ejecuando el programa anterior obtenemos un fichero con los resultados y la presentacioacuten mejorada que hemos implementado SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada visual
Punto Inicial Punto Final Acimut Desorientacioacuten
1000 2001 3539187 3184366
1000 2002 520128 3184482
1000 2003 1497887 3184347
1000 2004 2503428 3184361
2 Caacutelculo de la desorientacioacuten media
Desorientacioacuten media 3184389
3 Caacutelculo de las coordenadas polares
Punto Acimut Distancia
3001 3523102 4224303
3002 372099 3996170
3003 1590145 4400965
3004 2488172 4149959
4 Caacutelculo de las coordenadas cartesianas
Punto X Y Z
3001 27365966 33997199 6561414
3002 32447650 34236535 6566664
3003 32884285 27383773 6578851
3004 27363219 27915286 6569143
5 Caacutelculo del periacutemetro de la parcela
Periacutemetro 2358248 m
6 Caacutelculo de la superficie de la parcela
Superficie 342540930 m2
513 Salida de resultados topo_praacutectica2
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN DIRECTA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3264596 m
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
82
Y= 4065437 m
Previsioacuten de error planimeacutetrico= 0035 m
Vector con soluciones en z y su error
Z=725931 m Previsioacuten de error altimeacutetrico 0023 m
Z=725926 m Previsioacuten de error altimeacutetrico 0024 m
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN INVERSA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3010146 m
Y= 3411841 m
Previsioacuten de error planimeacutetrico= 0022 m
Vector con soluciones en z y su error
Z=515695 m Previsioacuten de error altimeacutetrico 0021 m
Z=515703 m Previsioacuten de error altimeacutetrico 0024 m
Z=515698 m Previsioacuten de error altimeacutetrico 0022 m
514 Salida de resultados topo_praacutectica3
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 3 CALCULO DE DATOS DE REPLANTEO PARA ESTACION TOTAL EN UN SISTEMA DE REFERENCIA
LOCAL
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
ResultadosDatos de replanteo
Base Punto Azimut Distancia CotaProyecto CotaTerreno CotaRoja
1 1 3856489 75460 96930 96539 0391
1 2 2667262 77786 96903 98259 -1356
1 3 1219144 40883 95329 94688 0641
1 4 279600 67437 95045 95587 -0542
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
83
515 Salida de resultados topo_praacutectica4
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 4 TRANSFORMACIOacuteN ENTRE SISTEMAS DE REFERENCIA LOCALES HELMERT 2D
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
Planteamiento del sistema de ecuaciones que define la transformacioacuten planimeacutetrica
Matriz A
1000 0000 3258686 -2709414
0000 1000 2709414 3258686
1000 0000 2075590 -2105320
0000 1000 2105320 2075590
Vector teacuterminos independientes
4554780
228501
3244004
443737
1 Resultados de los paraacutemetros de la transformacioacuten
- Planimetriacutea
- Traslacioacuten en coordenada x del sistema S1 al sistema S2 324401 m
- Traslacioacuten en coordenada y del sistema S1 al sistema S2 -20424 m
- Valor para el paraacutemetro a (a=landacos_giro) 0805119725
adimensional
- Valor para el paraacutemetro b (b=landasin_giro) -0593023724
adimensional
- Valor para el factor de escala (landa=sqrt(a2+b2)) 0999947
tanto por uno
- Valor para el giro (giro=arctan2(ba) -404157
grados centesimales
- Altimetriacutea
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 1 6056 m
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 2 6083 m
- Traslacioacuten media en coordenada z del sistema S1 al sistema S2 6070 m
2 Resultado de la transformacioacuten del punto 3 al sistema de referencia local S2
- Coordenada x de 3 en el sistema de referencia local S2 4072286 m
- Coordenada y de 3 en el sistema de referencia local S2 45170 m
- Coordenada z de 3 en el sistema de referencia local S2 104748 m
52 CASOS PRAacuteCTICOS GEODESIA En total se han realizada 5 casos praacutecticos dentro del apartado de geodesia Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica geo_practica1 Del resto soacutelo se ha incluido la salida de datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
84
521 Implementacioacuten del coacutedigo geo_praacutectica1
Semana Geomaacutetica 2011 Bogotaacute DC Colombia
IGAC-Instituto Agustiacuten Codazzi
Taller Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea GeoTop
Impartido por Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
Dr David Hernaacutendez Loacutepez davidhernandezulcmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
Praacutectica 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
Datos Coordenadas de la Red ERGNSS - Red de Estaciones Permanentes GNSS - Instituto
Geograacutefico Nacional Espantildea
Sistema de referencia ETRS89 (Elipsoide GRS80)
Coacutedigo EPSG para coordenadas geodeacutesicas sobre el elipsoide 4258
En esta versioacuten de la praacutectica se utiliza la libreriacutea GeoTop
Otra variante con respecto a la versioacuten anterior de la praacutectica es que se parte de coordenadas
geodeacutesicas en seudo decimal sexagesimal
Documentacioacuten La formulacioacuten empleada figura en el apartado 13 Parametrizacioacuten del
elipsoide del documento
OctaveTallerGeodesiaDocumentacionApuntes_DHL_2010GeodesiaElipsoidalpdf
Matriz de coordenadas
- Cada fila es un punto una estacioacuten de referencia GNSS
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada geodeacutesica longitud en suedo decimal sexagesimal
- Tercera columna- Coordenada geodeacutesica latitud en suedo decimal sexagesimal
- Cuarta columna- Altitud elipsoidal en metros
from numpy import zerosarraygenfromtxt
from geotopogeodesiaelipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiatri2geo import tri2geo
from geotopogeodesiageo2tri import geo2tri
c4258h=[ 1 432151770811 -82356167472 66917
2 382020103584 -02852437048 60356
3 385840494457 -15123054192 751736
4 365109112636 -22734018800 127517
5 392843898433 -62030426066 436527
6 432819118007 -34753038539 99287
7 355331090227 -51823016758 52475
8 375456176191 -44315999947 202082
9 371159923466 -65513077151 81860
10 402645009016 -34234283233 766920
11 423518259367 -53903511817 970254
12 364334003748 -42336718238 119848
13 393309445258 23728383134 62063
14 422728617761 -23007691629 503204
15 405642292231 -52945108842 854969
16 394031263811 -35750290360 808968
17 402101790155 -10727483699 956188
18 392850970441 -02015543423 77592
19 421102318373 -84847057525 87790
20 403129631681 -30519065001 972777
21 413800221985 -05255792567 296111
22 281829034024 -162958855078 2417483
23 282837857413 -161428164273 51787
24 282505711067 -163302841359 54475
25 280249784309 -164306688806 58543
26 284549932439 -175337787438 2199221]
Los datos los guardamos en un txt en la misma carpeta del trabajo e importamos
c4258h=genfromtxt(CPython27geotopoaplicacionestalleresgeo_practica1dattxt)
Caacutelculo de las dimensiones de la matriz de coordenadas
- m seraacute el nuacutemero de filas el nuacutemero de puntos
- n seraacute el nuacutemero de columnas 4
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
85
[mn]=c4258hshape
grs80=elipsoide(2)
Recibe Codigo del elipsoide (nelipsoide)
1 - Ed50 Devuelve el elipsoide Internacional 1924
2 - Etrs89 Devuelve el elipsoide GRS80
3 - Wgs84 Devuelve el elipsoide Wgs84
Definicioacuten del elipsoide
fsalida=open(geo_practica1salw)
fsalidawrite(SEMANA GEOMAacuteTICA - 2011n)
fsalidawrite(TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software
libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE
COORDENADAS GEODEacuteSICAS Y ECEFn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal
ggmmssfsn)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia ETRS89n)
fsalidawrite(- Paraacutemetros del elipsoide GRS80n)
fsalidawrite( - Semieje mayor 103f mngrs80[0])
fsalidawrite( - Inverso del aplanamiento 109f adimngrs80[1])
fsalidawrite( - Semieje menor 103f mngrs80[2])
fsalidawrite( - Primera excentricidad al cuadrado 109f adimngrs80[3]2)
fsalidawrite( - Segunda excentricidad al cuadrado 109f adimngrs80[4]2)
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(1 Paso de coordenadas geodeacutesicas a ECEFn)
fsalidawrite(NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF
CoorZECEFn)
c4258XYZ=zeros((m4))
for i in range (1m+1)
np=c4258h[i-10]
longitudRad=psdo2rad(c4258h[i-12])
latitudRad=psdo2rad(c4258h[i-11])
hElip=c4258h[i-13]
[xecefyecefzecef]=geo2tri(latitudRadlongitudRadhElip2)
fsalidawrite(80fnp)
fsalidawrite(159fc4258h[i-11])
fsalidawrite(159fc4258h[i-12])
fsalidawrite(123fhElip)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(n)
c4258XYZ[i-10]=np
c4258XYZ[i-11]=xecef
c4258XYZ[i-12]=yecef
c4258XYZ[i-13]=zecef
Caacutelculo e impresioacuten del paso 2 de coordenadas ECEF a geodeacutesicas
fsalidawrite(2 Paso de coordenadas ECEF a geodeacutesicasn)
fsalidawrite( NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud
AltElipn)
for i in range(1m+1)
np=c4258XYZ[i-10]
xecef=c4258XYZ[i-11]
yecef=c4258XYZ[i-12]
zecef=c4258XYZ[i-13]
[latitudlongitudhElip]=tri2geo(xecefyecefzecef2)
fsalidawrite(80fnp)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(159frad2psdo(latitud))
fsalidawrite(159frad2psdo(longitud))
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
86
fsalidawrite(153fnhElip)
fsalidaclose()
522 Impresioacuten del fichero de salida de resultados geo_praacutectica1
SEMANA GEOMAacuteTICA - 2011
TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea
GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal ggmmssfs
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia ETRS89
- Paraacutemetros del elipsoide GRS80
- Semieje mayor 6378137000 m
- Inverso del aplanamiento 0003352811 adim
- Semieje menor 6356752314 m
- Primera excentricidad al cuadrado 0006694380 adim
- Segunda excentricidad al cuadrado 0006739497 adim
1 Paso de coordenadas geodeacutesicas a ECEF
NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF CoorZECEF
1 43215177081 -8235616747 66917 4594489890 -678368010 4357065904
2 38202010358 -0285243705 60356 5009051399 -42072472 3935057504
3 38584049446 -1512305419 751736 4962848206 -160854365 3990884209
4 36510911264 -2273401880 127517 5105220295 -219278803 3804386889
5 39284389843 -6203042607 436527 4899866820 -544567584 4033769790
6 43281911801 -3475303854 99287 4625924690 -307096765 4365771175
7 35533109023 -5182301676 52475 5150908012 -478415023 3718518240
8 37545617619 -4431599995 202082 5021256063 -414685080 3898182184
9 37115992347 -6551307715 81860 5049613168 -612885631 3835143860
10 40264500902 -3423428323 766920 4851137670 -314518688 4116282036
11 42351825937 -5390351182 970254 4680871385 -463168384 4294606572
12 36433400375 -4233671824 119848 5103282414 -392096752 3793146894
13 39330944526 2372838313 62063 4919369704 225499577 4039849606
14 42272861776 -2300769163 503204 4708688612 -205761707 4283609369
15 40564229223 -5294510884 854969 4803054799 -462131609 4158378661
16 39403126381 -3575029036 808968 4904660519 -339868032 4050823512
17 40210179016 -1072748370 956188 4867391684 -95523894 4108341277
18 39285097044 -0201554342 77592 4929534046 -29050676 4033709925
19 42110231837 -8484705753 87790 4677481077 -725205068 4260827192
20 40312963168 -3051906500 972777 4848724914 -261632472 4123093922
21 41380022199 -0525579257 296111 4773803543 -73506519 4215453698
22 28182903402 -16295885508 2417483 5390243531 -1596630330 3007752593
23 28283785741 -16142816427 51787 5386836438 -1569217617 3023118925
24 28250571107 -16330284136 54475 5381262061 -1599192518 3017377791
25 28024978431 -16430668881 58543 5395193089 -1620537044 2981146536
26 28454993244 -17533778744 2199221 5326646317 -1719826438 3052043561
2 Paso de coordenadas ECEF a geodeacutesicas
NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud AltElip
1 4594489890 -678368010 4357065904 43215177081 -8235616747 66917
2 5009051399 -42072472 3935057504 38202010358 -0285243705 60356
3 4962848206 -160854365 3990884209 38584049446 -1512305419 751736
4 5105220295 -219278803 3804386889 36510911264 -2273401880 127517
5 4899866820 -544567584 4033769790 39284389843 -6203042607 436527
6 4625924690 -307096765 4365771175 43281911801 -3475303854 99287
7 5150908012 -478415023 3718518240 35533109023 -5182301676 52475
8 5021256063 -414685080 3898182184 37545617619 -4431599995 202082
9 5049613168 -612885631 3835143860 37115992347 -6551307715 81860
10 4851137670 -314518688 4116282036 40264500902 -3423428323 766920
11 4680871385 -463168384 4294606572 42351825937 -5390351182 970254
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
87
12 5103282414 -392096752 3793146894 36433400375 -4233671824 119848
13 4919369704 225499577 4039849606 39330944526 2372838313 62063
14 4708688612 -205761707 4283609369 42272861776 -2300769163 503204
15 4803054799 -462131609 4158378661 40564229223 -5294510884 854969
16 4904660519 -339868032 4050823512 39403126381 -3575029036 808968
17 4867391684 -95523894 4108341277 40210179016 -1072748370 956188
18 4929534046 -29050676 4033709925 39285097044 -0201554342 77592
19 4677481077 -725205068 4260827192 42110231837 -8484705753 87790
20 4848724914 -261632472 4123093922 40312963168 -3051906500 972777
21 4773803543 -73506519 4215453698 41380022199 -0525579257 296111
22 5390243531 -1596630330 3007752593 28182903402 -16295885508 2417483
23 5386836438 -1569217617 3023118925 28283785741 -16142816427 51787
24 5381262061 -1599192518 3017377791 28250571107 -16330284136 54475
25 5395193089 -1620537044 2981146536 28024978431 -16430668881 58543
26 5326646317 -1719826438 3052043561 28454993244 -17533778744 2199221
523 Salida de resultados geo_praacutectica2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
88
524 Salida de resultados geo_praacutectica3
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
89
525 Salida de resultados geo_praacutectica4
helliphellip
helliphellip
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
90
526 Salida de resultados geo_praacutectica5
Con la implementacioacuten y caacutelculo de los 9 casos praacutecticos realizados e incluidos en este Proyecto Final de Maacutester se puede obtener una idea de la aplicabilidad de esta libreriacutea en aplicaciones de caacutelculos topograacuteficos y geodeacutesicos Igualmente y como uno de los puntos de partida de este Proyecto obtenemos una libreriacutea muy potente para el uso en aacutembitos universitarios facilitando al profesorado el planteamiento y resolucioacuten de los distintos casos praacutecticos de las asignaturas y al tratarse de coacutedigo abierto se facilita que los alumnos implementen nuevas utilidades formatos de salida etc Convirtiendo geotopo en una herramienta de trabajo diario
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
91
6 CONCLUSIONES FINALES Como conclusiones finales podemos enumerar
Se ha corroborado lo que dicen los impulsores de Python se trata de un lenguaje limpio sencillo y claro muy proacuteximo a pseudocoacutedigo
Resulta interesante la utilizacioacuten de software libre para caacutelculos geodeacutesicos y topografiacuteacos Al tratarse de software libre es accesible a cualquier tipo de usuario
Al partir de la consideracioacuten de un paradigma estructurado de programacioacuten hemos conseguido implementar gran nuacutemero de funciones en ficheros (moacutedulos) de pequentildeo tamantildeo facilitando la programacioacuten Tambieacuten se ha iniciado en la programacioacuten orientada a objetos con la declaracioacuten de alguna clase
La importacioacuten de moacutedulos facilita a la implementacioacuten de coacutedigo sin necesitar volver a escribir el coacutedigo importado y ante cualquier modificacioacuten del mismo automaacuteticamente se actualiza en todos los programas o moacutedulos donde se importe dicho moacutedulo
Con las funciones definidas dentro de Numpy hemos realizado la mayor parte de los caacutelculos necesarios en nuestra biblioteca
Se ha de realizar la importacioacuten expresa de gran nuacutemero de operaciones matemaacuteticas Salvo + - y casi todos los demaacutes operadores se han de importar desde Numpy por ejemplo pi sqrt sin cos etc A veces puede resultar un poco complicado hacer la importacioacuten de estos operadores pero cuando se avanza en la programacioacuten hasta parece maacutes didactico reflejar todas las funciones importadas de otros moacutedulos
Se ha apreciado que en algunos casos las mismas funciones estaacuten incluidas en distintos moacutedulos y ademaacutes con nombres diferentes Asiacute en Numpy tenemos arcsin arccos arctan etc y en SciPy asin acos atan cuando se refieren a las mismas funciones arcoseno arcocoseno y arcotangente
Se ha creado una libreriacutea abierta accesible y editable para moder modificar
coacutedigo y tambieacuten poder ampliar con el implementado de nuevas funciones que aumenten el potencial de la misma Esto tambieacuten se incluye dentro de las liacuteneas futuras de actuacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
92
7 LIacuteNEAS FUTURAS DE ACTUACIOacuteN
De forma general se establecen las siguientes liacuteneas futuras de actuacioacuten e investigacioacuten
Avance en el desarrollo a aplicaciones informaacuteticas mediante el uso de software libre y en especial de Python
Estudio de la aplicabilidad de Python en el caacutelculo minimo-cuadraacutetico de sistemas de ecuaciones aplicables en topografiacutea y geodesia Para ello se ha de profundizar en el estudio de las diferencias entre los tipos array que contiene numpy y los tipos matrix par el caacutelculo avanzado de sistemas de ecuaciones
Aplicacioacuten de Python para el caacutelculo y ajuste de Redes Geodeacutesicas mediante la utilizacioacuten de miacutenimos cuadrados Con este fin estariacuteamos evitando el tener que recurrir a los softwares de caacutelculo de las casas comerciales ahorrando asiacute un coste importante y el poder realizar los ajustes y presentaciones de resultados adapatados a nuestras necesidades
Inclusioacuten de una interfaz graacutefica a los caacutelculos realizados para poder tener visualmente el resultado de los mismos
Aplicabilidad de python en el procesado de imaacutegenes Utilizacioacuten de la libreriacutea PIL (Python Imaging Library) que agrega capacidades de procesamiento de imaacutegenes al interprete Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
93
8 ANEJO
81 EQUIVALENCIAS ENTRE FUNCIONES EN MATLAB Y PYTHON Al partir de la libreiacutea Geotop en Octave hemos de tener en cuenta la equivanlencia entre algunas funciones de MatlabOctave con Python Asiacute tenemos MATLAB numpyarray numpymatrix Notes
ndims(a) ndim(a) or andim get the number of dimensions of a (tensor rank)
size(a) shape(a) or ashape get the size of the matrix
size(an) ashape[n-1]
get the number of elements of the nth dimension of array a (Note that MATLABreg uses 1 based indexing while Python uses 0 based indexing See note INDEXING)
MATLAB numpyarray numpymatrix Notes
[ 1 2 3 4 5 6 ] array([[123] [456]])
mat([[123] [456]]) or mat(1 2 3 4 5 6)
2x3 matrix literal
[ a b c d ] vstack([hstack([ab]) hstack([cd])])
bmat(a b c d) construct a matrix from blocks abc and d
a(end) a[-1] a[-1][00] access last element in the 1xn matrix a
a(25) a[14] access element in second row fifth column
a(2) a[1] or a[1] entire second row of a
a(15) a[05] or a[5] or a[05] the first five rows of a
a(end-4end) a[-5] the last five rows of a
a(1359) a[03][49] rows one to three and columns five to nine of a This gives read-only access
a([245][13]) a[ix_([134][02])] rows 24 and 5 and columns 1 and 3 This allows the matrix to be modified and doesnt require a regular slice
a(3221) a[ 2212] every other row of a starting with the third and going to the twenty-first
a(12end) a[ 2] every other row of a starting with the first
a(end-11) or flipud(a) a[ -1] a with rows in reverse order
a([1end 1]) a[r_[len(a)0]] a with copy of the first row appended to the end
a atranspose() or aT transpose of a
a aconj()transpose() or aconj()T
aH conjugate transpose of a
a b dot(ab) a b matrix multiply
a b a b multiply(ab) element-wise multiply
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
94
MATLAB numpyarray numpymatrix Notes
ab ab element-wise divide
a^3 a3 power(a3) element-wise exponentiation
(agt05) (agt05) matrix whose ijth element is (a_ij gt 05)
find(agt05) nonzero(agt05) find the indices where (a gt 05)
a(find(vgt05)) a[nonzero(vgt05)[0]] a[nonzero(vAgt05)[0]] extract the columms of a where vector v gt 05
a(find(vgt05)) a[vTgt05] a[vTgt05)] extract the columms of a where column vector v gt 05
a(alt05)=0 a[alt05]=0 a with elements less than 05 zeroed out
a (agt05) a (agt05) mat(aA (agt05)A) a with elements less than 05 zeroed out
a() = 3 a[] = 3 set all values to the same scalar value
y=x y = xcopy() numpy assigns by reference
y=x(2) y = x[1]copy() numpy slices are by reference
y=x() y = xflatten(1) turn array into vector (note that this forces a copy)
110 arange(111) or r_[111] or r_[11010j]
mat(arange(111)) or r_[111r]
create an increasing vector see note RANGES
09 arange(10) or r_[10] or r_[910j]
mat(arange(10)) or r_[10r]
create an increasing vector see note RANGES
[110] arange(111)[ newaxis] r_[111c] create a column vector
zeros(34) zeros((34)) mat() 3x4 rank-2 array full of 64-bit floating point zeros
zeros(345) zeros((345)) mat() 3x4x5 rank-3 array full of 64-bit floating point zeros
ones(34) ones((34)) mat() 3x4 rank-2 array full of 64-bit floating point ones
eye(3) eye(3) mat() 3x3 identity matrix
diag(a) diag(a) mat() vector of diagonal elements of a
diag(a0) diag(a0) mat() square diagonal matrix whose nonzero values are the elements of a
rand(34) randomrand(34) mat() random 3x4 matrix
linspace(134) linspace(134) mat() 4 equally spaced samples between 1 and 3 inclusive
[xy]=meshgrid(0805) mgrid[0906] or meshgrid(r_[09]r_[06]
mat() two 2D arrays one of x values the other of y values
ogrid[0906] or ix_(r_[09]r_[06]
mat() the best way to eval functions on a grid
[xy]=meshgrid([124][245]) meshgrid([124][245]) mat()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
95
ix_([124][245]) mat() the best way to eval functions on a grid
MATLAB numpyarray numpymatrix Notes
repmat(a m n) tile(a (m n)) mat() create m by n copies of a
[a b]
concatenate((ab)1) or hstack((ab)) or column_stack((ab)) or c_[ab]
concatenate((ab)1) concatenate columns of a and b
[a b] concatenate((ab)) or vstack((ab)) or r_[ab]
concatenate((ab)) concatenate rows of a and b
max(max(a)) amax() maximum element of a (with ndims(a)lt=2 for matlab)
max(a) amax(0) maximum element of each column of matrix a
max(a[]2) amax(1) maximum element of each row of matrix a
max(ab) maximum(a b) compares a and b element-wise and returns the maximum value from each pair
norm(v) sqrt(dot(vv)) or Scilinalgnorm(v) or linalgnorm(v)
sqrt(dot(vAvA)) or Scilinalgnorm(v) or linalgnorm(v)
L2 norm of vector v
a amp b logical_and(ab) element-by-element AND operator (Numpy ufunc) see note LOGICOPS
a | b logical_or(ab) element-by-element OR operator (Numpy ufunc) see note LOGICOPS
bitand(ab) a amp b bitwise AND operator (Python native and Numpy ufunc)
bitor(ab) a | b bitwise OR operator (Python native and Numpy ufunc)
inv(a) linalginv(a) inverse of square matrix a
pinv(a) linalgpinv(a) pseudo-inverse of matrix a
rank(a) linalgmatrix_rank(a) rank of a matrix a
ab linalgsolve(ab) if a is square
linalglstsq(ab) otherwise solution of a x = b for x
ba Solve aT xT = bT instead solution of x a = b for x
[USV]=svd(a) U S Vh = linalgsvd(a) V = VhT singular value decomposition of a
chol(a) linalgcholesky(a)T
cholesky factorization of a matrix (chol(a) in matlab returns an upper triangular matrix but linalgcholesky(a) returns a lower triangular matrix)
[VD]=eig(a) DV = linalgeig(a) eigenvalues and eigenvectors of a
[VD]=eig(ab) VD = Scilinalgeig(ab) eigenvalues and eigenvectors of ab
[VD]=eigs(ak) find the k largest eigenvalues and eigenvectors of a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
96
MATLAB numpyarray numpymatrix notes
[QRP]=qr(a0) QR = Scilinalgqr(a) mat() QR decomposition
[LUP]=lu(a) LU = Scilinalglu(a) or LUP=Scilinalglu_factor(a)
mat() LU decomposition
conjgrad Scilinalgcg mat() Conjugate gradients solver
fft(a) fft(a) mat() Fourier transform of a
ifft(a) ifft(a) mat() inverse Fourier transform of a
sort(a) sort(a) or asort() mat() sort the matrix
[bI] = sortrows(ai) I = argsort(a[i]) b=a[I] sort the rows of the matrix
regress(yX) linalglstsq(Xy) multilinear regression
decimate(x q) Scisignalresample(x len(x)q) downsample with low-pass filtering
unique(a) unique(a)
squeeze(a) asqueeze()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
97
9 BIBLIOGRAFIacuteA
DOWNEY A ELKNER J MEYERS C Aprenda a Pensar Como un Programador con Python GARCIacuteA-ASENJO VILLAMAYOR L HERNAacuteNDEZ LOacutePEZ D Geodesia Febrero 2005 GONZAacuteLEZ DUQUE R Python PARA TODOS Edicioacuten Internet bajo licencia Creative Commons Reconocimiento 25 Espantildea Descargable en httpmundogeeknettutorial-python MARZAL A GRACIA I Introduccioacuten a la programacioacuten con Python Departamento de Lenguajes y Sistemas Informaacuteticos Universitat Jaume I 2003 Edicioacuten Internet NUMPY COMMUNITY NumPy Reference Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg NUMPY COMMUNITY NumPy User Guide Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg VAN ROSSUM G Guiacutea de aprendizaje de PythonRelease 241ordf0 Edicioacuten Intenet Septiembre 2005 Descargable en httpwwwscipyorg VAN ROSSUM G El tutorial de Python Edicioacuten Intenet Descargable en httppythonorgarpyarTutorial
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
98
10 PAacuteGINAS WEB CONSULTADAS httpenfoquevirtualwordpresscomcategorytutorial httpgeektheplanetnet1347how-to-instalar-pydev-en-aptanaxhtml httpmundogeeknetarchivos20080328python-modulos-y-paquetes httpwwwthebitsourcecomprogramming-software-developmentpythonpython-application-development-aptana-pydev httpwwwyoutubecomwatchv=XtnfY2cBbMA youtube interesante trabajo con pydev y modulos httpcodingderkeilercomArchivePythoncomplangpython2005-08msg03511html paacutegina que explica coacutemo solucionar los problemas de Non-ASCII character httpeswikibooksorgwikiInmersiC3B3n_en_PythonSu_primer_programa_en_PythonDocumentado_de_funciones paacutegina que explica la cadena de documentacioacuten despueacutes de definir una funcioacuten con ldquordquordquo___rdquordquordquo (triples comillas) httpwwwpythonorgdevpepspep-0008 style guide for python code httpmundogeeknetarchivos20080707documentacion-en-python habla de la forma de documentar en python httpwwwpythonorgdevpepspep-0257 documentacioacuten y comentarios httpprogramandoideascomcomentarios-en-python documentacioacuten y comentarios httpwwwyoutubecomwatchv=v0sqRYuL5e8 tutorial de python con aptana httpwwwyoutubecomwatchv=29mq1Bn52GYampfeature=related youtube tutorial httpprojectsscipyorgnumpybrowsertrunknumpymatlibpyrev=8567 paacutegina que habla un poco de matrices
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
99
httpwwwgfceduco~arsranguias42p8guia42html cosas interesantes de matrices httpdocencia-euptunizaresctmedrascipy_tutorialscipy_tutorialhtml varios sobre python httpdocspythonorgtutorialmoduleshtml muy buena de paquetes etc httpwwwlinux-ittcom200804python-mdulos-y-paqueteshtml maacutes sobre paquetes httpwwwmclibreorgconsultarpythonotrosin03_idlehtmlccedil coding cp1252 httpwwwmclibreorgconsultarpython tutorial de python en la web Idle httpbioinfcomavupvescourseslinuxpythonmoduloshtml csv listasetc httpwwwdavidricardocommxp=1173 ok muy bueno importacioacuten csv como matriz httpwwwaprenderpythonorg httpwwwscipyorgNumpy_Example_List_With_Doc paacutegina muy importante de scipy httpjsbsanblogspotcom201101calculo-de-un-area-de-un-poligonohtml video sobre caacutelculo de areas de poliacutegonos irregulares httpmathesaurussourceforgenetmatlab-numpyhtml viprelacioacuten entre operaciones con octave y con python httpwwwscipyorgTentative_NumPy_Tutorial pagina importante de scipy httptecnologicumwordpresscomastronomiavideo-tutoriales-de-python todos los videotutoriales de python httpwwwyoutubecomwatchv=Oj3MZXWXGiUampfeature=related csv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
100
httptranslategoogleestranslatehl=esamplangpair=en7Cesampu=httpwwwscipyorgNumPy_for_Matlab_Users interesante sobre numpyhellip httpwikipythonorgmoinHowToSorting interesante de sort httpwikipythonorgmoinHowToSortingOperator_Module_Functions sort itemgetteretc httpcodeactivestatecomrecipes304440-sorting-dictionaries-by-value-in-python-24 operator itemgetter httpmundogeeknetarchivos20080402python-entrada-salida-ficheros entrada salida de archivos httpwwwgulicorgalmacenhttlaclwpchap11htm formato de escritura textos nuacutemeros y decimales httpwwwprogramacioncomarticuloguia_de_aprendizaje_de_python_657 formatos de salida httpnumpysourceforgenetnumdocHTMLnumdochtmpgfId-57315 muy importante sobre arraysetc httpwwwhjcbnlpythonArrayshtml muy importante sobre arraysetc httpwwwalecjacobsoncomweblogp=1570 cargar un txt como una matriz en python httpdocsscipyorgdocnumpyreferencegeneratednumpygenfromtxthtml getfromtxt de numpy httpwwwalegsaonlinecomart13php httpwwwumesdocenciabarzanaIAGPIagp3html httpwebusales~dhernandsoftwarehtmGeotop httpmailpythonorgpipermailtutor2008-March060886html From future import division
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
101
httpwwwyoutubecomwatchv=I6GMIQBD6EU youtube diccionarios httpmundogeeknetarchivos20080121python-tipos-basicos-ii-colecciones diccionarios httpstaffnotiaces~rcardeneshgdiveintopython3-esnative-datatypeshtml diccionarios httpwwwestrellateyardeorgdiscovermanual-python-lo-mas-basico diccionarios httpeswikibooksorgwikiInmersiC3B3n_en_PythonTipos_de_datos_nativosPresentaciC3B3n_de_los_diccionarios diccionarios httpdocspythonorgartutorialdatastructureshtmldiccionarios python estructura de diccionarios httpwwwwikilearningcomtutorialintroduccion_informal_a_matlab_y_octave-matrices_y_algebra_lineal_i19256-8 concatenar matrices httpwwwslidesharenetsantiagosilascomputao-cientfica-com-numpy-e-scipy-7797060 detalles de numpy vectores matricesetc httpwwwscipyorgNumPy_for_Matlab_Usershead-e9a492daa18afcd86e84e07cd2824a9b1b651935 muy importante de scipy arrays y matriceshellip httpdocsscipyorgdocnumpyreferencegeneratednumpyconcatenatehtml muy importante de scipy arrays y matriceshellip httppyspanishdocsourceforgenettut traduccioacuten del tutorial de Guido httpwwwscipyorgNumpy_Example_List_With_Dochead-5202db3259f69441c695ab0efc0cdf45341829fc httppyspanishdocsourceforgenetlibmodule-picklehtml funcioacuten pickle
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
102
httpnicocesarcomq=node23 carga de ficheros binarios httpstaffnotiaces~rcardeneshgdiveintopython3-esfileshtml apertura cierre carga de ficheros etc httppythonr2wordpresscom20080829leer-archivos-binarios-en-python lectura de ficheros binarios httpwwwignesignlayoutInherramientasdo descarga de ficheros regilla del IGN httpterrasitgvaeseskbtransformacion-coordenadas-utm-ed50-utm-etrs89-utilizando-libreria-proj4 paacutegina de la gva sobre cambio de sistema y fichero rejilla httpdocspythonorglibrarystructhtml moacutedulo struct de python para lectura de ficheros binarios httpwwwslidesharenetjpadillaaprogramacion-orientada-a-objetos-en-python programacioacuten orientada a objetos con python httppyspanishdocsourceforgenettutnode7html recorrer diccionarios httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 interesante aplicacioacuten fichero rejilla ntv2 en python
A mis dos mujeres mi hija Emma y mi esposa Sonia
Agradecimientos
He de agradecer su dedicacioacuten a mis dos tutores en este Proyecto Final de Maacutester
Deseo mostrar mi gratitud a D Joseacute Antonio Martiacuten Jimeacutenez quien supervisoacute y tutorizoacute este Proyecto desde la Universidad de Salamanca Escuela Politeacutecnica Superior de Aacutevila
Muy especialmente quiero agradecer a D David Hernaacutendez Loacutepez su dedicacioacuten y apoyo en la ejecucioacuten de esta tarea Por las tardes de verano dedicadas a la resolucioacuten de dudas o planteamientos al proyecto y por la confianza que depositoacute en miacute al aceptar ser mi tutor De la misma manera espero haber estado a la altura esperada en la consecucioacuten de los objetivos que desde el primer momento me planteoacute
Resumen
Como Ingeniero Teacutecnico en Topografiacutea numerosas han sido las necesidades de disponer de herramientas informaacuteticas para los distintos caacutelculos necesarios desde la etapa de estudiante en la Universidad como una vez incurso en la vida laboral Desde el simple caacutelculo de un acimut y distancia entre dos puntos medidas de superficies encerradas en poliacutegonos irregulares datos de replanteo de puntos caacutelculo de previsioacuten de errores o las diferentes transformaciones de coordenadas de grandes cantidades de puntos entre unas proyecciones y otras y entre distintos Sistemas de Referencia Coordenados Partiendo de esta necesidad y de la existencia de la libreriacutea ldquoGeotoprdquo en Octave del Profesor y Co-tutor de este proyecto Dr D David Hernaacutendez Loacutepez se han elaborado una serie de herramientas en Python para caacutelculos geodeacutesicos y topograacuteficos en Python principalmente migrando del lenguaje Octave a lenguaje Python Ademaacutes del uso para caacutelculos topograacuteficos en aacutembitos del uso diario de ingenieros Teacutecnicos en Topografiacutea o cualquier Ingenieriacutea afiacuten esta libreriacutea tambieacuten se concibe como una herramienta de uso para el estudiante de estas disciplinas en las Universidades Al tratarse de software libre es perfectamente editable y adaptable a las necesidades de caacutelculo y presentacioacuten que se consideren oportunas La eleccioacuten de Python aunque posteriormente se desarrolle maacutes se debe a que se trata de un lenguaje de programacioacuten faacutecil de aprender potente y en auge Tiene eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de plataformas El inteacuterprete de Python y la extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables y se pueden distribuir libremente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
1
TABLA DE CONTENIDOS
1 OBJETIVOS DEL TRABAJO 3
2 CONTEXTO DEL PROYECTO 4
21 iquestPOR QUEacute SOFTWARE LIBRE 4
22 LENGUAJES DE PROGRAMACIOacuteN 7
23 PARADIGMAS DE PROGRAMACIOacuteN 8
24 iquestPOR QUEacute PYTHON 9
241 Caracteriacutesticas de Python 9
3 INSTRUMENTACIOacuteN Y SOFTWARE EMPLEADOS PHYTON 12
31 INTRODUCCIOacuteN A PYTHON 12
311 Guiacutea de aprendizaje de Python por Guido Van Rossum v24 16
3111 Llamar al inteacuterprete 17
3112 Moacutedulos 22
3113 El camino de buacutesqueda de moacutedulos 23
3114 Ficheros Python ldquoCompiladosrdquo 23
3115 Moacutedulos estandar 24
3116 Paquetes 24
3117 Importar de un paquete 27
3118 Referencias internas al paquete 28
32 FUNCIONES INCLUIDAS EN NUMPY POR CATEGORIacuteAS (ARRAY CREATION) 28
4 METODOLOGIacuteA 36
41 ESTRUCTURA DE LA LIBRERIacuteA GEOTOPO 36
42 DOCUMENTADO DE FUNCIONES 42
43 FUNCIONES IMPLEMENTADAS 47
431 Libreriacutea en Python ldquogeotopogeneralrdquo 47
432 Libreriacutea en Python ldquogeotopotopografiardquo 50
433 Libreriacutea en Python ldquogeotopogeodesiardquo 52
434 Libreriacutea en Python ldquogeotopoproy_cartograficasrdquo 60
435 Libreriacutea en Python ldquogeotopotransformacionrdquo 70
5 APLICABILIDAD DE LA LIBRERIacuteA Y CONCLUSIONES FINALES 73
51 CASOS PRAacuteCTICOS TOPOGRAFIacuteA 77
511 Implementacioacuten del coacutedigo topo_praacutectica1 77
512 Impresioacuten del fichero de salida de resultados topo_praacutectica1 81
513 Salida de resultados topo_praacutectica2 81
514 Salida de resultados topo_praacutectica3 82
515 Salida de resultados topo_praacutectica4 83
52 CASOS PRAacuteCTICOS GEODESIA 83
521 Implementacioacuten del coacutedigo geo_praacutectica1 84
522 Impresioacuten del fichero de salida de resultados geo_praacutectica1 86
523 Salida de resultados geo_praacutectica2 87
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
2
524 Salida de resultados geo_praacutectica3 88
525 Salida de resultados geo_praacutectica4 89
526 Salida de resultados geo_praacutectica5 90
6 CONCLUSIONES FINALES 91
7 LIacuteNEAS FUTURAS DE ACTUACIOacuteN 92
8 ANEJO 93
81 EQUIVALENCIAS ENTRE FUNCIONES EN MATLAB Y PYTHON 93
9 BIBLIOGRAFIacuteA 97
10 PAacuteGINAS WEB CONSULTADAS 98
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
3
1 OBJETIVOS DEL TRABAJO Dentro del marco general de la guiacutea docente del Maacutester en Geotecnoloacutegias Cartograacuteficas en Ingenieriacutea y Arquitectura impartido por la Escuela Politeacutecnica Superior de Aacutevila de la Universidad de Salamanca se establece como requisito para la obtencioacuten de esta titulacioacuten la realizacioacuten de un proyecto final de maacutester A tal fin responde el presente trabajo en el que se ha optado por la realizacioacuten de un proyecto de desarrollo de herramientas en Python para caacutelculos geodeacutesicos y topograacuteficos Como Ingeniero Teacutecnico en Topografiacutea numerosas han sido las necesidades de disponer de herramientas informaacuteticas para los distintos caacutelculos necesarios desde la etapa de estudiante en la Universidad como una vez incurso en la vida laboral Desde el simple caacutelculo de un acimut y distancia entre dos puntos medidas de superficies encerradas en poliacutegonos irregulares datos de replanteo de puntos caacutelculo de previsioacuten de errores o las diferentes transformaciones de coordenadas de grandes cantidades de puntos entre unas proyecciones y otras y entre distintos Sistemas de Referencia Coordenados Partiendo de esta necesidad y de la existencia de la libreriacutea ldquoGeotoprdquo en Octave del Profesor y Co-tutor de este proyecto Dr D David Hernaacutendez Loacutepez se han elaborado una serie de herramientas en Python para caacutelculos geodeacutesicos y topograacuteficos en Python principalmente migrando del lenguaje Octave a lenguaje Python Ademaacutes del uso para caacutelculos topograacuteficos en aacutembitos del uso diario de ingenieros Teacutecnicos en Topografiacutea o cualquier Ingenieriacutea afiacuten esta libreriacutea tambieacuten se concibe como una herramienta de uso para el estudiante de estas disciplinas en las Universidades Al tratarse de software libre es perfectamente editable y adaptable a las necesidades de caacutelculo y presentacioacuten que se consideren oportunas La eleccioacuten de Python aunque posteriormente se desarrolle maacutes se debe a que se trata de un lenguaje de programacioacuten faacutecil de aprender y potente Tiene eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de plataformas El inteacuterprete de Python y la extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables y se pueden distribuir libremente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
4
2 CONTEXTO DEL PROYECTO Dentro de los objetivos de este proyecto se encuentra el aprendizaje y desarrollo de herramientas con software libre y tambieacuten la eleccioacuten de Python al tratarse de un lenguaje de programacioacuten que aunque parece novedoso esta encontrando gran aceptacioacuten en entornos docentes y tambieacuten en el desarrollo de programacioacuten en la empresa privada
21 iquestPOR QUEacute SOFTWARE LIBRE Muchiacutesimos gobiernos de todo el mundo estaacuten empezando a ver al software libre como una poderosa herramienta para disminuir sus costos de administracioacuten reducir la dependencia tecnoloacutegica y fomentar sus industrias locales de software Las razones principales que impulsan la migracioacuten de los sistemas de informacioacuten de las administraciones puacuteblicas al software libre son
Ahorro econoacutemico El bajo o nulo coste de los productos libres permiten a las PYMES servicios y ampliar sus infraestructuras sin que se vean mermados sus intentos de crecimiento por no poder hacer frente al pago de cantidades en licencias
Independencia tecnoloacutegica mayor transparencia aumento de la interoperabilidad permite auditar el coacutedigo fuente etc El secretismo tenoloacutegico es uno de los grandes frenos y desequilibrios existentes para el desarrollo en el modelo de propiedad intelectual
Fomenta el desarrollo local y la industria nacional de software La praacutectica totalidad de los concursos para desarrollo de software para la administracioacuten puacuteblica pasan por compatibilizar con productos de la factoriacutea de Microsoft por lo que garantiza la perpetuacioacuten e ingresos hacia Microsoft y no favorece a las empresas locales que pudieran ofrecer productos equivalentes Ademaacutes de la reduccioacuten de costes por uso de software libre iquestqueacute podriacutean aportar esas inversiones si los beneficiados fuesen empresas del propio estado en lugar de mandar a una compantildeiacutea extranjera esas enormes cantidades de dinero
Facilita la adaptacioacuten a las necesidades concretas de las administraciones en materia linguumliacutestica legislativa de accesibilidad e imagen
El conocimiento generado es puacuteblico Fomento de la libre competencia al basarse en servicios y no licencias
Uno de los modelos de negocio que genera el software libre es la contratacioacuten de servicios de atencioacuten al cliente Este sistema permite que las compantildeiacuteas que den el servicio compitan en igualdad de condiciones a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
5
no poseer la propiedad del producto del cual dan el servicio
Tratamiento seguro de los datos y la informacioacuten Formatos estaacutendar Los formatos estaacutendar permiten una
interoperatividad maacutes alta entre sistemas evitando incompatibilidades Los estaacutendares de facto son vaacutelidos en ocasiones para lograr una alta interoperatividad si se omite el hecho que estos exigen el pago de royalities a terceros y por razones de mercado no interesa que se perpetuacuteen mucho tiempo
Sistemas sin puertas traseras y maacutes seguros El acceso al coacutedigo fuente permite que tanto hackers como empresas de seguridad de todo el mundo puedan auditar los programas por lo que la existencia de puertas traseras es iloacutegica ya que se pondriacutea en evidencia y contraviene el intereacutes de la comunidad que es la que lo genera
Correccioacuten maacutes raacutepida y eficiente de fallos El funcionamiento e intereacutes conjunto de la comunidad ha demostrado solucionar maacutes raacutepidamente los fallos de seguridad en el software libre algo que desgraciadamente en el software propietario es maacutes difiacutecil y costoso
Meacutetodos simples y unificados de gestioacuten de software Actualmente la mayoriacutea de distribuciones de linux incorporan alguno de los sistemas que unifican el meacutetodo de instalacioacuten de programas libreriacuteas etc Por parte de los usuarios Asiacute se permite el acceso a las miles de aplicaciones existentes de forma segura y gratuita a la par que evitan tener que recurrir a paacuteginas web de dudosa eacutetica desde las que los usuarios instalan sin saberlo spyware o virus informaacuteticos en sus sistemas Este sistema de acceso y gestioacuten del software se hace praacutecticamente utoacutepico si se extrapola al mercado propietario
Sistema en expansioacuten El software libre ya no es una promesa es una realidad y se utiliza en sitemas de produccioacuten por algunas de las empresas tecnoloacutegicas maacutes importantes como IBM Sun Microsystems Google Hewlett-Packard etc Paradoacutejicamente incluso Microsoft que posee sus propias herramientas emplea GNU Linux en muchos de sus servidores
Entre los paiacuteses maacutes adeptos al software libre sus desarrollos y alcance de sus
proyectos de migracioacuten se encuentran de la siguiente manera ALEMANIA Alemania es el paiacutes con mayor uso del software libre del mundo No
soacutelo estaacute presente en todas sus dependencias gubernamentales y universidades sino que tiene programas multimillonarios para el desarrollo de aplicaciones libres En 2009 destinoacute maacutes de 500 millones de Euros al proyecto ldquoOpen Source and Green ITrdquo El software libre es tan importante para los alemanes que incluso el 59 de sus empresas lo utiliza el argumento maacutes utilizado no es la reduccioacuten de costos sino la posibilidad de poder modificar el coacutedigo fuente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
6
BRASIL Fue el primer paiacutes en migrar masivamente sus sistemas de informacioacuten a alternativas open source Se llevoacute a cabo en primera instancia en el estado de Riacuteo Grande luego se realizoacute a escala nacional
ARGENTINA Existen varias iniciativas estatales que apuntan a fomentar el desarrollo de software libre Actualmente el software libre estaacute implementado en algunas provincias siendo Santa Fe el maacuteximo exponente de utilizacioacuten doacutende todo el software ha sido liberado bajo licencia GPL
FRANCIA La Asamblea Nacional utiliza software libre en todos sus sistemas y terminales de trabajo Francia viene tomando impulso en el desarrollo de software open source existen iniciativas para que el 20 del software contratado por la Administracioacuten Puacuteblica sea libre para el 2012 tambieacuten ofrece beneficios fiscales para las agrupaciones de usuarios y desarrolladores de SL
ESPANtildeA Espantildea se ha apostado como uno de los mayores impulsores mundiales del uso de software libre Actualmente existen 200 empresas proveedoras de soluciones 100 comunidades de usuarios y 180 centros educativos donde el software de coacutedigo abierto es una realidad cotidiana Muchos ayuntamientos y universidades ya se pasaron a sistemas open source
A principios de 2010 se presentoacute un proyecto liderado por la Plataforma Tecnoloacutegica Espantildeola de Software y Servicios con el apoyo del Plan Avanza Dicho plan pretende colocar a Espantildea a la par del resto de Europa en el disentildeo y uso de software libre de confianza y calidad similares a los comerciales Este proyecto llamado Vulcano trata de unificar el trabajo de distintas universidades centros tecnoloacutegicos y empresas que hasta el momento habiacutean dedicado sus esfuerzos al aacutembito de la educacioacuten
En un entrevista ofrecida por David Saacutenchez Director de Comunicacioacuten y Relaciones Instituciones en CENATIC que es el Centro Nacional de Referencia de Aplicacioacuten de las Tecnologiacuteas de la informacioacuten y la Comunicacioacuten basadas en Fuentes Abiertas podemos encontrar httpwwwmuylinuxcom20110407entrevistamos-a-david-sanchez-de-cenatic
CENATIC es una Fundacioacuten Puacuteblica Estatal del gobierno de Espantildea promovida por el Ministerio de Industria Turismo y Comercio y la Junta de Extremadura que ademaacutes cuenta en su patronato con las comunidades autoacutenomas de Andaluciacutea Aragoacuten Asturias Cantabria Cataluntildea Islas Balares Paiacutes Vasco y Galicia asiacute como las empresas Atos Origin Telefoacutenica y Grupo Aacutepex
Su trabajo es promover el conocimiento y uso del software libre en todos los aacutembitos de la sociedad con especial atencioacuten en las administraciones puacuteblicas las empresas el sector tecnoloacutegico proveedor o usuario de tecnologiacuteas libres y las comunidades de desarrollo a traveacutes de proyectos especiacuteficos para cada uno de estos sectores
ldquo La apuesta a del Administracioacuten del Estado por el software libre se inicioacute ya en los 90 cuando el entonces ministerio para las Administraciones Puacuteblicas llevoacute a cabo la primera gran migracioacuten a software libre de 1375 servidores Llegaron tambieacuten proyectos como el del Principado de Asturias para generar de forma colaborativa un
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
7
marco basado en software libre que permitioacute crear cluacutester de empresas locales capaces de aportar servicios de eAdministracion que de otra manera tendriacutean que haber contratado fuera de su comunidadrdquo
ldquo O el proyecto de gvSIG de la Conselleriacutea d‟Infrestructures i Transport de la Generalitat Valenciana un sistema de informacioacuten geograacutefico que cuenta con un tejido empresarial local alrededor del proyecto y estaacuten haciendo de la Comunidad Valenciana el nuacutecleo maacutes activo a nivel mundial de desarrollo GIS en entornos libres Tambieacuten es muy conocido el proyecto de Red Tecnoloacutegica Educativa de la Junta de Extremadura con Linex como primera distribucioacuten regional y concepto pionero adoptado ya por 7 comunidades autoacutenomasrdquo ldquoFinalmente a nivel de administracioacuten local hasta el 80 de los grandes ayuntamientos cuentan hoy en diacutea con proyectos de software libre siendo quizaacute el maacutes destacado el del Ayuntamiento de Zaragozardquo
22 LENGUAJES DE PROGRAMACIOacuteN Un lenguaje de programacioacuten es un lenguaje artificial que puede ser usado para controlar el comportamiento de una maacutequina especialmente una computadora Estos se componen de un conjunto de reglas sintaacutecticas y semaacutenticas que permiten expresar instrucciones que luego seraacuten interpretadas Debe distinguirse de ldquolenguaje informaacuteticordquo que es una definicioacuten maacutes amplia puesto que estos incluyen otros lenguajes como son el HTML o PDF que dan formato a un texto y no es programacioacuten en siacute misma El programador es el encargado de utilizar un lenguaje de programacioacuten para crear un conjunto de instrucciones que al final constituiraacute un programa o subprograma informaacutetico En su uso un lenguaje de programacioacuten puede acercarse a la forma humana de expresarse y por eso este tipo de lenguajes es llamado de alto nivel Esto significa que utilizan palabras y formas en sus estructuras que se asemejan al lenguaje natural (especialmente al ingleacutes) En cambio aquellos lenguajes que se aproximan maacutes a la forma en la cual la computadora se maneja son llamados lenguajes de bajo nivel Esto significa que lo que el programador deba escribir se acercaraacute al lenguaje maacutequina que es en definitiva lo que las computadoras pueden interpretar De todas maneras un lenguaje de programacioacuten difiere en muchos aspectos de un lenguaje humano Un coacutedigo escrito en un lenguaje de programacioacuten especiacutefico siempre se interpreta de la misma manera (no como los idiomas humanos ambiguos) los errores son mucho maacutes significativos (a tal punto de que un coacutedigo puede volverse ininterpretable por la computadora) etc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
8
El coacutedigo fuente es el conjunto de instrucciones que conforman un programa (o subprograma o moacutedulo) El coacutedigo fuente debe ser compilado para poder ser interpretado y ejecutado por la computadora La compilacioacuten traduce el coacutedigo fuente (que depende del lenguaje de programacioacuten) a un lenguaje maacutequina (que depende del sistema de la maacutequina) Existen lenguajes del tipo script que son directamente ejecutados por un inteacuterprete y no necesitan compilacioacuten Los lenguajes de programacioacuten pueden clasificarse empleando distintos meacutetodos y puntos de vista Esta clasificacioacuten se basa en el paradigma que utilizan Se debe aclarar que existen muchos maacutes paradigmas y subparadigmas de programacioacuten no incluidos dentro de los mencionados Ademaacutes todaviacutea hay conflictos en las definiciones y alcances de ciertos paradigmas
23 PARADIGMAS DE PROGRAMACIOacuteN Un paradigma de programacioacuten provee (y determina) la visioacuten y meacutetodos de un programador en la construccioacuten de un programa o subprograma Diferentes paradigmas resultan en diferentes estilos de programacioacuten y en diferentes formas de pensar la solucioacuten de problemas (con la solucioacuten de muacuteltiples ldquoproblemasrdquo se construye una aplicacioacuten) Los lenguajes de programacioacuten son basados en uno o maacutes paradigmas (Veacutease Programacioacuten en muacuteltiples paradigmas) Por ejemplo Smalltalk y Java son lenguajes basados en el paradigma orientado a objetos El lenguaje de programacioacuten Scheme en cambio soporta soacutelo programacioacuten funcional En cambio Python soporta muacuteltiples paradigmas Clasificacioacuten por paradigmas de programacioacuten Paradigma Imperativo describe la programacioacuten como una secuencia instrucciones o comandos que cambian el estado de un programa El coacutedigo maacutequina en general estaacute basado en el paradigma imperativo Su contrario es el paradigma declarativo En este paradigma se incluye el paradigma procedimental (procedural) entre otros Paradigma Declarativo No se basa en el coacutemo se hace algo (coacutemo se logra un objetivo paso a paso) sino que describe (declara) coacutemo es algo En otras palabras se enfoca en describir las propiedades de la solucioacuten buscada dejando indeterminado el algoritmo (conjunto de instrucciones) usado para encontrar esa solucioacuten Es maacutes complicado de implementar que el paradigma imperativo tiene desventajas en la eficiencia pero ventajas en la solucioacuten de determinados problemas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
9
Paradigma Estructurado la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Ademaacutes la programacioacuten se controla con secuencia seleccioacuten e iteracioacuten Permite reutilizar coacutedigo programado y otorga una mejor compresioacuten de la programacioacuten Es contrario al paradigma inestructurado de poco uso que no tiene ninguna estructura es simplemente un ldquobloquerdquo como por ejemplo los archivos batch (bat) Paradigma Orientado a Objetos estaacute basado en la idea de encapsular estado y operaciones en objetos En general la programacioacuten se resuelve comunicando dichos objetos a traveacutes de mensajes (programacioacuten orientada a mensajes) Se puede incluir -aunque no formalmente- dentro de este paradigma el paradigma basado en objetos que ademaacutes posee herencia y subtipos entre objetos Ej Simula Smalltalk C++ Java Visual Basic NET etc Su principal ventaja es la reutilizacioacuten de coacutedigos y su facilidad para pensar soluciones a determinados problemas Paradigma Funcional este paradigma concibe a la computacioacuten como la evaluacioacuten de funciones matemaacuteticas y evita declarar y cambiar datos En otras palabras hace hincapieacute en la aplicacioacuten de las funciones y composicioacuten entre ellas maacutes que en los cambios de estados y la ejecucioacuten secuencial de comandos (como lo hace el paradigma procedimental) Permite resolver ciertos problemas de forma elegante y los lenguajes puramente funcionales evitan los efectos secundarios comunes en otro tipo de programaciones Paradigma loacutegico se basa en la definicioacuten de reglas loacutegicas para luego a traveacutes de un motor de inferencias loacutegicas responder preguntas planteadas al sistema y asiacute resolver los problemas Ej prolog Otros paradigmas y subparadigmas son paradigma orientado al sujeto paradigma heuriacutestico paradigma reflectante programacioacuten basada en reglas paradigma basado en restricciones programacioacuten basada en prototipos etc
24 iquestPOR QUEacute PYTHON
241 Caracteriacutesticas de Python
Python es un lenguaje de programacioacuten de tipo script creado por Guido van Rossum a principios de los antildeos 90 cuyo nombre proviene del grupo ldquoMonty Pythonrdquo El objetivo es un lenguaje con una sintaxis muy limpia y con un coacutedigo legible Python es un lenguaje de programacioacuten multiparadigma Esto significa que maacutes que forzar a los programadores a adoptar un estilo particular de programacioacuten permite varios estilos programacioacuten orientada a objetos programacioacuten imperativa funcional estructurada
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
10
etc Otros paradigmas estaacuten soportados mediante el uso de extensiones Los lenguajes de script (lenguajes interpretados de muy alto nivel como Perl y Python) gozan de creciente importancia e implantacioacuten en el mundo del software libre Python es un lenguaje de programacioacuten faacutecil de aprender y potente Dispone de eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos simple pero eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de las plataformas En Python no hay terminadores de sentencia (como el punto y como de CC++Java) ni marcas de iniciofin de bloque (como las llaves de esos mismos lenguajes) La indentacioacuten como forma de marcar bloques elimina errores propios de los lenguajes citados y que son frecuentes en los estudiantes y tambieacuten en los programadores profesionales sentencias condicionales sin accioacuten por antildeadir un punto y coma incorrectos bucles con una sola sentencia cuando parece que hay dos o maacutes (por omisioacuten de llaves con un sangrado inadecuado del programa) sentencias con semaacutentica ldquoalteradardquo por usar una coma cuando corresponde un punto y coma o por omitir un punto y coma al declarar un registro antes de una funcioacuten etc La indentacioacuten soacutelo resulta molesta cuando el tamantildeo de un bloque de cierta profundidad excede del tamantildeo de la ventana del editor Python es un lenguaje interpretado Los lenguajes interpretados permiten ciclos de desarrollo breves (edicioacuten y ejecucioacuten) que animan a los estudiantes a experimentar Python dispone de un entorno de ejecucioacuten que ayuda a detectar los errores (incluyendo aquellos que soacutelo se manifiestan en ejecucioacuten) sentildealaacutendolos con mensajes muy informativos Python ofrece ademaacutes un entorno interactivo con el que es posible efectuar pequentildeas pruebas o disentildear incrementalmente las soluciones a los problemas La contrapartida de que se trate de un lenguaje interpretado es obviamente la menor velocidad de ejecucioacuten Python puede considerarse pseudocoacutedigo ejecutable Es muy expresivo y su sintaxis sencilla interfiere poco en la implementacioacuten de algoritmos asiacute que resulta un buen sustituto del pseudocoacutedigo con la ventaja de que los algoritmos codificados en Python siacute son ejecutables Python ofrece un rico conjunto de estructuras de datos flexibles El tipo lista de python (un vector dinaacutemico heterogeacuteneo) permite introducir con naturalidad el concepto de secuencia y presentar los algoritmos baacutesicos de manejo de secuencias Que la indexacioacuten empiece siempre en 0 ayuda a dar el salto a C C++ o Java El entorno de ejecucioacuten proporciona comprobacioacuten de validez de los iacutendices eliminando asiacute una de las principales fuentes de problemas de C y C++ El hecho de que las listas sean
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
11
redimensionables elimina al programador la necesidad de tomar decisiones acerca de la longitud maacutexima de los vectores demasiado pronto Por otra parte Python es un lenguaje muy ortogonal una vez se ha aprendido a manejar listas por ejemplo se sabe manejar cadenas ya que ambos tipos son secuenciales y presentan conjuntos de operadores con igual nombre y semaacutentica Ademaacutes de listas y cadenas Python ofrece tuplas (listas inmutables) y diccionarios (vectores asociativos) Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc No es que haya que presentar todos los moacutedulos pero sirve para ayudar a consultar la documentacioacuten de las bibliotecas disponibles favorece la programacioacuten eficiente
Python es orientado a objetos A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulos en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar al de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
El inteacuterprete de Python y su extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables para las plataformas maacutes importantes en la sede web de Python httppythonorg y se pueden distribuir libremente La misma sede contiene tambieacuten distribuciones y direcciones de muchos moacutedulos programas y herramientas Python de terceras partes ademaacutes de documentacioacuten adicional Es faacutecil ampliar el inteacuterprete de Python con nuevas funciones y tipos de datos implementados en C o C++ (u otros lenguajes a los que se pueda acceder desde C) Python es tambieacuten adecuado como lenguaje de extensioacuten para aplicaciones adaptables al usuario Algunas de las empresas que usan Python son Google Yahoo Industrial Light amp Magic Walt Disney NASA SGI Inc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
12
3 INSTRUMENTACIOacuteN Y SOFTWARE EMPLEADOS PHYTON
31 INTRODUCCIOacuteN A PYTHON Como se comentoacute en el punto anterior Python
es orientado a objetos (realmente es multiparadigma aceptando distintos tipos de paradigmas) A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulo en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar a l de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc
Entre estas bibliotecas cabe mencionar Numpy Numpy es un moacutedulo de Python escrito en C que define los vectores numeacutericos las matrices y las operaciones entre ellos Ademaacutes de las funciones sobre vectores y matrices tambieacuten incluye funciones trigonomeacutetricas del tipo sin cos tan etc Numpy es el paquete fundamental necesario para programacioacuten cientiacutefica con Python Contiene entre otras cosa
Un poderoso N-dimensional objeto vector Sofisticadas funciones Herramientas para integracioacuten con coacutedigo de C C++ y Fortram Uacutetiles de algebra lineal Transformada de Fourier y capacidades de
nuacutemeros aleatorios Ademaacutes de sus usos cientiacuteficos obvios NumPy tambieacuten se puede utilizar como un eficiente multi-dimensional contenedor de datos geneacutericos Pueden ser definidos tipos arbitrarios de datos Esto permite integrar a la perfeccioacuten y raacutepidamente con una amplia variedad de bases de datos El objeto principal de Numpy es el vector homogeacuteneo multidimensional Eacuteste es una tabla de elementos (generalmente nuacutemeros) todos del mismo tipo indexados por una tupla de enteros positivos Por ldquomultidimensionalrdquo entendemos que los vectores pueden tener varias dimensiones de ejes El nuacutemero de ejes se llamaraacuten a menudo ldquorangordquo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
13
Por ejemplo las coordenadas de un punto en el espacio 3D seriacutea [1 2 1] que
representariacutea un vector de rango 1 de longitud 3 Otro ejemplo seriacutea
[[ 1 0 0]
[ 0 1 2]]
que representa un array de rango 2 (2 dimensiones) Para maacutes informacioacuten mirar
Numpy Glossary
Otras libreriacuteas importantes en Python son Scipy es otra libreriacutea que usa Numpy El desarrollo de Scipy comenzoacute en el antildeo 2001 Sus oriacutegenes se remontan al paquete con extensiones numeacutericas para Python denominado Numeric Posteriormente aparecioacute Numarray con la intencioacuten de construir un paquete maacutes flexible y de limpiar el coacutedigo aunque resultoacute ser maacutes lengo para caacutelculos matriciales en pocas dimensiones En el antildeo 2005 el principal impulsor de Scipy Travis Oliphant reunificoacute ambos en un uacutenico paquete que integrse las ventajas de ambos y se denominoacute Numpy considerado el nuacutecleo de Scipy Scipy en siacute mismo se concibe actualmente como una extensioacuten de las funcionalidades de Numpy
Scipy posee moacutedulos para optimizacioacuten de funciones integracioacuten funciones especiales resolucioacuten de ecuaciones diferenciales ordinarias y otros muchos aspectos
Puede ser usado con Linux Windows y ha sido tambieacuten compilado para Sun y Mac
Scipy es un proyecto de software libre que ha sido patrocinado por una compantildeiacutea Enthought inc
Su organizacioacuten se estructura en subpaquetes que se pueden considerar especializados en dominios cientiacuteficos determinados Podemos encontrar estos paquetes seguacuten la ayuda de scipy (v046)
stats -- Statistical Functions sparse -- Sparse matrix lib -- Python wrappers to external libraries linalg -- Linear algebra routines signal -- Signal Processing Tools misc -- Various utilities that dont have another home interpolate -- Interpolation Tools [] optimize -- Optimization Tools [] cluster -- Vector Quantization Kmeans [] fftpack -- Discrete Fourier Transform algorithms []
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
14
io -- Data input and output [] maxentropy -- Routines for fitting maximum entropy models [] integrate -- Integration routines [] liblapack -- Wrappers to LAPACK library [] special -- Special Functions [] libblas -- Wrappers to BLAS library []
Matplotlib es una libreriacutea de Python que facilita la publicacioacuten de calidad de la publicacioacuten interactiva Permite obtener graacuteficas de calidad para publicaciones Su principal submoacutedulo para dibujar es pyplot Mayavi Ipython PIL (Python Imaging Library) Pythonxy EPD (Enthought python distribution $$) hellip Este texto como Memoria de un Proyecto Final de Maacutester no pretende ser ni mucho menos un manual de Python pero siacute son necesarios unos conocimientos previos primero para comprender la filosofiacutea del programador y posteriormente saber las utilidades que podemos obtener al trabajar con Python Para ello vamos a incluir algunos detalles incluidos entro de la Guiacutea de aprendizaje de Python por Guido Van Rossum v24 creador de Python Para la realizacioacuten de este documento se ha consultado como aparece en Bibliografiacutea y Referencias en la Web numerosa documentacioacuten pero como punto de partida parece loacutegico recoger la documentacioacuten de la Guiacutea de aprendizaje del propio creador de Python Python contiene una serie de palabras clave dependientes de la versioacuten de instalacioacuten para asegurarnos de las palabras clave de la versioacuten descargada podemos introducir el siguiente coacutedigo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
15
Palabras clave de Python De la misma manera Python trae consigo ciertas funciones que vienen de serie esto es no es necesario cargarlas desde ninguacuten moacutedulo Dichas funciones dependen de la versioacuten de Python instalada En la paacutegina httpdocspythonorglibraryfunctionshtml Nos encontramos con dicha relacioacuten A modo de resumen eacutestas son (ver paacutegina siguiente)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
16
Funciones internas de Python
311 Guiacutea de aprendizaje de Python por Guido Van Rossum v24
Extractos del documento Si en alguna ocasioacuten hemos escrito un guioacuten para un inteacuterprete de oacuterdenes (o shell script) de UNIX largo puede que hayamos sentido que nos encantariacutea antildeadir una caracteriacutestica maacutes pero ya es tan lento tan grande tan complicadohellip O la caracteriacutestica involucra una llamada al sistema u otra funcioacuten accesible soacutelo desde C El problema en siacute no suele ser tan complejo como para transformar el guioacuten en un programa en C Igual el programa requiere cadenas de longitud variable u otros tipos de datos (como listas ordenadas de nombres de fichero) faacuteciles en sh pero tediosas en C o quizaacute no tengamos tanta soltura con C Otra situacioacuten Quizaacute tengas que trabajar con bibliotecas de C diversas y el ciclo normal en C de escribir-compilar-probar-recompilar es demasiado lento Necesitas desarrollar software con maacutes velocidad Posiblemente has escrito un programa al que vendriacutea bien un lenguaje de extensioacuten y no quieres disentildear un lenguaje escribir y depurar el inteacuterprete y adosarlo a la aplicacioacuten En tales casos Python puede ser el lenguaje que necesitas Python es simple pero es un lenguaje de programacioacuten real Ofrece maacutes apoyo e infraestructura para programas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
17
grandes que el inteacuterprete de oacuterdenes Por otra parte tambieacuten ofrece mucho maacutes comprobacioacuten de errores que C y al ser un lenguaje de muy alto nivel tiene incluidos tipos de datos de alto nivel como matrices flexibles y diccionarios que llevariacutean diacuteas de programacioacuten en C Dados sus tipos de datos maacutes generales se puede aplicar a un rango de problemas maacutes amplio que Awk o incluso Perl pero muchas cosas son al menos igual de faacuteciles en Python que en esos lenguajes Python te permite dividir su programa en moacutedulos reutilizables desde otros programas en Python Viene con una gran coleccioacuten de moacutedulos estaacutendar que puedes utilizar como base de tus programas (o como ejemplos para empezar a aprender Python) Tambieacuten hay moacutedulos incluidos que proporcionan ES de ficheros llamadas al sistema ldquosocketsrdquo y hasta interfaces graacuteficas con el usuario como Tk Python es un lenguaje interpretado lo que ahorra un tiempo considerable en el desarrollo del programa pues no es necesario compilar ni enlazar El inteacuterprete se puede utilizar de modo interacivo lo que facilita experimentar con caracteriacutesticas del lenguaje escribir programas desechables o probar funciones durante el desarrrollo del prgram de la base hacia arriba Tambieacuten es una calculadora muy uacutetil Python permite escribir programas muy compactos y legibles Los programas escritos en Python son normalmente mucho maacutes cortos que sus equivalentes en C o C++ por varios motivos
Los tipos de datos de alto nivel permiten expresar operaciones complejas en una sola sentencia
El agrupamiento de sentencias se realiza mediante sangrado (indentacioacuten) en lugar de beginend o llaves
No es necesario declarar los argumentos ni las variables
Python es ampliable si ya sabes programar en C es faacutecil antildeadir una nueva funcioacuten o moacutedulo al inteacuterprete para realizar operaciones criacuteticas a la maacutexima velocidad o para enlazar programas en Python con bibliotecas que soacutelo estaacuten disponibles en forma binaria (como bibliotecas de graacuteficos especiacuteficas del fabricante) Una vez enganchado puedes enlazar el inteacuterprete de Python a una aplicacioacuten escrita en C y utilizarlo como lenguaje de macros para dicha aplicacioacuten
3111 Llamar al inteacuterprete
En UNIX el inteacuterprete de Python se suele instalar como bdquousrlocalbinpython‟ en aquellas maacutequinas donde esteacute disponible En Windows se instala en el directorio bdquoArchivos de programa‟ o en cualquier otro directorio seleccionado Poner este directorio en la ruta de ejecutables hace posible arrancarlo tecleando en el inteacuterprete de oacuterdenes la orden
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
18
Python
Como la eleccioacuten del directorio donde reside el inteacuterprete es una opcioacuten de instalacioacuten es posible que se halle en otros lugares Consulta con tu guru de Python local o tu administrador de sistemas (por ejemplo bdquousrlocalpython‟ es una alternativa recuente) Teclear un caraacutecter fin de fichero (Control-D en UNIX Control-Z en DOS o Windows) en el inteacuterprete causa la salida del inteacuterprete con un estado cero Si eso no funciona se puede salir del inteacuterprete tecleando las siguientes oacuterdenes bdquoimport sys sysexit()‟ Las opciones de edicioacuten de la liacutenea de oacuterdenes no son muy destacables En UNIX es posible que quien instalara el inteacuterprete en su sistema incluyera soporte para la biblioteca de GNU bdquoreadline‟ que permite una edicioacuten de liacutenea maacutes elaborada y la recuperacioacuten de oacuterdenes anteriores El modo maacutes raacutepido de ver si hay soporte de edicioacuten de liacuteneas es teclear Control-P en cuanto aparece el inteacuterprete Si pita la edicioacuten de liacuteneas estaacute disponible Si no sale nada o sale ^P no estaacute disponible la edicioacuten de liacuteneas y soacutelo se puede utilizar la tecla de borrado para borrar el uacuteltimo caraacutecter tecleado El inteacuterprete funciona como el inteacuterprete de oacuterdenes de UNIX cuando se lo llama con la entrada estaacutendar conectada a un dispositivo tty lee y ejecuta las oacuterdenes interactivamente cuando se le da un nombre de fichero como argumento o se le da un fichero como entrada estaacutendar lee y ejecuta un guion desde ese fichero Otro modo de arrancar el inteacuterprete es bdquopython -c orden [argumento] ‟ que ejecuta las sentencias de orden de forma anaacuteloga a la opcioacuten -c de la liacutenea de oacuterdenes Como las sentencias de Python suelen contener espacios u otros caracteres que la liacutenea de oacuterdenes considera especiales lo mejor es encerrar orden entre dobles comillas por completo
Imagen de la pantalla al abrir Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
19
Hay moacutedulos de Python que son uacutetiles como programas independientes Se los puede llamar mediante ldquopython-m moacutedulo[arg] helliprdquo que ejecuta el fichero de coacutedigo fuente de module como si se hubiera dado el nombre completo en la liacutenea de oacuterdenes Cuando se leen oacuterdenes desde una tty se dice que el inteacuterprete estaacute en modo interacitov En este modo espera a la siguiente orden con el indicador principal que suele ser tras signos ldquomayorrdquo (ldquogtgtgtrdquo) Para las liacuteneas adicionales se utiliza el indicador secundario por omisioacuten tres puntos (ldquohelliprdquo)
Programar en Python puede hacerse de varias maneras seguacuten la necesidad o el gusto de cada persona Para los neoacutefitos mi recomendacioacuten es que utilicen el ambiente graacutefico interactivo llamado IDLE Esta herramienta viene incluiacuteda con el moacutedulo tkinter Ademaacutes de resaltar la sintaxis en colores permite editar archivos fuente y es maacutes amigable al inicio
El IDLE tiene dos ambientes el shell interactivo con tiacutetulo Python Shell en su ventana muestra el prompt gtgtgt y espera un comando y uno o maacutes editores que se abren con el menuacute File --gt New Window Cada editor empieza con el tiacutetulo Untitled en su ventana el cual cambia hasta que se salva a un archivo con File --gt Save As (y subsecuentemente File --gt Save) Cada editor nos permite ejecutar el coacutedigo Python que contiene
Se recomienda crear una carpeta para realizar y guardar los ejemplos Para correr idle cambiar primero a esa carpeta y entonces correr idle En MS- Windows
Cejemplosgt Cpython22idleidle
En Linux
[usuariopc ejemplos]$ idle amp La primera vez que hacemos un ejemplo hemos de intentar hacerlo paso a paso en forma interactiva en el shell tecleando cada comando Es la forma en que aprendemos maacutes que si simplemente copiamos y pegamos Una vez que tecleamos y funcionan las cosas podemos copiar del shell interactivo y pegamos a una ventana de editor y salvamos en un archivo con terminacioacuten py para que conservemos lo que hicimos para siempre
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
20
Imagen del Shell interactivo de IDLE
Acceso a nueva ventana dentro del Shell interactivo de IDLE
Nueva ventana del editor de IDLE Una vez que partiendo de una ventana vacia tenemos nuestro coacutedigo hemos de seleccionar FileSave As para guardar el archivo y tenerlo disponible
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
21
Ventana del editor de IDLE con coacutedigo preparado para guardar
Una vez que nos hemos asegurado de que tenemos el coacutedigo guardado iquestcoacutemo hacemos para ejecutar el programa La respuesta es seleccionando Run Module En caso de seleccionar Run Module antes de guardar el coacutedigo Python nos pide que lo guardemos anteshellip Al seleccionar Run Module Python iraacute interpretando liacutenea por liacutenea y mostrando los resultados a traveacutes del Inteacuterprete Si existiese alguacuten error de sintaxis se avisa del tipo de error y doacutende se produce Una vez corregido el problema se vuelve a intentar el Run Module
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
22
El tener un inteacuterprete permite ir probando partes de programas sobre las que no se estaacute seguro y ver coacutemo reaccionan para poder decidir si se incluyen o no y coacutemo se pueden adaptar Asiacute se estaacute continuamente alternando entre el inteacuterprete y el programa Maacutes informacioacuten en httpdocspythonorglibraryidlehtml
3112 Moacutedulos
Si salimos del inteacuterprete de Python y vuelves a entrar las definiciones que se hayan hecho (funciones y variables) se pierden Por ello si se quiere escribir un programa algo maacutes largo seraacute mejor que se utilice un editor de texto para preparar la entrada del inteacuterprete y ejecutarlo con ese fichero como entrada Esto se llama crear un guioacuten Seguacuten vayan creciendo los programas puede que quieras dividirlos en varios ficheros para facilitar el mantenimiento Puede que tambieacuten quieras utilizar una funcioacuten que has escrito en varios programas sin tener que copiar su definicioacuten en cada programa Para lograr esto Python tiene un modo de poner definiciones en un fichero y utilizarlas en un guioacuten o en una instancia interactiva del inteacuterprete Tal fichero se llama moacutedulo las definiciones de un moacutedulo se pueden importar a otros moacutedulos o al moacutedulo principal (la coleccioacuten de variables accesible desde un guioacuten ejecutado desde el nivel superior y en el modo de calculadora) Un moacutedulo es un fichero que contiene definiciones y sentencias de Python El nombre del fichero es el nombre del moacutedulo con el sufijo ldquopyrdquo Dentro de un moacutedulo el nombre del moacutedulo (como cadena) es accesible mediante la variable global __name__ Un moacutedulo puede contener sentencias ejecutables ademaacutes de definiciones de funciones Estas sentencias sirven para inicializar el moacutedulo Soacutelo se ejecutan la primera vez que se importa el moacutedulo en alguna parte1 Cada moacutedulo tiene su propia tabla de siacutembolos que utilizan todas las funciones definidas por el moacutedulo como tabla de siacutembolos global Por ello el autor de un moacutedulo puede utilizar variables globales dentro del moacutedulo sin preocuparse por conflictos con las variables globales de un usuario del moacutedulo Por otra parte si sabes lo que haces puedes tocar las variables globales de un moacutedulo con la misma notacioacuten utilizada para referirse a sus funciones nombreModnombreElem Los moacutedulos pueden importar otros moacutedulos Es una costumbre no obligatoria colocar todas las sentencias ldquoimportrdquo al principio del moacutedulo (o guioacuten) Los nombres del moacutedulo importado se colocan en la tabla de siacutembolos global del moacutedulo (o guioacuten) que lo importa Existe una variacioacuten de la sentencia import que importa los nombres de un moacutedulo directamente a la tabla de siacutembolos del moacutedulo que lo importa Por ejemplo
gtgtgt from fibo import fib fib2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
23
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto no introduce el nombre del moacutedulo del que se toman los elementos importados en la tabla de siacutembolos local (por lo que en el ejemplo no estaacute definido fibo) Ademaacutes existe una variacioacuten que importa todos los nombres que define un moacutedulo gtgtgt from fibo import
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto importa todos los nombres excepto los que empiezan por un guioacuten bajo (_)
3113 El camino de buacutesqueda de moacutedulos
Cuando se importa un moacutedulo denominado fiambre el inteacuterprete busca un fichero denominado bdquofiambrepy‟ en el directorio actual y luego en la lista de directorios especificada por la variable de entorno PYTHONPATH Tiene la misma sintaxis que la variable de liacutenea de oacuterdenes PATH de UNIX que es una lista de nombres de directorios Cuando PYTHONPATH no tiene ninguacuten valor o no se encuentra el fichero se continuacutea la buacutesqueda en un camino dependiente de la instalacioacuten En UNIX normalmente es bdquousrlocallibpython‟ En realidad se buscan los moacutedulos en la lista de directorios dada por la variable syspath que se inicializa desde el directorio que contiene el guioacuten de entrada (o el directorio actual) PYTHONPATH y el valor por omisioacuten dependiente de la instalacioacuten Esto permite que los programas que saben lo que hacen modifiquen o reemplacen el camino de buacutesqueda de moacutedulos Obseacutervese que como el directorio que contiene el guioacuten bajo ejecucioacuten estaacute en el camino de buacutesqueda de moacutedulos es importante que el moacutedulo no tenga el mismo nombre que un moacutedulo estaacutendar o Python lo intentaraacute cargar el guioacuten como moacutedulo cuando se importe el moacutedulo Normalmente esto provocaraacute errores
3114 Ficheros Python ldquoCompiladosrdquo
Como mejora considerable del tiempo de arranque de programas cortos que utilizan muchos moacutedulos estaacutendar si existe un fichero llamado bdquofiambrepyc‟ en el directorio donde se encuentra bdquofiambrepy‟ se supone que contiene una versioacuten previamente ldquocompilada a byterdquo del moacutedulo fiambre La fecha y hora de la versioacuten de bdquofiambrepy‟
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
24
utilizada para generar bdquofiambrepyc‟ se graba en bdquofiambrepyc‟ y no se considera el fichero bdquopyc‟ si no concuerdan Normalmente no hay que hacer nada para generar el fichero bdquofiambrepyc‟ Siempre que bdquofiambrepy‟ se compile sin errores se hace un intento de escribir la versioacuten compilada a bdquofiambrepyc‟ No se provoca un error si falla el intento Si por cualquier motivo no se escribe completamente el fichero el fichero bdquofiambrepyc‟ resultante seraacute reconocido como no vaacutelido y posteriormente ignorado El contenido del fichero bdquofiambrepyc‟ es independiente de la plataforma por lo que se puede compartir un directorio de moacutedulos entre maacutequinas de diferentes arquitecturas
3115 Moacutedulos estandar
Python viene con una biblioteca de moacutedulos estaacutendar descrita en un documento aparte la Referencia de las bibliotecas Algunos moacutedulos son internos al inteacuterprete y proporcionan acceso a las operaciones que no son parte del nuacutecleo del lenguaje pero se han incluido por eficiencia o para proporcionar acceso a primitivas del sistema operativo como las llamadas al sistema El conjunto de dichos moacutedulos es una opcioacuten de configuracioacuten que tambieacuten depende de la plataforma subyacente Por ejemplo el moacutedulo amoeba soacutelo se proporciona en sistemas que de alguacuten modo tienen acceso a primitivas Amoeba Hay un moacutedulo en particular que merece una especial atencioacuten el moacutedulo sys que es siempre interno en cualquier inteacuterprete de Python Estas variables soacutelo estaacuten definidas si el inteacuterprete estaacute en modo interactivo La variable syspath es una lista de cadenas que determina el camino de buacutesqueda de moacutedulos del inteacuterprete Se inicializa a un valor por omisioacuten tomado de la variable de entorno PYTHONPATH o de un valor por omisioacuten interno si PYTHONPATH no tiene valor Se puede modificar mediante operaciones de lista estaacutendar por ejemplo gtgtgt import sys gtgtgt syspathappend(‟ufsguidolibpython‟)
3116 Paquetes
Los paquetes son un meacutetodo de estructurar el espacio nominal de moacutedulos de Python mediante el uso de ldquonombres de moacutedulos con puntordquo Por ejemplo el nombre de moacutedulo AB hace referencia a un submoacutedulo denominado ldquoBrdquo de un paquete denominado ldquoArdquo Del mismo modo que el uso de moacutedulos evita que los autores de diferentes moacutedulos tengan que preocuparse de los nombres de variables globales de los otros la utilizacioacuten de nombres de moacutedulo con puntos evita que los autores de paquetes multi-moacutedulo como Numpy o Pil (Biblioteca de tratamiento de imagen de
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
25
python) tengan que preocuparse de los nombres de los moacutedulos ajenos Supoacuten que deseas disentildear una coleccioacuten de moacutedulos (un paquete) para tratar de manera uniforme ficheros de sonido y datos de sonido Existen muchos formatos de fichero de sonido (que se suelen distinguir por la extensioacuten como bdquowav‟ bdquoaiff‟ o bdquoau‟) por lo que podriacuteas necesitar crear y mantener una coleccioacuten creciente de moacutedulos de conversioacuten entre los diferentes formatos Tambieacuten existen muchas operaciones posibles sobre los datos de sonido (tales como mezclar antildeadir eco ecualizar o generar un efecto artificial de estereofoniacutea) por lo que ademaacutes estariacuteas escribiendo una serie de moacutedulos interminable para realizar estas operaciones He aquiacute una posible estructura de tu paquete (expresado en teacuterminos de sistema de ficheros jeraacuterquico)
Sonido Paquete de nivel superior __init__py Inicializa el paquete de sonido
Formatos Subpaquete de conversiones de formato de ficheros __init__py leerwavpy escriwavpy leeraiffpy escriaiffpy leeraupy escriaupy Efectos Subpaquete de efectos de sonido __init__py ecopy surroundpy inversopy Filtros Subpaquete de filtros __init__py ecualizadorpy vocoderpy karaokepy
Modelo de estructura paquetemoacutedulo Al importar el paquete Python rastrea los directorios de syspath buscando por el subdirectorio de paquetes Los ficheros bdquo__init__py‟ son necesarios para que Python trate los directorios como contenedores de paquetes Se hace asiacute para evitar que los directorios con nombres
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
26
comunes como bdquotest‟ oculten accidentalmente moacutedulos vaacutelidos que aparezcan maacutes tarde dentro del camino de buacutesqueda En el caso maacutes sencillo bdquo__init__py‟ puede ser un fichero vaciacuteo pero tambieacuten puede ejecutar coacutedigo de inicializacioacuten del paquete o actualizar la variable __all__ descrita posteriormente Los usuarios del paquete pueden importar moacutedulos individuales del paquete por ejemplo import SonidoEfectoseco
De este modo se carga el submoacutedulo SonidoEfectoseco Hay que hacer referencia a eacutel por su nombre completo SonidoEfectosecofiltroeco(entrada salida retardo=07
aten=4)
Un modo alternativo de importar el submoacutedulo es from SonidoEfectos import eco
Asiacute tambieacuten se carga el submoacutedulo eco y se hace disponible sin su prefijo de paquete por lo que se puede utilizar del siguiente modo ecofiltroeco(entrada salida retardo=07 aten=4)
Y otra variacioacuten es importar la funcioacuten o variable deseada directamente from SonidoEfectoseco import filtroeco
De nuevo se carga el submoacutedulo eco pero se hace la funcioacuten filtroeco disponible directamente filtroeco(entrada salida retardo=07 aten=4)
Observa que al utilizar from paquete import elemento el elemento puede ser tanto un submoacutedulo (o subpaquete) del paquete como cualquier otro nombre definido por el paquete como una funcioacuten clase o variable La sentencia import comprueba primero si el elemento estaacute definido en el paquete Si no asume que es un moacutedulo e intenta cargarlo Si no lo consigue se provoca una excepcioacuten ImportError Sin embargo cuando se utiliza la sintaxis
importelementosubelementosubsubelemento cada elemento menos el
uacuteltimo debe ser un paquete El uacuteltimo elemento puede ser un moacutedulo o un paquete
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
27
pero no una clase funcioacuten o variable definida en el nivel superior
3117 Importar de un paquete
Y iquestqueacute ocurre cuando el usuario escribe from SonidoEfectos import En teoriacutea deberiacutea rastrearse el sistema para encontrar queacute submoacutedulos existen en el paquete e importarlos todos Por desgracia esta operacioacuten no funciona muy bien en las plataformas Windows y Mac en las que el sistema de ficheros no tiene una idea muy precisa de las mayuacutesculas de un fichero En estas plataformas no hay un modo garantizado de conocer si un fichero bdquoECOPY‟ deberiacutea ser importado como eco Eco o ECO (por ejemplo Windows 95 tiene la molesta costumbre de mostrar todos los nombres de fichero con la primera letra en mayuacutescula) La restriccioacuten de nombres de fichero DOS (8+3) antildeade otro problema para los nombres de moacutedulo largos La uacutenica solucioacuten es que el autor del paquete proporcione un iacutendice expliacutecito del paquete La sentencia import utiliza la siguiente convencioacuten Si el coacutedigo del bdquo__init__py‟ de un paquete define una lista llamada __all__ se considera que es la lista de nombres de moacutedulos que se deben importar cuando se encuentre from paquete import Depende del autor del paquete mantener la lista actualizada cuando se libere una nueva versioacuten del paquete Los autores del paquete pueden decidir no mantenerlo si no es uacutetil importar del paquete Por ejemplo el fichero bdquoSonidoEfectos__init__py‟ podriacutea contener el siguiente coacutedigo __all__ = [eco surround inverso] Esto significariacutea que from SonidoEfectos import importariacutea los tres submoacutedulos mencionados del paquete Sonido Si __all__ no estaacute definido la sentencia from SonidoEfectos import no importa todos los moacutedulos del subpaquete SonidoEfectos al espacio nominal actual Soacutelo se asegura de que el paquete SonidoEfectos ha sido importado (ejecutando posiblemente el coacutedigo de inicializacioacuten de bdquo__init__py‟) y luego importa cualesquiera nombres definidos en el paquete Esto incluye cualquier nombre definido (y submoacutedulos cargados expliacutecitamente) por bdquo__init__py‟ Tambieacuten incluye cualquier submoacutedulo del paquete expliacutecitamente importado por sentencias import anteriores Mira este coacutedigo import SonidoEfectoseco import SonidoEfectossurround from SonidoEfectos import En este ejemplo los moacutedulos eco y surround se importan al espacio nominal vigente porque estaacuten definidos en el paquete SonidoEfectos cuando se ejecuta la sentencia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
28
fromimport (esto tambieacuten funciona si estaacute definido __all__)
Observa que en general se debe evitar importar de un moacutedulo o paquete ya que suele dar como resultado coacutedigo poco legible Sin embargo se puede usar para evitar teclear en exceso en sesiones interactivas y cuando ciertos moacutedulos esteacuten disentildeados para exportar soacutelo nombres que cumplan ciertas reglas
Recuerda no hay nada incorrecto en utilizar from Paquete import
submoacutedulo_concreto De hecho es la notacioacuten recomendada salvo que el moacutedulo
que importa necesite usar submoacutedulos del mismo nombre de diferentes paquetes
3118 Referencias internas al paquete
Es comuacuten que los submoacutedulos necesiten hacerse referencias cruzadas Por ejemplo el moacutedulo surround podriacutea utilizar el moacutedulo eco De hecho tales referencias son tan comunes que la sentencia import busca antes en el paquete contenedor que en el camino de buacutesqueda de moacutedulos estaacutendar Por ello basta con que el moacutedulo surround use import eco o from eco import filtroeco Si el moacutedulo importado no se encuentra en el paquete actual (el paquete del que el moacutedulo actual es submoacutedulo) la sentencia import busca un moacutedulo de nivel superior con el nombre dado Cuando se estructuran los paquetes en subpaquetes (como el paquete Sonido del ejemplo) no hay un atajo para referirse a los submoacutedulos de los paquetes hermanos y se ha de utilizar el nombre completo del subpaquete Por ejemplo si el moacutedulo SonidoFiltrosvocoder necesita utilizar el moacutedulo eco del paquete SonidoEfectos debe utilizar from SonidoEfectos import eco
32 FUNCIONES INCLUIDAS EN NUMPY POR CATEGORIacuteAS (ARRAY CREATION)
A modo indicativo e introductorio se incluyen las funciones incluidas en la libreriacutea Numpy por categoriacuteas Ver maacutes informacioacuten en httpdocsscipyorgdocnumpy Numerical
arange() arrayrange()
linspace() logspace()
Ones and zeros
empty() empty_like()
eye() identity()
ones() ones_like()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
29
tri() tril() triu()
zeros() zeros_like()
From existing data
array() recarray()
asarray() asanyarray() asmatrix()
copy()
fromarrays() frombuffer() fromfile() fromfunction()
fromiter() loadtxt()
Building matrices
bmat()
diag() diagflat()
mat() matrix()
vander()
Reinterpreting arrays
view()
Types
astype()
cast[]()
int8() int16() int32() int64() int128()
uint8() uint16() uint32() uint64() uint128()
float16() float32() float64() float96() float128()
float256()
complex32() complex64() complex128() complex192()
complex256() complex512()
bool_()
object_()
void() str_() unicode_()
byte() ubyte()
short() ushort()
intc() uintc()
intp() uintp()
int_() uint()
longlong() ulonglong()
single() csingle()
float_() complex_()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
30
longfloat() clongfloat()
Kinds of array
asarray()
asanyarray()
asmatrix()
Changing the number of dimensions
atleast_1d() atleast_2d() atleast_3d()
broadcast()
expand_dims()
squeeze()
Transpose-like operations
rollaxis()
swapaxes()
T transpose()
Reshaping arrays
flat flatten()
ravel()
reshape() shape
Array modification
Joining arrays
append()
column_stack()
concatenate()
dstack() hstack() vstack()
Splitting arrays
array_split()
dsplit() hsplit() split() vsplit()
Enlarging arrays
tile()
repeat()
Adding and removing elements
delete()
insert()
resize()
trim_zeros()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
31
unique()
Rearranging elements
fliplr() flipud()
reshape()
roll()
rot90()
Indexing
[]
take()
put()
putmask()
Indexing syntax
slice()
newaxis
index_exp[]
Generating arrays suitable for indexing
c_[]
r_[]
s_[]
nonzero()
where()
indices()
ix_()
mgrid[]
ogrid()
Indexing-like operations
choose()
where()
compress()
diag() diagonal()
select()
Iterating
flat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
32
ndenumerate()
ndindex()
Logic
[]
all() any()
allclose()
alltrue()
nonzero()
piecewise()
sometrue()
Finding things
argmax() argmin()
searchsorted()
Array statistics
average() mean()
bincount() histogram()
corrcoef()
cov()
max() min() ptp()
median()
std() var()
ufuncs
abs() absolute()
add() multiply()
angle()
arccos() arcsin() arctan()
arccosh() arcsinh() arctanh()
arctan2()
bitwise_and() bitwise_or() bitwise_xor()
ceil() floor() round()
conj() conjugate()
cos() sin() tan()
cosh() sinh() tanh()
fix()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
33
hypot()
logical_and() logical_not() logical_or() logical_xor()
maximum() minimum()
ufunc methods
accumulate()
outer()
reduce()
Functional constructs
apply_along_axis()
apply_over_axis()
vectorize()
Random numbers
beta() binomial() gumbel() poisson() standard_normal()
uniform() vonmises() weibull()
bytes()
permutation()
rand() randint() randn()
random_integers()
random_sample()
ranf()
sample()
seed()
shuffle()
Array math
clip()
cross()
cumprod() cumsum()
diff()
digitize()
dot()
inner()
outer()
inv() pinv()
poly1d()
polyfit()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
34
prod() sum()
tensordot()
vdot()
FFT
fft()
fftfreq()
fftshift()
ifft()
Linear algebra
inv()
lstsq()
solve()
svd()
trace()
Array output
savetxt()
set_printoptions()
tofile()
tolist()
Other
sort() argsort()
binary_repr()
dtype()
fill()
finfo()
generic
imag real
inf nan
item()
lexsort()
ndim
shape
typeDict()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
35
Numpy Functions by Category (uacuteltima edicioacuten 2008-06-13 122659
efectuada por jh)
MoinMoin Powered
Pyt
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
36
4 METODOLOGIacuteA En este apartado se proporciona una descripcioacuten detallada de la metodologiacutea utilizada para el desarrollo e implementacioacuten de la biblioteca Utilizando un paradigma Estructurado de la programacioacuten que considera que la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Esto nos permite reutilizar coacutedigo programado y nos proporciona una mejor comprensioacuten de la programacioacuten En el uacuteltimo paquete de la libreriacutea tambieacuten se ha realizado una incursioacuten a la programacioacuten orientada a objetos con la declaracioacuten de algunas clases
41 ESTRUCTURA DE LA LIBRERIacuteA GEOTOPO En nuestro caso hemos partido del concepto de creacioacuten de una libreriacutea de funciones del aacutembito de la Topografiacutea y Geodesia Esta libreriacutea de Python se estructura como un paquete con el nombre de la libreriacutea ldquogeotopordquo que a su vez contiene 6 paquetes maacutes seguacuten tipologiacutea Asiacute tenemos
Imagen de los paquetes incluidos dentro del paquete (libreriacutea) geotopo
Por orden intuitivo desde el punto de vista de aplicacioacuten de las herramientas tenemos los siguientes paquetes
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
37
general que contiene funciones de tipo general y transversal al resto de herramientas
Moacutedulos implementados dentro de general
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
38
topografia que contiene aplicacioacuten topograacuteficas
Moacutedulos implementados dentro de topografia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
39
geodesia Aplicaciones geodeacutesicas
Moacutedulos implementados dentro de geodesia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
40
proy_cartograficas Herramientas de caacutelculos en diferentes proyeccionesetc
Moacutedulos implementados dentro de proy_cartograficas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
41
transformacioacuten Aplicaciones con modelo de rejilla del IGN y EGM08REDNAP
Moacutedulos implementados dentro de transformacioacuten
aplicaciones Distintos ejemplos de aplicabilidad de las funciones y clases implementadas en los moacutedulos de la libreriacutea
Cada uno de estos paquetes (carpetas) como se ha podido ver contiene a su vez varios moacutedulos y en cada uno de ellos y con su mismo nombre se define una uacutenica funcioacuten por moacutedulo salvo en la carpeta de transformcioacuten donde como se ha comentado antes nos adentramos dentro de la programacioacuten orientada a objetos y en algunos moacutedulos se implementan clases y dentro de estas funciones etc De esta manera al importar una funcioacuten la tenemos que importar desde el modulo que la contenga Dentro de cada carpeta se aprecia la existencia de un fichero llamado __init__py que convierte dicha carpeta en un paquete de Python Se advierte que desde el cierre de esta memoria versioacuten en papel a la entrega total de documentacioacuten puede haberse ampliado el nuacutemero de moacutedulos de la libreriacutea ldquogeotoprdquo que siacute se incluiriacutea en el CD con la implementacioacuten de coacutedigos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
42
42 DOCUMENTADO DE FUNCIONES Se puede documentar una funcioacuten en Python proporcionando una cadena de documentacioacuten (comentarios)
Las comillas triples implican una cadena multiliacutenea Todo lo que haya entre el principio y el final de las comillas es parte de una sola cadena incluyendo los retornos de carro y otras comillas Pueden usarse para definir cualquier cadena pero donde suelen estar maacutes presentes es haciendo de cadena de documentacioacuten Todo lo que hay entre las comillas triples es la cadena de documentacioacuten de la funcioacuten y se usa para explicar lo que hace la funcioacuten En caso de que exista una cadena de documentacioacuten debe ser la primera cosa definida en una funcioacuten (esto es lo primero tras los dos puntos) Teacutecnicamente no es necesario dotar a una funcioacuten de una cadena de documentacioacuten pero debemos de hacerlo siempre En Python esto tiene un incentivo antildeadido la cadena de documentacioacuten estaacute disponible en tiempo de ejecucioacuten como atributo de la funcioacuten
Lecturas complementarias sobre las funciones de documentacioacuten
PEP 257 define las convenciones al respecto de las cadenas de documentacioacuten La Guiacutea de estilo de Python indica la manera de escribir una buena cadena de
documentacioacuten El Tutorial de Python expone convenciones para el espaciado dentro de las
cadenas de documentacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
43
Ejemplo de documentado de funciones con cadena de documentacioacuten
Toda la informacioacuten incluida dentro de una cadena de documentacioacuten de triple comillas estaacute accesible en tiempo de ejecucioacuten Asiacute si pedimos ayuda de una funcioacuten nos aparece toda la informacioacuten incluida en dicha cadena de documentacioacuten
Ejemplo de consulta de la ayuda de las funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
44
En la siguiente web podemos encontrar maacutes informacioacuten sobre el documentado de funciones en Python httpcoderwarcom201106hola-python-la-utilidad-de-los-comentarios Ademaacutes de los comentarios de las funciones en Python como en otros lenguajes de programacioacuten podemos incluir liacuteneas o simples palabras de comentarios En Python se usa el siacutembolo para preceder los comentarios Podemos comentar las liacuteneas de nuestro trabajo
Comentar un grupo de liacuteneas
Determinar el tipo de codificacioacuten Esto es importante para poder usar caracteres especiales como la tilde o la ntilde Generalmente se coloca en la primera liacutenea del programa Existen muchas codificaciones
Poner cabecera a nuestro programa De esta forma identificaremos el nombre del programador la fecha en que se realizoacute y demaacutes datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
45
En el caso que nos atantildee de la libreriacutea geotopo hemos considerado introducir unos comentarios descriptivos de los moacutedulos mediante el caraacutecter y tras la definicioacuten de las funciones se incluyen unas cadenas de documentacioacuten
Ejemplo de la documentacioacuten de moacutedulos y funcioneshellip
Para evitar problemas de codificacioacuten como ha ocurrido durante la implementacioacuten del coacutedigo se han incluido al inicio del mismo dos liacuteneas para solucionar el problema Estas liacuteneas son
Comentarios de los moacutedulos
Cadena de documentacioacuten de funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
46
-- coding iso 8859-1 -
ISO 8859-1 es una norma de la ISO que define la codificacioacuten del alfabeto latino incluyendo diacriacuteticos como letras aceacutentuadas ntilde) y letras especiales necesarios para la escritura de las siguientes lenguas originarias de Europa occidental alemaacuten aragoneacutes asturiano castellano catalaacuten daneacutes escoceacutes espantildeol feroeacutes fineacutes franceacutes gaeacutelico gallego ingleacutes islandeacutes italiano neerlandeacutes noruego portugueacutes sueco y Euskera Tambieacuten conocida como Alfabeto Latino nordm 1 o ISO Latiacuten 1 Esta norma pertenece al grupo de juegos de caracteres de la ISO conocidos como ISOIEC 8859 que se caracterizan por poseer la codificacioacuten ASCII en su rango inicial (128 caracteres) y otros 128 caracteres para cada codificacioacuten con lo que en total utilizan 8 bits -- coding cp1252 -
Si trabajamos con IDLE con el uso de los acentos (en general con los caracteres no ASCII) nos daraacute error Si en el coacutedigo de un programa escribimos una cadena que contenga caracteres no ASCII(acentos ntildeiquestiexcl) al guardar el archivo por primera vez IDLE nos muestra el siguiente mensaje de aviso
Si pulsamos el botoacuten ldquoEdit my filerdquo Al principio del programa se insertaraacute la liacutenea siguiente
-- coding cp1252 --
Que indica el juego de caracteres utilizado en el archivo (cp1252 es el juego de caracteres de Windows para Europa occidental) A partir de entonces podemos guardar el archivo sin problemas Python no tiene una primera o uacuteltima linea exigida pero siacute que es habitual dar la localizacioacuten de Python como primera liacutenea en forma de comentario usrbinpython
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
47
43 FUNCIONES IMPLEMENTADAS A continuacioacuten se incluye una relacioacuten de las funciones implementadas por paquetes Ademaacutes de su nombre y un pequentildeo resumen de su aplicacioacuten se han incluido 3 apartados maacutes En verde Datos de entrada Indica los datos que necesita la funcioacuten Datos de salida Nos muestra si el resultado es uacutenico o una coleccioacuten de resultados (siempre en forma vector en el orden indicado) En rojo Llamadas o ldquoimportacioacutenrdquo de moacutedulos predefinidos del sistema ossys Llamadas a funciones de predefinidas del moacutedulo numpy En morado Llamadas a funciones definidas en esta libreriacutea (geotopo) bien incluidas en el mismo subpaquete que la propia funcioacuten definida o incluida en otro subpaquete De esta manera podemos tener una idea de las funciones implementadas los datos de partida necesarios y los resultados a obtener asiacute como la interrelacioacuten de cada funcioacuten con el resto de funciones de la libreriacutea geotopo Para el caso de cambio de proyeccioacuten o de Sistema de Referencia Coordenado se ha tomado la nomenclatura ldquodesderdquo ldquoardquo ldquoahorardquo Para sentildealar el ldquoardquo se ha elegido el nuacutemero 2 por su pronunciacioacuten to (a) Asiacute por ejemplo para el paso de latitud geodeacutesica a creciente en nombre de la funcioacuten seraacute lat2cre
431 Libreriacutea en Python ldquogeotopogeneralrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 areacor - Caacutelculo de la superficie interior de un poligono sobre el plano
entrada=(matriz) 2columnas xy salida=superficie
import ossys from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
48
busca2col - Localiza la primera fila con los valores recibidos en las dos columnas indicadas
Recibe Valor en la primera y segunda columnas posiciones de las columnas y matriz de busqueda
Devuelve Primera fila que cumple comenzando en 0 entrada=(valorcol1poscol1valorcol2poscol2matriz)
salida=orden de la primera fila que cumple comenzando en 0(oacute -1 si no existe) import ossys
from numpy import shape
busca - Localiza la primera ocurrencia de un nuacutemero en la primera columna de una matriz
entrada=(valormatriz)
salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscacol - Localiza la primera ocurrencia de un nuacutemero en la fila indicada de una matriz
entrada=(valormatriznfil) salida=posicioacuten nuacutemero de columna comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscafil - Localiza la primera ocurrencia de un nuacutemero en la columna indicada de una matriz
entrada=(valormatrizncol) salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
ordena - Ordena las filas de una matriz de menor a mayor seguacuten el contenido de la columna indicada
entrada=(colummatriz) salida=matriz de entrada ordenada
import ossys
from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
49
p_entera - Da la parte entera de un nuacutemero entrada=(nuacutemero) salida=parte entera del nuacutemero
import ossys from numpy import floor
perimetro - Calculo del perimetro de un poliacutegono sobre el plano a partir de las coord de sus veacutertices
entrada=(matriz ) 2columnas xy salida=periacutemetro
import ossys
from numpy import sqrtshape
psdo2rad - Cambio de formato de aacutengulos Pasa del conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex ) a radianes
entrada=(pseudesexa)
salida=radianes
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
rad2psdo - Cambio de formato de aacutengulos Pasa un angulo de radianes al conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex )
entrada=( radianes) salida= pseudesexa
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
50
432 Libreriacutea en Python ldquogeotopotopografiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 acimut - Caacutelculo del acimut entre dos puntos
entrada=(xiyixjyj)
salida=acimut en radianes
import ossys from numpy import arctan2pi
distancia ndash Caacutelculo de la distancia entre dos puntos del mismo
entrada=(xiyixjyj) salida=distancia (misma unidad que coordenadas de entrada
import ossys
from numpy import sqrt
edgcla ndash Caacutelculo del error de una distancia geomeacutetrica utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dgInstrnialtnl)
Dg=distancia geometrica Instr=Matriz de instrumentos
Ni=Altura de instrumento Altp=Altura de prisma
Nl=Nuacutemero de veces de medida de distancia
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edgclaprn ndash Calculo del error de una distancia geometrica utilizando la formulacion claacutesica de teoriacutea de errores Impresioacuten de resultados
entrada=(dgInstrnialtnlfsalida)
dg=distancia geometrica instr=Matriz de instrumentos
ni=Altura de instrumento altp=Altura de prisma
nl=Nuacutemero de veces de medida de distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
51
fsalida=Fichero de salidade datos
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edireh ndash Caacutelculo del error de la lectura horizontal realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(Instrnidisaltpnl)
salida=error de lectura horizontal en radianes
import ossys from numpy import sqrtpi
edirev ndash Caacutelculo del error de la lectura vertical realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(instrni nl) salida=error de lectura cenital en radianes en radianes
import ossys from numpy import sqrtpi
eincz ndash Caacutelculo del error de un desnivel trigonomeacutetrico utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dglvapedgelvInstrni) salida=xpypeplanisolzesolz
import ossys
from numpy import pisqrtcostan
intinv2 ndash Caacutelculo de la interseccioacuten inversa simple en el plano
entrada=(datosinstru)
salida= xpypangmin import ossys
from numpy import sincostanarctan2pizeros
from geotopogeneralordena import ordena
intinv2e ndash Caacutelculo de la interseccioacuten inversa simple en el plano Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru) salida= xpypeplani
import ossys from numpy import shapepisincostanarctan2dottransposezerossqrt
from geotopotopografiaedireh import edireh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
52
intinv3e ndash Caacutelculo de la interseccioacuten inversa 3D simple Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru)
salida= xpypeplanivzpvezp
import ossys from numpy import zerosshapesincos
from geotopotopografiaintinv2e import intinv2e from geotopotopografiadistancia import distancia
from geotopotopografiaedirev import edirev
from geotopotopografiaedgcla import edgcla from geotopotopografiaeincz import eincz
433 Libreriacutea en Python ldquogeotopogeodesiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 aut2lat - paso de latitud autaacutelica a geodeacutesica
entrada=(autnelipsoide) salida=lat
import ossys from numpy import sinarcsin
from geotopogeneralpsdo2rad import psdo2rad from geotopogeneralpsdo2rad import psdo2rad
calcpolo - caacutelculo del polo de la esfera a partir de tres puntos no alineados de la misma de forma que pasen a estar en un mismo paralelo tras realizarse el cambio de polo
entrada(lat1lon1lat2lon2lat3lon3) salida=[latnplonnpcolat]
import ossys from numpy import pisincosarccosarctanarctan2zeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
53
cla2enu - paso de un vector geodeacutesico expresado en componentes polares (observables claacutesicos) a componentes ENU entrada(azvdg)
salida=[ieiniu]
import ossys from numpy import sincoszeros
clhapv - lectura horizontal corregida por altitud del punto visado entrada=(lhzazlat1lat2h2nelipsoide) salida=lhz12c
import ossys
from numpy import sincospi from elipsoide import elipsoide
from radioem import radioem
clhsnlg - lectura horizontal corregida por paso de la seccioacuten normal a la liacutenea geodeacutesica entrada=(lhzs12az12lat1lat2nelipsoide)
salida=lhz12c import ossys
from numpy import sincospi
from elipsoide import elipsoide from radioem import radioem
cre2lat - paso de latitud creciente a geodeacutesica entrada=(crenelipsoide) salida=lat
import ossys
from numpy import sincostanarctanexppi from geotopogeneralpsdo2rad import psdo2rad
from elipsoide import elipsoide
efleutm - paso de la elipse de error de un punto del plano tangente al elipsoide al plano de la proyeccioacuten UTM
entrada=(latlonsemiaesemibeaziaenelipsoidehuso) salida=[semiasimibazia] import ossys from numpy import zerospi from geotopoproy_cartograficaskputm import kputm from geotopoproy_cartograficaskputmh import kputmh from geotopoproy_cartograficasconvutm import convutm from geotopoproy_cartograficasconvutmh import convutmh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
54
elip2esf - determinacioacuten de la esfera tangente al elipsoide en un paralelo indicado entrada=(nelipsoidelat)
salida=[afbe1e2]esfera
import ossys from numpy import zeros
from elipsoide import elipsoide from radiopv import radiopv
elipsoide - calculo los 5 paraacutemetros (afbe1 y 22) de los elipsoides ED50 GRS80 y WGS84 en funcioacuten de un coacutedigo 123 respectivamente entrada=(nelipsoide) 1 2 oacute 3 seguacuten ED50GRS80 oacute WGS84 respectivamente salida=[afbe1e2]
import ossys from numpy import sqrt zeros
enu2cla - paso de un vector geodeacutesico expresado en componentes ENU a componentes polares (observables claacutesicos) entrada=ieiniu salida=[azdgv]
import ossys
from numpy import zerosarcsenarctan2pisqrt
enu2xyz - paso de un vector geodeacutesico expresado en componentes ENU a componentes cartesianas tridimensionales entrada=(latlonieiniu)
salida=[ixiyiz] import ossys
from numpy import sincoszeros
eta_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del primer vertical entrada=(latlon)
salida= eta_ed50
import ossys from numpy import pisqrtcossintan
from elipsoide import elipsoide from radiopv import radiopv
from radioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
55
geo2tri - paso de coordenadas geodeacutesicas a cartesianas tridimensionales para un punto y elipsoide determinados entrada=(latlonhnelipsoide
salida=[XYZ]
import ossys from numpy import cossinzeros
from elipsoide import elipsoide from radiopv import radiopv
lam2lat - caacutelculo de la latitud geodeacutesica que le corresponde a una determinada longitud de arco de meridiano en el elipsoide indicado entrada=(lamnelipsoide salida=lat
import ossys from numpy import cossin
from elipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
lam - caacutelculo de la longitud de arco de meridiano a partir de la latitud geodeacutesica y del elipsoide entrada=(lamnelipsoide
salida=lam import ossys
from numpy import sin cos from elipsoide import elipsoide
lat2aut - paso de latitud geodeacutesica a autaacutelica entrada=(latnelipsoide)
salida=aut import ossys
from numpy import sinlog from elipsoide import elipsoide
lat2cre - paso de latitud geodeacutesica a creciente entrada=(latnelipsoide)
salide=cre import ossys
from numpy import sintanpilog
ond_ed50 - caacutelculo de la ondulacioacuten del geoide de un punto en Ed50 entrada =(latlon) salida=ondulacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
56
import ossys
from numpy import pisqrtcossintan
pdesfcr - problema directo en la esfera con el meacutetodo de cambio de base entrada=(lat1lon1saziresfera) salida=[latlon]
import ossys from numpy import cossintanarcsinarcosarctan2pizerostransposedot
pdg_dif1 - problema directo de la geodesia con la primera derivada entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2azi21] import ossys
from numpy import zerossincostanpi from radiopv import radiopv
from radioem import radioem
pdg_dif2 - problema directo de la geodesia con la primera y segunda derivada entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdg_dif3 - problema directo de la geodesia con la primera segunda y tercera derivada
entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdgrk4o - problema directo de la geodesia seguacuten meacutetodo de integracioacuten numeacuterica de Runge-Kutta de cuarto orden entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2
import ossys from numpy import zerossincostanpisqrt
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
57
from radioem import radioem
piesfcr - problema inverso en la esfera con el meacutetodo de cambio de base entrada=( lat1lon1lat2lon2resfera)
salida=[s12a12] import ossys
from numpy import cossintanarcsenarccosarctan2dotzerospi
pigbsl - problema inverso de la geodesia seguacuten el meacutetodo de Bessel entrada=( lat1lon1lat2lon2nelipsoide)
salida=[ s12a12a21]
import ossys from numpy import zerossincostanarcsinarctanarctan2arccossqrtpi
pigbslm - problema inverso de la geodesia seguacuten el meacutetodo de Bessel modificado por D David Henaacutendez Loacutepez
entrada=( lat1lon1lat2lon2nelipsoide) salida=[ s12a12a21]
import ossys from numpy import cossintanarcsinarcosarctanarctan2zerossqrtpi
from elipsoide import elipsoide
from radiopv import radiopv from piesfcr import piesfcr
from pdesfcr import pdesfcr
piloxo - problema inverso para la curva loxodroacutemica entrada=(lat1lon1lat2lon2nelipsoide)
salida=[dla12]
import ossys from numpy import arctan2coszerospi
from elipsoide import elipsoide from lat2cre import lat2cre
from radiopv import radiopv
from lam import lam
psi_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del meridiano entrada=(latlon) salida=psi_ed50
import ossys
from numpy import pisqrtcossintan from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
58
radioem - radio de curvatura de la elipse meridiana en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radioem
import ossys from numpy import sin
from elipsoide import elipsoide
radioeul - radio de la seccioacuten normal de un determinado acimut a partir del teorema de Euler entrada=(lataznelipsoide)
salida=radieul import ossys
from numpy import sincos from radioem import radioem
from radiopv import radiopv
radiopv - radio de curvatura del primer vertical en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radiopv
import ossys from numpy impor sqrtsin
from elipsoide import elipsoide
rdcae - reduccioacuten de la distancia de la cuerda al arco elipsoide entrada=( dcazlat1nelipsoide) salida=recae
impor ossys from numpy import sincosarcsen
from radioem import radioem from radiopv import radiopv
rdtce - reduccioacuten de la distancia del terreno a la cuerda elipsoide entrada=(dgazlat1h1h2nelipsoide)
salida=rdtce import ossys
from numpy import sincossqrt from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
59
tri2geo - paso de coordenadas cartesianas tridimensionales a geodeacutesicas en un punto y elipsoide determinados entrada=(XYZnelipsoide)
salida=[latlonh]
import ossys from numpy import cossintanarctanarctan2sqrtzeros
from elipsoide import elipsoide from radiopv import radiopv
xyz2clae - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a observables claacutesicos sobre el elipsoide y desnivel elipsoidal entrada=( X1Y1Z1DXDYDZnelipsoide) salida=[s12az12h12]
import ossys from numpy import zeros
from tri2geo import tri2geo
from pigbslm import pigbslm
xyz2clat - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes polares en el terreno entrada=( lat1lon1ixiyiz)
salida=[ dgaz12lv] import ossys
from numpy import zeros from xyz2enu import xyz2enu
from enu2cla import enu2cla
xyz2enu - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes ENU entrada=(latlonIXIYIZ)
salida=[ieiniu]
import ossys from numpy import sincoszeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
60
434 Libreriacutea en Python ldquogeotopoproy_cartograficasrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 calhuso - caacutelculo del huso correspondiente a un punto en la proyeccioacuten UTM a partir de su longitud geodeacutesica entrada=(lon)
salida=huso
import ossys from numpy import
cdel2geo - paso de un punto de la proyeccioacuten ciliacutendrica directa equivalente de Lambert al elipsoide
entrada=(XYLon0TXTYnelipsoide) salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaaut2lat import aut2lat
convestp - caacutelculo de la convergencia de meridianos de un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lonlon0)
salida=convest import ossys
convgk - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0nelipsoide)
salida=convgk
import ossys from numpy import sincostan
from geotopogeodesiaelipsoide import elipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
61
convlamb - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(lonlat0lon0)
salida=convlamb
import ossys from numpy import sin
convutm - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=convutm import ossys
from numpy import tancossinpi
from cahuso import calhuso from geotopogeodesiaelipsoide import elipsoide
convutmh - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso indicado entrada=(latlonnelipsoide)
salida=convutmh
import ossys from numpy import tancossinpi
from geotopogeodesiaelipsoide import elipsoide
dcdgputm - paso de la distancia cuerda en la proyeccioacuten UTM entre dos puntos a la correspondiente a la proyeccioacuten UTM de la liacutenea geoacutedesica que los une en el elipsoide entrada=(lat1lon1lat2lon2nelipsoide
salida=correccioacuten en metros import ossys
from numpy import cos from utm2geo import utm2geo
from geo2utmh import geo2utmh
from calhuso import calhuso from getopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
62
dcesfera - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general conforme en una esfera entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida=dc (reduccioacuten angular de la cuerda en radianes import ossys
from numpy import sincos from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
dcestp - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en la esfera al pasar a la proyeccioacuten estereograacutefica polar entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=dc(reduccioacuten angular de la cuerda en radianes)
import ossys from numpy import cossin
from kplamb import kplamb
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
from geotopogeodesiaradiopv import radiopv
dcgk - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general de Gauss-Kruumlger entrada=(lat1lon1lat2lon2lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos from geo2gk import geo2gk
from gk2geo import gk2geo
from geotopogeodesiaradioem import radioem from geotopogeodesiaradiopv import radiopv
from getopogeodesiaelipsoide import elipsoide
dclamb - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert entrada=(lat1lon1lat2lon2lat0pelipsoide
salida= dc(reduccioacuten angular de la cuerda en radianes)
import ossys
from numpy import sintancosexpzeros from geo2lamb import geo2lamb
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
63
from kdlamb import kdlamb
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
from geotopogeodesiaradiopv import radiopv
dclambf - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert con maacutes precisioacuten que la funcioacuten anterior entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos sin
from kplamb import kplamb from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o from geotopogeodesiaradiopv import radiopv
dcutm - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=( lat1lon1lat2lon2nelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaradioem import radioem
dcutmh - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso indicado entrada=( lat1lon1lat2lon2husonelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh
from utm2geo import utm2geo from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
64
dgpdcutm - paso de la distancia geodeacutesica proyectada en el plano UTM a la distancia correspondiente a la cuerda en esta proyeccioacuten para una geodeacutesica del elipsoide entrada=( lat1lon1lat2lon2snelipsoide)
salida=correccioacuten import ossys
from numpy import cos from geo2utmh import geo2utmh
from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut
esf2esfg - paso de un punto de una esfera a la esfera con cambio de polo Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo
entrada=(latlonlatplonp)
salida=[latlong]
import ossys from numpy import cossintanarcsenarctandotzerospi
from geotopogeodesiapiesfcr import piesfcr
esf2estp - paso de un punto de la esfera a las planas de la proyeccioacuten estereograacutefica polar entrada=(latlonlon0radiotxty)
salida=[xy] estp import ossys
from numpy import zerossincos
esfg2esf - paso de un punto de la esfera con cambio de polo a la esfera original Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo entrada=(latnlonnlatplonp
salida=[lat0lon0giro import ossys
from numpy import cossintanarcsenarctan2dotzerospitranspose from geotopogeodesiapiesfcr import piesfcr
esfc2lat - paso de latitud sobre la esfera a la correspondiente sobre el elipsoide seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
65
salida=lat
import ossys from numpy import sintanarctanpi
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiaelipsoide import elipsoide
estp2esf - paso de un punto de la proyeccioacuten estereograacutefica polar a la esfera entrada=(xylon0radiotxty)
salida=[xy] import ossys
from numpy import zerosarctan2arctansinpi
geo2cdel - paso de un punto del elipsoide a la proyeccioacuten ciliacutendrica directa equivalente de Lambert entrada=( latlonlon0txtynelipsoide)
salida=[XY] import ossys
from numpy import zeros
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialat2aut import lat2aut
geo2esto - paso de una nube de puntos del elipsoide a la proyeccioacuten estereograacutefica oblicua oacuteptima entrada=(latlonlat0lon0txtynelipsoide)
salida=[XY]
import ossys from numpy import
from lat2esc import lat2esc
from esf2esfg import esf2esfg from esf2estp import esf2estp
from geotopogeodesiaradiopv import radiopv
geo2gk - paso de un punto del elipsoide a la proyeccioacuten general de Gauss-Kruumlger entrada=( latlonlon0ptxtynelipsoide)
salida= [xy]gk import ossys
from numpy import costanpizeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesialam import lam
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
66
geo2lamb - paso de un punto del elipsoide a la proyeccioacuten general coacutenica conforme de Lambert entrada=( latlonlat0lon0ptxtynelipsoide)
salida=[xy]lambert
import ossys from numpy import sintancosexpzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
geo2merc - paso de un punto del elipsoide a la proyeccioacuten de Mercator entrada=( latlonlon0txtynelipsoide)
salida= [xy]mercator import ossys
from numpy import zeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialat2cre import lat2cre
geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
import ossys from numpy import zerostancospi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
geo2utmh - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=[XY] UTM
import ossys
from numpy import zerostancospi from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
gk2geo - paso de un punto de la proyeccioacuten general de Gauss-Kruumlger al elipsoide entrada=(XYlon0ptxtynelipsoide)
salida=[latlon]
import ossys
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
67
from numpy import zerostancospi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
kdesfera - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general conforme sobre una esfera Utiliza la integracioacuten numeacuterica de Simpson entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida= kdesfera import ossys
from kpesfera import kpesfera from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o
kdestp - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica de la esfera al proyectarla en la proyeccioacuten estereograacutefica polar Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0radiotxty)
salida=kdestp import ossys
from kpestp import kpestp from esf2estp import esf2estp
from estp2esf import estp2esf
kdgk - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general de Gauss-Kruumlger Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0pnelipsoide)
salida=kdgk import ossys
from geo2gk import geo2gk from gk2geo import gk2geo
from kpgk import kpgk
kdlamb - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica el elipsoide al proyectarla en la proyeccioacuten general coacutenica conforme de Lambert Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=kdlamb import ossys
from geolamb import geolamb from lamb2geo import lamb2geo
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
68
kdutm - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso del primer punto Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2nelipsoide)
salida=kdutm import ossys
from calhuso import calhuso from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kdutmh - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso indicado Utiliza la integracioacuten numeacuterica de Simpson
entrada= lat1lon1lat2lon2husohelipsoide) salida=kdutmh
import ossys from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kpesfera - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general conforme sobre una esfera entrada=( latlat0nelipsoide)
salida=kpesfera import ossys
from numpy import cossintanexp from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaelipsoide import elipsoide
kpestp - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lat)
salida=kpestp import ossys
from numpy import sin
kpgk - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0pnelipsoide)
salida=kpgk
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
69
import ossys
from numpy import sincostan from clahuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
kplamb - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(latlat0pnelipsoide)
salida=kplamb
import ossys from numpy import cossintanexp
from geotopogeodesialat2cre import lat2cre from geotopogeodesiaradiopv import radiopv
kputm - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=kputm
import ossys from numpy import tancossinpi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
kputmh - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=kputmh
import ossys
from numpy import sincostanpi from geotopogeodesiaelipsoide import elipsoide
lamb2geo - paso de un punto de la proyeccioacuten general coacutenica conforme de Lambert al elipsoide entrada=( xylat0lon0ptxtynelipsoide)
salida=[latlon] import ossys
from numpy import sintanarctanpilogsqrtzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
from geotopogeodesiacre2lat import cre2lat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
70
lat2esc - paso de la latitud geodeacutesica sobre el elipsoide a la correspondiente sobre la esfera seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide)
salida=latesfc
import ossys from numpy import sintanarctanpi
from geotopogeodesiaelipsoide import elipsoide
merc2geo - paso de un punto de la proyeccioacuten de Mercator al elipsoide entrada= (xylon0txtynelipsoide)
salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesiacre2lat import cre2lat
utm2geo - paso de un punto de la proyeccioacuten UTM al elipsoide entrada=(XYhusonelipsoide)
salida=[latlon] import ossys
from numpy import sqrtpitancossinzeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
435 Libreriacutea en Python ldquogeotopotransformacionrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 egm08rednap ndash fichero que almacena la clase Egm08rednap para el manejo de geoides en formato egm08rednap Define la funcioacuten getOndulation(selflatitudlongitud) Llama al fichero geoide que a su vez llama a los ficheros EGM08_REDNAP
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
71
entrada=(latitudlongitud)
salida=ondulacioacuten import ossys
from numpy import fromfile reshape from geoide import Geoide
geoide ndash fichero que almacena la clase Geoide para el manejo de geoides en formato egm08rednap La clase Geoide almacena ldquollamardquo a los geoides EGM08_REDNAP de la Peniacutensula o Baleares seguacuten corresponda Define las funciones getNoOndulacioacuten y getOndulacioacuten en funcioacuten de que encuentre las coordenadas de entrada dentro de los ficheros
entrada=(latitudlongitud) salida=ondulacioacuten
import ossys from numpy import fromfile reshapepifloorndarray
ntv2 ndash fichero que almacena la funcioacuten ntv2Espana Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(longitudlatitud) en deg en ED50 salida=(longitud latitud) en deg en ETRS89
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
ntv2_2 ndash fichero que almacena la funcioacuten ntv2Espana Adaptacioacuten del fichero anterior Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz) En la adatacioacuten realizada obtenemos soacutelo los diferenciales de caacutelculo de paso de ED50 a ETRS89 para tomarlo en el caacutelculo de la aproximacioacuten del sentido inverso entre ETRS89 a ED50 El paso de nodos del fichero utilizado es cada 200‟ lo que equivaldriacutea a 6000 m aproximadamente por lo que la aproximacioacuten seriacutea vaacutelida
entrada=(longitudlatitud) en deg en ETRS89 salida=(diflongitud diflatitud) en deg en ED50
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
72
sped2etpy ndash fichero rejilla del IGN Para transformacioacuten de coordenadas en los Sistemas de Referencia ED50 a ETRS89 Adaptado a Python y descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(fichero contenedor de informacioacuten) No entramos con ninguacuten valor
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
73
5 APLICABILIDAD DE LA LIBRERIacuteA Y CONCLUSIONES FINALES Finalmente hemos implementado los 5 subpaquetes de moacutedulos con funciones y clases incluidos en el paquete (libreriacutea) geotopo destinados a caacutelculos topograacuteficos y geodeacutesicos
Estructura final de la libreriacutea geotopo
Como puede verse en el paquete de geotopo se ha incluido un moacutedulo de aplicaciones en las que se han implementado unos ejercicios praacutecticos aplicando las distintas funciones de la libreriacutea Antes de entrar a describir los casos praacutecticos implementados hemos de decir que directamente podemos obtener resultados de cada una de las funiones Asiacute si queremos pasar de coordenadas geograacuteficas a coordenadas utm mirando en la descripcioacuten de las funciones tenemos geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
74
import ossys
from numpy import zerostancospi from calhuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
Pues bien una vez seleccionada la funcioacuten a utilizar abrimos el moacutedulo correspondiente con IDLE
Coacutedigo de la funcioacuten abierto con IDLE
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
75
Imagen de la ejecucioacuten de Run Module
Ejecutando Run Module Python abre el Python Shell En esta pantalla tenemos que introducir el nombre de la funcioacuten a usar geo2utm y entre pareacutentesis los valores que se especifican de entrada en la descripcioacuten de la funcioacuten entrada=(latlonnelipsoide)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
76
Llamada a la ejecucioacuten de la funcioacuten desde Python Shell
Como hemos indicado antes y por su relevancia y empleabilidad en otras funciones con ldquonelipsoiderdquo se entiende un coacutedigo del 1 al 3 que representa cada uno un elipsoides de referencia seguacuten los Sistemas de Referencia Coordenados en este caso 1=ED50 elipsoide Internacional Hayford 1924 2=ETRS89 elipsoide GRS80 y 3=WGS84
Al introducir los datos ejecutamos con Intro Obtenemos 2 valores en forma de vector que respresentan seguacuten la descripcioacuten de la funcioacuten salida=[XY] UTM
Podemos volver a caacutelcular las coordenadas UTM en el SCR ETRS89 (en caso de que lalitud y longitud vinieran dadas en el mismohellip) simplemente copiando la liacutenea de entrada pegaacutendola abajo y cambiando 1 por 2 como iacutendice del elipsoide y volviendo a ejecutar con enter
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
77
Dentro de Python Shell se puede copiar coacutedigo de liacuteneas anteriores y
pegar abajo Para caacutelculos maacutes complejos de mayor nuacutemero de puntos etc a modo de praacutectica se ha implementado el coacutedigo de distintos tipos de caacutelculo de ejemplo Distribuidos en 2 tipologiacuteas diferentes ldquotopografiardquo y ldquogeodesiardquo se han incluido coacutedigos para la resolucioacuten e impresioacuten de distintos tipos de problemas realizando ldquoimportrdquo de funciones declaradas en los moacutedulos de los distintos subpaquetes de geotopo
51 CASOS PRAacuteCTICOS TOPOGRAFIacuteA En total se han realizada 4 casos praacutecticos dentro del apartado de topografiacutea Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica topo_practica1 Del resto soacutelo se ha incluido la salida de datos
511 Implementacioacuten del coacutedigo topo_praacutectica1
usrbinpython
-- coding iso-8859-1 --
-- coding cp1252 --
Praacutectica 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
Datos Coordenadas del punto de estacioacuten
Sistema de referencia local
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmesn)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
78
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
En esta versioacuten de la praacutectica utilizando la libreriacutea geotopo en el caacutelculo de azimutes
periacutemetro y superficie
import ossys
from numpy import matrixarrayshapepizerosconcatenatemeansincossqrt
from geotopotopografiaacimut import acimut
from geotopogeneralperimetro import perimetro
from geotopogeneralareacor import areacor
Radio medio terrestre en metros
rt=63700000
Informacioacuten del punto de estacioacuten El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto de estacioacuten
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Altitud del punto en metros
- Quinta columna- Altura de instrumento en metros
pe=array([[100030242663090376657208150]])
Informacioacuten de las referencias
- Cada fila es un punto de referencia
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Lectura azimutal en grados centesimales
ref=array([[200127863973359492354821][2002322174932757501335646][20033289406282
69902313540][2004261222126827453319067]])
Informacioacuten de los puntos radiados
- Cada fila es una observacioacuten claacutesica a un punto radiado
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Lectura azimutal en grados centesimales
- Tercera columna- Lectura cenital en grados centesimales
- Cuarta columna- Distancia geomeacutetrica en metros
- Quinta columna- Altura de instrumento en metros
rad=array([[30013387131001173422431180][300211877101000083399617200][3003240
5756999039440097150][300433037831000468414996150]])
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos de referencia
Caacutelculo de las dimensiones de la matriz de puntos de referencia
- mref seraacute el nuacutemero de filas el nuacutemero de puntos
- nref seraacute el nuacutemero de columnas 4
[mrefnref]=refshape
Se extrae la informacioacuten del punto de estacioacuten
num_pe=pe[00]
x_pe=pe[01]
y_pe=pe[02]
z_pe=pe[03]
alti_pe=pe[04]
Caacutelculo de azitutes del punto de estacioacuten a cada uno de los puntos radiados
La funcioacuten azimut de la libreriacutea Geotop devuelve el valor en radianes
acimutes=zeros((mref1))
for i in range (1mref+1)
Se leen la identificacioacuten y las coordenadas del punto radiado y se almacenan en variables
temporales
num_pref=ref[i-10]
x_pref=ref[i-11]
y_pref=ref[i-12]
azi_pe_pref=acimut(x_pey_pex_prefy_pref)
acimutes[i-10]=azi_pe_pref2000pi
ref=concatenate((refacimutes)axis=1)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
79
Caacutelculo de la desorientacioacuten de cada direccioacutenccedil
desor=zeros((mref1))
for i in range(1mref+1)
Se leen los valores angulares y se transforman a radianes almacenaacutendose en variables
temporales
lhz_pe_pref=ref[i-13]pi2000
azi_pe_pref=ref[i-14]pi2000
des_pe_pref=azi_pe_pref-lhz_pe_pref
if des_pe_preflt0
des_pe_pref=des_pe_pref+20pi
desor[i-10]=des_pe_pref200pi
ref=concatenate((refdesor)axis=1)
Caacutelculo de la desorientacioacuten media con la funcioacuten de python
des_mean=mean(ref[5])pi200
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos radiados
[mradnrad]=radshape
Caacutelculo de coordenadas polares que se almacenan en la matriz coor_polares
- Primera columna- Nuacutemero entero identificador del punto radiado
- Segunda columna- Azimut en grados centesimales
- Tercera columna- Distancia reducida en metros
Caacutelculo de coordenadas cartesianas que se almacenan en la matriz coor_cart
- Primera columna- Nuacutemero entero identificador del punto del punto radiado
- Segunda columna- Coordenada X
- Tercera columna- Coordenada Y
- Cuarta columna- Altitud
antes se almacenan las coordenadas polares en la matriz coord_polares (numero de
puntoacimutdistancia reducida)
coord_polares=zeros((mrad3))
coord_cart=zeros((mrad4))
for i in range(1mrad+1)
num_prad=rad[i-10]
lhz_pe_prad=rad[i-11]pi2000
lv_pe_prad=rad[i-12]pi2000
dg_pe_prad=rad[i-13]
altp_pe_prad=rad[i-14]
coord_polares[i-10]=num_prad
azi_pe_prad=lhz_pe_prad+des_mean
if azi_pe_pradgt(20pi)
azi_pe_prad=azi_pe_prad-20pi
coord_polares[i-11]=azi_pe_prad2000pi
dr_pe_prad=dg_pe_pradsin(lv_pe_prad)
coord_polares[i-12]=dr_pe_prad
coord_cart[i-10]=num_prad
coord_cart[i-11]= x_pe+dr_pe_pradsin(azi_pe_prad)
coord_cart[i-12]= y_pe+dr_pe_pradcos(azi_pe_prad)
coord_cart[i-13]= z_pe+alti_pe+dg_pe_pradcos(lv_pe_prad)-
altp_pe_prad+042dr_pe_prad2rt
Caacutelculo del periacutemetro de la parcela utilizando la funcioacuten periacutemetro de Geotopo
coord=zeros((mrad2))
for i in range (1mrad+1)
coord[i-10]=coord_cart[i-11]
coord[i-11]=coord_cart[i-12]
perim=perimetro(coord)
Caacutelculo de la superficie de la parcela utilizando la funcioacuten areacor de Geotopo
superficie=areacor(coord)
superficie_error=areacore(coord)
Impresioacuten de resultados
fsalida=open(topopractica1salw)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
80
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
fsalidawrite(TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(nPRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALESn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimaln)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia Localn)
Impresioacuten del paso 1 Paso de coordenadas cartesianas a polares Azimutes
fsalidawrite(n1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada
visualn)
fsalidawrite( Punto Inicial Punto Final Acimut Desorientacioacutenn)
for i in range(1mref+1)
num_pref=ref[i-10]
azi=ref[i-14]
des=ref[i-15]
fsalidawrite(100fnum_pe)
fsalidawrite(150fnum_pref)
fsalidawrite(184fazi)
fsalidawrite(184fndes)
Impresioacuten del paso 2 Caacutelculo de la desorientacioacuten media
fsalidawrite(n2 Caacutelculo de la desorientacioacuten median)
fsalidawrite( Desorientacioacuten media154fn(des_mean200pi))
Impresioacuten del paso 3 Caacutelculo de la coordenadas polares
fsalidawrite(n3 Caacutelculo de las coordenadas polaresn)
fsalidawrite( Punto Acimut Distancian)
for i in range (1mrad+1)
num_prad=coord_polares[i-10]
azi=coord_polares[i-11]
dist=coord_polares[i-12]
fsalidawrite(100fnum_prad)
fsalidawrite(184fazi)
fsalidawrite(184fndist)
Impresioacuten del paso 4 Caacutelculo de la coordenadas cartesianas
fsalidawrite(n4 Caacutelculo de las coordenadas cartesianasn)
fsalidawrite( Punto X Y Zn)
for i in range (1mrad+1)
num_prad=coord_cart[i-10]
x=coord_cart[i-11]
y=coord_cart[i-12]
z=coord_cart[i-13]
fsalidawrite(100fnum_prad)
fsalidawrite(154fx)
fsalidawrite(154fy)
fsalidawrite(154fnz)
Impresioacuten del paso 5 valor del periacutemetro
fsalidawrite(n5 Caacutelculo del periacutemetro de la parcelan)
fsalidawrite( Periacutemetro153f mnperim)
Impresioacuten del paso 6 valor de la superficie de la parcela
fsalidawrite(n6 Caacutelculo de la superficie de la parcelan)
fsalidawrite( Superficie153f m2nsuperficie)
fsalidaclose()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
81
512 Impresioacuten del fichero de salida de resultados topo_praacutectica1
Ejecuando el programa anterior obtenemos un fichero con los resultados y la presentacioacuten mejorada que hemos implementado SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada visual
Punto Inicial Punto Final Acimut Desorientacioacuten
1000 2001 3539187 3184366
1000 2002 520128 3184482
1000 2003 1497887 3184347
1000 2004 2503428 3184361
2 Caacutelculo de la desorientacioacuten media
Desorientacioacuten media 3184389
3 Caacutelculo de las coordenadas polares
Punto Acimut Distancia
3001 3523102 4224303
3002 372099 3996170
3003 1590145 4400965
3004 2488172 4149959
4 Caacutelculo de las coordenadas cartesianas
Punto X Y Z
3001 27365966 33997199 6561414
3002 32447650 34236535 6566664
3003 32884285 27383773 6578851
3004 27363219 27915286 6569143
5 Caacutelculo del periacutemetro de la parcela
Periacutemetro 2358248 m
6 Caacutelculo de la superficie de la parcela
Superficie 342540930 m2
513 Salida de resultados topo_praacutectica2
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN DIRECTA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3264596 m
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
82
Y= 4065437 m
Previsioacuten de error planimeacutetrico= 0035 m
Vector con soluciones en z y su error
Z=725931 m Previsioacuten de error altimeacutetrico 0023 m
Z=725926 m Previsioacuten de error altimeacutetrico 0024 m
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN INVERSA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3010146 m
Y= 3411841 m
Previsioacuten de error planimeacutetrico= 0022 m
Vector con soluciones en z y su error
Z=515695 m Previsioacuten de error altimeacutetrico 0021 m
Z=515703 m Previsioacuten de error altimeacutetrico 0024 m
Z=515698 m Previsioacuten de error altimeacutetrico 0022 m
514 Salida de resultados topo_praacutectica3
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 3 CALCULO DE DATOS DE REPLANTEO PARA ESTACION TOTAL EN UN SISTEMA DE REFERENCIA
LOCAL
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
ResultadosDatos de replanteo
Base Punto Azimut Distancia CotaProyecto CotaTerreno CotaRoja
1 1 3856489 75460 96930 96539 0391
1 2 2667262 77786 96903 98259 -1356
1 3 1219144 40883 95329 94688 0641
1 4 279600 67437 95045 95587 -0542
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
83
515 Salida de resultados topo_praacutectica4
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 4 TRANSFORMACIOacuteN ENTRE SISTEMAS DE REFERENCIA LOCALES HELMERT 2D
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
Planteamiento del sistema de ecuaciones que define la transformacioacuten planimeacutetrica
Matriz A
1000 0000 3258686 -2709414
0000 1000 2709414 3258686
1000 0000 2075590 -2105320
0000 1000 2105320 2075590
Vector teacuterminos independientes
4554780
228501
3244004
443737
1 Resultados de los paraacutemetros de la transformacioacuten
- Planimetriacutea
- Traslacioacuten en coordenada x del sistema S1 al sistema S2 324401 m
- Traslacioacuten en coordenada y del sistema S1 al sistema S2 -20424 m
- Valor para el paraacutemetro a (a=landacos_giro) 0805119725
adimensional
- Valor para el paraacutemetro b (b=landasin_giro) -0593023724
adimensional
- Valor para el factor de escala (landa=sqrt(a2+b2)) 0999947
tanto por uno
- Valor para el giro (giro=arctan2(ba) -404157
grados centesimales
- Altimetriacutea
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 1 6056 m
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 2 6083 m
- Traslacioacuten media en coordenada z del sistema S1 al sistema S2 6070 m
2 Resultado de la transformacioacuten del punto 3 al sistema de referencia local S2
- Coordenada x de 3 en el sistema de referencia local S2 4072286 m
- Coordenada y de 3 en el sistema de referencia local S2 45170 m
- Coordenada z de 3 en el sistema de referencia local S2 104748 m
52 CASOS PRAacuteCTICOS GEODESIA En total se han realizada 5 casos praacutecticos dentro del apartado de geodesia Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica geo_practica1 Del resto soacutelo se ha incluido la salida de datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
84
521 Implementacioacuten del coacutedigo geo_praacutectica1
Semana Geomaacutetica 2011 Bogotaacute DC Colombia
IGAC-Instituto Agustiacuten Codazzi
Taller Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea GeoTop
Impartido por Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
Dr David Hernaacutendez Loacutepez davidhernandezulcmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
Praacutectica 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
Datos Coordenadas de la Red ERGNSS - Red de Estaciones Permanentes GNSS - Instituto
Geograacutefico Nacional Espantildea
Sistema de referencia ETRS89 (Elipsoide GRS80)
Coacutedigo EPSG para coordenadas geodeacutesicas sobre el elipsoide 4258
En esta versioacuten de la praacutectica se utiliza la libreriacutea GeoTop
Otra variante con respecto a la versioacuten anterior de la praacutectica es que se parte de coordenadas
geodeacutesicas en seudo decimal sexagesimal
Documentacioacuten La formulacioacuten empleada figura en el apartado 13 Parametrizacioacuten del
elipsoide del documento
OctaveTallerGeodesiaDocumentacionApuntes_DHL_2010GeodesiaElipsoidalpdf
Matriz de coordenadas
- Cada fila es un punto una estacioacuten de referencia GNSS
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada geodeacutesica longitud en suedo decimal sexagesimal
- Tercera columna- Coordenada geodeacutesica latitud en suedo decimal sexagesimal
- Cuarta columna- Altitud elipsoidal en metros
from numpy import zerosarraygenfromtxt
from geotopogeodesiaelipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiatri2geo import tri2geo
from geotopogeodesiageo2tri import geo2tri
c4258h=[ 1 432151770811 -82356167472 66917
2 382020103584 -02852437048 60356
3 385840494457 -15123054192 751736
4 365109112636 -22734018800 127517
5 392843898433 -62030426066 436527
6 432819118007 -34753038539 99287
7 355331090227 -51823016758 52475
8 375456176191 -44315999947 202082
9 371159923466 -65513077151 81860
10 402645009016 -34234283233 766920
11 423518259367 -53903511817 970254
12 364334003748 -42336718238 119848
13 393309445258 23728383134 62063
14 422728617761 -23007691629 503204
15 405642292231 -52945108842 854969
16 394031263811 -35750290360 808968
17 402101790155 -10727483699 956188
18 392850970441 -02015543423 77592
19 421102318373 -84847057525 87790
20 403129631681 -30519065001 972777
21 413800221985 -05255792567 296111
22 281829034024 -162958855078 2417483
23 282837857413 -161428164273 51787
24 282505711067 -163302841359 54475
25 280249784309 -164306688806 58543
26 284549932439 -175337787438 2199221]
Los datos los guardamos en un txt en la misma carpeta del trabajo e importamos
c4258h=genfromtxt(CPython27geotopoaplicacionestalleresgeo_practica1dattxt)
Caacutelculo de las dimensiones de la matriz de coordenadas
- m seraacute el nuacutemero de filas el nuacutemero de puntos
- n seraacute el nuacutemero de columnas 4
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
85
[mn]=c4258hshape
grs80=elipsoide(2)
Recibe Codigo del elipsoide (nelipsoide)
1 - Ed50 Devuelve el elipsoide Internacional 1924
2 - Etrs89 Devuelve el elipsoide GRS80
3 - Wgs84 Devuelve el elipsoide Wgs84
Definicioacuten del elipsoide
fsalida=open(geo_practica1salw)
fsalidawrite(SEMANA GEOMAacuteTICA - 2011n)
fsalidawrite(TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software
libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE
COORDENADAS GEODEacuteSICAS Y ECEFn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal
ggmmssfsn)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia ETRS89n)
fsalidawrite(- Paraacutemetros del elipsoide GRS80n)
fsalidawrite( - Semieje mayor 103f mngrs80[0])
fsalidawrite( - Inverso del aplanamiento 109f adimngrs80[1])
fsalidawrite( - Semieje menor 103f mngrs80[2])
fsalidawrite( - Primera excentricidad al cuadrado 109f adimngrs80[3]2)
fsalidawrite( - Segunda excentricidad al cuadrado 109f adimngrs80[4]2)
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(1 Paso de coordenadas geodeacutesicas a ECEFn)
fsalidawrite(NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF
CoorZECEFn)
c4258XYZ=zeros((m4))
for i in range (1m+1)
np=c4258h[i-10]
longitudRad=psdo2rad(c4258h[i-12])
latitudRad=psdo2rad(c4258h[i-11])
hElip=c4258h[i-13]
[xecefyecefzecef]=geo2tri(latitudRadlongitudRadhElip2)
fsalidawrite(80fnp)
fsalidawrite(159fc4258h[i-11])
fsalidawrite(159fc4258h[i-12])
fsalidawrite(123fhElip)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(n)
c4258XYZ[i-10]=np
c4258XYZ[i-11]=xecef
c4258XYZ[i-12]=yecef
c4258XYZ[i-13]=zecef
Caacutelculo e impresioacuten del paso 2 de coordenadas ECEF a geodeacutesicas
fsalidawrite(2 Paso de coordenadas ECEF a geodeacutesicasn)
fsalidawrite( NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud
AltElipn)
for i in range(1m+1)
np=c4258XYZ[i-10]
xecef=c4258XYZ[i-11]
yecef=c4258XYZ[i-12]
zecef=c4258XYZ[i-13]
[latitudlongitudhElip]=tri2geo(xecefyecefzecef2)
fsalidawrite(80fnp)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(159frad2psdo(latitud))
fsalidawrite(159frad2psdo(longitud))
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
86
fsalidawrite(153fnhElip)
fsalidaclose()
522 Impresioacuten del fichero de salida de resultados geo_praacutectica1
SEMANA GEOMAacuteTICA - 2011
TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea
GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal ggmmssfs
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia ETRS89
- Paraacutemetros del elipsoide GRS80
- Semieje mayor 6378137000 m
- Inverso del aplanamiento 0003352811 adim
- Semieje menor 6356752314 m
- Primera excentricidad al cuadrado 0006694380 adim
- Segunda excentricidad al cuadrado 0006739497 adim
1 Paso de coordenadas geodeacutesicas a ECEF
NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF CoorZECEF
1 43215177081 -8235616747 66917 4594489890 -678368010 4357065904
2 38202010358 -0285243705 60356 5009051399 -42072472 3935057504
3 38584049446 -1512305419 751736 4962848206 -160854365 3990884209
4 36510911264 -2273401880 127517 5105220295 -219278803 3804386889
5 39284389843 -6203042607 436527 4899866820 -544567584 4033769790
6 43281911801 -3475303854 99287 4625924690 -307096765 4365771175
7 35533109023 -5182301676 52475 5150908012 -478415023 3718518240
8 37545617619 -4431599995 202082 5021256063 -414685080 3898182184
9 37115992347 -6551307715 81860 5049613168 -612885631 3835143860
10 40264500902 -3423428323 766920 4851137670 -314518688 4116282036
11 42351825937 -5390351182 970254 4680871385 -463168384 4294606572
12 36433400375 -4233671824 119848 5103282414 -392096752 3793146894
13 39330944526 2372838313 62063 4919369704 225499577 4039849606
14 42272861776 -2300769163 503204 4708688612 -205761707 4283609369
15 40564229223 -5294510884 854969 4803054799 -462131609 4158378661
16 39403126381 -3575029036 808968 4904660519 -339868032 4050823512
17 40210179016 -1072748370 956188 4867391684 -95523894 4108341277
18 39285097044 -0201554342 77592 4929534046 -29050676 4033709925
19 42110231837 -8484705753 87790 4677481077 -725205068 4260827192
20 40312963168 -3051906500 972777 4848724914 -261632472 4123093922
21 41380022199 -0525579257 296111 4773803543 -73506519 4215453698
22 28182903402 -16295885508 2417483 5390243531 -1596630330 3007752593
23 28283785741 -16142816427 51787 5386836438 -1569217617 3023118925
24 28250571107 -16330284136 54475 5381262061 -1599192518 3017377791
25 28024978431 -16430668881 58543 5395193089 -1620537044 2981146536
26 28454993244 -17533778744 2199221 5326646317 -1719826438 3052043561
2 Paso de coordenadas ECEF a geodeacutesicas
NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud AltElip
1 4594489890 -678368010 4357065904 43215177081 -8235616747 66917
2 5009051399 -42072472 3935057504 38202010358 -0285243705 60356
3 4962848206 -160854365 3990884209 38584049446 -1512305419 751736
4 5105220295 -219278803 3804386889 36510911264 -2273401880 127517
5 4899866820 -544567584 4033769790 39284389843 -6203042607 436527
6 4625924690 -307096765 4365771175 43281911801 -3475303854 99287
7 5150908012 -478415023 3718518240 35533109023 -5182301676 52475
8 5021256063 -414685080 3898182184 37545617619 -4431599995 202082
9 5049613168 -612885631 3835143860 37115992347 -6551307715 81860
10 4851137670 -314518688 4116282036 40264500902 -3423428323 766920
11 4680871385 -463168384 4294606572 42351825937 -5390351182 970254
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
87
12 5103282414 -392096752 3793146894 36433400375 -4233671824 119848
13 4919369704 225499577 4039849606 39330944526 2372838313 62063
14 4708688612 -205761707 4283609369 42272861776 -2300769163 503204
15 4803054799 -462131609 4158378661 40564229223 -5294510884 854969
16 4904660519 -339868032 4050823512 39403126381 -3575029036 808968
17 4867391684 -95523894 4108341277 40210179016 -1072748370 956188
18 4929534046 -29050676 4033709925 39285097044 -0201554342 77592
19 4677481077 -725205068 4260827192 42110231837 -8484705753 87790
20 4848724914 -261632472 4123093922 40312963168 -3051906500 972777
21 4773803543 -73506519 4215453698 41380022199 -0525579257 296111
22 5390243531 -1596630330 3007752593 28182903402 -16295885508 2417483
23 5386836438 -1569217617 3023118925 28283785741 -16142816427 51787
24 5381262061 -1599192518 3017377791 28250571107 -16330284136 54475
25 5395193089 -1620537044 2981146536 28024978431 -16430668881 58543
26 5326646317 -1719826438 3052043561 28454993244 -17533778744 2199221
523 Salida de resultados geo_praacutectica2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
88
524 Salida de resultados geo_praacutectica3
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
89
525 Salida de resultados geo_praacutectica4
helliphellip
helliphellip
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
90
526 Salida de resultados geo_praacutectica5
Con la implementacioacuten y caacutelculo de los 9 casos praacutecticos realizados e incluidos en este Proyecto Final de Maacutester se puede obtener una idea de la aplicabilidad de esta libreriacutea en aplicaciones de caacutelculos topograacuteficos y geodeacutesicos Igualmente y como uno de los puntos de partida de este Proyecto obtenemos una libreriacutea muy potente para el uso en aacutembitos universitarios facilitando al profesorado el planteamiento y resolucioacuten de los distintos casos praacutecticos de las asignaturas y al tratarse de coacutedigo abierto se facilita que los alumnos implementen nuevas utilidades formatos de salida etc Convirtiendo geotopo en una herramienta de trabajo diario
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
91
6 CONCLUSIONES FINALES Como conclusiones finales podemos enumerar
Se ha corroborado lo que dicen los impulsores de Python se trata de un lenguaje limpio sencillo y claro muy proacuteximo a pseudocoacutedigo
Resulta interesante la utilizacioacuten de software libre para caacutelculos geodeacutesicos y topografiacuteacos Al tratarse de software libre es accesible a cualquier tipo de usuario
Al partir de la consideracioacuten de un paradigma estructurado de programacioacuten hemos conseguido implementar gran nuacutemero de funciones en ficheros (moacutedulos) de pequentildeo tamantildeo facilitando la programacioacuten Tambieacuten se ha iniciado en la programacioacuten orientada a objetos con la declaracioacuten de alguna clase
La importacioacuten de moacutedulos facilita a la implementacioacuten de coacutedigo sin necesitar volver a escribir el coacutedigo importado y ante cualquier modificacioacuten del mismo automaacuteticamente se actualiza en todos los programas o moacutedulos donde se importe dicho moacutedulo
Con las funciones definidas dentro de Numpy hemos realizado la mayor parte de los caacutelculos necesarios en nuestra biblioteca
Se ha de realizar la importacioacuten expresa de gran nuacutemero de operaciones matemaacuteticas Salvo + - y casi todos los demaacutes operadores se han de importar desde Numpy por ejemplo pi sqrt sin cos etc A veces puede resultar un poco complicado hacer la importacioacuten de estos operadores pero cuando se avanza en la programacioacuten hasta parece maacutes didactico reflejar todas las funciones importadas de otros moacutedulos
Se ha apreciado que en algunos casos las mismas funciones estaacuten incluidas en distintos moacutedulos y ademaacutes con nombres diferentes Asiacute en Numpy tenemos arcsin arccos arctan etc y en SciPy asin acos atan cuando se refieren a las mismas funciones arcoseno arcocoseno y arcotangente
Se ha creado una libreriacutea abierta accesible y editable para moder modificar
coacutedigo y tambieacuten poder ampliar con el implementado de nuevas funciones que aumenten el potencial de la misma Esto tambieacuten se incluye dentro de las liacuteneas futuras de actuacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
92
7 LIacuteNEAS FUTURAS DE ACTUACIOacuteN
De forma general se establecen las siguientes liacuteneas futuras de actuacioacuten e investigacioacuten
Avance en el desarrollo a aplicaciones informaacuteticas mediante el uso de software libre y en especial de Python
Estudio de la aplicabilidad de Python en el caacutelculo minimo-cuadraacutetico de sistemas de ecuaciones aplicables en topografiacutea y geodesia Para ello se ha de profundizar en el estudio de las diferencias entre los tipos array que contiene numpy y los tipos matrix par el caacutelculo avanzado de sistemas de ecuaciones
Aplicacioacuten de Python para el caacutelculo y ajuste de Redes Geodeacutesicas mediante la utilizacioacuten de miacutenimos cuadrados Con este fin estariacuteamos evitando el tener que recurrir a los softwares de caacutelculo de las casas comerciales ahorrando asiacute un coste importante y el poder realizar los ajustes y presentaciones de resultados adapatados a nuestras necesidades
Inclusioacuten de una interfaz graacutefica a los caacutelculos realizados para poder tener visualmente el resultado de los mismos
Aplicabilidad de python en el procesado de imaacutegenes Utilizacioacuten de la libreriacutea PIL (Python Imaging Library) que agrega capacidades de procesamiento de imaacutegenes al interprete Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
93
8 ANEJO
81 EQUIVALENCIAS ENTRE FUNCIONES EN MATLAB Y PYTHON Al partir de la libreiacutea Geotop en Octave hemos de tener en cuenta la equivanlencia entre algunas funciones de MatlabOctave con Python Asiacute tenemos MATLAB numpyarray numpymatrix Notes
ndims(a) ndim(a) or andim get the number of dimensions of a (tensor rank)
size(a) shape(a) or ashape get the size of the matrix
size(an) ashape[n-1]
get the number of elements of the nth dimension of array a (Note that MATLABreg uses 1 based indexing while Python uses 0 based indexing See note INDEXING)
MATLAB numpyarray numpymatrix Notes
[ 1 2 3 4 5 6 ] array([[123] [456]])
mat([[123] [456]]) or mat(1 2 3 4 5 6)
2x3 matrix literal
[ a b c d ] vstack([hstack([ab]) hstack([cd])])
bmat(a b c d) construct a matrix from blocks abc and d
a(end) a[-1] a[-1][00] access last element in the 1xn matrix a
a(25) a[14] access element in second row fifth column
a(2) a[1] or a[1] entire second row of a
a(15) a[05] or a[5] or a[05] the first five rows of a
a(end-4end) a[-5] the last five rows of a
a(1359) a[03][49] rows one to three and columns five to nine of a This gives read-only access
a([245][13]) a[ix_([134][02])] rows 24 and 5 and columns 1 and 3 This allows the matrix to be modified and doesnt require a regular slice
a(3221) a[ 2212] every other row of a starting with the third and going to the twenty-first
a(12end) a[ 2] every other row of a starting with the first
a(end-11) or flipud(a) a[ -1] a with rows in reverse order
a([1end 1]) a[r_[len(a)0]] a with copy of the first row appended to the end
a atranspose() or aT transpose of a
a aconj()transpose() or aconj()T
aH conjugate transpose of a
a b dot(ab) a b matrix multiply
a b a b multiply(ab) element-wise multiply
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
94
MATLAB numpyarray numpymatrix Notes
ab ab element-wise divide
a^3 a3 power(a3) element-wise exponentiation
(agt05) (agt05) matrix whose ijth element is (a_ij gt 05)
find(agt05) nonzero(agt05) find the indices where (a gt 05)
a(find(vgt05)) a[nonzero(vgt05)[0]] a[nonzero(vAgt05)[0]] extract the columms of a where vector v gt 05
a(find(vgt05)) a[vTgt05] a[vTgt05)] extract the columms of a where column vector v gt 05
a(alt05)=0 a[alt05]=0 a with elements less than 05 zeroed out
a (agt05) a (agt05) mat(aA (agt05)A) a with elements less than 05 zeroed out
a() = 3 a[] = 3 set all values to the same scalar value
y=x y = xcopy() numpy assigns by reference
y=x(2) y = x[1]copy() numpy slices are by reference
y=x() y = xflatten(1) turn array into vector (note that this forces a copy)
110 arange(111) or r_[111] or r_[11010j]
mat(arange(111)) or r_[111r]
create an increasing vector see note RANGES
09 arange(10) or r_[10] or r_[910j]
mat(arange(10)) or r_[10r]
create an increasing vector see note RANGES
[110] arange(111)[ newaxis] r_[111c] create a column vector
zeros(34) zeros((34)) mat() 3x4 rank-2 array full of 64-bit floating point zeros
zeros(345) zeros((345)) mat() 3x4x5 rank-3 array full of 64-bit floating point zeros
ones(34) ones((34)) mat() 3x4 rank-2 array full of 64-bit floating point ones
eye(3) eye(3) mat() 3x3 identity matrix
diag(a) diag(a) mat() vector of diagonal elements of a
diag(a0) diag(a0) mat() square diagonal matrix whose nonzero values are the elements of a
rand(34) randomrand(34) mat() random 3x4 matrix
linspace(134) linspace(134) mat() 4 equally spaced samples between 1 and 3 inclusive
[xy]=meshgrid(0805) mgrid[0906] or meshgrid(r_[09]r_[06]
mat() two 2D arrays one of x values the other of y values
ogrid[0906] or ix_(r_[09]r_[06]
mat() the best way to eval functions on a grid
[xy]=meshgrid([124][245]) meshgrid([124][245]) mat()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
95
ix_([124][245]) mat() the best way to eval functions on a grid
MATLAB numpyarray numpymatrix Notes
repmat(a m n) tile(a (m n)) mat() create m by n copies of a
[a b]
concatenate((ab)1) or hstack((ab)) or column_stack((ab)) or c_[ab]
concatenate((ab)1) concatenate columns of a and b
[a b] concatenate((ab)) or vstack((ab)) or r_[ab]
concatenate((ab)) concatenate rows of a and b
max(max(a)) amax() maximum element of a (with ndims(a)lt=2 for matlab)
max(a) amax(0) maximum element of each column of matrix a
max(a[]2) amax(1) maximum element of each row of matrix a
max(ab) maximum(a b) compares a and b element-wise and returns the maximum value from each pair
norm(v) sqrt(dot(vv)) or Scilinalgnorm(v) or linalgnorm(v)
sqrt(dot(vAvA)) or Scilinalgnorm(v) or linalgnorm(v)
L2 norm of vector v
a amp b logical_and(ab) element-by-element AND operator (Numpy ufunc) see note LOGICOPS
a | b logical_or(ab) element-by-element OR operator (Numpy ufunc) see note LOGICOPS
bitand(ab) a amp b bitwise AND operator (Python native and Numpy ufunc)
bitor(ab) a | b bitwise OR operator (Python native and Numpy ufunc)
inv(a) linalginv(a) inverse of square matrix a
pinv(a) linalgpinv(a) pseudo-inverse of matrix a
rank(a) linalgmatrix_rank(a) rank of a matrix a
ab linalgsolve(ab) if a is square
linalglstsq(ab) otherwise solution of a x = b for x
ba Solve aT xT = bT instead solution of x a = b for x
[USV]=svd(a) U S Vh = linalgsvd(a) V = VhT singular value decomposition of a
chol(a) linalgcholesky(a)T
cholesky factorization of a matrix (chol(a) in matlab returns an upper triangular matrix but linalgcholesky(a) returns a lower triangular matrix)
[VD]=eig(a) DV = linalgeig(a) eigenvalues and eigenvectors of a
[VD]=eig(ab) VD = Scilinalgeig(ab) eigenvalues and eigenvectors of ab
[VD]=eigs(ak) find the k largest eigenvalues and eigenvectors of a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
96
MATLAB numpyarray numpymatrix notes
[QRP]=qr(a0) QR = Scilinalgqr(a) mat() QR decomposition
[LUP]=lu(a) LU = Scilinalglu(a) or LUP=Scilinalglu_factor(a)
mat() LU decomposition
conjgrad Scilinalgcg mat() Conjugate gradients solver
fft(a) fft(a) mat() Fourier transform of a
ifft(a) ifft(a) mat() inverse Fourier transform of a
sort(a) sort(a) or asort() mat() sort the matrix
[bI] = sortrows(ai) I = argsort(a[i]) b=a[I] sort the rows of the matrix
regress(yX) linalglstsq(Xy) multilinear regression
decimate(x q) Scisignalresample(x len(x)q) downsample with low-pass filtering
unique(a) unique(a)
squeeze(a) asqueeze()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
97
9 BIBLIOGRAFIacuteA
DOWNEY A ELKNER J MEYERS C Aprenda a Pensar Como un Programador con Python GARCIacuteA-ASENJO VILLAMAYOR L HERNAacuteNDEZ LOacutePEZ D Geodesia Febrero 2005 GONZAacuteLEZ DUQUE R Python PARA TODOS Edicioacuten Internet bajo licencia Creative Commons Reconocimiento 25 Espantildea Descargable en httpmundogeeknettutorial-python MARZAL A GRACIA I Introduccioacuten a la programacioacuten con Python Departamento de Lenguajes y Sistemas Informaacuteticos Universitat Jaume I 2003 Edicioacuten Internet NUMPY COMMUNITY NumPy Reference Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg NUMPY COMMUNITY NumPy User Guide Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg VAN ROSSUM G Guiacutea de aprendizaje de PythonRelease 241ordf0 Edicioacuten Intenet Septiembre 2005 Descargable en httpwwwscipyorg VAN ROSSUM G El tutorial de Python Edicioacuten Intenet Descargable en httppythonorgarpyarTutorial
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
98
10 PAacuteGINAS WEB CONSULTADAS httpenfoquevirtualwordpresscomcategorytutorial httpgeektheplanetnet1347how-to-instalar-pydev-en-aptanaxhtml httpmundogeeknetarchivos20080328python-modulos-y-paquetes httpwwwthebitsourcecomprogramming-software-developmentpythonpython-application-development-aptana-pydev httpwwwyoutubecomwatchv=XtnfY2cBbMA youtube interesante trabajo con pydev y modulos httpcodingderkeilercomArchivePythoncomplangpython2005-08msg03511html paacutegina que explica coacutemo solucionar los problemas de Non-ASCII character httpeswikibooksorgwikiInmersiC3B3n_en_PythonSu_primer_programa_en_PythonDocumentado_de_funciones paacutegina que explica la cadena de documentacioacuten despueacutes de definir una funcioacuten con ldquordquordquo___rdquordquordquo (triples comillas) httpwwwpythonorgdevpepspep-0008 style guide for python code httpmundogeeknetarchivos20080707documentacion-en-python habla de la forma de documentar en python httpwwwpythonorgdevpepspep-0257 documentacioacuten y comentarios httpprogramandoideascomcomentarios-en-python documentacioacuten y comentarios httpwwwyoutubecomwatchv=v0sqRYuL5e8 tutorial de python con aptana httpwwwyoutubecomwatchv=29mq1Bn52GYampfeature=related youtube tutorial httpprojectsscipyorgnumpybrowsertrunknumpymatlibpyrev=8567 paacutegina que habla un poco de matrices
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
99
httpwwwgfceduco~arsranguias42p8guia42html cosas interesantes de matrices httpdocencia-euptunizaresctmedrascipy_tutorialscipy_tutorialhtml varios sobre python httpdocspythonorgtutorialmoduleshtml muy buena de paquetes etc httpwwwlinux-ittcom200804python-mdulos-y-paqueteshtml maacutes sobre paquetes httpwwwmclibreorgconsultarpythonotrosin03_idlehtmlccedil coding cp1252 httpwwwmclibreorgconsultarpython tutorial de python en la web Idle httpbioinfcomavupvescourseslinuxpythonmoduloshtml csv listasetc httpwwwdavidricardocommxp=1173 ok muy bueno importacioacuten csv como matriz httpwwwaprenderpythonorg httpwwwscipyorgNumpy_Example_List_With_Doc paacutegina muy importante de scipy httpjsbsanblogspotcom201101calculo-de-un-area-de-un-poligonohtml video sobre caacutelculo de areas de poliacutegonos irregulares httpmathesaurussourceforgenetmatlab-numpyhtml viprelacioacuten entre operaciones con octave y con python httpwwwscipyorgTentative_NumPy_Tutorial pagina importante de scipy httptecnologicumwordpresscomastronomiavideo-tutoriales-de-python todos los videotutoriales de python httpwwwyoutubecomwatchv=Oj3MZXWXGiUampfeature=related csv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
100
httptranslategoogleestranslatehl=esamplangpair=en7Cesampu=httpwwwscipyorgNumPy_for_Matlab_Users interesante sobre numpyhellip httpwikipythonorgmoinHowToSorting interesante de sort httpwikipythonorgmoinHowToSortingOperator_Module_Functions sort itemgetteretc httpcodeactivestatecomrecipes304440-sorting-dictionaries-by-value-in-python-24 operator itemgetter httpmundogeeknetarchivos20080402python-entrada-salida-ficheros entrada salida de archivos httpwwwgulicorgalmacenhttlaclwpchap11htm formato de escritura textos nuacutemeros y decimales httpwwwprogramacioncomarticuloguia_de_aprendizaje_de_python_657 formatos de salida httpnumpysourceforgenetnumdocHTMLnumdochtmpgfId-57315 muy importante sobre arraysetc httpwwwhjcbnlpythonArrayshtml muy importante sobre arraysetc httpwwwalecjacobsoncomweblogp=1570 cargar un txt como una matriz en python httpdocsscipyorgdocnumpyreferencegeneratednumpygenfromtxthtml getfromtxt de numpy httpwwwalegsaonlinecomart13php httpwwwumesdocenciabarzanaIAGPIagp3html httpwebusales~dhernandsoftwarehtmGeotop httpmailpythonorgpipermailtutor2008-March060886html From future import division
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
101
httpwwwyoutubecomwatchv=I6GMIQBD6EU youtube diccionarios httpmundogeeknetarchivos20080121python-tipos-basicos-ii-colecciones diccionarios httpstaffnotiaces~rcardeneshgdiveintopython3-esnative-datatypeshtml diccionarios httpwwwestrellateyardeorgdiscovermanual-python-lo-mas-basico diccionarios httpeswikibooksorgwikiInmersiC3B3n_en_PythonTipos_de_datos_nativosPresentaciC3B3n_de_los_diccionarios diccionarios httpdocspythonorgartutorialdatastructureshtmldiccionarios python estructura de diccionarios httpwwwwikilearningcomtutorialintroduccion_informal_a_matlab_y_octave-matrices_y_algebra_lineal_i19256-8 concatenar matrices httpwwwslidesharenetsantiagosilascomputao-cientfica-com-numpy-e-scipy-7797060 detalles de numpy vectores matricesetc httpwwwscipyorgNumPy_for_Matlab_Usershead-e9a492daa18afcd86e84e07cd2824a9b1b651935 muy importante de scipy arrays y matriceshellip httpdocsscipyorgdocnumpyreferencegeneratednumpyconcatenatehtml muy importante de scipy arrays y matriceshellip httppyspanishdocsourceforgenettut traduccioacuten del tutorial de Guido httpwwwscipyorgNumpy_Example_List_With_Dochead-5202db3259f69441c695ab0efc0cdf45341829fc httppyspanishdocsourceforgenetlibmodule-picklehtml funcioacuten pickle
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
102
httpnicocesarcomq=node23 carga de ficheros binarios httpstaffnotiaces~rcardeneshgdiveintopython3-esfileshtml apertura cierre carga de ficheros etc httppythonr2wordpresscom20080829leer-archivos-binarios-en-python lectura de ficheros binarios httpwwwignesignlayoutInherramientasdo descarga de ficheros regilla del IGN httpterrasitgvaeseskbtransformacion-coordenadas-utm-ed50-utm-etrs89-utilizando-libreria-proj4 paacutegina de la gva sobre cambio de sistema y fichero rejilla httpdocspythonorglibrarystructhtml moacutedulo struct de python para lectura de ficheros binarios httpwwwslidesharenetjpadillaaprogramacion-orientada-a-objetos-en-python programacioacuten orientada a objetos con python httppyspanishdocsourceforgenettutnode7html recorrer diccionarios httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 interesante aplicacioacuten fichero rejilla ntv2 en python
Agradecimientos
He de agradecer su dedicacioacuten a mis dos tutores en este Proyecto Final de Maacutester
Deseo mostrar mi gratitud a D Joseacute Antonio Martiacuten Jimeacutenez quien supervisoacute y tutorizoacute este Proyecto desde la Universidad de Salamanca Escuela Politeacutecnica Superior de Aacutevila
Muy especialmente quiero agradecer a D David Hernaacutendez Loacutepez su dedicacioacuten y apoyo en la ejecucioacuten de esta tarea Por las tardes de verano dedicadas a la resolucioacuten de dudas o planteamientos al proyecto y por la confianza que depositoacute en miacute al aceptar ser mi tutor De la misma manera espero haber estado a la altura esperada en la consecucioacuten de los objetivos que desde el primer momento me planteoacute
Resumen
Como Ingeniero Teacutecnico en Topografiacutea numerosas han sido las necesidades de disponer de herramientas informaacuteticas para los distintos caacutelculos necesarios desde la etapa de estudiante en la Universidad como una vez incurso en la vida laboral Desde el simple caacutelculo de un acimut y distancia entre dos puntos medidas de superficies encerradas en poliacutegonos irregulares datos de replanteo de puntos caacutelculo de previsioacuten de errores o las diferentes transformaciones de coordenadas de grandes cantidades de puntos entre unas proyecciones y otras y entre distintos Sistemas de Referencia Coordenados Partiendo de esta necesidad y de la existencia de la libreriacutea ldquoGeotoprdquo en Octave del Profesor y Co-tutor de este proyecto Dr D David Hernaacutendez Loacutepez se han elaborado una serie de herramientas en Python para caacutelculos geodeacutesicos y topograacuteficos en Python principalmente migrando del lenguaje Octave a lenguaje Python Ademaacutes del uso para caacutelculos topograacuteficos en aacutembitos del uso diario de ingenieros Teacutecnicos en Topografiacutea o cualquier Ingenieriacutea afiacuten esta libreriacutea tambieacuten se concibe como una herramienta de uso para el estudiante de estas disciplinas en las Universidades Al tratarse de software libre es perfectamente editable y adaptable a las necesidades de caacutelculo y presentacioacuten que se consideren oportunas La eleccioacuten de Python aunque posteriormente se desarrolle maacutes se debe a que se trata de un lenguaje de programacioacuten faacutecil de aprender potente y en auge Tiene eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de plataformas El inteacuterprete de Python y la extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables y se pueden distribuir libremente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
1
TABLA DE CONTENIDOS
1 OBJETIVOS DEL TRABAJO 3
2 CONTEXTO DEL PROYECTO 4
21 iquestPOR QUEacute SOFTWARE LIBRE 4
22 LENGUAJES DE PROGRAMACIOacuteN 7
23 PARADIGMAS DE PROGRAMACIOacuteN 8
24 iquestPOR QUEacute PYTHON 9
241 Caracteriacutesticas de Python 9
3 INSTRUMENTACIOacuteN Y SOFTWARE EMPLEADOS PHYTON 12
31 INTRODUCCIOacuteN A PYTHON 12
311 Guiacutea de aprendizaje de Python por Guido Van Rossum v24 16
3111 Llamar al inteacuterprete 17
3112 Moacutedulos 22
3113 El camino de buacutesqueda de moacutedulos 23
3114 Ficheros Python ldquoCompiladosrdquo 23
3115 Moacutedulos estandar 24
3116 Paquetes 24
3117 Importar de un paquete 27
3118 Referencias internas al paquete 28
32 FUNCIONES INCLUIDAS EN NUMPY POR CATEGORIacuteAS (ARRAY CREATION) 28
4 METODOLOGIacuteA 36
41 ESTRUCTURA DE LA LIBRERIacuteA GEOTOPO 36
42 DOCUMENTADO DE FUNCIONES 42
43 FUNCIONES IMPLEMENTADAS 47
431 Libreriacutea en Python ldquogeotopogeneralrdquo 47
432 Libreriacutea en Python ldquogeotopotopografiardquo 50
433 Libreriacutea en Python ldquogeotopogeodesiardquo 52
434 Libreriacutea en Python ldquogeotopoproy_cartograficasrdquo 60
435 Libreriacutea en Python ldquogeotopotransformacionrdquo 70
5 APLICABILIDAD DE LA LIBRERIacuteA Y CONCLUSIONES FINALES 73
51 CASOS PRAacuteCTICOS TOPOGRAFIacuteA 77
511 Implementacioacuten del coacutedigo topo_praacutectica1 77
512 Impresioacuten del fichero de salida de resultados topo_praacutectica1 81
513 Salida de resultados topo_praacutectica2 81
514 Salida de resultados topo_praacutectica3 82
515 Salida de resultados topo_praacutectica4 83
52 CASOS PRAacuteCTICOS GEODESIA 83
521 Implementacioacuten del coacutedigo geo_praacutectica1 84
522 Impresioacuten del fichero de salida de resultados geo_praacutectica1 86
523 Salida de resultados geo_praacutectica2 87
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
2
524 Salida de resultados geo_praacutectica3 88
525 Salida de resultados geo_praacutectica4 89
526 Salida de resultados geo_praacutectica5 90
6 CONCLUSIONES FINALES 91
7 LIacuteNEAS FUTURAS DE ACTUACIOacuteN 92
8 ANEJO 93
81 EQUIVALENCIAS ENTRE FUNCIONES EN MATLAB Y PYTHON 93
9 BIBLIOGRAFIacuteA 97
10 PAacuteGINAS WEB CONSULTADAS 98
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
3
1 OBJETIVOS DEL TRABAJO Dentro del marco general de la guiacutea docente del Maacutester en Geotecnoloacutegias Cartograacuteficas en Ingenieriacutea y Arquitectura impartido por la Escuela Politeacutecnica Superior de Aacutevila de la Universidad de Salamanca se establece como requisito para la obtencioacuten de esta titulacioacuten la realizacioacuten de un proyecto final de maacutester A tal fin responde el presente trabajo en el que se ha optado por la realizacioacuten de un proyecto de desarrollo de herramientas en Python para caacutelculos geodeacutesicos y topograacuteficos Como Ingeniero Teacutecnico en Topografiacutea numerosas han sido las necesidades de disponer de herramientas informaacuteticas para los distintos caacutelculos necesarios desde la etapa de estudiante en la Universidad como una vez incurso en la vida laboral Desde el simple caacutelculo de un acimut y distancia entre dos puntos medidas de superficies encerradas en poliacutegonos irregulares datos de replanteo de puntos caacutelculo de previsioacuten de errores o las diferentes transformaciones de coordenadas de grandes cantidades de puntos entre unas proyecciones y otras y entre distintos Sistemas de Referencia Coordenados Partiendo de esta necesidad y de la existencia de la libreriacutea ldquoGeotoprdquo en Octave del Profesor y Co-tutor de este proyecto Dr D David Hernaacutendez Loacutepez se han elaborado una serie de herramientas en Python para caacutelculos geodeacutesicos y topograacuteficos en Python principalmente migrando del lenguaje Octave a lenguaje Python Ademaacutes del uso para caacutelculos topograacuteficos en aacutembitos del uso diario de ingenieros Teacutecnicos en Topografiacutea o cualquier Ingenieriacutea afiacuten esta libreriacutea tambieacuten se concibe como una herramienta de uso para el estudiante de estas disciplinas en las Universidades Al tratarse de software libre es perfectamente editable y adaptable a las necesidades de caacutelculo y presentacioacuten que se consideren oportunas La eleccioacuten de Python aunque posteriormente se desarrolle maacutes se debe a que se trata de un lenguaje de programacioacuten faacutecil de aprender y potente Tiene eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de plataformas El inteacuterprete de Python y la extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables y se pueden distribuir libremente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
4
2 CONTEXTO DEL PROYECTO Dentro de los objetivos de este proyecto se encuentra el aprendizaje y desarrollo de herramientas con software libre y tambieacuten la eleccioacuten de Python al tratarse de un lenguaje de programacioacuten que aunque parece novedoso esta encontrando gran aceptacioacuten en entornos docentes y tambieacuten en el desarrollo de programacioacuten en la empresa privada
21 iquestPOR QUEacute SOFTWARE LIBRE Muchiacutesimos gobiernos de todo el mundo estaacuten empezando a ver al software libre como una poderosa herramienta para disminuir sus costos de administracioacuten reducir la dependencia tecnoloacutegica y fomentar sus industrias locales de software Las razones principales que impulsan la migracioacuten de los sistemas de informacioacuten de las administraciones puacuteblicas al software libre son
Ahorro econoacutemico El bajo o nulo coste de los productos libres permiten a las PYMES servicios y ampliar sus infraestructuras sin que se vean mermados sus intentos de crecimiento por no poder hacer frente al pago de cantidades en licencias
Independencia tecnoloacutegica mayor transparencia aumento de la interoperabilidad permite auditar el coacutedigo fuente etc El secretismo tenoloacutegico es uno de los grandes frenos y desequilibrios existentes para el desarrollo en el modelo de propiedad intelectual
Fomenta el desarrollo local y la industria nacional de software La praacutectica totalidad de los concursos para desarrollo de software para la administracioacuten puacuteblica pasan por compatibilizar con productos de la factoriacutea de Microsoft por lo que garantiza la perpetuacioacuten e ingresos hacia Microsoft y no favorece a las empresas locales que pudieran ofrecer productos equivalentes Ademaacutes de la reduccioacuten de costes por uso de software libre iquestqueacute podriacutean aportar esas inversiones si los beneficiados fuesen empresas del propio estado en lugar de mandar a una compantildeiacutea extranjera esas enormes cantidades de dinero
Facilita la adaptacioacuten a las necesidades concretas de las administraciones en materia linguumliacutestica legislativa de accesibilidad e imagen
El conocimiento generado es puacuteblico Fomento de la libre competencia al basarse en servicios y no licencias
Uno de los modelos de negocio que genera el software libre es la contratacioacuten de servicios de atencioacuten al cliente Este sistema permite que las compantildeiacuteas que den el servicio compitan en igualdad de condiciones a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
5
no poseer la propiedad del producto del cual dan el servicio
Tratamiento seguro de los datos y la informacioacuten Formatos estaacutendar Los formatos estaacutendar permiten una
interoperatividad maacutes alta entre sistemas evitando incompatibilidades Los estaacutendares de facto son vaacutelidos en ocasiones para lograr una alta interoperatividad si se omite el hecho que estos exigen el pago de royalities a terceros y por razones de mercado no interesa que se perpetuacuteen mucho tiempo
Sistemas sin puertas traseras y maacutes seguros El acceso al coacutedigo fuente permite que tanto hackers como empresas de seguridad de todo el mundo puedan auditar los programas por lo que la existencia de puertas traseras es iloacutegica ya que se pondriacutea en evidencia y contraviene el intereacutes de la comunidad que es la que lo genera
Correccioacuten maacutes raacutepida y eficiente de fallos El funcionamiento e intereacutes conjunto de la comunidad ha demostrado solucionar maacutes raacutepidamente los fallos de seguridad en el software libre algo que desgraciadamente en el software propietario es maacutes difiacutecil y costoso
Meacutetodos simples y unificados de gestioacuten de software Actualmente la mayoriacutea de distribuciones de linux incorporan alguno de los sistemas que unifican el meacutetodo de instalacioacuten de programas libreriacuteas etc Por parte de los usuarios Asiacute se permite el acceso a las miles de aplicaciones existentes de forma segura y gratuita a la par que evitan tener que recurrir a paacuteginas web de dudosa eacutetica desde las que los usuarios instalan sin saberlo spyware o virus informaacuteticos en sus sistemas Este sistema de acceso y gestioacuten del software se hace praacutecticamente utoacutepico si se extrapola al mercado propietario
Sistema en expansioacuten El software libre ya no es una promesa es una realidad y se utiliza en sitemas de produccioacuten por algunas de las empresas tecnoloacutegicas maacutes importantes como IBM Sun Microsystems Google Hewlett-Packard etc Paradoacutejicamente incluso Microsoft que posee sus propias herramientas emplea GNU Linux en muchos de sus servidores
Entre los paiacuteses maacutes adeptos al software libre sus desarrollos y alcance de sus
proyectos de migracioacuten se encuentran de la siguiente manera ALEMANIA Alemania es el paiacutes con mayor uso del software libre del mundo No
soacutelo estaacute presente en todas sus dependencias gubernamentales y universidades sino que tiene programas multimillonarios para el desarrollo de aplicaciones libres En 2009 destinoacute maacutes de 500 millones de Euros al proyecto ldquoOpen Source and Green ITrdquo El software libre es tan importante para los alemanes que incluso el 59 de sus empresas lo utiliza el argumento maacutes utilizado no es la reduccioacuten de costos sino la posibilidad de poder modificar el coacutedigo fuente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
6
BRASIL Fue el primer paiacutes en migrar masivamente sus sistemas de informacioacuten a alternativas open source Se llevoacute a cabo en primera instancia en el estado de Riacuteo Grande luego se realizoacute a escala nacional
ARGENTINA Existen varias iniciativas estatales que apuntan a fomentar el desarrollo de software libre Actualmente el software libre estaacute implementado en algunas provincias siendo Santa Fe el maacuteximo exponente de utilizacioacuten doacutende todo el software ha sido liberado bajo licencia GPL
FRANCIA La Asamblea Nacional utiliza software libre en todos sus sistemas y terminales de trabajo Francia viene tomando impulso en el desarrollo de software open source existen iniciativas para que el 20 del software contratado por la Administracioacuten Puacuteblica sea libre para el 2012 tambieacuten ofrece beneficios fiscales para las agrupaciones de usuarios y desarrolladores de SL
ESPANtildeA Espantildea se ha apostado como uno de los mayores impulsores mundiales del uso de software libre Actualmente existen 200 empresas proveedoras de soluciones 100 comunidades de usuarios y 180 centros educativos donde el software de coacutedigo abierto es una realidad cotidiana Muchos ayuntamientos y universidades ya se pasaron a sistemas open source
A principios de 2010 se presentoacute un proyecto liderado por la Plataforma Tecnoloacutegica Espantildeola de Software y Servicios con el apoyo del Plan Avanza Dicho plan pretende colocar a Espantildea a la par del resto de Europa en el disentildeo y uso de software libre de confianza y calidad similares a los comerciales Este proyecto llamado Vulcano trata de unificar el trabajo de distintas universidades centros tecnoloacutegicos y empresas que hasta el momento habiacutean dedicado sus esfuerzos al aacutembito de la educacioacuten
En un entrevista ofrecida por David Saacutenchez Director de Comunicacioacuten y Relaciones Instituciones en CENATIC que es el Centro Nacional de Referencia de Aplicacioacuten de las Tecnologiacuteas de la informacioacuten y la Comunicacioacuten basadas en Fuentes Abiertas podemos encontrar httpwwwmuylinuxcom20110407entrevistamos-a-david-sanchez-de-cenatic
CENATIC es una Fundacioacuten Puacuteblica Estatal del gobierno de Espantildea promovida por el Ministerio de Industria Turismo y Comercio y la Junta de Extremadura que ademaacutes cuenta en su patronato con las comunidades autoacutenomas de Andaluciacutea Aragoacuten Asturias Cantabria Cataluntildea Islas Balares Paiacutes Vasco y Galicia asiacute como las empresas Atos Origin Telefoacutenica y Grupo Aacutepex
Su trabajo es promover el conocimiento y uso del software libre en todos los aacutembitos de la sociedad con especial atencioacuten en las administraciones puacuteblicas las empresas el sector tecnoloacutegico proveedor o usuario de tecnologiacuteas libres y las comunidades de desarrollo a traveacutes de proyectos especiacuteficos para cada uno de estos sectores
ldquo La apuesta a del Administracioacuten del Estado por el software libre se inicioacute ya en los 90 cuando el entonces ministerio para las Administraciones Puacuteblicas llevoacute a cabo la primera gran migracioacuten a software libre de 1375 servidores Llegaron tambieacuten proyectos como el del Principado de Asturias para generar de forma colaborativa un
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
7
marco basado en software libre que permitioacute crear cluacutester de empresas locales capaces de aportar servicios de eAdministracion que de otra manera tendriacutean que haber contratado fuera de su comunidadrdquo
ldquo O el proyecto de gvSIG de la Conselleriacutea d‟Infrestructures i Transport de la Generalitat Valenciana un sistema de informacioacuten geograacutefico que cuenta con un tejido empresarial local alrededor del proyecto y estaacuten haciendo de la Comunidad Valenciana el nuacutecleo maacutes activo a nivel mundial de desarrollo GIS en entornos libres Tambieacuten es muy conocido el proyecto de Red Tecnoloacutegica Educativa de la Junta de Extremadura con Linex como primera distribucioacuten regional y concepto pionero adoptado ya por 7 comunidades autoacutenomasrdquo ldquoFinalmente a nivel de administracioacuten local hasta el 80 de los grandes ayuntamientos cuentan hoy en diacutea con proyectos de software libre siendo quizaacute el maacutes destacado el del Ayuntamiento de Zaragozardquo
22 LENGUAJES DE PROGRAMACIOacuteN Un lenguaje de programacioacuten es un lenguaje artificial que puede ser usado para controlar el comportamiento de una maacutequina especialmente una computadora Estos se componen de un conjunto de reglas sintaacutecticas y semaacutenticas que permiten expresar instrucciones que luego seraacuten interpretadas Debe distinguirse de ldquolenguaje informaacuteticordquo que es una definicioacuten maacutes amplia puesto que estos incluyen otros lenguajes como son el HTML o PDF que dan formato a un texto y no es programacioacuten en siacute misma El programador es el encargado de utilizar un lenguaje de programacioacuten para crear un conjunto de instrucciones que al final constituiraacute un programa o subprograma informaacutetico En su uso un lenguaje de programacioacuten puede acercarse a la forma humana de expresarse y por eso este tipo de lenguajes es llamado de alto nivel Esto significa que utilizan palabras y formas en sus estructuras que se asemejan al lenguaje natural (especialmente al ingleacutes) En cambio aquellos lenguajes que se aproximan maacutes a la forma en la cual la computadora se maneja son llamados lenguajes de bajo nivel Esto significa que lo que el programador deba escribir se acercaraacute al lenguaje maacutequina que es en definitiva lo que las computadoras pueden interpretar De todas maneras un lenguaje de programacioacuten difiere en muchos aspectos de un lenguaje humano Un coacutedigo escrito en un lenguaje de programacioacuten especiacutefico siempre se interpreta de la misma manera (no como los idiomas humanos ambiguos) los errores son mucho maacutes significativos (a tal punto de que un coacutedigo puede volverse ininterpretable por la computadora) etc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
8
El coacutedigo fuente es el conjunto de instrucciones que conforman un programa (o subprograma o moacutedulo) El coacutedigo fuente debe ser compilado para poder ser interpretado y ejecutado por la computadora La compilacioacuten traduce el coacutedigo fuente (que depende del lenguaje de programacioacuten) a un lenguaje maacutequina (que depende del sistema de la maacutequina) Existen lenguajes del tipo script que son directamente ejecutados por un inteacuterprete y no necesitan compilacioacuten Los lenguajes de programacioacuten pueden clasificarse empleando distintos meacutetodos y puntos de vista Esta clasificacioacuten se basa en el paradigma que utilizan Se debe aclarar que existen muchos maacutes paradigmas y subparadigmas de programacioacuten no incluidos dentro de los mencionados Ademaacutes todaviacutea hay conflictos en las definiciones y alcances de ciertos paradigmas
23 PARADIGMAS DE PROGRAMACIOacuteN Un paradigma de programacioacuten provee (y determina) la visioacuten y meacutetodos de un programador en la construccioacuten de un programa o subprograma Diferentes paradigmas resultan en diferentes estilos de programacioacuten y en diferentes formas de pensar la solucioacuten de problemas (con la solucioacuten de muacuteltiples ldquoproblemasrdquo se construye una aplicacioacuten) Los lenguajes de programacioacuten son basados en uno o maacutes paradigmas (Veacutease Programacioacuten en muacuteltiples paradigmas) Por ejemplo Smalltalk y Java son lenguajes basados en el paradigma orientado a objetos El lenguaje de programacioacuten Scheme en cambio soporta soacutelo programacioacuten funcional En cambio Python soporta muacuteltiples paradigmas Clasificacioacuten por paradigmas de programacioacuten Paradigma Imperativo describe la programacioacuten como una secuencia instrucciones o comandos que cambian el estado de un programa El coacutedigo maacutequina en general estaacute basado en el paradigma imperativo Su contrario es el paradigma declarativo En este paradigma se incluye el paradigma procedimental (procedural) entre otros Paradigma Declarativo No se basa en el coacutemo se hace algo (coacutemo se logra un objetivo paso a paso) sino que describe (declara) coacutemo es algo En otras palabras se enfoca en describir las propiedades de la solucioacuten buscada dejando indeterminado el algoritmo (conjunto de instrucciones) usado para encontrar esa solucioacuten Es maacutes complicado de implementar que el paradigma imperativo tiene desventajas en la eficiencia pero ventajas en la solucioacuten de determinados problemas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
9
Paradigma Estructurado la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Ademaacutes la programacioacuten se controla con secuencia seleccioacuten e iteracioacuten Permite reutilizar coacutedigo programado y otorga una mejor compresioacuten de la programacioacuten Es contrario al paradigma inestructurado de poco uso que no tiene ninguna estructura es simplemente un ldquobloquerdquo como por ejemplo los archivos batch (bat) Paradigma Orientado a Objetos estaacute basado en la idea de encapsular estado y operaciones en objetos En general la programacioacuten se resuelve comunicando dichos objetos a traveacutes de mensajes (programacioacuten orientada a mensajes) Se puede incluir -aunque no formalmente- dentro de este paradigma el paradigma basado en objetos que ademaacutes posee herencia y subtipos entre objetos Ej Simula Smalltalk C++ Java Visual Basic NET etc Su principal ventaja es la reutilizacioacuten de coacutedigos y su facilidad para pensar soluciones a determinados problemas Paradigma Funcional este paradigma concibe a la computacioacuten como la evaluacioacuten de funciones matemaacuteticas y evita declarar y cambiar datos En otras palabras hace hincapieacute en la aplicacioacuten de las funciones y composicioacuten entre ellas maacutes que en los cambios de estados y la ejecucioacuten secuencial de comandos (como lo hace el paradigma procedimental) Permite resolver ciertos problemas de forma elegante y los lenguajes puramente funcionales evitan los efectos secundarios comunes en otro tipo de programaciones Paradigma loacutegico se basa en la definicioacuten de reglas loacutegicas para luego a traveacutes de un motor de inferencias loacutegicas responder preguntas planteadas al sistema y asiacute resolver los problemas Ej prolog Otros paradigmas y subparadigmas son paradigma orientado al sujeto paradigma heuriacutestico paradigma reflectante programacioacuten basada en reglas paradigma basado en restricciones programacioacuten basada en prototipos etc
24 iquestPOR QUEacute PYTHON
241 Caracteriacutesticas de Python
Python es un lenguaje de programacioacuten de tipo script creado por Guido van Rossum a principios de los antildeos 90 cuyo nombre proviene del grupo ldquoMonty Pythonrdquo El objetivo es un lenguaje con una sintaxis muy limpia y con un coacutedigo legible Python es un lenguaje de programacioacuten multiparadigma Esto significa que maacutes que forzar a los programadores a adoptar un estilo particular de programacioacuten permite varios estilos programacioacuten orientada a objetos programacioacuten imperativa funcional estructurada
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
10
etc Otros paradigmas estaacuten soportados mediante el uso de extensiones Los lenguajes de script (lenguajes interpretados de muy alto nivel como Perl y Python) gozan de creciente importancia e implantacioacuten en el mundo del software libre Python es un lenguaje de programacioacuten faacutecil de aprender y potente Dispone de eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos simple pero eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de las plataformas En Python no hay terminadores de sentencia (como el punto y como de CC++Java) ni marcas de iniciofin de bloque (como las llaves de esos mismos lenguajes) La indentacioacuten como forma de marcar bloques elimina errores propios de los lenguajes citados y que son frecuentes en los estudiantes y tambieacuten en los programadores profesionales sentencias condicionales sin accioacuten por antildeadir un punto y coma incorrectos bucles con una sola sentencia cuando parece que hay dos o maacutes (por omisioacuten de llaves con un sangrado inadecuado del programa) sentencias con semaacutentica ldquoalteradardquo por usar una coma cuando corresponde un punto y coma o por omitir un punto y coma al declarar un registro antes de una funcioacuten etc La indentacioacuten soacutelo resulta molesta cuando el tamantildeo de un bloque de cierta profundidad excede del tamantildeo de la ventana del editor Python es un lenguaje interpretado Los lenguajes interpretados permiten ciclos de desarrollo breves (edicioacuten y ejecucioacuten) que animan a los estudiantes a experimentar Python dispone de un entorno de ejecucioacuten que ayuda a detectar los errores (incluyendo aquellos que soacutelo se manifiestan en ejecucioacuten) sentildealaacutendolos con mensajes muy informativos Python ofrece ademaacutes un entorno interactivo con el que es posible efectuar pequentildeas pruebas o disentildear incrementalmente las soluciones a los problemas La contrapartida de que se trate de un lenguaje interpretado es obviamente la menor velocidad de ejecucioacuten Python puede considerarse pseudocoacutedigo ejecutable Es muy expresivo y su sintaxis sencilla interfiere poco en la implementacioacuten de algoritmos asiacute que resulta un buen sustituto del pseudocoacutedigo con la ventaja de que los algoritmos codificados en Python siacute son ejecutables Python ofrece un rico conjunto de estructuras de datos flexibles El tipo lista de python (un vector dinaacutemico heterogeacuteneo) permite introducir con naturalidad el concepto de secuencia y presentar los algoritmos baacutesicos de manejo de secuencias Que la indexacioacuten empiece siempre en 0 ayuda a dar el salto a C C++ o Java El entorno de ejecucioacuten proporciona comprobacioacuten de validez de los iacutendices eliminando asiacute una de las principales fuentes de problemas de C y C++ El hecho de que las listas sean
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
11
redimensionables elimina al programador la necesidad de tomar decisiones acerca de la longitud maacutexima de los vectores demasiado pronto Por otra parte Python es un lenguaje muy ortogonal una vez se ha aprendido a manejar listas por ejemplo se sabe manejar cadenas ya que ambos tipos son secuenciales y presentan conjuntos de operadores con igual nombre y semaacutentica Ademaacutes de listas y cadenas Python ofrece tuplas (listas inmutables) y diccionarios (vectores asociativos) Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc No es que haya que presentar todos los moacutedulos pero sirve para ayudar a consultar la documentacioacuten de las bibliotecas disponibles favorece la programacioacuten eficiente
Python es orientado a objetos A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulos en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar al de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
El inteacuterprete de Python y su extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables para las plataformas maacutes importantes en la sede web de Python httppythonorg y se pueden distribuir libremente La misma sede contiene tambieacuten distribuciones y direcciones de muchos moacutedulos programas y herramientas Python de terceras partes ademaacutes de documentacioacuten adicional Es faacutecil ampliar el inteacuterprete de Python con nuevas funciones y tipos de datos implementados en C o C++ (u otros lenguajes a los que se pueda acceder desde C) Python es tambieacuten adecuado como lenguaje de extensioacuten para aplicaciones adaptables al usuario Algunas de las empresas que usan Python son Google Yahoo Industrial Light amp Magic Walt Disney NASA SGI Inc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
12
3 INSTRUMENTACIOacuteN Y SOFTWARE EMPLEADOS PHYTON
31 INTRODUCCIOacuteN A PYTHON Como se comentoacute en el punto anterior Python
es orientado a objetos (realmente es multiparadigma aceptando distintos tipos de paradigmas) A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulo en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar a l de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc
Entre estas bibliotecas cabe mencionar Numpy Numpy es un moacutedulo de Python escrito en C que define los vectores numeacutericos las matrices y las operaciones entre ellos Ademaacutes de las funciones sobre vectores y matrices tambieacuten incluye funciones trigonomeacutetricas del tipo sin cos tan etc Numpy es el paquete fundamental necesario para programacioacuten cientiacutefica con Python Contiene entre otras cosa
Un poderoso N-dimensional objeto vector Sofisticadas funciones Herramientas para integracioacuten con coacutedigo de C C++ y Fortram Uacutetiles de algebra lineal Transformada de Fourier y capacidades de
nuacutemeros aleatorios Ademaacutes de sus usos cientiacuteficos obvios NumPy tambieacuten se puede utilizar como un eficiente multi-dimensional contenedor de datos geneacutericos Pueden ser definidos tipos arbitrarios de datos Esto permite integrar a la perfeccioacuten y raacutepidamente con una amplia variedad de bases de datos El objeto principal de Numpy es el vector homogeacuteneo multidimensional Eacuteste es una tabla de elementos (generalmente nuacutemeros) todos del mismo tipo indexados por una tupla de enteros positivos Por ldquomultidimensionalrdquo entendemos que los vectores pueden tener varias dimensiones de ejes El nuacutemero de ejes se llamaraacuten a menudo ldquorangordquo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
13
Por ejemplo las coordenadas de un punto en el espacio 3D seriacutea [1 2 1] que
representariacutea un vector de rango 1 de longitud 3 Otro ejemplo seriacutea
[[ 1 0 0]
[ 0 1 2]]
que representa un array de rango 2 (2 dimensiones) Para maacutes informacioacuten mirar
Numpy Glossary
Otras libreriacuteas importantes en Python son Scipy es otra libreriacutea que usa Numpy El desarrollo de Scipy comenzoacute en el antildeo 2001 Sus oriacutegenes se remontan al paquete con extensiones numeacutericas para Python denominado Numeric Posteriormente aparecioacute Numarray con la intencioacuten de construir un paquete maacutes flexible y de limpiar el coacutedigo aunque resultoacute ser maacutes lengo para caacutelculos matriciales en pocas dimensiones En el antildeo 2005 el principal impulsor de Scipy Travis Oliphant reunificoacute ambos en un uacutenico paquete que integrse las ventajas de ambos y se denominoacute Numpy considerado el nuacutecleo de Scipy Scipy en siacute mismo se concibe actualmente como una extensioacuten de las funcionalidades de Numpy
Scipy posee moacutedulos para optimizacioacuten de funciones integracioacuten funciones especiales resolucioacuten de ecuaciones diferenciales ordinarias y otros muchos aspectos
Puede ser usado con Linux Windows y ha sido tambieacuten compilado para Sun y Mac
Scipy es un proyecto de software libre que ha sido patrocinado por una compantildeiacutea Enthought inc
Su organizacioacuten se estructura en subpaquetes que se pueden considerar especializados en dominios cientiacuteficos determinados Podemos encontrar estos paquetes seguacuten la ayuda de scipy (v046)
stats -- Statistical Functions sparse -- Sparse matrix lib -- Python wrappers to external libraries linalg -- Linear algebra routines signal -- Signal Processing Tools misc -- Various utilities that dont have another home interpolate -- Interpolation Tools [] optimize -- Optimization Tools [] cluster -- Vector Quantization Kmeans [] fftpack -- Discrete Fourier Transform algorithms []
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
14
io -- Data input and output [] maxentropy -- Routines for fitting maximum entropy models [] integrate -- Integration routines [] liblapack -- Wrappers to LAPACK library [] special -- Special Functions [] libblas -- Wrappers to BLAS library []
Matplotlib es una libreriacutea de Python que facilita la publicacioacuten de calidad de la publicacioacuten interactiva Permite obtener graacuteficas de calidad para publicaciones Su principal submoacutedulo para dibujar es pyplot Mayavi Ipython PIL (Python Imaging Library) Pythonxy EPD (Enthought python distribution $$) hellip Este texto como Memoria de un Proyecto Final de Maacutester no pretende ser ni mucho menos un manual de Python pero siacute son necesarios unos conocimientos previos primero para comprender la filosofiacutea del programador y posteriormente saber las utilidades que podemos obtener al trabajar con Python Para ello vamos a incluir algunos detalles incluidos entro de la Guiacutea de aprendizaje de Python por Guido Van Rossum v24 creador de Python Para la realizacioacuten de este documento se ha consultado como aparece en Bibliografiacutea y Referencias en la Web numerosa documentacioacuten pero como punto de partida parece loacutegico recoger la documentacioacuten de la Guiacutea de aprendizaje del propio creador de Python Python contiene una serie de palabras clave dependientes de la versioacuten de instalacioacuten para asegurarnos de las palabras clave de la versioacuten descargada podemos introducir el siguiente coacutedigo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
15
Palabras clave de Python De la misma manera Python trae consigo ciertas funciones que vienen de serie esto es no es necesario cargarlas desde ninguacuten moacutedulo Dichas funciones dependen de la versioacuten de Python instalada En la paacutegina httpdocspythonorglibraryfunctionshtml Nos encontramos con dicha relacioacuten A modo de resumen eacutestas son (ver paacutegina siguiente)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
16
Funciones internas de Python
311 Guiacutea de aprendizaje de Python por Guido Van Rossum v24
Extractos del documento Si en alguna ocasioacuten hemos escrito un guioacuten para un inteacuterprete de oacuterdenes (o shell script) de UNIX largo puede que hayamos sentido que nos encantariacutea antildeadir una caracteriacutestica maacutes pero ya es tan lento tan grande tan complicadohellip O la caracteriacutestica involucra una llamada al sistema u otra funcioacuten accesible soacutelo desde C El problema en siacute no suele ser tan complejo como para transformar el guioacuten en un programa en C Igual el programa requiere cadenas de longitud variable u otros tipos de datos (como listas ordenadas de nombres de fichero) faacuteciles en sh pero tediosas en C o quizaacute no tengamos tanta soltura con C Otra situacioacuten Quizaacute tengas que trabajar con bibliotecas de C diversas y el ciclo normal en C de escribir-compilar-probar-recompilar es demasiado lento Necesitas desarrollar software con maacutes velocidad Posiblemente has escrito un programa al que vendriacutea bien un lenguaje de extensioacuten y no quieres disentildear un lenguaje escribir y depurar el inteacuterprete y adosarlo a la aplicacioacuten En tales casos Python puede ser el lenguaje que necesitas Python es simple pero es un lenguaje de programacioacuten real Ofrece maacutes apoyo e infraestructura para programas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
17
grandes que el inteacuterprete de oacuterdenes Por otra parte tambieacuten ofrece mucho maacutes comprobacioacuten de errores que C y al ser un lenguaje de muy alto nivel tiene incluidos tipos de datos de alto nivel como matrices flexibles y diccionarios que llevariacutean diacuteas de programacioacuten en C Dados sus tipos de datos maacutes generales se puede aplicar a un rango de problemas maacutes amplio que Awk o incluso Perl pero muchas cosas son al menos igual de faacuteciles en Python que en esos lenguajes Python te permite dividir su programa en moacutedulos reutilizables desde otros programas en Python Viene con una gran coleccioacuten de moacutedulos estaacutendar que puedes utilizar como base de tus programas (o como ejemplos para empezar a aprender Python) Tambieacuten hay moacutedulos incluidos que proporcionan ES de ficheros llamadas al sistema ldquosocketsrdquo y hasta interfaces graacuteficas con el usuario como Tk Python es un lenguaje interpretado lo que ahorra un tiempo considerable en el desarrollo del programa pues no es necesario compilar ni enlazar El inteacuterprete se puede utilizar de modo interacivo lo que facilita experimentar con caracteriacutesticas del lenguaje escribir programas desechables o probar funciones durante el desarrrollo del prgram de la base hacia arriba Tambieacuten es una calculadora muy uacutetil Python permite escribir programas muy compactos y legibles Los programas escritos en Python son normalmente mucho maacutes cortos que sus equivalentes en C o C++ por varios motivos
Los tipos de datos de alto nivel permiten expresar operaciones complejas en una sola sentencia
El agrupamiento de sentencias se realiza mediante sangrado (indentacioacuten) en lugar de beginend o llaves
No es necesario declarar los argumentos ni las variables
Python es ampliable si ya sabes programar en C es faacutecil antildeadir una nueva funcioacuten o moacutedulo al inteacuterprete para realizar operaciones criacuteticas a la maacutexima velocidad o para enlazar programas en Python con bibliotecas que soacutelo estaacuten disponibles en forma binaria (como bibliotecas de graacuteficos especiacuteficas del fabricante) Una vez enganchado puedes enlazar el inteacuterprete de Python a una aplicacioacuten escrita en C y utilizarlo como lenguaje de macros para dicha aplicacioacuten
3111 Llamar al inteacuterprete
En UNIX el inteacuterprete de Python se suele instalar como bdquousrlocalbinpython‟ en aquellas maacutequinas donde esteacute disponible En Windows se instala en el directorio bdquoArchivos de programa‟ o en cualquier otro directorio seleccionado Poner este directorio en la ruta de ejecutables hace posible arrancarlo tecleando en el inteacuterprete de oacuterdenes la orden
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
18
Python
Como la eleccioacuten del directorio donde reside el inteacuterprete es una opcioacuten de instalacioacuten es posible que se halle en otros lugares Consulta con tu guru de Python local o tu administrador de sistemas (por ejemplo bdquousrlocalpython‟ es una alternativa recuente) Teclear un caraacutecter fin de fichero (Control-D en UNIX Control-Z en DOS o Windows) en el inteacuterprete causa la salida del inteacuterprete con un estado cero Si eso no funciona se puede salir del inteacuterprete tecleando las siguientes oacuterdenes bdquoimport sys sysexit()‟ Las opciones de edicioacuten de la liacutenea de oacuterdenes no son muy destacables En UNIX es posible que quien instalara el inteacuterprete en su sistema incluyera soporte para la biblioteca de GNU bdquoreadline‟ que permite una edicioacuten de liacutenea maacutes elaborada y la recuperacioacuten de oacuterdenes anteriores El modo maacutes raacutepido de ver si hay soporte de edicioacuten de liacuteneas es teclear Control-P en cuanto aparece el inteacuterprete Si pita la edicioacuten de liacuteneas estaacute disponible Si no sale nada o sale ^P no estaacute disponible la edicioacuten de liacuteneas y soacutelo se puede utilizar la tecla de borrado para borrar el uacuteltimo caraacutecter tecleado El inteacuterprete funciona como el inteacuterprete de oacuterdenes de UNIX cuando se lo llama con la entrada estaacutendar conectada a un dispositivo tty lee y ejecuta las oacuterdenes interactivamente cuando se le da un nombre de fichero como argumento o se le da un fichero como entrada estaacutendar lee y ejecuta un guion desde ese fichero Otro modo de arrancar el inteacuterprete es bdquopython -c orden [argumento] ‟ que ejecuta las sentencias de orden de forma anaacuteloga a la opcioacuten -c de la liacutenea de oacuterdenes Como las sentencias de Python suelen contener espacios u otros caracteres que la liacutenea de oacuterdenes considera especiales lo mejor es encerrar orden entre dobles comillas por completo
Imagen de la pantalla al abrir Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
19
Hay moacutedulos de Python que son uacutetiles como programas independientes Se los puede llamar mediante ldquopython-m moacutedulo[arg] helliprdquo que ejecuta el fichero de coacutedigo fuente de module como si se hubiera dado el nombre completo en la liacutenea de oacuterdenes Cuando se leen oacuterdenes desde una tty se dice que el inteacuterprete estaacute en modo interacitov En este modo espera a la siguiente orden con el indicador principal que suele ser tras signos ldquomayorrdquo (ldquogtgtgtrdquo) Para las liacuteneas adicionales se utiliza el indicador secundario por omisioacuten tres puntos (ldquohelliprdquo)
Programar en Python puede hacerse de varias maneras seguacuten la necesidad o el gusto de cada persona Para los neoacutefitos mi recomendacioacuten es que utilicen el ambiente graacutefico interactivo llamado IDLE Esta herramienta viene incluiacuteda con el moacutedulo tkinter Ademaacutes de resaltar la sintaxis en colores permite editar archivos fuente y es maacutes amigable al inicio
El IDLE tiene dos ambientes el shell interactivo con tiacutetulo Python Shell en su ventana muestra el prompt gtgtgt y espera un comando y uno o maacutes editores que se abren con el menuacute File --gt New Window Cada editor empieza con el tiacutetulo Untitled en su ventana el cual cambia hasta que se salva a un archivo con File --gt Save As (y subsecuentemente File --gt Save) Cada editor nos permite ejecutar el coacutedigo Python que contiene
Se recomienda crear una carpeta para realizar y guardar los ejemplos Para correr idle cambiar primero a esa carpeta y entonces correr idle En MS- Windows
Cejemplosgt Cpython22idleidle
En Linux
[usuariopc ejemplos]$ idle amp La primera vez que hacemos un ejemplo hemos de intentar hacerlo paso a paso en forma interactiva en el shell tecleando cada comando Es la forma en que aprendemos maacutes que si simplemente copiamos y pegamos Una vez que tecleamos y funcionan las cosas podemos copiar del shell interactivo y pegamos a una ventana de editor y salvamos en un archivo con terminacioacuten py para que conservemos lo que hicimos para siempre
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
20
Imagen del Shell interactivo de IDLE
Acceso a nueva ventana dentro del Shell interactivo de IDLE
Nueva ventana del editor de IDLE Una vez que partiendo de una ventana vacia tenemos nuestro coacutedigo hemos de seleccionar FileSave As para guardar el archivo y tenerlo disponible
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
21
Ventana del editor de IDLE con coacutedigo preparado para guardar
Una vez que nos hemos asegurado de que tenemos el coacutedigo guardado iquestcoacutemo hacemos para ejecutar el programa La respuesta es seleccionando Run Module En caso de seleccionar Run Module antes de guardar el coacutedigo Python nos pide que lo guardemos anteshellip Al seleccionar Run Module Python iraacute interpretando liacutenea por liacutenea y mostrando los resultados a traveacutes del Inteacuterprete Si existiese alguacuten error de sintaxis se avisa del tipo de error y doacutende se produce Una vez corregido el problema se vuelve a intentar el Run Module
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
22
El tener un inteacuterprete permite ir probando partes de programas sobre las que no se estaacute seguro y ver coacutemo reaccionan para poder decidir si se incluyen o no y coacutemo se pueden adaptar Asiacute se estaacute continuamente alternando entre el inteacuterprete y el programa Maacutes informacioacuten en httpdocspythonorglibraryidlehtml
3112 Moacutedulos
Si salimos del inteacuterprete de Python y vuelves a entrar las definiciones que se hayan hecho (funciones y variables) se pierden Por ello si se quiere escribir un programa algo maacutes largo seraacute mejor que se utilice un editor de texto para preparar la entrada del inteacuterprete y ejecutarlo con ese fichero como entrada Esto se llama crear un guioacuten Seguacuten vayan creciendo los programas puede que quieras dividirlos en varios ficheros para facilitar el mantenimiento Puede que tambieacuten quieras utilizar una funcioacuten que has escrito en varios programas sin tener que copiar su definicioacuten en cada programa Para lograr esto Python tiene un modo de poner definiciones en un fichero y utilizarlas en un guioacuten o en una instancia interactiva del inteacuterprete Tal fichero se llama moacutedulo las definiciones de un moacutedulo se pueden importar a otros moacutedulos o al moacutedulo principal (la coleccioacuten de variables accesible desde un guioacuten ejecutado desde el nivel superior y en el modo de calculadora) Un moacutedulo es un fichero que contiene definiciones y sentencias de Python El nombre del fichero es el nombre del moacutedulo con el sufijo ldquopyrdquo Dentro de un moacutedulo el nombre del moacutedulo (como cadena) es accesible mediante la variable global __name__ Un moacutedulo puede contener sentencias ejecutables ademaacutes de definiciones de funciones Estas sentencias sirven para inicializar el moacutedulo Soacutelo se ejecutan la primera vez que se importa el moacutedulo en alguna parte1 Cada moacutedulo tiene su propia tabla de siacutembolos que utilizan todas las funciones definidas por el moacutedulo como tabla de siacutembolos global Por ello el autor de un moacutedulo puede utilizar variables globales dentro del moacutedulo sin preocuparse por conflictos con las variables globales de un usuario del moacutedulo Por otra parte si sabes lo que haces puedes tocar las variables globales de un moacutedulo con la misma notacioacuten utilizada para referirse a sus funciones nombreModnombreElem Los moacutedulos pueden importar otros moacutedulos Es una costumbre no obligatoria colocar todas las sentencias ldquoimportrdquo al principio del moacutedulo (o guioacuten) Los nombres del moacutedulo importado se colocan en la tabla de siacutembolos global del moacutedulo (o guioacuten) que lo importa Existe una variacioacuten de la sentencia import que importa los nombres de un moacutedulo directamente a la tabla de siacutembolos del moacutedulo que lo importa Por ejemplo
gtgtgt from fibo import fib fib2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
23
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto no introduce el nombre del moacutedulo del que se toman los elementos importados en la tabla de siacutembolos local (por lo que en el ejemplo no estaacute definido fibo) Ademaacutes existe una variacioacuten que importa todos los nombres que define un moacutedulo gtgtgt from fibo import
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto importa todos los nombres excepto los que empiezan por un guioacuten bajo (_)
3113 El camino de buacutesqueda de moacutedulos
Cuando se importa un moacutedulo denominado fiambre el inteacuterprete busca un fichero denominado bdquofiambrepy‟ en el directorio actual y luego en la lista de directorios especificada por la variable de entorno PYTHONPATH Tiene la misma sintaxis que la variable de liacutenea de oacuterdenes PATH de UNIX que es una lista de nombres de directorios Cuando PYTHONPATH no tiene ninguacuten valor o no se encuentra el fichero se continuacutea la buacutesqueda en un camino dependiente de la instalacioacuten En UNIX normalmente es bdquousrlocallibpython‟ En realidad se buscan los moacutedulos en la lista de directorios dada por la variable syspath que se inicializa desde el directorio que contiene el guioacuten de entrada (o el directorio actual) PYTHONPATH y el valor por omisioacuten dependiente de la instalacioacuten Esto permite que los programas que saben lo que hacen modifiquen o reemplacen el camino de buacutesqueda de moacutedulos Obseacutervese que como el directorio que contiene el guioacuten bajo ejecucioacuten estaacute en el camino de buacutesqueda de moacutedulos es importante que el moacutedulo no tenga el mismo nombre que un moacutedulo estaacutendar o Python lo intentaraacute cargar el guioacuten como moacutedulo cuando se importe el moacutedulo Normalmente esto provocaraacute errores
3114 Ficheros Python ldquoCompiladosrdquo
Como mejora considerable del tiempo de arranque de programas cortos que utilizan muchos moacutedulos estaacutendar si existe un fichero llamado bdquofiambrepyc‟ en el directorio donde se encuentra bdquofiambrepy‟ se supone que contiene una versioacuten previamente ldquocompilada a byterdquo del moacutedulo fiambre La fecha y hora de la versioacuten de bdquofiambrepy‟
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
24
utilizada para generar bdquofiambrepyc‟ se graba en bdquofiambrepyc‟ y no se considera el fichero bdquopyc‟ si no concuerdan Normalmente no hay que hacer nada para generar el fichero bdquofiambrepyc‟ Siempre que bdquofiambrepy‟ se compile sin errores se hace un intento de escribir la versioacuten compilada a bdquofiambrepyc‟ No se provoca un error si falla el intento Si por cualquier motivo no se escribe completamente el fichero el fichero bdquofiambrepyc‟ resultante seraacute reconocido como no vaacutelido y posteriormente ignorado El contenido del fichero bdquofiambrepyc‟ es independiente de la plataforma por lo que se puede compartir un directorio de moacutedulos entre maacutequinas de diferentes arquitecturas
3115 Moacutedulos estandar
Python viene con una biblioteca de moacutedulos estaacutendar descrita en un documento aparte la Referencia de las bibliotecas Algunos moacutedulos son internos al inteacuterprete y proporcionan acceso a las operaciones que no son parte del nuacutecleo del lenguaje pero se han incluido por eficiencia o para proporcionar acceso a primitivas del sistema operativo como las llamadas al sistema El conjunto de dichos moacutedulos es una opcioacuten de configuracioacuten que tambieacuten depende de la plataforma subyacente Por ejemplo el moacutedulo amoeba soacutelo se proporciona en sistemas que de alguacuten modo tienen acceso a primitivas Amoeba Hay un moacutedulo en particular que merece una especial atencioacuten el moacutedulo sys que es siempre interno en cualquier inteacuterprete de Python Estas variables soacutelo estaacuten definidas si el inteacuterprete estaacute en modo interactivo La variable syspath es una lista de cadenas que determina el camino de buacutesqueda de moacutedulos del inteacuterprete Se inicializa a un valor por omisioacuten tomado de la variable de entorno PYTHONPATH o de un valor por omisioacuten interno si PYTHONPATH no tiene valor Se puede modificar mediante operaciones de lista estaacutendar por ejemplo gtgtgt import sys gtgtgt syspathappend(‟ufsguidolibpython‟)
3116 Paquetes
Los paquetes son un meacutetodo de estructurar el espacio nominal de moacutedulos de Python mediante el uso de ldquonombres de moacutedulos con puntordquo Por ejemplo el nombre de moacutedulo AB hace referencia a un submoacutedulo denominado ldquoBrdquo de un paquete denominado ldquoArdquo Del mismo modo que el uso de moacutedulos evita que los autores de diferentes moacutedulos tengan que preocuparse de los nombres de variables globales de los otros la utilizacioacuten de nombres de moacutedulo con puntos evita que los autores de paquetes multi-moacutedulo como Numpy o Pil (Biblioteca de tratamiento de imagen de
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
25
python) tengan que preocuparse de los nombres de los moacutedulos ajenos Supoacuten que deseas disentildear una coleccioacuten de moacutedulos (un paquete) para tratar de manera uniforme ficheros de sonido y datos de sonido Existen muchos formatos de fichero de sonido (que se suelen distinguir por la extensioacuten como bdquowav‟ bdquoaiff‟ o bdquoau‟) por lo que podriacuteas necesitar crear y mantener una coleccioacuten creciente de moacutedulos de conversioacuten entre los diferentes formatos Tambieacuten existen muchas operaciones posibles sobre los datos de sonido (tales como mezclar antildeadir eco ecualizar o generar un efecto artificial de estereofoniacutea) por lo que ademaacutes estariacuteas escribiendo una serie de moacutedulos interminable para realizar estas operaciones He aquiacute una posible estructura de tu paquete (expresado en teacuterminos de sistema de ficheros jeraacuterquico)
Sonido Paquete de nivel superior __init__py Inicializa el paquete de sonido
Formatos Subpaquete de conversiones de formato de ficheros __init__py leerwavpy escriwavpy leeraiffpy escriaiffpy leeraupy escriaupy Efectos Subpaquete de efectos de sonido __init__py ecopy surroundpy inversopy Filtros Subpaquete de filtros __init__py ecualizadorpy vocoderpy karaokepy
Modelo de estructura paquetemoacutedulo Al importar el paquete Python rastrea los directorios de syspath buscando por el subdirectorio de paquetes Los ficheros bdquo__init__py‟ son necesarios para que Python trate los directorios como contenedores de paquetes Se hace asiacute para evitar que los directorios con nombres
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
26
comunes como bdquotest‟ oculten accidentalmente moacutedulos vaacutelidos que aparezcan maacutes tarde dentro del camino de buacutesqueda En el caso maacutes sencillo bdquo__init__py‟ puede ser un fichero vaciacuteo pero tambieacuten puede ejecutar coacutedigo de inicializacioacuten del paquete o actualizar la variable __all__ descrita posteriormente Los usuarios del paquete pueden importar moacutedulos individuales del paquete por ejemplo import SonidoEfectoseco
De este modo se carga el submoacutedulo SonidoEfectoseco Hay que hacer referencia a eacutel por su nombre completo SonidoEfectosecofiltroeco(entrada salida retardo=07
aten=4)
Un modo alternativo de importar el submoacutedulo es from SonidoEfectos import eco
Asiacute tambieacuten se carga el submoacutedulo eco y se hace disponible sin su prefijo de paquete por lo que se puede utilizar del siguiente modo ecofiltroeco(entrada salida retardo=07 aten=4)
Y otra variacioacuten es importar la funcioacuten o variable deseada directamente from SonidoEfectoseco import filtroeco
De nuevo se carga el submoacutedulo eco pero se hace la funcioacuten filtroeco disponible directamente filtroeco(entrada salida retardo=07 aten=4)
Observa que al utilizar from paquete import elemento el elemento puede ser tanto un submoacutedulo (o subpaquete) del paquete como cualquier otro nombre definido por el paquete como una funcioacuten clase o variable La sentencia import comprueba primero si el elemento estaacute definido en el paquete Si no asume que es un moacutedulo e intenta cargarlo Si no lo consigue se provoca una excepcioacuten ImportError Sin embargo cuando se utiliza la sintaxis
importelementosubelementosubsubelemento cada elemento menos el
uacuteltimo debe ser un paquete El uacuteltimo elemento puede ser un moacutedulo o un paquete
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
27
pero no una clase funcioacuten o variable definida en el nivel superior
3117 Importar de un paquete
Y iquestqueacute ocurre cuando el usuario escribe from SonidoEfectos import En teoriacutea deberiacutea rastrearse el sistema para encontrar queacute submoacutedulos existen en el paquete e importarlos todos Por desgracia esta operacioacuten no funciona muy bien en las plataformas Windows y Mac en las que el sistema de ficheros no tiene una idea muy precisa de las mayuacutesculas de un fichero En estas plataformas no hay un modo garantizado de conocer si un fichero bdquoECOPY‟ deberiacutea ser importado como eco Eco o ECO (por ejemplo Windows 95 tiene la molesta costumbre de mostrar todos los nombres de fichero con la primera letra en mayuacutescula) La restriccioacuten de nombres de fichero DOS (8+3) antildeade otro problema para los nombres de moacutedulo largos La uacutenica solucioacuten es que el autor del paquete proporcione un iacutendice expliacutecito del paquete La sentencia import utiliza la siguiente convencioacuten Si el coacutedigo del bdquo__init__py‟ de un paquete define una lista llamada __all__ se considera que es la lista de nombres de moacutedulos que se deben importar cuando se encuentre from paquete import Depende del autor del paquete mantener la lista actualizada cuando se libere una nueva versioacuten del paquete Los autores del paquete pueden decidir no mantenerlo si no es uacutetil importar del paquete Por ejemplo el fichero bdquoSonidoEfectos__init__py‟ podriacutea contener el siguiente coacutedigo __all__ = [eco surround inverso] Esto significariacutea que from SonidoEfectos import importariacutea los tres submoacutedulos mencionados del paquete Sonido Si __all__ no estaacute definido la sentencia from SonidoEfectos import no importa todos los moacutedulos del subpaquete SonidoEfectos al espacio nominal actual Soacutelo se asegura de que el paquete SonidoEfectos ha sido importado (ejecutando posiblemente el coacutedigo de inicializacioacuten de bdquo__init__py‟) y luego importa cualesquiera nombres definidos en el paquete Esto incluye cualquier nombre definido (y submoacutedulos cargados expliacutecitamente) por bdquo__init__py‟ Tambieacuten incluye cualquier submoacutedulo del paquete expliacutecitamente importado por sentencias import anteriores Mira este coacutedigo import SonidoEfectoseco import SonidoEfectossurround from SonidoEfectos import En este ejemplo los moacutedulos eco y surround se importan al espacio nominal vigente porque estaacuten definidos en el paquete SonidoEfectos cuando se ejecuta la sentencia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
28
fromimport (esto tambieacuten funciona si estaacute definido __all__)
Observa que en general se debe evitar importar de un moacutedulo o paquete ya que suele dar como resultado coacutedigo poco legible Sin embargo se puede usar para evitar teclear en exceso en sesiones interactivas y cuando ciertos moacutedulos esteacuten disentildeados para exportar soacutelo nombres que cumplan ciertas reglas
Recuerda no hay nada incorrecto en utilizar from Paquete import
submoacutedulo_concreto De hecho es la notacioacuten recomendada salvo que el moacutedulo
que importa necesite usar submoacutedulos del mismo nombre de diferentes paquetes
3118 Referencias internas al paquete
Es comuacuten que los submoacutedulos necesiten hacerse referencias cruzadas Por ejemplo el moacutedulo surround podriacutea utilizar el moacutedulo eco De hecho tales referencias son tan comunes que la sentencia import busca antes en el paquete contenedor que en el camino de buacutesqueda de moacutedulos estaacutendar Por ello basta con que el moacutedulo surround use import eco o from eco import filtroeco Si el moacutedulo importado no se encuentra en el paquete actual (el paquete del que el moacutedulo actual es submoacutedulo) la sentencia import busca un moacutedulo de nivel superior con el nombre dado Cuando se estructuran los paquetes en subpaquetes (como el paquete Sonido del ejemplo) no hay un atajo para referirse a los submoacutedulos de los paquetes hermanos y se ha de utilizar el nombre completo del subpaquete Por ejemplo si el moacutedulo SonidoFiltrosvocoder necesita utilizar el moacutedulo eco del paquete SonidoEfectos debe utilizar from SonidoEfectos import eco
32 FUNCIONES INCLUIDAS EN NUMPY POR CATEGORIacuteAS (ARRAY CREATION)
A modo indicativo e introductorio se incluyen las funciones incluidas en la libreriacutea Numpy por categoriacuteas Ver maacutes informacioacuten en httpdocsscipyorgdocnumpy Numerical
arange() arrayrange()
linspace() logspace()
Ones and zeros
empty() empty_like()
eye() identity()
ones() ones_like()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
29
tri() tril() triu()
zeros() zeros_like()
From existing data
array() recarray()
asarray() asanyarray() asmatrix()
copy()
fromarrays() frombuffer() fromfile() fromfunction()
fromiter() loadtxt()
Building matrices
bmat()
diag() diagflat()
mat() matrix()
vander()
Reinterpreting arrays
view()
Types
astype()
cast[]()
int8() int16() int32() int64() int128()
uint8() uint16() uint32() uint64() uint128()
float16() float32() float64() float96() float128()
float256()
complex32() complex64() complex128() complex192()
complex256() complex512()
bool_()
object_()
void() str_() unicode_()
byte() ubyte()
short() ushort()
intc() uintc()
intp() uintp()
int_() uint()
longlong() ulonglong()
single() csingle()
float_() complex_()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
30
longfloat() clongfloat()
Kinds of array
asarray()
asanyarray()
asmatrix()
Changing the number of dimensions
atleast_1d() atleast_2d() atleast_3d()
broadcast()
expand_dims()
squeeze()
Transpose-like operations
rollaxis()
swapaxes()
T transpose()
Reshaping arrays
flat flatten()
ravel()
reshape() shape
Array modification
Joining arrays
append()
column_stack()
concatenate()
dstack() hstack() vstack()
Splitting arrays
array_split()
dsplit() hsplit() split() vsplit()
Enlarging arrays
tile()
repeat()
Adding and removing elements
delete()
insert()
resize()
trim_zeros()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
31
unique()
Rearranging elements
fliplr() flipud()
reshape()
roll()
rot90()
Indexing
[]
take()
put()
putmask()
Indexing syntax
slice()
newaxis
index_exp[]
Generating arrays suitable for indexing
c_[]
r_[]
s_[]
nonzero()
where()
indices()
ix_()
mgrid[]
ogrid()
Indexing-like operations
choose()
where()
compress()
diag() diagonal()
select()
Iterating
flat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
32
ndenumerate()
ndindex()
Logic
[]
all() any()
allclose()
alltrue()
nonzero()
piecewise()
sometrue()
Finding things
argmax() argmin()
searchsorted()
Array statistics
average() mean()
bincount() histogram()
corrcoef()
cov()
max() min() ptp()
median()
std() var()
ufuncs
abs() absolute()
add() multiply()
angle()
arccos() arcsin() arctan()
arccosh() arcsinh() arctanh()
arctan2()
bitwise_and() bitwise_or() bitwise_xor()
ceil() floor() round()
conj() conjugate()
cos() sin() tan()
cosh() sinh() tanh()
fix()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
33
hypot()
logical_and() logical_not() logical_or() logical_xor()
maximum() minimum()
ufunc methods
accumulate()
outer()
reduce()
Functional constructs
apply_along_axis()
apply_over_axis()
vectorize()
Random numbers
beta() binomial() gumbel() poisson() standard_normal()
uniform() vonmises() weibull()
bytes()
permutation()
rand() randint() randn()
random_integers()
random_sample()
ranf()
sample()
seed()
shuffle()
Array math
clip()
cross()
cumprod() cumsum()
diff()
digitize()
dot()
inner()
outer()
inv() pinv()
poly1d()
polyfit()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
34
prod() sum()
tensordot()
vdot()
FFT
fft()
fftfreq()
fftshift()
ifft()
Linear algebra
inv()
lstsq()
solve()
svd()
trace()
Array output
savetxt()
set_printoptions()
tofile()
tolist()
Other
sort() argsort()
binary_repr()
dtype()
fill()
finfo()
generic
imag real
inf nan
item()
lexsort()
ndim
shape
typeDict()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
35
Numpy Functions by Category (uacuteltima edicioacuten 2008-06-13 122659
efectuada por jh)
MoinMoin Powered
Pyt
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
36
4 METODOLOGIacuteA En este apartado se proporciona una descripcioacuten detallada de la metodologiacutea utilizada para el desarrollo e implementacioacuten de la biblioteca Utilizando un paradigma Estructurado de la programacioacuten que considera que la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Esto nos permite reutilizar coacutedigo programado y nos proporciona una mejor comprensioacuten de la programacioacuten En el uacuteltimo paquete de la libreriacutea tambieacuten se ha realizado una incursioacuten a la programacioacuten orientada a objetos con la declaracioacuten de algunas clases
41 ESTRUCTURA DE LA LIBRERIacuteA GEOTOPO En nuestro caso hemos partido del concepto de creacioacuten de una libreriacutea de funciones del aacutembito de la Topografiacutea y Geodesia Esta libreriacutea de Python se estructura como un paquete con el nombre de la libreriacutea ldquogeotopordquo que a su vez contiene 6 paquetes maacutes seguacuten tipologiacutea Asiacute tenemos
Imagen de los paquetes incluidos dentro del paquete (libreriacutea) geotopo
Por orden intuitivo desde el punto de vista de aplicacioacuten de las herramientas tenemos los siguientes paquetes
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
37
general que contiene funciones de tipo general y transversal al resto de herramientas
Moacutedulos implementados dentro de general
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
38
topografia que contiene aplicacioacuten topograacuteficas
Moacutedulos implementados dentro de topografia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
39
geodesia Aplicaciones geodeacutesicas
Moacutedulos implementados dentro de geodesia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
40
proy_cartograficas Herramientas de caacutelculos en diferentes proyeccionesetc
Moacutedulos implementados dentro de proy_cartograficas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
41
transformacioacuten Aplicaciones con modelo de rejilla del IGN y EGM08REDNAP
Moacutedulos implementados dentro de transformacioacuten
aplicaciones Distintos ejemplos de aplicabilidad de las funciones y clases implementadas en los moacutedulos de la libreriacutea
Cada uno de estos paquetes (carpetas) como se ha podido ver contiene a su vez varios moacutedulos y en cada uno de ellos y con su mismo nombre se define una uacutenica funcioacuten por moacutedulo salvo en la carpeta de transformcioacuten donde como se ha comentado antes nos adentramos dentro de la programacioacuten orientada a objetos y en algunos moacutedulos se implementan clases y dentro de estas funciones etc De esta manera al importar una funcioacuten la tenemos que importar desde el modulo que la contenga Dentro de cada carpeta se aprecia la existencia de un fichero llamado __init__py que convierte dicha carpeta en un paquete de Python Se advierte que desde el cierre de esta memoria versioacuten en papel a la entrega total de documentacioacuten puede haberse ampliado el nuacutemero de moacutedulos de la libreriacutea ldquogeotoprdquo que siacute se incluiriacutea en el CD con la implementacioacuten de coacutedigos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
42
42 DOCUMENTADO DE FUNCIONES Se puede documentar una funcioacuten en Python proporcionando una cadena de documentacioacuten (comentarios)
Las comillas triples implican una cadena multiliacutenea Todo lo que haya entre el principio y el final de las comillas es parte de una sola cadena incluyendo los retornos de carro y otras comillas Pueden usarse para definir cualquier cadena pero donde suelen estar maacutes presentes es haciendo de cadena de documentacioacuten Todo lo que hay entre las comillas triples es la cadena de documentacioacuten de la funcioacuten y se usa para explicar lo que hace la funcioacuten En caso de que exista una cadena de documentacioacuten debe ser la primera cosa definida en una funcioacuten (esto es lo primero tras los dos puntos) Teacutecnicamente no es necesario dotar a una funcioacuten de una cadena de documentacioacuten pero debemos de hacerlo siempre En Python esto tiene un incentivo antildeadido la cadena de documentacioacuten estaacute disponible en tiempo de ejecucioacuten como atributo de la funcioacuten
Lecturas complementarias sobre las funciones de documentacioacuten
PEP 257 define las convenciones al respecto de las cadenas de documentacioacuten La Guiacutea de estilo de Python indica la manera de escribir una buena cadena de
documentacioacuten El Tutorial de Python expone convenciones para el espaciado dentro de las
cadenas de documentacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
43
Ejemplo de documentado de funciones con cadena de documentacioacuten
Toda la informacioacuten incluida dentro de una cadena de documentacioacuten de triple comillas estaacute accesible en tiempo de ejecucioacuten Asiacute si pedimos ayuda de una funcioacuten nos aparece toda la informacioacuten incluida en dicha cadena de documentacioacuten
Ejemplo de consulta de la ayuda de las funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
44
En la siguiente web podemos encontrar maacutes informacioacuten sobre el documentado de funciones en Python httpcoderwarcom201106hola-python-la-utilidad-de-los-comentarios Ademaacutes de los comentarios de las funciones en Python como en otros lenguajes de programacioacuten podemos incluir liacuteneas o simples palabras de comentarios En Python se usa el siacutembolo para preceder los comentarios Podemos comentar las liacuteneas de nuestro trabajo
Comentar un grupo de liacuteneas
Determinar el tipo de codificacioacuten Esto es importante para poder usar caracteres especiales como la tilde o la ntilde Generalmente se coloca en la primera liacutenea del programa Existen muchas codificaciones
Poner cabecera a nuestro programa De esta forma identificaremos el nombre del programador la fecha en que se realizoacute y demaacutes datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
45
En el caso que nos atantildee de la libreriacutea geotopo hemos considerado introducir unos comentarios descriptivos de los moacutedulos mediante el caraacutecter y tras la definicioacuten de las funciones se incluyen unas cadenas de documentacioacuten
Ejemplo de la documentacioacuten de moacutedulos y funcioneshellip
Para evitar problemas de codificacioacuten como ha ocurrido durante la implementacioacuten del coacutedigo se han incluido al inicio del mismo dos liacuteneas para solucionar el problema Estas liacuteneas son
Comentarios de los moacutedulos
Cadena de documentacioacuten de funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
46
-- coding iso 8859-1 -
ISO 8859-1 es una norma de la ISO que define la codificacioacuten del alfabeto latino incluyendo diacriacuteticos como letras aceacutentuadas ntilde) y letras especiales necesarios para la escritura de las siguientes lenguas originarias de Europa occidental alemaacuten aragoneacutes asturiano castellano catalaacuten daneacutes escoceacutes espantildeol feroeacutes fineacutes franceacutes gaeacutelico gallego ingleacutes islandeacutes italiano neerlandeacutes noruego portugueacutes sueco y Euskera Tambieacuten conocida como Alfabeto Latino nordm 1 o ISO Latiacuten 1 Esta norma pertenece al grupo de juegos de caracteres de la ISO conocidos como ISOIEC 8859 que se caracterizan por poseer la codificacioacuten ASCII en su rango inicial (128 caracteres) y otros 128 caracteres para cada codificacioacuten con lo que en total utilizan 8 bits -- coding cp1252 -
Si trabajamos con IDLE con el uso de los acentos (en general con los caracteres no ASCII) nos daraacute error Si en el coacutedigo de un programa escribimos una cadena que contenga caracteres no ASCII(acentos ntildeiquestiexcl) al guardar el archivo por primera vez IDLE nos muestra el siguiente mensaje de aviso
Si pulsamos el botoacuten ldquoEdit my filerdquo Al principio del programa se insertaraacute la liacutenea siguiente
-- coding cp1252 --
Que indica el juego de caracteres utilizado en el archivo (cp1252 es el juego de caracteres de Windows para Europa occidental) A partir de entonces podemos guardar el archivo sin problemas Python no tiene una primera o uacuteltima linea exigida pero siacute que es habitual dar la localizacioacuten de Python como primera liacutenea en forma de comentario usrbinpython
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
47
43 FUNCIONES IMPLEMENTADAS A continuacioacuten se incluye una relacioacuten de las funciones implementadas por paquetes Ademaacutes de su nombre y un pequentildeo resumen de su aplicacioacuten se han incluido 3 apartados maacutes En verde Datos de entrada Indica los datos que necesita la funcioacuten Datos de salida Nos muestra si el resultado es uacutenico o una coleccioacuten de resultados (siempre en forma vector en el orden indicado) En rojo Llamadas o ldquoimportacioacutenrdquo de moacutedulos predefinidos del sistema ossys Llamadas a funciones de predefinidas del moacutedulo numpy En morado Llamadas a funciones definidas en esta libreriacutea (geotopo) bien incluidas en el mismo subpaquete que la propia funcioacuten definida o incluida en otro subpaquete De esta manera podemos tener una idea de las funciones implementadas los datos de partida necesarios y los resultados a obtener asiacute como la interrelacioacuten de cada funcioacuten con el resto de funciones de la libreriacutea geotopo Para el caso de cambio de proyeccioacuten o de Sistema de Referencia Coordenado se ha tomado la nomenclatura ldquodesderdquo ldquoardquo ldquoahorardquo Para sentildealar el ldquoardquo se ha elegido el nuacutemero 2 por su pronunciacioacuten to (a) Asiacute por ejemplo para el paso de latitud geodeacutesica a creciente en nombre de la funcioacuten seraacute lat2cre
431 Libreriacutea en Python ldquogeotopogeneralrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 areacor - Caacutelculo de la superficie interior de un poligono sobre el plano
entrada=(matriz) 2columnas xy salida=superficie
import ossys from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
48
busca2col - Localiza la primera fila con los valores recibidos en las dos columnas indicadas
Recibe Valor en la primera y segunda columnas posiciones de las columnas y matriz de busqueda
Devuelve Primera fila que cumple comenzando en 0 entrada=(valorcol1poscol1valorcol2poscol2matriz)
salida=orden de la primera fila que cumple comenzando en 0(oacute -1 si no existe) import ossys
from numpy import shape
busca - Localiza la primera ocurrencia de un nuacutemero en la primera columna de una matriz
entrada=(valormatriz)
salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscacol - Localiza la primera ocurrencia de un nuacutemero en la fila indicada de una matriz
entrada=(valormatriznfil) salida=posicioacuten nuacutemero de columna comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscafil - Localiza la primera ocurrencia de un nuacutemero en la columna indicada de una matriz
entrada=(valormatrizncol) salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
ordena - Ordena las filas de una matriz de menor a mayor seguacuten el contenido de la columna indicada
entrada=(colummatriz) salida=matriz de entrada ordenada
import ossys
from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
49
p_entera - Da la parte entera de un nuacutemero entrada=(nuacutemero) salida=parte entera del nuacutemero
import ossys from numpy import floor
perimetro - Calculo del perimetro de un poliacutegono sobre el plano a partir de las coord de sus veacutertices
entrada=(matriz ) 2columnas xy salida=periacutemetro
import ossys
from numpy import sqrtshape
psdo2rad - Cambio de formato de aacutengulos Pasa del conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex ) a radianes
entrada=(pseudesexa)
salida=radianes
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
rad2psdo - Cambio de formato de aacutengulos Pasa un angulo de radianes al conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex )
entrada=( radianes) salida= pseudesexa
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
50
432 Libreriacutea en Python ldquogeotopotopografiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 acimut - Caacutelculo del acimut entre dos puntos
entrada=(xiyixjyj)
salida=acimut en radianes
import ossys from numpy import arctan2pi
distancia ndash Caacutelculo de la distancia entre dos puntos del mismo
entrada=(xiyixjyj) salida=distancia (misma unidad que coordenadas de entrada
import ossys
from numpy import sqrt
edgcla ndash Caacutelculo del error de una distancia geomeacutetrica utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dgInstrnialtnl)
Dg=distancia geometrica Instr=Matriz de instrumentos
Ni=Altura de instrumento Altp=Altura de prisma
Nl=Nuacutemero de veces de medida de distancia
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edgclaprn ndash Calculo del error de una distancia geometrica utilizando la formulacion claacutesica de teoriacutea de errores Impresioacuten de resultados
entrada=(dgInstrnialtnlfsalida)
dg=distancia geometrica instr=Matriz de instrumentos
ni=Altura de instrumento altp=Altura de prisma
nl=Nuacutemero de veces de medida de distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
51
fsalida=Fichero de salidade datos
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edireh ndash Caacutelculo del error de la lectura horizontal realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(Instrnidisaltpnl)
salida=error de lectura horizontal en radianes
import ossys from numpy import sqrtpi
edirev ndash Caacutelculo del error de la lectura vertical realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(instrni nl) salida=error de lectura cenital en radianes en radianes
import ossys from numpy import sqrtpi
eincz ndash Caacutelculo del error de un desnivel trigonomeacutetrico utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dglvapedgelvInstrni) salida=xpypeplanisolzesolz
import ossys
from numpy import pisqrtcostan
intinv2 ndash Caacutelculo de la interseccioacuten inversa simple en el plano
entrada=(datosinstru)
salida= xpypangmin import ossys
from numpy import sincostanarctan2pizeros
from geotopogeneralordena import ordena
intinv2e ndash Caacutelculo de la interseccioacuten inversa simple en el plano Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru) salida= xpypeplani
import ossys from numpy import shapepisincostanarctan2dottransposezerossqrt
from geotopotopografiaedireh import edireh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
52
intinv3e ndash Caacutelculo de la interseccioacuten inversa 3D simple Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru)
salida= xpypeplanivzpvezp
import ossys from numpy import zerosshapesincos
from geotopotopografiaintinv2e import intinv2e from geotopotopografiadistancia import distancia
from geotopotopografiaedirev import edirev
from geotopotopografiaedgcla import edgcla from geotopotopografiaeincz import eincz
433 Libreriacutea en Python ldquogeotopogeodesiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 aut2lat - paso de latitud autaacutelica a geodeacutesica
entrada=(autnelipsoide) salida=lat
import ossys from numpy import sinarcsin
from geotopogeneralpsdo2rad import psdo2rad from geotopogeneralpsdo2rad import psdo2rad
calcpolo - caacutelculo del polo de la esfera a partir de tres puntos no alineados de la misma de forma que pasen a estar en un mismo paralelo tras realizarse el cambio de polo
entrada(lat1lon1lat2lon2lat3lon3) salida=[latnplonnpcolat]
import ossys from numpy import pisincosarccosarctanarctan2zeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
53
cla2enu - paso de un vector geodeacutesico expresado en componentes polares (observables claacutesicos) a componentes ENU entrada(azvdg)
salida=[ieiniu]
import ossys from numpy import sincoszeros
clhapv - lectura horizontal corregida por altitud del punto visado entrada=(lhzazlat1lat2h2nelipsoide) salida=lhz12c
import ossys
from numpy import sincospi from elipsoide import elipsoide
from radioem import radioem
clhsnlg - lectura horizontal corregida por paso de la seccioacuten normal a la liacutenea geodeacutesica entrada=(lhzs12az12lat1lat2nelipsoide)
salida=lhz12c import ossys
from numpy import sincospi
from elipsoide import elipsoide from radioem import radioem
cre2lat - paso de latitud creciente a geodeacutesica entrada=(crenelipsoide) salida=lat
import ossys
from numpy import sincostanarctanexppi from geotopogeneralpsdo2rad import psdo2rad
from elipsoide import elipsoide
efleutm - paso de la elipse de error de un punto del plano tangente al elipsoide al plano de la proyeccioacuten UTM
entrada=(latlonsemiaesemibeaziaenelipsoidehuso) salida=[semiasimibazia] import ossys from numpy import zerospi from geotopoproy_cartograficaskputm import kputm from geotopoproy_cartograficaskputmh import kputmh from geotopoproy_cartograficasconvutm import convutm from geotopoproy_cartograficasconvutmh import convutmh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
54
elip2esf - determinacioacuten de la esfera tangente al elipsoide en un paralelo indicado entrada=(nelipsoidelat)
salida=[afbe1e2]esfera
import ossys from numpy import zeros
from elipsoide import elipsoide from radiopv import radiopv
elipsoide - calculo los 5 paraacutemetros (afbe1 y 22) de los elipsoides ED50 GRS80 y WGS84 en funcioacuten de un coacutedigo 123 respectivamente entrada=(nelipsoide) 1 2 oacute 3 seguacuten ED50GRS80 oacute WGS84 respectivamente salida=[afbe1e2]
import ossys from numpy import sqrt zeros
enu2cla - paso de un vector geodeacutesico expresado en componentes ENU a componentes polares (observables claacutesicos) entrada=ieiniu salida=[azdgv]
import ossys
from numpy import zerosarcsenarctan2pisqrt
enu2xyz - paso de un vector geodeacutesico expresado en componentes ENU a componentes cartesianas tridimensionales entrada=(latlonieiniu)
salida=[ixiyiz] import ossys
from numpy import sincoszeros
eta_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del primer vertical entrada=(latlon)
salida= eta_ed50
import ossys from numpy import pisqrtcossintan
from elipsoide import elipsoide from radiopv import radiopv
from radioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
55
geo2tri - paso de coordenadas geodeacutesicas a cartesianas tridimensionales para un punto y elipsoide determinados entrada=(latlonhnelipsoide
salida=[XYZ]
import ossys from numpy import cossinzeros
from elipsoide import elipsoide from radiopv import radiopv
lam2lat - caacutelculo de la latitud geodeacutesica que le corresponde a una determinada longitud de arco de meridiano en el elipsoide indicado entrada=(lamnelipsoide salida=lat
import ossys from numpy import cossin
from elipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
lam - caacutelculo de la longitud de arco de meridiano a partir de la latitud geodeacutesica y del elipsoide entrada=(lamnelipsoide
salida=lam import ossys
from numpy import sin cos from elipsoide import elipsoide
lat2aut - paso de latitud geodeacutesica a autaacutelica entrada=(latnelipsoide)
salida=aut import ossys
from numpy import sinlog from elipsoide import elipsoide
lat2cre - paso de latitud geodeacutesica a creciente entrada=(latnelipsoide)
salide=cre import ossys
from numpy import sintanpilog
ond_ed50 - caacutelculo de la ondulacioacuten del geoide de un punto en Ed50 entrada =(latlon) salida=ondulacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
56
import ossys
from numpy import pisqrtcossintan
pdesfcr - problema directo en la esfera con el meacutetodo de cambio de base entrada=(lat1lon1saziresfera) salida=[latlon]
import ossys from numpy import cossintanarcsinarcosarctan2pizerostransposedot
pdg_dif1 - problema directo de la geodesia con la primera derivada entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2azi21] import ossys
from numpy import zerossincostanpi from radiopv import radiopv
from radioem import radioem
pdg_dif2 - problema directo de la geodesia con la primera y segunda derivada entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdg_dif3 - problema directo de la geodesia con la primera segunda y tercera derivada
entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdgrk4o - problema directo de la geodesia seguacuten meacutetodo de integracioacuten numeacuterica de Runge-Kutta de cuarto orden entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2
import ossys from numpy import zerossincostanpisqrt
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
57
from radioem import radioem
piesfcr - problema inverso en la esfera con el meacutetodo de cambio de base entrada=( lat1lon1lat2lon2resfera)
salida=[s12a12] import ossys
from numpy import cossintanarcsenarccosarctan2dotzerospi
pigbsl - problema inverso de la geodesia seguacuten el meacutetodo de Bessel entrada=( lat1lon1lat2lon2nelipsoide)
salida=[ s12a12a21]
import ossys from numpy import zerossincostanarcsinarctanarctan2arccossqrtpi
pigbslm - problema inverso de la geodesia seguacuten el meacutetodo de Bessel modificado por D David Henaacutendez Loacutepez
entrada=( lat1lon1lat2lon2nelipsoide) salida=[ s12a12a21]
import ossys from numpy import cossintanarcsinarcosarctanarctan2zerossqrtpi
from elipsoide import elipsoide
from radiopv import radiopv from piesfcr import piesfcr
from pdesfcr import pdesfcr
piloxo - problema inverso para la curva loxodroacutemica entrada=(lat1lon1lat2lon2nelipsoide)
salida=[dla12]
import ossys from numpy import arctan2coszerospi
from elipsoide import elipsoide from lat2cre import lat2cre
from radiopv import radiopv
from lam import lam
psi_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del meridiano entrada=(latlon) salida=psi_ed50
import ossys
from numpy import pisqrtcossintan from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
58
radioem - radio de curvatura de la elipse meridiana en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radioem
import ossys from numpy import sin
from elipsoide import elipsoide
radioeul - radio de la seccioacuten normal de un determinado acimut a partir del teorema de Euler entrada=(lataznelipsoide)
salida=radieul import ossys
from numpy import sincos from radioem import radioem
from radiopv import radiopv
radiopv - radio de curvatura del primer vertical en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radiopv
import ossys from numpy impor sqrtsin
from elipsoide import elipsoide
rdcae - reduccioacuten de la distancia de la cuerda al arco elipsoide entrada=( dcazlat1nelipsoide) salida=recae
impor ossys from numpy import sincosarcsen
from radioem import radioem from radiopv import radiopv
rdtce - reduccioacuten de la distancia del terreno a la cuerda elipsoide entrada=(dgazlat1h1h2nelipsoide)
salida=rdtce import ossys
from numpy import sincossqrt from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
59
tri2geo - paso de coordenadas cartesianas tridimensionales a geodeacutesicas en un punto y elipsoide determinados entrada=(XYZnelipsoide)
salida=[latlonh]
import ossys from numpy import cossintanarctanarctan2sqrtzeros
from elipsoide import elipsoide from radiopv import radiopv
xyz2clae - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a observables claacutesicos sobre el elipsoide y desnivel elipsoidal entrada=( X1Y1Z1DXDYDZnelipsoide) salida=[s12az12h12]
import ossys from numpy import zeros
from tri2geo import tri2geo
from pigbslm import pigbslm
xyz2clat - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes polares en el terreno entrada=( lat1lon1ixiyiz)
salida=[ dgaz12lv] import ossys
from numpy import zeros from xyz2enu import xyz2enu
from enu2cla import enu2cla
xyz2enu - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes ENU entrada=(latlonIXIYIZ)
salida=[ieiniu]
import ossys from numpy import sincoszeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
60
434 Libreriacutea en Python ldquogeotopoproy_cartograficasrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 calhuso - caacutelculo del huso correspondiente a un punto en la proyeccioacuten UTM a partir de su longitud geodeacutesica entrada=(lon)
salida=huso
import ossys from numpy import
cdel2geo - paso de un punto de la proyeccioacuten ciliacutendrica directa equivalente de Lambert al elipsoide
entrada=(XYLon0TXTYnelipsoide) salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaaut2lat import aut2lat
convestp - caacutelculo de la convergencia de meridianos de un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lonlon0)
salida=convest import ossys
convgk - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0nelipsoide)
salida=convgk
import ossys from numpy import sincostan
from geotopogeodesiaelipsoide import elipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
61
convlamb - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(lonlat0lon0)
salida=convlamb
import ossys from numpy import sin
convutm - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=convutm import ossys
from numpy import tancossinpi
from cahuso import calhuso from geotopogeodesiaelipsoide import elipsoide
convutmh - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso indicado entrada=(latlonnelipsoide)
salida=convutmh
import ossys from numpy import tancossinpi
from geotopogeodesiaelipsoide import elipsoide
dcdgputm - paso de la distancia cuerda en la proyeccioacuten UTM entre dos puntos a la correspondiente a la proyeccioacuten UTM de la liacutenea geoacutedesica que los une en el elipsoide entrada=(lat1lon1lat2lon2nelipsoide
salida=correccioacuten en metros import ossys
from numpy import cos from utm2geo import utm2geo
from geo2utmh import geo2utmh
from calhuso import calhuso from getopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
62
dcesfera - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general conforme en una esfera entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida=dc (reduccioacuten angular de la cuerda en radianes import ossys
from numpy import sincos from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
dcestp - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en la esfera al pasar a la proyeccioacuten estereograacutefica polar entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=dc(reduccioacuten angular de la cuerda en radianes)
import ossys from numpy import cossin
from kplamb import kplamb
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
from geotopogeodesiaradiopv import radiopv
dcgk - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general de Gauss-Kruumlger entrada=(lat1lon1lat2lon2lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos from geo2gk import geo2gk
from gk2geo import gk2geo
from geotopogeodesiaradioem import radioem from geotopogeodesiaradiopv import radiopv
from getopogeodesiaelipsoide import elipsoide
dclamb - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert entrada=(lat1lon1lat2lon2lat0pelipsoide
salida= dc(reduccioacuten angular de la cuerda en radianes)
import ossys
from numpy import sintancosexpzeros from geo2lamb import geo2lamb
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
63
from kdlamb import kdlamb
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
from geotopogeodesiaradiopv import radiopv
dclambf - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert con maacutes precisioacuten que la funcioacuten anterior entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos sin
from kplamb import kplamb from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o from geotopogeodesiaradiopv import radiopv
dcutm - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=( lat1lon1lat2lon2nelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaradioem import radioem
dcutmh - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso indicado entrada=( lat1lon1lat2lon2husonelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh
from utm2geo import utm2geo from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
64
dgpdcutm - paso de la distancia geodeacutesica proyectada en el plano UTM a la distancia correspondiente a la cuerda en esta proyeccioacuten para una geodeacutesica del elipsoide entrada=( lat1lon1lat2lon2snelipsoide)
salida=correccioacuten import ossys
from numpy import cos from geo2utmh import geo2utmh
from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut
esf2esfg - paso de un punto de una esfera a la esfera con cambio de polo Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo
entrada=(latlonlatplonp)
salida=[latlong]
import ossys from numpy import cossintanarcsenarctandotzerospi
from geotopogeodesiapiesfcr import piesfcr
esf2estp - paso de un punto de la esfera a las planas de la proyeccioacuten estereograacutefica polar entrada=(latlonlon0radiotxty)
salida=[xy] estp import ossys
from numpy import zerossincos
esfg2esf - paso de un punto de la esfera con cambio de polo a la esfera original Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo entrada=(latnlonnlatplonp
salida=[lat0lon0giro import ossys
from numpy import cossintanarcsenarctan2dotzerospitranspose from geotopogeodesiapiesfcr import piesfcr
esfc2lat - paso de latitud sobre la esfera a la correspondiente sobre el elipsoide seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
65
salida=lat
import ossys from numpy import sintanarctanpi
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiaelipsoide import elipsoide
estp2esf - paso de un punto de la proyeccioacuten estereograacutefica polar a la esfera entrada=(xylon0radiotxty)
salida=[xy] import ossys
from numpy import zerosarctan2arctansinpi
geo2cdel - paso de un punto del elipsoide a la proyeccioacuten ciliacutendrica directa equivalente de Lambert entrada=( latlonlon0txtynelipsoide)
salida=[XY] import ossys
from numpy import zeros
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialat2aut import lat2aut
geo2esto - paso de una nube de puntos del elipsoide a la proyeccioacuten estereograacutefica oblicua oacuteptima entrada=(latlonlat0lon0txtynelipsoide)
salida=[XY]
import ossys from numpy import
from lat2esc import lat2esc
from esf2esfg import esf2esfg from esf2estp import esf2estp
from geotopogeodesiaradiopv import radiopv
geo2gk - paso de un punto del elipsoide a la proyeccioacuten general de Gauss-Kruumlger entrada=( latlonlon0ptxtynelipsoide)
salida= [xy]gk import ossys
from numpy import costanpizeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesialam import lam
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
66
geo2lamb - paso de un punto del elipsoide a la proyeccioacuten general coacutenica conforme de Lambert entrada=( latlonlat0lon0ptxtynelipsoide)
salida=[xy]lambert
import ossys from numpy import sintancosexpzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
geo2merc - paso de un punto del elipsoide a la proyeccioacuten de Mercator entrada=( latlonlon0txtynelipsoide)
salida= [xy]mercator import ossys
from numpy import zeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialat2cre import lat2cre
geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
import ossys from numpy import zerostancospi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
geo2utmh - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=[XY] UTM
import ossys
from numpy import zerostancospi from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
gk2geo - paso de un punto de la proyeccioacuten general de Gauss-Kruumlger al elipsoide entrada=(XYlon0ptxtynelipsoide)
salida=[latlon]
import ossys
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
67
from numpy import zerostancospi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
kdesfera - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general conforme sobre una esfera Utiliza la integracioacuten numeacuterica de Simpson entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida= kdesfera import ossys
from kpesfera import kpesfera from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o
kdestp - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica de la esfera al proyectarla en la proyeccioacuten estereograacutefica polar Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0radiotxty)
salida=kdestp import ossys
from kpestp import kpestp from esf2estp import esf2estp
from estp2esf import estp2esf
kdgk - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general de Gauss-Kruumlger Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0pnelipsoide)
salida=kdgk import ossys
from geo2gk import geo2gk from gk2geo import gk2geo
from kpgk import kpgk
kdlamb - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica el elipsoide al proyectarla en la proyeccioacuten general coacutenica conforme de Lambert Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=kdlamb import ossys
from geolamb import geolamb from lamb2geo import lamb2geo
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
68
kdutm - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso del primer punto Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2nelipsoide)
salida=kdutm import ossys
from calhuso import calhuso from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kdutmh - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso indicado Utiliza la integracioacuten numeacuterica de Simpson
entrada= lat1lon1lat2lon2husohelipsoide) salida=kdutmh
import ossys from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kpesfera - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general conforme sobre una esfera entrada=( latlat0nelipsoide)
salida=kpesfera import ossys
from numpy import cossintanexp from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaelipsoide import elipsoide
kpestp - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lat)
salida=kpestp import ossys
from numpy import sin
kpgk - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0pnelipsoide)
salida=kpgk
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
69
import ossys
from numpy import sincostan from clahuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
kplamb - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(latlat0pnelipsoide)
salida=kplamb
import ossys from numpy import cossintanexp
from geotopogeodesialat2cre import lat2cre from geotopogeodesiaradiopv import radiopv
kputm - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=kputm
import ossys from numpy import tancossinpi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
kputmh - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=kputmh
import ossys
from numpy import sincostanpi from geotopogeodesiaelipsoide import elipsoide
lamb2geo - paso de un punto de la proyeccioacuten general coacutenica conforme de Lambert al elipsoide entrada=( xylat0lon0ptxtynelipsoide)
salida=[latlon] import ossys
from numpy import sintanarctanpilogsqrtzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
from geotopogeodesiacre2lat import cre2lat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
70
lat2esc - paso de la latitud geodeacutesica sobre el elipsoide a la correspondiente sobre la esfera seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide)
salida=latesfc
import ossys from numpy import sintanarctanpi
from geotopogeodesiaelipsoide import elipsoide
merc2geo - paso de un punto de la proyeccioacuten de Mercator al elipsoide entrada= (xylon0txtynelipsoide)
salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesiacre2lat import cre2lat
utm2geo - paso de un punto de la proyeccioacuten UTM al elipsoide entrada=(XYhusonelipsoide)
salida=[latlon] import ossys
from numpy import sqrtpitancossinzeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
435 Libreriacutea en Python ldquogeotopotransformacionrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 egm08rednap ndash fichero que almacena la clase Egm08rednap para el manejo de geoides en formato egm08rednap Define la funcioacuten getOndulation(selflatitudlongitud) Llama al fichero geoide que a su vez llama a los ficheros EGM08_REDNAP
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
71
entrada=(latitudlongitud)
salida=ondulacioacuten import ossys
from numpy import fromfile reshape from geoide import Geoide
geoide ndash fichero que almacena la clase Geoide para el manejo de geoides en formato egm08rednap La clase Geoide almacena ldquollamardquo a los geoides EGM08_REDNAP de la Peniacutensula o Baleares seguacuten corresponda Define las funciones getNoOndulacioacuten y getOndulacioacuten en funcioacuten de que encuentre las coordenadas de entrada dentro de los ficheros
entrada=(latitudlongitud) salida=ondulacioacuten
import ossys from numpy import fromfile reshapepifloorndarray
ntv2 ndash fichero que almacena la funcioacuten ntv2Espana Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(longitudlatitud) en deg en ED50 salida=(longitud latitud) en deg en ETRS89
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
ntv2_2 ndash fichero que almacena la funcioacuten ntv2Espana Adaptacioacuten del fichero anterior Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz) En la adatacioacuten realizada obtenemos soacutelo los diferenciales de caacutelculo de paso de ED50 a ETRS89 para tomarlo en el caacutelculo de la aproximacioacuten del sentido inverso entre ETRS89 a ED50 El paso de nodos del fichero utilizado es cada 200‟ lo que equivaldriacutea a 6000 m aproximadamente por lo que la aproximacioacuten seriacutea vaacutelida
entrada=(longitudlatitud) en deg en ETRS89 salida=(diflongitud diflatitud) en deg en ED50
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
72
sped2etpy ndash fichero rejilla del IGN Para transformacioacuten de coordenadas en los Sistemas de Referencia ED50 a ETRS89 Adaptado a Python y descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(fichero contenedor de informacioacuten) No entramos con ninguacuten valor
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
73
5 APLICABILIDAD DE LA LIBRERIacuteA Y CONCLUSIONES FINALES Finalmente hemos implementado los 5 subpaquetes de moacutedulos con funciones y clases incluidos en el paquete (libreriacutea) geotopo destinados a caacutelculos topograacuteficos y geodeacutesicos
Estructura final de la libreriacutea geotopo
Como puede verse en el paquete de geotopo se ha incluido un moacutedulo de aplicaciones en las que se han implementado unos ejercicios praacutecticos aplicando las distintas funciones de la libreriacutea Antes de entrar a describir los casos praacutecticos implementados hemos de decir que directamente podemos obtener resultados de cada una de las funiones Asiacute si queremos pasar de coordenadas geograacuteficas a coordenadas utm mirando en la descripcioacuten de las funciones tenemos geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
74
import ossys
from numpy import zerostancospi from calhuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
Pues bien una vez seleccionada la funcioacuten a utilizar abrimos el moacutedulo correspondiente con IDLE
Coacutedigo de la funcioacuten abierto con IDLE
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
75
Imagen de la ejecucioacuten de Run Module
Ejecutando Run Module Python abre el Python Shell En esta pantalla tenemos que introducir el nombre de la funcioacuten a usar geo2utm y entre pareacutentesis los valores que se especifican de entrada en la descripcioacuten de la funcioacuten entrada=(latlonnelipsoide)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
76
Llamada a la ejecucioacuten de la funcioacuten desde Python Shell
Como hemos indicado antes y por su relevancia y empleabilidad en otras funciones con ldquonelipsoiderdquo se entiende un coacutedigo del 1 al 3 que representa cada uno un elipsoides de referencia seguacuten los Sistemas de Referencia Coordenados en este caso 1=ED50 elipsoide Internacional Hayford 1924 2=ETRS89 elipsoide GRS80 y 3=WGS84
Al introducir los datos ejecutamos con Intro Obtenemos 2 valores en forma de vector que respresentan seguacuten la descripcioacuten de la funcioacuten salida=[XY] UTM
Podemos volver a caacutelcular las coordenadas UTM en el SCR ETRS89 (en caso de que lalitud y longitud vinieran dadas en el mismohellip) simplemente copiando la liacutenea de entrada pegaacutendola abajo y cambiando 1 por 2 como iacutendice del elipsoide y volviendo a ejecutar con enter
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
77
Dentro de Python Shell se puede copiar coacutedigo de liacuteneas anteriores y
pegar abajo Para caacutelculos maacutes complejos de mayor nuacutemero de puntos etc a modo de praacutectica se ha implementado el coacutedigo de distintos tipos de caacutelculo de ejemplo Distribuidos en 2 tipologiacuteas diferentes ldquotopografiardquo y ldquogeodesiardquo se han incluido coacutedigos para la resolucioacuten e impresioacuten de distintos tipos de problemas realizando ldquoimportrdquo de funciones declaradas en los moacutedulos de los distintos subpaquetes de geotopo
51 CASOS PRAacuteCTICOS TOPOGRAFIacuteA En total se han realizada 4 casos praacutecticos dentro del apartado de topografiacutea Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica topo_practica1 Del resto soacutelo se ha incluido la salida de datos
511 Implementacioacuten del coacutedigo topo_praacutectica1
usrbinpython
-- coding iso-8859-1 --
-- coding cp1252 --
Praacutectica 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
Datos Coordenadas del punto de estacioacuten
Sistema de referencia local
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmesn)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
78
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
En esta versioacuten de la praacutectica utilizando la libreriacutea geotopo en el caacutelculo de azimutes
periacutemetro y superficie
import ossys
from numpy import matrixarrayshapepizerosconcatenatemeansincossqrt
from geotopotopografiaacimut import acimut
from geotopogeneralperimetro import perimetro
from geotopogeneralareacor import areacor
Radio medio terrestre en metros
rt=63700000
Informacioacuten del punto de estacioacuten El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto de estacioacuten
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Altitud del punto en metros
- Quinta columna- Altura de instrumento en metros
pe=array([[100030242663090376657208150]])
Informacioacuten de las referencias
- Cada fila es un punto de referencia
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Lectura azimutal en grados centesimales
ref=array([[200127863973359492354821][2002322174932757501335646][20033289406282
69902313540][2004261222126827453319067]])
Informacioacuten de los puntos radiados
- Cada fila es una observacioacuten claacutesica a un punto radiado
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Lectura azimutal en grados centesimales
- Tercera columna- Lectura cenital en grados centesimales
- Cuarta columna- Distancia geomeacutetrica en metros
- Quinta columna- Altura de instrumento en metros
rad=array([[30013387131001173422431180][300211877101000083399617200][3003240
5756999039440097150][300433037831000468414996150]])
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos de referencia
Caacutelculo de las dimensiones de la matriz de puntos de referencia
- mref seraacute el nuacutemero de filas el nuacutemero de puntos
- nref seraacute el nuacutemero de columnas 4
[mrefnref]=refshape
Se extrae la informacioacuten del punto de estacioacuten
num_pe=pe[00]
x_pe=pe[01]
y_pe=pe[02]
z_pe=pe[03]
alti_pe=pe[04]
Caacutelculo de azitutes del punto de estacioacuten a cada uno de los puntos radiados
La funcioacuten azimut de la libreriacutea Geotop devuelve el valor en radianes
acimutes=zeros((mref1))
for i in range (1mref+1)
Se leen la identificacioacuten y las coordenadas del punto radiado y se almacenan en variables
temporales
num_pref=ref[i-10]
x_pref=ref[i-11]
y_pref=ref[i-12]
azi_pe_pref=acimut(x_pey_pex_prefy_pref)
acimutes[i-10]=azi_pe_pref2000pi
ref=concatenate((refacimutes)axis=1)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
79
Caacutelculo de la desorientacioacuten de cada direccioacutenccedil
desor=zeros((mref1))
for i in range(1mref+1)
Se leen los valores angulares y se transforman a radianes almacenaacutendose en variables
temporales
lhz_pe_pref=ref[i-13]pi2000
azi_pe_pref=ref[i-14]pi2000
des_pe_pref=azi_pe_pref-lhz_pe_pref
if des_pe_preflt0
des_pe_pref=des_pe_pref+20pi
desor[i-10]=des_pe_pref200pi
ref=concatenate((refdesor)axis=1)
Caacutelculo de la desorientacioacuten media con la funcioacuten de python
des_mean=mean(ref[5])pi200
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos radiados
[mradnrad]=radshape
Caacutelculo de coordenadas polares que se almacenan en la matriz coor_polares
- Primera columna- Nuacutemero entero identificador del punto radiado
- Segunda columna- Azimut en grados centesimales
- Tercera columna- Distancia reducida en metros
Caacutelculo de coordenadas cartesianas que se almacenan en la matriz coor_cart
- Primera columna- Nuacutemero entero identificador del punto del punto radiado
- Segunda columna- Coordenada X
- Tercera columna- Coordenada Y
- Cuarta columna- Altitud
antes se almacenan las coordenadas polares en la matriz coord_polares (numero de
puntoacimutdistancia reducida)
coord_polares=zeros((mrad3))
coord_cart=zeros((mrad4))
for i in range(1mrad+1)
num_prad=rad[i-10]
lhz_pe_prad=rad[i-11]pi2000
lv_pe_prad=rad[i-12]pi2000
dg_pe_prad=rad[i-13]
altp_pe_prad=rad[i-14]
coord_polares[i-10]=num_prad
azi_pe_prad=lhz_pe_prad+des_mean
if azi_pe_pradgt(20pi)
azi_pe_prad=azi_pe_prad-20pi
coord_polares[i-11]=azi_pe_prad2000pi
dr_pe_prad=dg_pe_pradsin(lv_pe_prad)
coord_polares[i-12]=dr_pe_prad
coord_cart[i-10]=num_prad
coord_cart[i-11]= x_pe+dr_pe_pradsin(azi_pe_prad)
coord_cart[i-12]= y_pe+dr_pe_pradcos(azi_pe_prad)
coord_cart[i-13]= z_pe+alti_pe+dg_pe_pradcos(lv_pe_prad)-
altp_pe_prad+042dr_pe_prad2rt
Caacutelculo del periacutemetro de la parcela utilizando la funcioacuten periacutemetro de Geotopo
coord=zeros((mrad2))
for i in range (1mrad+1)
coord[i-10]=coord_cart[i-11]
coord[i-11]=coord_cart[i-12]
perim=perimetro(coord)
Caacutelculo de la superficie de la parcela utilizando la funcioacuten areacor de Geotopo
superficie=areacor(coord)
superficie_error=areacore(coord)
Impresioacuten de resultados
fsalida=open(topopractica1salw)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
80
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
fsalidawrite(TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(nPRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALESn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimaln)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia Localn)
Impresioacuten del paso 1 Paso de coordenadas cartesianas a polares Azimutes
fsalidawrite(n1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada
visualn)
fsalidawrite( Punto Inicial Punto Final Acimut Desorientacioacutenn)
for i in range(1mref+1)
num_pref=ref[i-10]
azi=ref[i-14]
des=ref[i-15]
fsalidawrite(100fnum_pe)
fsalidawrite(150fnum_pref)
fsalidawrite(184fazi)
fsalidawrite(184fndes)
Impresioacuten del paso 2 Caacutelculo de la desorientacioacuten media
fsalidawrite(n2 Caacutelculo de la desorientacioacuten median)
fsalidawrite( Desorientacioacuten media154fn(des_mean200pi))
Impresioacuten del paso 3 Caacutelculo de la coordenadas polares
fsalidawrite(n3 Caacutelculo de las coordenadas polaresn)
fsalidawrite( Punto Acimut Distancian)
for i in range (1mrad+1)
num_prad=coord_polares[i-10]
azi=coord_polares[i-11]
dist=coord_polares[i-12]
fsalidawrite(100fnum_prad)
fsalidawrite(184fazi)
fsalidawrite(184fndist)
Impresioacuten del paso 4 Caacutelculo de la coordenadas cartesianas
fsalidawrite(n4 Caacutelculo de las coordenadas cartesianasn)
fsalidawrite( Punto X Y Zn)
for i in range (1mrad+1)
num_prad=coord_cart[i-10]
x=coord_cart[i-11]
y=coord_cart[i-12]
z=coord_cart[i-13]
fsalidawrite(100fnum_prad)
fsalidawrite(154fx)
fsalidawrite(154fy)
fsalidawrite(154fnz)
Impresioacuten del paso 5 valor del periacutemetro
fsalidawrite(n5 Caacutelculo del periacutemetro de la parcelan)
fsalidawrite( Periacutemetro153f mnperim)
Impresioacuten del paso 6 valor de la superficie de la parcela
fsalidawrite(n6 Caacutelculo de la superficie de la parcelan)
fsalidawrite( Superficie153f m2nsuperficie)
fsalidaclose()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
81
512 Impresioacuten del fichero de salida de resultados topo_praacutectica1
Ejecuando el programa anterior obtenemos un fichero con los resultados y la presentacioacuten mejorada que hemos implementado SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada visual
Punto Inicial Punto Final Acimut Desorientacioacuten
1000 2001 3539187 3184366
1000 2002 520128 3184482
1000 2003 1497887 3184347
1000 2004 2503428 3184361
2 Caacutelculo de la desorientacioacuten media
Desorientacioacuten media 3184389
3 Caacutelculo de las coordenadas polares
Punto Acimut Distancia
3001 3523102 4224303
3002 372099 3996170
3003 1590145 4400965
3004 2488172 4149959
4 Caacutelculo de las coordenadas cartesianas
Punto X Y Z
3001 27365966 33997199 6561414
3002 32447650 34236535 6566664
3003 32884285 27383773 6578851
3004 27363219 27915286 6569143
5 Caacutelculo del periacutemetro de la parcela
Periacutemetro 2358248 m
6 Caacutelculo de la superficie de la parcela
Superficie 342540930 m2
513 Salida de resultados topo_praacutectica2
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN DIRECTA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3264596 m
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
82
Y= 4065437 m
Previsioacuten de error planimeacutetrico= 0035 m
Vector con soluciones en z y su error
Z=725931 m Previsioacuten de error altimeacutetrico 0023 m
Z=725926 m Previsioacuten de error altimeacutetrico 0024 m
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN INVERSA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3010146 m
Y= 3411841 m
Previsioacuten de error planimeacutetrico= 0022 m
Vector con soluciones en z y su error
Z=515695 m Previsioacuten de error altimeacutetrico 0021 m
Z=515703 m Previsioacuten de error altimeacutetrico 0024 m
Z=515698 m Previsioacuten de error altimeacutetrico 0022 m
514 Salida de resultados topo_praacutectica3
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 3 CALCULO DE DATOS DE REPLANTEO PARA ESTACION TOTAL EN UN SISTEMA DE REFERENCIA
LOCAL
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
ResultadosDatos de replanteo
Base Punto Azimut Distancia CotaProyecto CotaTerreno CotaRoja
1 1 3856489 75460 96930 96539 0391
1 2 2667262 77786 96903 98259 -1356
1 3 1219144 40883 95329 94688 0641
1 4 279600 67437 95045 95587 -0542
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
83
515 Salida de resultados topo_praacutectica4
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 4 TRANSFORMACIOacuteN ENTRE SISTEMAS DE REFERENCIA LOCALES HELMERT 2D
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
Planteamiento del sistema de ecuaciones que define la transformacioacuten planimeacutetrica
Matriz A
1000 0000 3258686 -2709414
0000 1000 2709414 3258686
1000 0000 2075590 -2105320
0000 1000 2105320 2075590
Vector teacuterminos independientes
4554780
228501
3244004
443737
1 Resultados de los paraacutemetros de la transformacioacuten
- Planimetriacutea
- Traslacioacuten en coordenada x del sistema S1 al sistema S2 324401 m
- Traslacioacuten en coordenada y del sistema S1 al sistema S2 -20424 m
- Valor para el paraacutemetro a (a=landacos_giro) 0805119725
adimensional
- Valor para el paraacutemetro b (b=landasin_giro) -0593023724
adimensional
- Valor para el factor de escala (landa=sqrt(a2+b2)) 0999947
tanto por uno
- Valor para el giro (giro=arctan2(ba) -404157
grados centesimales
- Altimetriacutea
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 1 6056 m
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 2 6083 m
- Traslacioacuten media en coordenada z del sistema S1 al sistema S2 6070 m
2 Resultado de la transformacioacuten del punto 3 al sistema de referencia local S2
- Coordenada x de 3 en el sistema de referencia local S2 4072286 m
- Coordenada y de 3 en el sistema de referencia local S2 45170 m
- Coordenada z de 3 en el sistema de referencia local S2 104748 m
52 CASOS PRAacuteCTICOS GEODESIA En total se han realizada 5 casos praacutecticos dentro del apartado de geodesia Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica geo_practica1 Del resto soacutelo se ha incluido la salida de datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
84
521 Implementacioacuten del coacutedigo geo_praacutectica1
Semana Geomaacutetica 2011 Bogotaacute DC Colombia
IGAC-Instituto Agustiacuten Codazzi
Taller Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea GeoTop
Impartido por Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
Dr David Hernaacutendez Loacutepez davidhernandezulcmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
Praacutectica 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
Datos Coordenadas de la Red ERGNSS - Red de Estaciones Permanentes GNSS - Instituto
Geograacutefico Nacional Espantildea
Sistema de referencia ETRS89 (Elipsoide GRS80)
Coacutedigo EPSG para coordenadas geodeacutesicas sobre el elipsoide 4258
En esta versioacuten de la praacutectica se utiliza la libreriacutea GeoTop
Otra variante con respecto a la versioacuten anterior de la praacutectica es que se parte de coordenadas
geodeacutesicas en seudo decimal sexagesimal
Documentacioacuten La formulacioacuten empleada figura en el apartado 13 Parametrizacioacuten del
elipsoide del documento
OctaveTallerGeodesiaDocumentacionApuntes_DHL_2010GeodesiaElipsoidalpdf
Matriz de coordenadas
- Cada fila es un punto una estacioacuten de referencia GNSS
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada geodeacutesica longitud en suedo decimal sexagesimal
- Tercera columna- Coordenada geodeacutesica latitud en suedo decimal sexagesimal
- Cuarta columna- Altitud elipsoidal en metros
from numpy import zerosarraygenfromtxt
from geotopogeodesiaelipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiatri2geo import tri2geo
from geotopogeodesiageo2tri import geo2tri
c4258h=[ 1 432151770811 -82356167472 66917
2 382020103584 -02852437048 60356
3 385840494457 -15123054192 751736
4 365109112636 -22734018800 127517
5 392843898433 -62030426066 436527
6 432819118007 -34753038539 99287
7 355331090227 -51823016758 52475
8 375456176191 -44315999947 202082
9 371159923466 -65513077151 81860
10 402645009016 -34234283233 766920
11 423518259367 -53903511817 970254
12 364334003748 -42336718238 119848
13 393309445258 23728383134 62063
14 422728617761 -23007691629 503204
15 405642292231 -52945108842 854969
16 394031263811 -35750290360 808968
17 402101790155 -10727483699 956188
18 392850970441 -02015543423 77592
19 421102318373 -84847057525 87790
20 403129631681 -30519065001 972777
21 413800221985 -05255792567 296111
22 281829034024 -162958855078 2417483
23 282837857413 -161428164273 51787
24 282505711067 -163302841359 54475
25 280249784309 -164306688806 58543
26 284549932439 -175337787438 2199221]
Los datos los guardamos en un txt en la misma carpeta del trabajo e importamos
c4258h=genfromtxt(CPython27geotopoaplicacionestalleresgeo_practica1dattxt)
Caacutelculo de las dimensiones de la matriz de coordenadas
- m seraacute el nuacutemero de filas el nuacutemero de puntos
- n seraacute el nuacutemero de columnas 4
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
85
[mn]=c4258hshape
grs80=elipsoide(2)
Recibe Codigo del elipsoide (nelipsoide)
1 - Ed50 Devuelve el elipsoide Internacional 1924
2 - Etrs89 Devuelve el elipsoide GRS80
3 - Wgs84 Devuelve el elipsoide Wgs84
Definicioacuten del elipsoide
fsalida=open(geo_practica1salw)
fsalidawrite(SEMANA GEOMAacuteTICA - 2011n)
fsalidawrite(TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software
libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE
COORDENADAS GEODEacuteSICAS Y ECEFn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal
ggmmssfsn)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia ETRS89n)
fsalidawrite(- Paraacutemetros del elipsoide GRS80n)
fsalidawrite( - Semieje mayor 103f mngrs80[0])
fsalidawrite( - Inverso del aplanamiento 109f adimngrs80[1])
fsalidawrite( - Semieje menor 103f mngrs80[2])
fsalidawrite( - Primera excentricidad al cuadrado 109f adimngrs80[3]2)
fsalidawrite( - Segunda excentricidad al cuadrado 109f adimngrs80[4]2)
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(1 Paso de coordenadas geodeacutesicas a ECEFn)
fsalidawrite(NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF
CoorZECEFn)
c4258XYZ=zeros((m4))
for i in range (1m+1)
np=c4258h[i-10]
longitudRad=psdo2rad(c4258h[i-12])
latitudRad=psdo2rad(c4258h[i-11])
hElip=c4258h[i-13]
[xecefyecefzecef]=geo2tri(latitudRadlongitudRadhElip2)
fsalidawrite(80fnp)
fsalidawrite(159fc4258h[i-11])
fsalidawrite(159fc4258h[i-12])
fsalidawrite(123fhElip)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(n)
c4258XYZ[i-10]=np
c4258XYZ[i-11]=xecef
c4258XYZ[i-12]=yecef
c4258XYZ[i-13]=zecef
Caacutelculo e impresioacuten del paso 2 de coordenadas ECEF a geodeacutesicas
fsalidawrite(2 Paso de coordenadas ECEF a geodeacutesicasn)
fsalidawrite( NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud
AltElipn)
for i in range(1m+1)
np=c4258XYZ[i-10]
xecef=c4258XYZ[i-11]
yecef=c4258XYZ[i-12]
zecef=c4258XYZ[i-13]
[latitudlongitudhElip]=tri2geo(xecefyecefzecef2)
fsalidawrite(80fnp)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(159frad2psdo(latitud))
fsalidawrite(159frad2psdo(longitud))
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
86
fsalidawrite(153fnhElip)
fsalidaclose()
522 Impresioacuten del fichero de salida de resultados geo_praacutectica1
SEMANA GEOMAacuteTICA - 2011
TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea
GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal ggmmssfs
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia ETRS89
- Paraacutemetros del elipsoide GRS80
- Semieje mayor 6378137000 m
- Inverso del aplanamiento 0003352811 adim
- Semieje menor 6356752314 m
- Primera excentricidad al cuadrado 0006694380 adim
- Segunda excentricidad al cuadrado 0006739497 adim
1 Paso de coordenadas geodeacutesicas a ECEF
NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF CoorZECEF
1 43215177081 -8235616747 66917 4594489890 -678368010 4357065904
2 38202010358 -0285243705 60356 5009051399 -42072472 3935057504
3 38584049446 -1512305419 751736 4962848206 -160854365 3990884209
4 36510911264 -2273401880 127517 5105220295 -219278803 3804386889
5 39284389843 -6203042607 436527 4899866820 -544567584 4033769790
6 43281911801 -3475303854 99287 4625924690 -307096765 4365771175
7 35533109023 -5182301676 52475 5150908012 -478415023 3718518240
8 37545617619 -4431599995 202082 5021256063 -414685080 3898182184
9 37115992347 -6551307715 81860 5049613168 -612885631 3835143860
10 40264500902 -3423428323 766920 4851137670 -314518688 4116282036
11 42351825937 -5390351182 970254 4680871385 -463168384 4294606572
12 36433400375 -4233671824 119848 5103282414 -392096752 3793146894
13 39330944526 2372838313 62063 4919369704 225499577 4039849606
14 42272861776 -2300769163 503204 4708688612 -205761707 4283609369
15 40564229223 -5294510884 854969 4803054799 -462131609 4158378661
16 39403126381 -3575029036 808968 4904660519 -339868032 4050823512
17 40210179016 -1072748370 956188 4867391684 -95523894 4108341277
18 39285097044 -0201554342 77592 4929534046 -29050676 4033709925
19 42110231837 -8484705753 87790 4677481077 -725205068 4260827192
20 40312963168 -3051906500 972777 4848724914 -261632472 4123093922
21 41380022199 -0525579257 296111 4773803543 -73506519 4215453698
22 28182903402 -16295885508 2417483 5390243531 -1596630330 3007752593
23 28283785741 -16142816427 51787 5386836438 -1569217617 3023118925
24 28250571107 -16330284136 54475 5381262061 -1599192518 3017377791
25 28024978431 -16430668881 58543 5395193089 -1620537044 2981146536
26 28454993244 -17533778744 2199221 5326646317 -1719826438 3052043561
2 Paso de coordenadas ECEF a geodeacutesicas
NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud AltElip
1 4594489890 -678368010 4357065904 43215177081 -8235616747 66917
2 5009051399 -42072472 3935057504 38202010358 -0285243705 60356
3 4962848206 -160854365 3990884209 38584049446 -1512305419 751736
4 5105220295 -219278803 3804386889 36510911264 -2273401880 127517
5 4899866820 -544567584 4033769790 39284389843 -6203042607 436527
6 4625924690 -307096765 4365771175 43281911801 -3475303854 99287
7 5150908012 -478415023 3718518240 35533109023 -5182301676 52475
8 5021256063 -414685080 3898182184 37545617619 -4431599995 202082
9 5049613168 -612885631 3835143860 37115992347 -6551307715 81860
10 4851137670 -314518688 4116282036 40264500902 -3423428323 766920
11 4680871385 -463168384 4294606572 42351825937 -5390351182 970254
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
87
12 5103282414 -392096752 3793146894 36433400375 -4233671824 119848
13 4919369704 225499577 4039849606 39330944526 2372838313 62063
14 4708688612 -205761707 4283609369 42272861776 -2300769163 503204
15 4803054799 -462131609 4158378661 40564229223 -5294510884 854969
16 4904660519 -339868032 4050823512 39403126381 -3575029036 808968
17 4867391684 -95523894 4108341277 40210179016 -1072748370 956188
18 4929534046 -29050676 4033709925 39285097044 -0201554342 77592
19 4677481077 -725205068 4260827192 42110231837 -8484705753 87790
20 4848724914 -261632472 4123093922 40312963168 -3051906500 972777
21 4773803543 -73506519 4215453698 41380022199 -0525579257 296111
22 5390243531 -1596630330 3007752593 28182903402 -16295885508 2417483
23 5386836438 -1569217617 3023118925 28283785741 -16142816427 51787
24 5381262061 -1599192518 3017377791 28250571107 -16330284136 54475
25 5395193089 -1620537044 2981146536 28024978431 -16430668881 58543
26 5326646317 -1719826438 3052043561 28454993244 -17533778744 2199221
523 Salida de resultados geo_praacutectica2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
88
524 Salida de resultados geo_praacutectica3
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
89
525 Salida de resultados geo_praacutectica4
helliphellip
helliphellip
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
90
526 Salida de resultados geo_praacutectica5
Con la implementacioacuten y caacutelculo de los 9 casos praacutecticos realizados e incluidos en este Proyecto Final de Maacutester se puede obtener una idea de la aplicabilidad de esta libreriacutea en aplicaciones de caacutelculos topograacuteficos y geodeacutesicos Igualmente y como uno de los puntos de partida de este Proyecto obtenemos una libreriacutea muy potente para el uso en aacutembitos universitarios facilitando al profesorado el planteamiento y resolucioacuten de los distintos casos praacutecticos de las asignaturas y al tratarse de coacutedigo abierto se facilita que los alumnos implementen nuevas utilidades formatos de salida etc Convirtiendo geotopo en una herramienta de trabajo diario
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
91
6 CONCLUSIONES FINALES Como conclusiones finales podemos enumerar
Se ha corroborado lo que dicen los impulsores de Python se trata de un lenguaje limpio sencillo y claro muy proacuteximo a pseudocoacutedigo
Resulta interesante la utilizacioacuten de software libre para caacutelculos geodeacutesicos y topografiacuteacos Al tratarse de software libre es accesible a cualquier tipo de usuario
Al partir de la consideracioacuten de un paradigma estructurado de programacioacuten hemos conseguido implementar gran nuacutemero de funciones en ficheros (moacutedulos) de pequentildeo tamantildeo facilitando la programacioacuten Tambieacuten se ha iniciado en la programacioacuten orientada a objetos con la declaracioacuten de alguna clase
La importacioacuten de moacutedulos facilita a la implementacioacuten de coacutedigo sin necesitar volver a escribir el coacutedigo importado y ante cualquier modificacioacuten del mismo automaacuteticamente se actualiza en todos los programas o moacutedulos donde se importe dicho moacutedulo
Con las funciones definidas dentro de Numpy hemos realizado la mayor parte de los caacutelculos necesarios en nuestra biblioteca
Se ha de realizar la importacioacuten expresa de gran nuacutemero de operaciones matemaacuteticas Salvo + - y casi todos los demaacutes operadores se han de importar desde Numpy por ejemplo pi sqrt sin cos etc A veces puede resultar un poco complicado hacer la importacioacuten de estos operadores pero cuando se avanza en la programacioacuten hasta parece maacutes didactico reflejar todas las funciones importadas de otros moacutedulos
Se ha apreciado que en algunos casos las mismas funciones estaacuten incluidas en distintos moacutedulos y ademaacutes con nombres diferentes Asiacute en Numpy tenemos arcsin arccos arctan etc y en SciPy asin acos atan cuando se refieren a las mismas funciones arcoseno arcocoseno y arcotangente
Se ha creado una libreriacutea abierta accesible y editable para moder modificar
coacutedigo y tambieacuten poder ampliar con el implementado de nuevas funciones que aumenten el potencial de la misma Esto tambieacuten se incluye dentro de las liacuteneas futuras de actuacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
92
7 LIacuteNEAS FUTURAS DE ACTUACIOacuteN
De forma general se establecen las siguientes liacuteneas futuras de actuacioacuten e investigacioacuten
Avance en el desarrollo a aplicaciones informaacuteticas mediante el uso de software libre y en especial de Python
Estudio de la aplicabilidad de Python en el caacutelculo minimo-cuadraacutetico de sistemas de ecuaciones aplicables en topografiacutea y geodesia Para ello se ha de profundizar en el estudio de las diferencias entre los tipos array que contiene numpy y los tipos matrix par el caacutelculo avanzado de sistemas de ecuaciones
Aplicacioacuten de Python para el caacutelculo y ajuste de Redes Geodeacutesicas mediante la utilizacioacuten de miacutenimos cuadrados Con este fin estariacuteamos evitando el tener que recurrir a los softwares de caacutelculo de las casas comerciales ahorrando asiacute un coste importante y el poder realizar los ajustes y presentaciones de resultados adapatados a nuestras necesidades
Inclusioacuten de una interfaz graacutefica a los caacutelculos realizados para poder tener visualmente el resultado de los mismos
Aplicabilidad de python en el procesado de imaacutegenes Utilizacioacuten de la libreriacutea PIL (Python Imaging Library) que agrega capacidades de procesamiento de imaacutegenes al interprete Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
93
8 ANEJO
81 EQUIVALENCIAS ENTRE FUNCIONES EN MATLAB Y PYTHON Al partir de la libreiacutea Geotop en Octave hemos de tener en cuenta la equivanlencia entre algunas funciones de MatlabOctave con Python Asiacute tenemos MATLAB numpyarray numpymatrix Notes
ndims(a) ndim(a) or andim get the number of dimensions of a (tensor rank)
size(a) shape(a) or ashape get the size of the matrix
size(an) ashape[n-1]
get the number of elements of the nth dimension of array a (Note that MATLABreg uses 1 based indexing while Python uses 0 based indexing See note INDEXING)
MATLAB numpyarray numpymatrix Notes
[ 1 2 3 4 5 6 ] array([[123] [456]])
mat([[123] [456]]) or mat(1 2 3 4 5 6)
2x3 matrix literal
[ a b c d ] vstack([hstack([ab]) hstack([cd])])
bmat(a b c d) construct a matrix from blocks abc and d
a(end) a[-1] a[-1][00] access last element in the 1xn matrix a
a(25) a[14] access element in second row fifth column
a(2) a[1] or a[1] entire second row of a
a(15) a[05] or a[5] or a[05] the first five rows of a
a(end-4end) a[-5] the last five rows of a
a(1359) a[03][49] rows one to three and columns five to nine of a This gives read-only access
a([245][13]) a[ix_([134][02])] rows 24 and 5 and columns 1 and 3 This allows the matrix to be modified and doesnt require a regular slice
a(3221) a[ 2212] every other row of a starting with the third and going to the twenty-first
a(12end) a[ 2] every other row of a starting with the first
a(end-11) or flipud(a) a[ -1] a with rows in reverse order
a([1end 1]) a[r_[len(a)0]] a with copy of the first row appended to the end
a atranspose() or aT transpose of a
a aconj()transpose() or aconj()T
aH conjugate transpose of a
a b dot(ab) a b matrix multiply
a b a b multiply(ab) element-wise multiply
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
94
MATLAB numpyarray numpymatrix Notes
ab ab element-wise divide
a^3 a3 power(a3) element-wise exponentiation
(agt05) (agt05) matrix whose ijth element is (a_ij gt 05)
find(agt05) nonzero(agt05) find the indices where (a gt 05)
a(find(vgt05)) a[nonzero(vgt05)[0]] a[nonzero(vAgt05)[0]] extract the columms of a where vector v gt 05
a(find(vgt05)) a[vTgt05] a[vTgt05)] extract the columms of a where column vector v gt 05
a(alt05)=0 a[alt05]=0 a with elements less than 05 zeroed out
a (agt05) a (agt05) mat(aA (agt05)A) a with elements less than 05 zeroed out
a() = 3 a[] = 3 set all values to the same scalar value
y=x y = xcopy() numpy assigns by reference
y=x(2) y = x[1]copy() numpy slices are by reference
y=x() y = xflatten(1) turn array into vector (note that this forces a copy)
110 arange(111) or r_[111] or r_[11010j]
mat(arange(111)) or r_[111r]
create an increasing vector see note RANGES
09 arange(10) or r_[10] or r_[910j]
mat(arange(10)) or r_[10r]
create an increasing vector see note RANGES
[110] arange(111)[ newaxis] r_[111c] create a column vector
zeros(34) zeros((34)) mat() 3x4 rank-2 array full of 64-bit floating point zeros
zeros(345) zeros((345)) mat() 3x4x5 rank-3 array full of 64-bit floating point zeros
ones(34) ones((34)) mat() 3x4 rank-2 array full of 64-bit floating point ones
eye(3) eye(3) mat() 3x3 identity matrix
diag(a) diag(a) mat() vector of diagonal elements of a
diag(a0) diag(a0) mat() square diagonal matrix whose nonzero values are the elements of a
rand(34) randomrand(34) mat() random 3x4 matrix
linspace(134) linspace(134) mat() 4 equally spaced samples between 1 and 3 inclusive
[xy]=meshgrid(0805) mgrid[0906] or meshgrid(r_[09]r_[06]
mat() two 2D arrays one of x values the other of y values
ogrid[0906] or ix_(r_[09]r_[06]
mat() the best way to eval functions on a grid
[xy]=meshgrid([124][245]) meshgrid([124][245]) mat()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
95
ix_([124][245]) mat() the best way to eval functions on a grid
MATLAB numpyarray numpymatrix Notes
repmat(a m n) tile(a (m n)) mat() create m by n copies of a
[a b]
concatenate((ab)1) or hstack((ab)) or column_stack((ab)) or c_[ab]
concatenate((ab)1) concatenate columns of a and b
[a b] concatenate((ab)) or vstack((ab)) or r_[ab]
concatenate((ab)) concatenate rows of a and b
max(max(a)) amax() maximum element of a (with ndims(a)lt=2 for matlab)
max(a) amax(0) maximum element of each column of matrix a
max(a[]2) amax(1) maximum element of each row of matrix a
max(ab) maximum(a b) compares a and b element-wise and returns the maximum value from each pair
norm(v) sqrt(dot(vv)) or Scilinalgnorm(v) or linalgnorm(v)
sqrt(dot(vAvA)) or Scilinalgnorm(v) or linalgnorm(v)
L2 norm of vector v
a amp b logical_and(ab) element-by-element AND operator (Numpy ufunc) see note LOGICOPS
a | b logical_or(ab) element-by-element OR operator (Numpy ufunc) see note LOGICOPS
bitand(ab) a amp b bitwise AND operator (Python native and Numpy ufunc)
bitor(ab) a | b bitwise OR operator (Python native and Numpy ufunc)
inv(a) linalginv(a) inverse of square matrix a
pinv(a) linalgpinv(a) pseudo-inverse of matrix a
rank(a) linalgmatrix_rank(a) rank of a matrix a
ab linalgsolve(ab) if a is square
linalglstsq(ab) otherwise solution of a x = b for x
ba Solve aT xT = bT instead solution of x a = b for x
[USV]=svd(a) U S Vh = linalgsvd(a) V = VhT singular value decomposition of a
chol(a) linalgcholesky(a)T
cholesky factorization of a matrix (chol(a) in matlab returns an upper triangular matrix but linalgcholesky(a) returns a lower triangular matrix)
[VD]=eig(a) DV = linalgeig(a) eigenvalues and eigenvectors of a
[VD]=eig(ab) VD = Scilinalgeig(ab) eigenvalues and eigenvectors of ab
[VD]=eigs(ak) find the k largest eigenvalues and eigenvectors of a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
96
MATLAB numpyarray numpymatrix notes
[QRP]=qr(a0) QR = Scilinalgqr(a) mat() QR decomposition
[LUP]=lu(a) LU = Scilinalglu(a) or LUP=Scilinalglu_factor(a)
mat() LU decomposition
conjgrad Scilinalgcg mat() Conjugate gradients solver
fft(a) fft(a) mat() Fourier transform of a
ifft(a) ifft(a) mat() inverse Fourier transform of a
sort(a) sort(a) or asort() mat() sort the matrix
[bI] = sortrows(ai) I = argsort(a[i]) b=a[I] sort the rows of the matrix
regress(yX) linalglstsq(Xy) multilinear regression
decimate(x q) Scisignalresample(x len(x)q) downsample with low-pass filtering
unique(a) unique(a)
squeeze(a) asqueeze()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
97
9 BIBLIOGRAFIacuteA
DOWNEY A ELKNER J MEYERS C Aprenda a Pensar Como un Programador con Python GARCIacuteA-ASENJO VILLAMAYOR L HERNAacuteNDEZ LOacutePEZ D Geodesia Febrero 2005 GONZAacuteLEZ DUQUE R Python PARA TODOS Edicioacuten Internet bajo licencia Creative Commons Reconocimiento 25 Espantildea Descargable en httpmundogeeknettutorial-python MARZAL A GRACIA I Introduccioacuten a la programacioacuten con Python Departamento de Lenguajes y Sistemas Informaacuteticos Universitat Jaume I 2003 Edicioacuten Internet NUMPY COMMUNITY NumPy Reference Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg NUMPY COMMUNITY NumPy User Guide Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg VAN ROSSUM G Guiacutea de aprendizaje de PythonRelease 241ordf0 Edicioacuten Intenet Septiembre 2005 Descargable en httpwwwscipyorg VAN ROSSUM G El tutorial de Python Edicioacuten Intenet Descargable en httppythonorgarpyarTutorial
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
98
10 PAacuteGINAS WEB CONSULTADAS httpenfoquevirtualwordpresscomcategorytutorial httpgeektheplanetnet1347how-to-instalar-pydev-en-aptanaxhtml httpmundogeeknetarchivos20080328python-modulos-y-paquetes httpwwwthebitsourcecomprogramming-software-developmentpythonpython-application-development-aptana-pydev httpwwwyoutubecomwatchv=XtnfY2cBbMA youtube interesante trabajo con pydev y modulos httpcodingderkeilercomArchivePythoncomplangpython2005-08msg03511html paacutegina que explica coacutemo solucionar los problemas de Non-ASCII character httpeswikibooksorgwikiInmersiC3B3n_en_PythonSu_primer_programa_en_PythonDocumentado_de_funciones paacutegina que explica la cadena de documentacioacuten despueacutes de definir una funcioacuten con ldquordquordquo___rdquordquordquo (triples comillas) httpwwwpythonorgdevpepspep-0008 style guide for python code httpmundogeeknetarchivos20080707documentacion-en-python habla de la forma de documentar en python httpwwwpythonorgdevpepspep-0257 documentacioacuten y comentarios httpprogramandoideascomcomentarios-en-python documentacioacuten y comentarios httpwwwyoutubecomwatchv=v0sqRYuL5e8 tutorial de python con aptana httpwwwyoutubecomwatchv=29mq1Bn52GYampfeature=related youtube tutorial httpprojectsscipyorgnumpybrowsertrunknumpymatlibpyrev=8567 paacutegina que habla un poco de matrices
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
99
httpwwwgfceduco~arsranguias42p8guia42html cosas interesantes de matrices httpdocencia-euptunizaresctmedrascipy_tutorialscipy_tutorialhtml varios sobre python httpdocspythonorgtutorialmoduleshtml muy buena de paquetes etc httpwwwlinux-ittcom200804python-mdulos-y-paqueteshtml maacutes sobre paquetes httpwwwmclibreorgconsultarpythonotrosin03_idlehtmlccedil coding cp1252 httpwwwmclibreorgconsultarpython tutorial de python en la web Idle httpbioinfcomavupvescourseslinuxpythonmoduloshtml csv listasetc httpwwwdavidricardocommxp=1173 ok muy bueno importacioacuten csv como matriz httpwwwaprenderpythonorg httpwwwscipyorgNumpy_Example_List_With_Doc paacutegina muy importante de scipy httpjsbsanblogspotcom201101calculo-de-un-area-de-un-poligonohtml video sobre caacutelculo de areas de poliacutegonos irregulares httpmathesaurussourceforgenetmatlab-numpyhtml viprelacioacuten entre operaciones con octave y con python httpwwwscipyorgTentative_NumPy_Tutorial pagina importante de scipy httptecnologicumwordpresscomastronomiavideo-tutoriales-de-python todos los videotutoriales de python httpwwwyoutubecomwatchv=Oj3MZXWXGiUampfeature=related csv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
100
httptranslategoogleestranslatehl=esamplangpair=en7Cesampu=httpwwwscipyorgNumPy_for_Matlab_Users interesante sobre numpyhellip httpwikipythonorgmoinHowToSorting interesante de sort httpwikipythonorgmoinHowToSortingOperator_Module_Functions sort itemgetteretc httpcodeactivestatecomrecipes304440-sorting-dictionaries-by-value-in-python-24 operator itemgetter httpmundogeeknetarchivos20080402python-entrada-salida-ficheros entrada salida de archivos httpwwwgulicorgalmacenhttlaclwpchap11htm formato de escritura textos nuacutemeros y decimales httpwwwprogramacioncomarticuloguia_de_aprendizaje_de_python_657 formatos de salida httpnumpysourceforgenetnumdocHTMLnumdochtmpgfId-57315 muy importante sobre arraysetc httpwwwhjcbnlpythonArrayshtml muy importante sobre arraysetc httpwwwalecjacobsoncomweblogp=1570 cargar un txt como una matriz en python httpdocsscipyorgdocnumpyreferencegeneratednumpygenfromtxthtml getfromtxt de numpy httpwwwalegsaonlinecomart13php httpwwwumesdocenciabarzanaIAGPIagp3html httpwebusales~dhernandsoftwarehtmGeotop httpmailpythonorgpipermailtutor2008-March060886html From future import division
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
101
httpwwwyoutubecomwatchv=I6GMIQBD6EU youtube diccionarios httpmundogeeknetarchivos20080121python-tipos-basicos-ii-colecciones diccionarios httpstaffnotiaces~rcardeneshgdiveintopython3-esnative-datatypeshtml diccionarios httpwwwestrellateyardeorgdiscovermanual-python-lo-mas-basico diccionarios httpeswikibooksorgwikiInmersiC3B3n_en_PythonTipos_de_datos_nativosPresentaciC3B3n_de_los_diccionarios diccionarios httpdocspythonorgartutorialdatastructureshtmldiccionarios python estructura de diccionarios httpwwwwikilearningcomtutorialintroduccion_informal_a_matlab_y_octave-matrices_y_algebra_lineal_i19256-8 concatenar matrices httpwwwslidesharenetsantiagosilascomputao-cientfica-com-numpy-e-scipy-7797060 detalles de numpy vectores matricesetc httpwwwscipyorgNumPy_for_Matlab_Usershead-e9a492daa18afcd86e84e07cd2824a9b1b651935 muy importante de scipy arrays y matriceshellip httpdocsscipyorgdocnumpyreferencegeneratednumpyconcatenatehtml muy importante de scipy arrays y matriceshellip httppyspanishdocsourceforgenettut traduccioacuten del tutorial de Guido httpwwwscipyorgNumpy_Example_List_With_Dochead-5202db3259f69441c695ab0efc0cdf45341829fc httppyspanishdocsourceforgenetlibmodule-picklehtml funcioacuten pickle
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
102
httpnicocesarcomq=node23 carga de ficheros binarios httpstaffnotiaces~rcardeneshgdiveintopython3-esfileshtml apertura cierre carga de ficheros etc httppythonr2wordpresscom20080829leer-archivos-binarios-en-python lectura de ficheros binarios httpwwwignesignlayoutInherramientasdo descarga de ficheros regilla del IGN httpterrasitgvaeseskbtransformacion-coordenadas-utm-ed50-utm-etrs89-utilizando-libreria-proj4 paacutegina de la gva sobre cambio de sistema y fichero rejilla httpdocspythonorglibrarystructhtml moacutedulo struct de python para lectura de ficheros binarios httpwwwslidesharenetjpadillaaprogramacion-orientada-a-objetos-en-python programacioacuten orientada a objetos con python httppyspanishdocsourceforgenettutnode7html recorrer diccionarios httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 interesante aplicacioacuten fichero rejilla ntv2 en python
Resumen
Como Ingeniero Teacutecnico en Topografiacutea numerosas han sido las necesidades de disponer de herramientas informaacuteticas para los distintos caacutelculos necesarios desde la etapa de estudiante en la Universidad como una vez incurso en la vida laboral Desde el simple caacutelculo de un acimut y distancia entre dos puntos medidas de superficies encerradas en poliacutegonos irregulares datos de replanteo de puntos caacutelculo de previsioacuten de errores o las diferentes transformaciones de coordenadas de grandes cantidades de puntos entre unas proyecciones y otras y entre distintos Sistemas de Referencia Coordenados Partiendo de esta necesidad y de la existencia de la libreriacutea ldquoGeotoprdquo en Octave del Profesor y Co-tutor de este proyecto Dr D David Hernaacutendez Loacutepez se han elaborado una serie de herramientas en Python para caacutelculos geodeacutesicos y topograacuteficos en Python principalmente migrando del lenguaje Octave a lenguaje Python Ademaacutes del uso para caacutelculos topograacuteficos en aacutembitos del uso diario de ingenieros Teacutecnicos en Topografiacutea o cualquier Ingenieriacutea afiacuten esta libreriacutea tambieacuten se concibe como una herramienta de uso para el estudiante de estas disciplinas en las Universidades Al tratarse de software libre es perfectamente editable y adaptable a las necesidades de caacutelculo y presentacioacuten que se consideren oportunas La eleccioacuten de Python aunque posteriormente se desarrolle maacutes se debe a que se trata de un lenguaje de programacioacuten faacutecil de aprender potente y en auge Tiene eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de plataformas El inteacuterprete de Python y la extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables y se pueden distribuir libremente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
1
TABLA DE CONTENIDOS
1 OBJETIVOS DEL TRABAJO 3
2 CONTEXTO DEL PROYECTO 4
21 iquestPOR QUEacute SOFTWARE LIBRE 4
22 LENGUAJES DE PROGRAMACIOacuteN 7
23 PARADIGMAS DE PROGRAMACIOacuteN 8
24 iquestPOR QUEacute PYTHON 9
241 Caracteriacutesticas de Python 9
3 INSTRUMENTACIOacuteN Y SOFTWARE EMPLEADOS PHYTON 12
31 INTRODUCCIOacuteN A PYTHON 12
311 Guiacutea de aprendizaje de Python por Guido Van Rossum v24 16
3111 Llamar al inteacuterprete 17
3112 Moacutedulos 22
3113 El camino de buacutesqueda de moacutedulos 23
3114 Ficheros Python ldquoCompiladosrdquo 23
3115 Moacutedulos estandar 24
3116 Paquetes 24
3117 Importar de un paquete 27
3118 Referencias internas al paquete 28
32 FUNCIONES INCLUIDAS EN NUMPY POR CATEGORIacuteAS (ARRAY CREATION) 28
4 METODOLOGIacuteA 36
41 ESTRUCTURA DE LA LIBRERIacuteA GEOTOPO 36
42 DOCUMENTADO DE FUNCIONES 42
43 FUNCIONES IMPLEMENTADAS 47
431 Libreriacutea en Python ldquogeotopogeneralrdquo 47
432 Libreriacutea en Python ldquogeotopotopografiardquo 50
433 Libreriacutea en Python ldquogeotopogeodesiardquo 52
434 Libreriacutea en Python ldquogeotopoproy_cartograficasrdquo 60
435 Libreriacutea en Python ldquogeotopotransformacionrdquo 70
5 APLICABILIDAD DE LA LIBRERIacuteA Y CONCLUSIONES FINALES 73
51 CASOS PRAacuteCTICOS TOPOGRAFIacuteA 77
511 Implementacioacuten del coacutedigo topo_praacutectica1 77
512 Impresioacuten del fichero de salida de resultados topo_praacutectica1 81
513 Salida de resultados topo_praacutectica2 81
514 Salida de resultados topo_praacutectica3 82
515 Salida de resultados topo_praacutectica4 83
52 CASOS PRAacuteCTICOS GEODESIA 83
521 Implementacioacuten del coacutedigo geo_praacutectica1 84
522 Impresioacuten del fichero de salida de resultados geo_praacutectica1 86
523 Salida de resultados geo_praacutectica2 87
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
2
524 Salida de resultados geo_praacutectica3 88
525 Salida de resultados geo_praacutectica4 89
526 Salida de resultados geo_praacutectica5 90
6 CONCLUSIONES FINALES 91
7 LIacuteNEAS FUTURAS DE ACTUACIOacuteN 92
8 ANEJO 93
81 EQUIVALENCIAS ENTRE FUNCIONES EN MATLAB Y PYTHON 93
9 BIBLIOGRAFIacuteA 97
10 PAacuteGINAS WEB CONSULTADAS 98
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
3
1 OBJETIVOS DEL TRABAJO Dentro del marco general de la guiacutea docente del Maacutester en Geotecnoloacutegias Cartograacuteficas en Ingenieriacutea y Arquitectura impartido por la Escuela Politeacutecnica Superior de Aacutevila de la Universidad de Salamanca se establece como requisito para la obtencioacuten de esta titulacioacuten la realizacioacuten de un proyecto final de maacutester A tal fin responde el presente trabajo en el que se ha optado por la realizacioacuten de un proyecto de desarrollo de herramientas en Python para caacutelculos geodeacutesicos y topograacuteficos Como Ingeniero Teacutecnico en Topografiacutea numerosas han sido las necesidades de disponer de herramientas informaacuteticas para los distintos caacutelculos necesarios desde la etapa de estudiante en la Universidad como una vez incurso en la vida laboral Desde el simple caacutelculo de un acimut y distancia entre dos puntos medidas de superficies encerradas en poliacutegonos irregulares datos de replanteo de puntos caacutelculo de previsioacuten de errores o las diferentes transformaciones de coordenadas de grandes cantidades de puntos entre unas proyecciones y otras y entre distintos Sistemas de Referencia Coordenados Partiendo de esta necesidad y de la existencia de la libreriacutea ldquoGeotoprdquo en Octave del Profesor y Co-tutor de este proyecto Dr D David Hernaacutendez Loacutepez se han elaborado una serie de herramientas en Python para caacutelculos geodeacutesicos y topograacuteficos en Python principalmente migrando del lenguaje Octave a lenguaje Python Ademaacutes del uso para caacutelculos topograacuteficos en aacutembitos del uso diario de ingenieros Teacutecnicos en Topografiacutea o cualquier Ingenieriacutea afiacuten esta libreriacutea tambieacuten se concibe como una herramienta de uso para el estudiante de estas disciplinas en las Universidades Al tratarse de software libre es perfectamente editable y adaptable a las necesidades de caacutelculo y presentacioacuten que se consideren oportunas La eleccioacuten de Python aunque posteriormente se desarrolle maacutes se debe a que se trata de un lenguaje de programacioacuten faacutecil de aprender y potente Tiene eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de plataformas El inteacuterprete de Python y la extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables y se pueden distribuir libremente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
4
2 CONTEXTO DEL PROYECTO Dentro de los objetivos de este proyecto se encuentra el aprendizaje y desarrollo de herramientas con software libre y tambieacuten la eleccioacuten de Python al tratarse de un lenguaje de programacioacuten que aunque parece novedoso esta encontrando gran aceptacioacuten en entornos docentes y tambieacuten en el desarrollo de programacioacuten en la empresa privada
21 iquestPOR QUEacute SOFTWARE LIBRE Muchiacutesimos gobiernos de todo el mundo estaacuten empezando a ver al software libre como una poderosa herramienta para disminuir sus costos de administracioacuten reducir la dependencia tecnoloacutegica y fomentar sus industrias locales de software Las razones principales que impulsan la migracioacuten de los sistemas de informacioacuten de las administraciones puacuteblicas al software libre son
Ahorro econoacutemico El bajo o nulo coste de los productos libres permiten a las PYMES servicios y ampliar sus infraestructuras sin que se vean mermados sus intentos de crecimiento por no poder hacer frente al pago de cantidades en licencias
Independencia tecnoloacutegica mayor transparencia aumento de la interoperabilidad permite auditar el coacutedigo fuente etc El secretismo tenoloacutegico es uno de los grandes frenos y desequilibrios existentes para el desarrollo en el modelo de propiedad intelectual
Fomenta el desarrollo local y la industria nacional de software La praacutectica totalidad de los concursos para desarrollo de software para la administracioacuten puacuteblica pasan por compatibilizar con productos de la factoriacutea de Microsoft por lo que garantiza la perpetuacioacuten e ingresos hacia Microsoft y no favorece a las empresas locales que pudieran ofrecer productos equivalentes Ademaacutes de la reduccioacuten de costes por uso de software libre iquestqueacute podriacutean aportar esas inversiones si los beneficiados fuesen empresas del propio estado en lugar de mandar a una compantildeiacutea extranjera esas enormes cantidades de dinero
Facilita la adaptacioacuten a las necesidades concretas de las administraciones en materia linguumliacutestica legislativa de accesibilidad e imagen
El conocimiento generado es puacuteblico Fomento de la libre competencia al basarse en servicios y no licencias
Uno de los modelos de negocio que genera el software libre es la contratacioacuten de servicios de atencioacuten al cliente Este sistema permite que las compantildeiacuteas que den el servicio compitan en igualdad de condiciones a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
5
no poseer la propiedad del producto del cual dan el servicio
Tratamiento seguro de los datos y la informacioacuten Formatos estaacutendar Los formatos estaacutendar permiten una
interoperatividad maacutes alta entre sistemas evitando incompatibilidades Los estaacutendares de facto son vaacutelidos en ocasiones para lograr una alta interoperatividad si se omite el hecho que estos exigen el pago de royalities a terceros y por razones de mercado no interesa que se perpetuacuteen mucho tiempo
Sistemas sin puertas traseras y maacutes seguros El acceso al coacutedigo fuente permite que tanto hackers como empresas de seguridad de todo el mundo puedan auditar los programas por lo que la existencia de puertas traseras es iloacutegica ya que se pondriacutea en evidencia y contraviene el intereacutes de la comunidad que es la que lo genera
Correccioacuten maacutes raacutepida y eficiente de fallos El funcionamiento e intereacutes conjunto de la comunidad ha demostrado solucionar maacutes raacutepidamente los fallos de seguridad en el software libre algo que desgraciadamente en el software propietario es maacutes difiacutecil y costoso
Meacutetodos simples y unificados de gestioacuten de software Actualmente la mayoriacutea de distribuciones de linux incorporan alguno de los sistemas que unifican el meacutetodo de instalacioacuten de programas libreriacuteas etc Por parte de los usuarios Asiacute se permite el acceso a las miles de aplicaciones existentes de forma segura y gratuita a la par que evitan tener que recurrir a paacuteginas web de dudosa eacutetica desde las que los usuarios instalan sin saberlo spyware o virus informaacuteticos en sus sistemas Este sistema de acceso y gestioacuten del software se hace praacutecticamente utoacutepico si se extrapola al mercado propietario
Sistema en expansioacuten El software libre ya no es una promesa es una realidad y se utiliza en sitemas de produccioacuten por algunas de las empresas tecnoloacutegicas maacutes importantes como IBM Sun Microsystems Google Hewlett-Packard etc Paradoacutejicamente incluso Microsoft que posee sus propias herramientas emplea GNU Linux en muchos de sus servidores
Entre los paiacuteses maacutes adeptos al software libre sus desarrollos y alcance de sus
proyectos de migracioacuten se encuentran de la siguiente manera ALEMANIA Alemania es el paiacutes con mayor uso del software libre del mundo No
soacutelo estaacute presente en todas sus dependencias gubernamentales y universidades sino que tiene programas multimillonarios para el desarrollo de aplicaciones libres En 2009 destinoacute maacutes de 500 millones de Euros al proyecto ldquoOpen Source and Green ITrdquo El software libre es tan importante para los alemanes que incluso el 59 de sus empresas lo utiliza el argumento maacutes utilizado no es la reduccioacuten de costos sino la posibilidad de poder modificar el coacutedigo fuente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
6
BRASIL Fue el primer paiacutes en migrar masivamente sus sistemas de informacioacuten a alternativas open source Se llevoacute a cabo en primera instancia en el estado de Riacuteo Grande luego se realizoacute a escala nacional
ARGENTINA Existen varias iniciativas estatales que apuntan a fomentar el desarrollo de software libre Actualmente el software libre estaacute implementado en algunas provincias siendo Santa Fe el maacuteximo exponente de utilizacioacuten doacutende todo el software ha sido liberado bajo licencia GPL
FRANCIA La Asamblea Nacional utiliza software libre en todos sus sistemas y terminales de trabajo Francia viene tomando impulso en el desarrollo de software open source existen iniciativas para que el 20 del software contratado por la Administracioacuten Puacuteblica sea libre para el 2012 tambieacuten ofrece beneficios fiscales para las agrupaciones de usuarios y desarrolladores de SL
ESPANtildeA Espantildea se ha apostado como uno de los mayores impulsores mundiales del uso de software libre Actualmente existen 200 empresas proveedoras de soluciones 100 comunidades de usuarios y 180 centros educativos donde el software de coacutedigo abierto es una realidad cotidiana Muchos ayuntamientos y universidades ya se pasaron a sistemas open source
A principios de 2010 se presentoacute un proyecto liderado por la Plataforma Tecnoloacutegica Espantildeola de Software y Servicios con el apoyo del Plan Avanza Dicho plan pretende colocar a Espantildea a la par del resto de Europa en el disentildeo y uso de software libre de confianza y calidad similares a los comerciales Este proyecto llamado Vulcano trata de unificar el trabajo de distintas universidades centros tecnoloacutegicos y empresas que hasta el momento habiacutean dedicado sus esfuerzos al aacutembito de la educacioacuten
En un entrevista ofrecida por David Saacutenchez Director de Comunicacioacuten y Relaciones Instituciones en CENATIC que es el Centro Nacional de Referencia de Aplicacioacuten de las Tecnologiacuteas de la informacioacuten y la Comunicacioacuten basadas en Fuentes Abiertas podemos encontrar httpwwwmuylinuxcom20110407entrevistamos-a-david-sanchez-de-cenatic
CENATIC es una Fundacioacuten Puacuteblica Estatal del gobierno de Espantildea promovida por el Ministerio de Industria Turismo y Comercio y la Junta de Extremadura que ademaacutes cuenta en su patronato con las comunidades autoacutenomas de Andaluciacutea Aragoacuten Asturias Cantabria Cataluntildea Islas Balares Paiacutes Vasco y Galicia asiacute como las empresas Atos Origin Telefoacutenica y Grupo Aacutepex
Su trabajo es promover el conocimiento y uso del software libre en todos los aacutembitos de la sociedad con especial atencioacuten en las administraciones puacuteblicas las empresas el sector tecnoloacutegico proveedor o usuario de tecnologiacuteas libres y las comunidades de desarrollo a traveacutes de proyectos especiacuteficos para cada uno de estos sectores
ldquo La apuesta a del Administracioacuten del Estado por el software libre se inicioacute ya en los 90 cuando el entonces ministerio para las Administraciones Puacuteblicas llevoacute a cabo la primera gran migracioacuten a software libre de 1375 servidores Llegaron tambieacuten proyectos como el del Principado de Asturias para generar de forma colaborativa un
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
7
marco basado en software libre que permitioacute crear cluacutester de empresas locales capaces de aportar servicios de eAdministracion que de otra manera tendriacutean que haber contratado fuera de su comunidadrdquo
ldquo O el proyecto de gvSIG de la Conselleriacutea d‟Infrestructures i Transport de la Generalitat Valenciana un sistema de informacioacuten geograacutefico que cuenta con un tejido empresarial local alrededor del proyecto y estaacuten haciendo de la Comunidad Valenciana el nuacutecleo maacutes activo a nivel mundial de desarrollo GIS en entornos libres Tambieacuten es muy conocido el proyecto de Red Tecnoloacutegica Educativa de la Junta de Extremadura con Linex como primera distribucioacuten regional y concepto pionero adoptado ya por 7 comunidades autoacutenomasrdquo ldquoFinalmente a nivel de administracioacuten local hasta el 80 de los grandes ayuntamientos cuentan hoy en diacutea con proyectos de software libre siendo quizaacute el maacutes destacado el del Ayuntamiento de Zaragozardquo
22 LENGUAJES DE PROGRAMACIOacuteN Un lenguaje de programacioacuten es un lenguaje artificial que puede ser usado para controlar el comportamiento de una maacutequina especialmente una computadora Estos se componen de un conjunto de reglas sintaacutecticas y semaacutenticas que permiten expresar instrucciones que luego seraacuten interpretadas Debe distinguirse de ldquolenguaje informaacuteticordquo que es una definicioacuten maacutes amplia puesto que estos incluyen otros lenguajes como son el HTML o PDF que dan formato a un texto y no es programacioacuten en siacute misma El programador es el encargado de utilizar un lenguaje de programacioacuten para crear un conjunto de instrucciones que al final constituiraacute un programa o subprograma informaacutetico En su uso un lenguaje de programacioacuten puede acercarse a la forma humana de expresarse y por eso este tipo de lenguajes es llamado de alto nivel Esto significa que utilizan palabras y formas en sus estructuras que se asemejan al lenguaje natural (especialmente al ingleacutes) En cambio aquellos lenguajes que se aproximan maacutes a la forma en la cual la computadora se maneja son llamados lenguajes de bajo nivel Esto significa que lo que el programador deba escribir se acercaraacute al lenguaje maacutequina que es en definitiva lo que las computadoras pueden interpretar De todas maneras un lenguaje de programacioacuten difiere en muchos aspectos de un lenguaje humano Un coacutedigo escrito en un lenguaje de programacioacuten especiacutefico siempre se interpreta de la misma manera (no como los idiomas humanos ambiguos) los errores son mucho maacutes significativos (a tal punto de que un coacutedigo puede volverse ininterpretable por la computadora) etc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
8
El coacutedigo fuente es el conjunto de instrucciones que conforman un programa (o subprograma o moacutedulo) El coacutedigo fuente debe ser compilado para poder ser interpretado y ejecutado por la computadora La compilacioacuten traduce el coacutedigo fuente (que depende del lenguaje de programacioacuten) a un lenguaje maacutequina (que depende del sistema de la maacutequina) Existen lenguajes del tipo script que son directamente ejecutados por un inteacuterprete y no necesitan compilacioacuten Los lenguajes de programacioacuten pueden clasificarse empleando distintos meacutetodos y puntos de vista Esta clasificacioacuten se basa en el paradigma que utilizan Se debe aclarar que existen muchos maacutes paradigmas y subparadigmas de programacioacuten no incluidos dentro de los mencionados Ademaacutes todaviacutea hay conflictos en las definiciones y alcances de ciertos paradigmas
23 PARADIGMAS DE PROGRAMACIOacuteN Un paradigma de programacioacuten provee (y determina) la visioacuten y meacutetodos de un programador en la construccioacuten de un programa o subprograma Diferentes paradigmas resultan en diferentes estilos de programacioacuten y en diferentes formas de pensar la solucioacuten de problemas (con la solucioacuten de muacuteltiples ldquoproblemasrdquo se construye una aplicacioacuten) Los lenguajes de programacioacuten son basados en uno o maacutes paradigmas (Veacutease Programacioacuten en muacuteltiples paradigmas) Por ejemplo Smalltalk y Java son lenguajes basados en el paradigma orientado a objetos El lenguaje de programacioacuten Scheme en cambio soporta soacutelo programacioacuten funcional En cambio Python soporta muacuteltiples paradigmas Clasificacioacuten por paradigmas de programacioacuten Paradigma Imperativo describe la programacioacuten como una secuencia instrucciones o comandos que cambian el estado de un programa El coacutedigo maacutequina en general estaacute basado en el paradigma imperativo Su contrario es el paradigma declarativo En este paradigma se incluye el paradigma procedimental (procedural) entre otros Paradigma Declarativo No se basa en el coacutemo se hace algo (coacutemo se logra un objetivo paso a paso) sino que describe (declara) coacutemo es algo En otras palabras se enfoca en describir las propiedades de la solucioacuten buscada dejando indeterminado el algoritmo (conjunto de instrucciones) usado para encontrar esa solucioacuten Es maacutes complicado de implementar que el paradigma imperativo tiene desventajas en la eficiencia pero ventajas en la solucioacuten de determinados problemas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
9
Paradigma Estructurado la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Ademaacutes la programacioacuten se controla con secuencia seleccioacuten e iteracioacuten Permite reutilizar coacutedigo programado y otorga una mejor compresioacuten de la programacioacuten Es contrario al paradigma inestructurado de poco uso que no tiene ninguna estructura es simplemente un ldquobloquerdquo como por ejemplo los archivos batch (bat) Paradigma Orientado a Objetos estaacute basado en la idea de encapsular estado y operaciones en objetos En general la programacioacuten se resuelve comunicando dichos objetos a traveacutes de mensajes (programacioacuten orientada a mensajes) Se puede incluir -aunque no formalmente- dentro de este paradigma el paradigma basado en objetos que ademaacutes posee herencia y subtipos entre objetos Ej Simula Smalltalk C++ Java Visual Basic NET etc Su principal ventaja es la reutilizacioacuten de coacutedigos y su facilidad para pensar soluciones a determinados problemas Paradigma Funcional este paradigma concibe a la computacioacuten como la evaluacioacuten de funciones matemaacuteticas y evita declarar y cambiar datos En otras palabras hace hincapieacute en la aplicacioacuten de las funciones y composicioacuten entre ellas maacutes que en los cambios de estados y la ejecucioacuten secuencial de comandos (como lo hace el paradigma procedimental) Permite resolver ciertos problemas de forma elegante y los lenguajes puramente funcionales evitan los efectos secundarios comunes en otro tipo de programaciones Paradigma loacutegico se basa en la definicioacuten de reglas loacutegicas para luego a traveacutes de un motor de inferencias loacutegicas responder preguntas planteadas al sistema y asiacute resolver los problemas Ej prolog Otros paradigmas y subparadigmas son paradigma orientado al sujeto paradigma heuriacutestico paradigma reflectante programacioacuten basada en reglas paradigma basado en restricciones programacioacuten basada en prototipos etc
24 iquestPOR QUEacute PYTHON
241 Caracteriacutesticas de Python
Python es un lenguaje de programacioacuten de tipo script creado por Guido van Rossum a principios de los antildeos 90 cuyo nombre proviene del grupo ldquoMonty Pythonrdquo El objetivo es un lenguaje con una sintaxis muy limpia y con un coacutedigo legible Python es un lenguaje de programacioacuten multiparadigma Esto significa que maacutes que forzar a los programadores a adoptar un estilo particular de programacioacuten permite varios estilos programacioacuten orientada a objetos programacioacuten imperativa funcional estructurada
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
10
etc Otros paradigmas estaacuten soportados mediante el uso de extensiones Los lenguajes de script (lenguajes interpretados de muy alto nivel como Perl y Python) gozan de creciente importancia e implantacioacuten en el mundo del software libre Python es un lenguaje de programacioacuten faacutecil de aprender y potente Dispone de eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos simple pero eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de las plataformas En Python no hay terminadores de sentencia (como el punto y como de CC++Java) ni marcas de iniciofin de bloque (como las llaves de esos mismos lenguajes) La indentacioacuten como forma de marcar bloques elimina errores propios de los lenguajes citados y que son frecuentes en los estudiantes y tambieacuten en los programadores profesionales sentencias condicionales sin accioacuten por antildeadir un punto y coma incorrectos bucles con una sola sentencia cuando parece que hay dos o maacutes (por omisioacuten de llaves con un sangrado inadecuado del programa) sentencias con semaacutentica ldquoalteradardquo por usar una coma cuando corresponde un punto y coma o por omitir un punto y coma al declarar un registro antes de una funcioacuten etc La indentacioacuten soacutelo resulta molesta cuando el tamantildeo de un bloque de cierta profundidad excede del tamantildeo de la ventana del editor Python es un lenguaje interpretado Los lenguajes interpretados permiten ciclos de desarrollo breves (edicioacuten y ejecucioacuten) que animan a los estudiantes a experimentar Python dispone de un entorno de ejecucioacuten que ayuda a detectar los errores (incluyendo aquellos que soacutelo se manifiestan en ejecucioacuten) sentildealaacutendolos con mensajes muy informativos Python ofrece ademaacutes un entorno interactivo con el que es posible efectuar pequentildeas pruebas o disentildear incrementalmente las soluciones a los problemas La contrapartida de que se trate de un lenguaje interpretado es obviamente la menor velocidad de ejecucioacuten Python puede considerarse pseudocoacutedigo ejecutable Es muy expresivo y su sintaxis sencilla interfiere poco en la implementacioacuten de algoritmos asiacute que resulta un buen sustituto del pseudocoacutedigo con la ventaja de que los algoritmos codificados en Python siacute son ejecutables Python ofrece un rico conjunto de estructuras de datos flexibles El tipo lista de python (un vector dinaacutemico heterogeacuteneo) permite introducir con naturalidad el concepto de secuencia y presentar los algoritmos baacutesicos de manejo de secuencias Que la indexacioacuten empiece siempre en 0 ayuda a dar el salto a C C++ o Java El entorno de ejecucioacuten proporciona comprobacioacuten de validez de los iacutendices eliminando asiacute una de las principales fuentes de problemas de C y C++ El hecho de que las listas sean
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
11
redimensionables elimina al programador la necesidad de tomar decisiones acerca de la longitud maacutexima de los vectores demasiado pronto Por otra parte Python es un lenguaje muy ortogonal una vez se ha aprendido a manejar listas por ejemplo se sabe manejar cadenas ya que ambos tipos son secuenciales y presentan conjuntos de operadores con igual nombre y semaacutentica Ademaacutes de listas y cadenas Python ofrece tuplas (listas inmutables) y diccionarios (vectores asociativos) Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc No es que haya que presentar todos los moacutedulos pero sirve para ayudar a consultar la documentacioacuten de las bibliotecas disponibles favorece la programacioacuten eficiente
Python es orientado a objetos A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulos en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar al de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
El inteacuterprete de Python y su extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables para las plataformas maacutes importantes en la sede web de Python httppythonorg y se pueden distribuir libremente La misma sede contiene tambieacuten distribuciones y direcciones de muchos moacutedulos programas y herramientas Python de terceras partes ademaacutes de documentacioacuten adicional Es faacutecil ampliar el inteacuterprete de Python con nuevas funciones y tipos de datos implementados en C o C++ (u otros lenguajes a los que se pueda acceder desde C) Python es tambieacuten adecuado como lenguaje de extensioacuten para aplicaciones adaptables al usuario Algunas de las empresas que usan Python son Google Yahoo Industrial Light amp Magic Walt Disney NASA SGI Inc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
12
3 INSTRUMENTACIOacuteN Y SOFTWARE EMPLEADOS PHYTON
31 INTRODUCCIOacuteN A PYTHON Como se comentoacute en el punto anterior Python
es orientado a objetos (realmente es multiparadigma aceptando distintos tipos de paradigmas) A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulo en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar a l de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc
Entre estas bibliotecas cabe mencionar Numpy Numpy es un moacutedulo de Python escrito en C que define los vectores numeacutericos las matrices y las operaciones entre ellos Ademaacutes de las funciones sobre vectores y matrices tambieacuten incluye funciones trigonomeacutetricas del tipo sin cos tan etc Numpy es el paquete fundamental necesario para programacioacuten cientiacutefica con Python Contiene entre otras cosa
Un poderoso N-dimensional objeto vector Sofisticadas funciones Herramientas para integracioacuten con coacutedigo de C C++ y Fortram Uacutetiles de algebra lineal Transformada de Fourier y capacidades de
nuacutemeros aleatorios Ademaacutes de sus usos cientiacuteficos obvios NumPy tambieacuten se puede utilizar como un eficiente multi-dimensional contenedor de datos geneacutericos Pueden ser definidos tipos arbitrarios de datos Esto permite integrar a la perfeccioacuten y raacutepidamente con una amplia variedad de bases de datos El objeto principal de Numpy es el vector homogeacuteneo multidimensional Eacuteste es una tabla de elementos (generalmente nuacutemeros) todos del mismo tipo indexados por una tupla de enteros positivos Por ldquomultidimensionalrdquo entendemos que los vectores pueden tener varias dimensiones de ejes El nuacutemero de ejes se llamaraacuten a menudo ldquorangordquo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
13
Por ejemplo las coordenadas de un punto en el espacio 3D seriacutea [1 2 1] que
representariacutea un vector de rango 1 de longitud 3 Otro ejemplo seriacutea
[[ 1 0 0]
[ 0 1 2]]
que representa un array de rango 2 (2 dimensiones) Para maacutes informacioacuten mirar
Numpy Glossary
Otras libreriacuteas importantes en Python son Scipy es otra libreriacutea que usa Numpy El desarrollo de Scipy comenzoacute en el antildeo 2001 Sus oriacutegenes se remontan al paquete con extensiones numeacutericas para Python denominado Numeric Posteriormente aparecioacute Numarray con la intencioacuten de construir un paquete maacutes flexible y de limpiar el coacutedigo aunque resultoacute ser maacutes lengo para caacutelculos matriciales en pocas dimensiones En el antildeo 2005 el principal impulsor de Scipy Travis Oliphant reunificoacute ambos en un uacutenico paquete que integrse las ventajas de ambos y se denominoacute Numpy considerado el nuacutecleo de Scipy Scipy en siacute mismo se concibe actualmente como una extensioacuten de las funcionalidades de Numpy
Scipy posee moacutedulos para optimizacioacuten de funciones integracioacuten funciones especiales resolucioacuten de ecuaciones diferenciales ordinarias y otros muchos aspectos
Puede ser usado con Linux Windows y ha sido tambieacuten compilado para Sun y Mac
Scipy es un proyecto de software libre que ha sido patrocinado por una compantildeiacutea Enthought inc
Su organizacioacuten se estructura en subpaquetes que se pueden considerar especializados en dominios cientiacuteficos determinados Podemos encontrar estos paquetes seguacuten la ayuda de scipy (v046)
stats -- Statistical Functions sparse -- Sparse matrix lib -- Python wrappers to external libraries linalg -- Linear algebra routines signal -- Signal Processing Tools misc -- Various utilities that dont have another home interpolate -- Interpolation Tools [] optimize -- Optimization Tools [] cluster -- Vector Quantization Kmeans [] fftpack -- Discrete Fourier Transform algorithms []
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
14
io -- Data input and output [] maxentropy -- Routines for fitting maximum entropy models [] integrate -- Integration routines [] liblapack -- Wrappers to LAPACK library [] special -- Special Functions [] libblas -- Wrappers to BLAS library []
Matplotlib es una libreriacutea de Python que facilita la publicacioacuten de calidad de la publicacioacuten interactiva Permite obtener graacuteficas de calidad para publicaciones Su principal submoacutedulo para dibujar es pyplot Mayavi Ipython PIL (Python Imaging Library) Pythonxy EPD (Enthought python distribution $$) hellip Este texto como Memoria de un Proyecto Final de Maacutester no pretende ser ni mucho menos un manual de Python pero siacute son necesarios unos conocimientos previos primero para comprender la filosofiacutea del programador y posteriormente saber las utilidades que podemos obtener al trabajar con Python Para ello vamos a incluir algunos detalles incluidos entro de la Guiacutea de aprendizaje de Python por Guido Van Rossum v24 creador de Python Para la realizacioacuten de este documento se ha consultado como aparece en Bibliografiacutea y Referencias en la Web numerosa documentacioacuten pero como punto de partida parece loacutegico recoger la documentacioacuten de la Guiacutea de aprendizaje del propio creador de Python Python contiene una serie de palabras clave dependientes de la versioacuten de instalacioacuten para asegurarnos de las palabras clave de la versioacuten descargada podemos introducir el siguiente coacutedigo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
15
Palabras clave de Python De la misma manera Python trae consigo ciertas funciones que vienen de serie esto es no es necesario cargarlas desde ninguacuten moacutedulo Dichas funciones dependen de la versioacuten de Python instalada En la paacutegina httpdocspythonorglibraryfunctionshtml Nos encontramos con dicha relacioacuten A modo de resumen eacutestas son (ver paacutegina siguiente)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
16
Funciones internas de Python
311 Guiacutea de aprendizaje de Python por Guido Van Rossum v24
Extractos del documento Si en alguna ocasioacuten hemos escrito un guioacuten para un inteacuterprete de oacuterdenes (o shell script) de UNIX largo puede que hayamos sentido que nos encantariacutea antildeadir una caracteriacutestica maacutes pero ya es tan lento tan grande tan complicadohellip O la caracteriacutestica involucra una llamada al sistema u otra funcioacuten accesible soacutelo desde C El problema en siacute no suele ser tan complejo como para transformar el guioacuten en un programa en C Igual el programa requiere cadenas de longitud variable u otros tipos de datos (como listas ordenadas de nombres de fichero) faacuteciles en sh pero tediosas en C o quizaacute no tengamos tanta soltura con C Otra situacioacuten Quizaacute tengas que trabajar con bibliotecas de C diversas y el ciclo normal en C de escribir-compilar-probar-recompilar es demasiado lento Necesitas desarrollar software con maacutes velocidad Posiblemente has escrito un programa al que vendriacutea bien un lenguaje de extensioacuten y no quieres disentildear un lenguaje escribir y depurar el inteacuterprete y adosarlo a la aplicacioacuten En tales casos Python puede ser el lenguaje que necesitas Python es simple pero es un lenguaje de programacioacuten real Ofrece maacutes apoyo e infraestructura para programas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
17
grandes que el inteacuterprete de oacuterdenes Por otra parte tambieacuten ofrece mucho maacutes comprobacioacuten de errores que C y al ser un lenguaje de muy alto nivel tiene incluidos tipos de datos de alto nivel como matrices flexibles y diccionarios que llevariacutean diacuteas de programacioacuten en C Dados sus tipos de datos maacutes generales se puede aplicar a un rango de problemas maacutes amplio que Awk o incluso Perl pero muchas cosas son al menos igual de faacuteciles en Python que en esos lenguajes Python te permite dividir su programa en moacutedulos reutilizables desde otros programas en Python Viene con una gran coleccioacuten de moacutedulos estaacutendar que puedes utilizar como base de tus programas (o como ejemplos para empezar a aprender Python) Tambieacuten hay moacutedulos incluidos que proporcionan ES de ficheros llamadas al sistema ldquosocketsrdquo y hasta interfaces graacuteficas con el usuario como Tk Python es un lenguaje interpretado lo que ahorra un tiempo considerable en el desarrollo del programa pues no es necesario compilar ni enlazar El inteacuterprete se puede utilizar de modo interacivo lo que facilita experimentar con caracteriacutesticas del lenguaje escribir programas desechables o probar funciones durante el desarrrollo del prgram de la base hacia arriba Tambieacuten es una calculadora muy uacutetil Python permite escribir programas muy compactos y legibles Los programas escritos en Python son normalmente mucho maacutes cortos que sus equivalentes en C o C++ por varios motivos
Los tipos de datos de alto nivel permiten expresar operaciones complejas en una sola sentencia
El agrupamiento de sentencias se realiza mediante sangrado (indentacioacuten) en lugar de beginend o llaves
No es necesario declarar los argumentos ni las variables
Python es ampliable si ya sabes programar en C es faacutecil antildeadir una nueva funcioacuten o moacutedulo al inteacuterprete para realizar operaciones criacuteticas a la maacutexima velocidad o para enlazar programas en Python con bibliotecas que soacutelo estaacuten disponibles en forma binaria (como bibliotecas de graacuteficos especiacuteficas del fabricante) Una vez enganchado puedes enlazar el inteacuterprete de Python a una aplicacioacuten escrita en C y utilizarlo como lenguaje de macros para dicha aplicacioacuten
3111 Llamar al inteacuterprete
En UNIX el inteacuterprete de Python se suele instalar como bdquousrlocalbinpython‟ en aquellas maacutequinas donde esteacute disponible En Windows se instala en el directorio bdquoArchivos de programa‟ o en cualquier otro directorio seleccionado Poner este directorio en la ruta de ejecutables hace posible arrancarlo tecleando en el inteacuterprete de oacuterdenes la orden
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
18
Python
Como la eleccioacuten del directorio donde reside el inteacuterprete es una opcioacuten de instalacioacuten es posible que se halle en otros lugares Consulta con tu guru de Python local o tu administrador de sistemas (por ejemplo bdquousrlocalpython‟ es una alternativa recuente) Teclear un caraacutecter fin de fichero (Control-D en UNIX Control-Z en DOS o Windows) en el inteacuterprete causa la salida del inteacuterprete con un estado cero Si eso no funciona se puede salir del inteacuterprete tecleando las siguientes oacuterdenes bdquoimport sys sysexit()‟ Las opciones de edicioacuten de la liacutenea de oacuterdenes no son muy destacables En UNIX es posible que quien instalara el inteacuterprete en su sistema incluyera soporte para la biblioteca de GNU bdquoreadline‟ que permite una edicioacuten de liacutenea maacutes elaborada y la recuperacioacuten de oacuterdenes anteriores El modo maacutes raacutepido de ver si hay soporte de edicioacuten de liacuteneas es teclear Control-P en cuanto aparece el inteacuterprete Si pita la edicioacuten de liacuteneas estaacute disponible Si no sale nada o sale ^P no estaacute disponible la edicioacuten de liacuteneas y soacutelo se puede utilizar la tecla de borrado para borrar el uacuteltimo caraacutecter tecleado El inteacuterprete funciona como el inteacuterprete de oacuterdenes de UNIX cuando se lo llama con la entrada estaacutendar conectada a un dispositivo tty lee y ejecuta las oacuterdenes interactivamente cuando se le da un nombre de fichero como argumento o se le da un fichero como entrada estaacutendar lee y ejecuta un guion desde ese fichero Otro modo de arrancar el inteacuterprete es bdquopython -c orden [argumento] ‟ que ejecuta las sentencias de orden de forma anaacuteloga a la opcioacuten -c de la liacutenea de oacuterdenes Como las sentencias de Python suelen contener espacios u otros caracteres que la liacutenea de oacuterdenes considera especiales lo mejor es encerrar orden entre dobles comillas por completo
Imagen de la pantalla al abrir Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
19
Hay moacutedulos de Python que son uacutetiles como programas independientes Se los puede llamar mediante ldquopython-m moacutedulo[arg] helliprdquo que ejecuta el fichero de coacutedigo fuente de module como si se hubiera dado el nombre completo en la liacutenea de oacuterdenes Cuando se leen oacuterdenes desde una tty se dice que el inteacuterprete estaacute en modo interacitov En este modo espera a la siguiente orden con el indicador principal que suele ser tras signos ldquomayorrdquo (ldquogtgtgtrdquo) Para las liacuteneas adicionales se utiliza el indicador secundario por omisioacuten tres puntos (ldquohelliprdquo)
Programar en Python puede hacerse de varias maneras seguacuten la necesidad o el gusto de cada persona Para los neoacutefitos mi recomendacioacuten es que utilicen el ambiente graacutefico interactivo llamado IDLE Esta herramienta viene incluiacuteda con el moacutedulo tkinter Ademaacutes de resaltar la sintaxis en colores permite editar archivos fuente y es maacutes amigable al inicio
El IDLE tiene dos ambientes el shell interactivo con tiacutetulo Python Shell en su ventana muestra el prompt gtgtgt y espera un comando y uno o maacutes editores que se abren con el menuacute File --gt New Window Cada editor empieza con el tiacutetulo Untitled en su ventana el cual cambia hasta que se salva a un archivo con File --gt Save As (y subsecuentemente File --gt Save) Cada editor nos permite ejecutar el coacutedigo Python que contiene
Se recomienda crear una carpeta para realizar y guardar los ejemplos Para correr idle cambiar primero a esa carpeta y entonces correr idle En MS- Windows
Cejemplosgt Cpython22idleidle
En Linux
[usuariopc ejemplos]$ idle amp La primera vez que hacemos un ejemplo hemos de intentar hacerlo paso a paso en forma interactiva en el shell tecleando cada comando Es la forma en que aprendemos maacutes que si simplemente copiamos y pegamos Una vez que tecleamos y funcionan las cosas podemos copiar del shell interactivo y pegamos a una ventana de editor y salvamos en un archivo con terminacioacuten py para que conservemos lo que hicimos para siempre
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
20
Imagen del Shell interactivo de IDLE
Acceso a nueva ventana dentro del Shell interactivo de IDLE
Nueva ventana del editor de IDLE Una vez que partiendo de una ventana vacia tenemos nuestro coacutedigo hemos de seleccionar FileSave As para guardar el archivo y tenerlo disponible
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
21
Ventana del editor de IDLE con coacutedigo preparado para guardar
Una vez que nos hemos asegurado de que tenemos el coacutedigo guardado iquestcoacutemo hacemos para ejecutar el programa La respuesta es seleccionando Run Module En caso de seleccionar Run Module antes de guardar el coacutedigo Python nos pide que lo guardemos anteshellip Al seleccionar Run Module Python iraacute interpretando liacutenea por liacutenea y mostrando los resultados a traveacutes del Inteacuterprete Si existiese alguacuten error de sintaxis se avisa del tipo de error y doacutende se produce Una vez corregido el problema se vuelve a intentar el Run Module
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
22
El tener un inteacuterprete permite ir probando partes de programas sobre las que no se estaacute seguro y ver coacutemo reaccionan para poder decidir si se incluyen o no y coacutemo se pueden adaptar Asiacute se estaacute continuamente alternando entre el inteacuterprete y el programa Maacutes informacioacuten en httpdocspythonorglibraryidlehtml
3112 Moacutedulos
Si salimos del inteacuterprete de Python y vuelves a entrar las definiciones que se hayan hecho (funciones y variables) se pierden Por ello si se quiere escribir un programa algo maacutes largo seraacute mejor que se utilice un editor de texto para preparar la entrada del inteacuterprete y ejecutarlo con ese fichero como entrada Esto se llama crear un guioacuten Seguacuten vayan creciendo los programas puede que quieras dividirlos en varios ficheros para facilitar el mantenimiento Puede que tambieacuten quieras utilizar una funcioacuten que has escrito en varios programas sin tener que copiar su definicioacuten en cada programa Para lograr esto Python tiene un modo de poner definiciones en un fichero y utilizarlas en un guioacuten o en una instancia interactiva del inteacuterprete Tal fichero se llama moacutedulo las definiciones de un moacutedulo se pueden importar a otros moacutedulos o al moacutedulo principal (la coleccioacuten de variables accesible desde un guioacuten ejecutado desde el nivel superior y en el modo de calculadora) Un moacutedulo es un fichero que contiene definiciones y sentencias de Python El nombre del fichero es el nombre del moacutedulo con el sufijo ldquopyrdquo Dentro de un moacutedulo el nombre del moacutedulo (como cadena) es accesible mediante la variable global __name__ Un moacutedulo puede contener sentencias ejecutables ademaacutes de definiciones de funciones Estas sentencias sirven para inicializar el moacutedulo Soacutelo se ejecutan la primera vez que se importa el moacutedulo en alguna parte1 Cada moacutedulo tiene su propia tabla de siacutembolos que utilizan todas las funciones definidas por el moacutedulo como tabla de siacutembolos global Por ello el autor de un moacutedulo puede utilizar variables globales dentro del moacutedulo sin preocuparse por conflictos con las variables globales de un usuario del moacutedulo Por otra parte si sabes lo que haces puedes tocar las variables globales de un moacutedulo con la misma notacioacuten utilizada para referirse a sus funciones nombreModnombreElem Los moacutedulos pueden importar otros moacutedulos Es una costumbre no obligatoria colocar todas las sentencias ldquoimportrdquo al principio del moacutedulo (o guioacuten) Los nombres del moacutedulo importado se colocan en la tabla de siacutembolos global del moacutedulo (o guioacuten) que lo importa Existe una variacioacuten de la sentencia import que importa los nombres de un moacutedulo directamente a la tabla de siacutembolos del moacutedulo que lo importa Por ejemplo
gtgtgt from fibo import fib fib2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
23
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto no introduce el nombre del moacutedulo del que se toman los elementos importados en la tabla de siacutembolos local (por lo que en el ejemplo no estaacute definido fibo) Ademaacutes existe una variacioacuten que importa todos los nombres que define un moacutedulo gtgtgt from fibo import
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto importa todos los nombres excepto los que empiezan por un guioacuten bajo (_)
3113 El camino de buacutesqueda de moacutedulos
Cuando se importa un moacutedulo denominado fiambre el inteacuterprete busca un fichero denominado bdquofiambrepy‟ en el directorio actual y luego en la lista de directorios especificada por la variable de entorno PYTHONPATH Tiene la misma sintaxis que la variable de liacutenea de oacuterdenes PATH de UNIX que es una lista de nombres de directorios Cuando PYTHONPATH no tiene ninguacuten valor o no se encuentra el fichero se continuacutea la buacutesqueda en un camino dependiente de la instalacioacuten En UNIX normalmente es bdquousrlocallibpython‟ En realidad se buscan los moacutedulos en la lista de directorios dada por la variable syspath que se inicializa desde el directorio que contiene el guioacuten de entrada (o el directorio actual) PYTHONPATH y el valor por omisioacuten dependiente de la instalacioacuten Esto permite que los programas que saben lo que hacen modifiquen o reemplacen el camino de buacutesqueda de moacutedulos Obseacutervese que como el directorio que contiene el guioacuten bajo ejecucioacuten estaacute en el camino de buacutesqueda de moacutedulos es importante que el moacutedulo no tenga el mismo nombre que un moacutedulo estaacutendar o Python lo intentaraacute cargar el guioacuten como moacutedulo cuando se importe el moacutedulo Normalmente esto provocaraacute errores
3114 Ficheros Python ldquoCompiladosrdquo
Como mejora considerable del tiempo de arranque de programas cortos que utilizan muchos moacutedulos estaacutendar si existe un fichero llamado bdquofiambrepyc‟ en el directorio donde se encuentra bdquofiambrepy‟ se supone que contiene una versioacuten previamente ldquocompilada a byterdquo del moacutedulo fiambre La fecha y hora de la versioacuten de bdquofiambrepy‟
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
24
utilizada para generar bdquofiambrepyc‟ se graba en bdquofiambrepyc‟ y no se considera el fichero bdquopyc‟ si no concuerdan Normalmente no hay que hacer nada para generar el fichero bdquofiambrepyc‟ Siempre que bdquofiambrepy‟ se compile sin errores se hace un intento de escribir la versioacuten compilada a bdquofiambrepyc‟ No se provoca un error si falla el intento Si por cualquier motivo no se escribe completamente el fichero el fichero bdquofiambrepyc‟ resultante seraacute reconocido como no vaacutelido y posteriormente ignorado El contenido del fichero bdquofiambrepyc‟ es independiente de la plataforma por lo que se puede compartir un directorio de moacutedulos entre maacutequinas de diferentes arquitecturas
3115 Moacutedulos estandar
Python viene con una biblioteca de moacutedulos estaacutendar descrita en un documento aparte la Referencia de las bibliotecas Algunos moacutedulos son internos al inteacuterprete y proporcionan acceso a las operaciones que no son parte del nuacutecleo del lenguaje pero se han incluido por eficiencia o para proporcionar acceso a primitivas del sistema operativo como las llamadas al sistema El conjunto de dichos moacutedulos es una opcioacuten de configuracioacuten que tambieacuten depende de la plataforma subyacente Por ejemplo el moacutedulo amoeba soacutelo se proporciona en sistemas que de alguacuten modo tienen acceso a primitivas Amoeba Hay un moacutedulo en particular que merece una especial atencioacuten el moacutedulo sys que es siempre interno en cualquier inteacuterprete de Python Estas variables soacutelo estaacuten definidas si el inteacuterprete estaacute en modo interactivo La variable syspath es una lista de cadenas que determina el camino de buacutesqueda de moacutedulos del inteacuterprete Se inicializa a un valor por omisioacuten tomado de la variable de entorno PYTHONPATH o de un valor por omisioacuten interno si PYTHONPATH no tiene valor Se puede modificar mediante operaciones de lista estaacutendar por ejemplo gtgtgt import sys gtgtgt syspathappend(‟ufsguidolibpython‟)
3116 Paquetes
Los paquetes son un meacutetodo de estructurar el espacio nominal de moacutedulos de Python mediante el uso de ldquonombres de moacutedulos con puntordquo Por ejemplo el nombre de moacutedulo AB hace referencia a un submoacutedulo denominado ldquoBrdquo de un paquete denominado ldquoArdquo Del mismo modo que el uso de moacutedulos evita que los autores de diferentes moacutedulos tengan que preocuparse de los nombres de variables globales de los otros la utilizacioacuten de nombres de moacutedulo con puntos evita que los autores de paquetes multi-moacutedulo como Numpy o Pil (Biblioteca de tratamiento de imagen de
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
25
python) tengan que preocuparse de los nombres de los moacutedulos ajenos Supoacuten que deseas disentildear una coleccioacuten de moacutedulos (un paquete) para tratar de manera uniforme ficheros de sonido y datos de sonido Existen muchos formatos de fichero de sonido (que se suelen distinguir por la extensioacuten como bdquowav‟ bdquoaiff‟ o bdquoau‟) por lo que podriacuteas necesitar crear y mantener una coleccioacuten creciente de moacutedulos de conversioacuten entre los diferentes formatos Tambieacuten existen muchas operaciones posibles sobre los datos de sonido (tales como mezclar antildeadir eco ecualizar o generar un efecto artificial de estereofoniacutea) por lo que ademaacutes estariacuteas escribiendo una serie de moacutedulos interminable para realizar estas operaciones He aquiacute una posible estructura de tu paquete (expresado en teacuterminos de sistema de ficheros jeraacuterquico)
Sonido Paquete de nivel superior __init__py Inicializa el paquete de sonido
Formatos Subpaquete de conversiones de formato de ficheros __init__py leerwavpy escriwavpy leeraiffpy escriaiffpy leeraupy escriaupy Efectos Subpaquete de efectos de sonido __init__py ecopy surroundpy inversopy Filtros Subpaquete de filtros __init__py ecualizadorpy vocoderpy karaokepy
Modelo de estructura paquetemoacutedulo Al importar el paquete Python rastrea los directorios de syspath buscando por el subdirectorio de paquetes Los ficheros bdquo__init__py‟ son necesarios para que Python trate los directorios como contenedores de paquetes Se hace asiacute para evitar que los directorios con nombres
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
26
comunes como bdquotest‟ oculten accidentalmente moacutedulos vaacutelidos que aparezcan maacutes tarde dentro del camino de buacutesqueda En el caso maacutes sencillo bdquo__init__py‟ puede ser un fichero vaciacuteo pero tambieacuten puede ejecutar coacutedigo de inicializacioacuten del paquete o actualizar la variable __all__ descrita posteriormente Los usuarios del paquete pueden importar moacutedulos individuales del paquete por ejemplo import SonidoEfectoseco
De este modo se carga el submoacutedulo SonidoEfectoseco Hay que hacer referencia a eacutel por su nombre completo SonidoEfectosecofiltroeco(entrada salida retardo=07
aten=4)
Un modo alternativo de importar el submoacutedulo es from SonidoEfectos import eco
Asiacute tambieacuten se carga el submoacutedulo eco y se hace disponible sin su prefijo de paquete por lo que se puede utilizar del siguiente modo ecofiltroeco(entrada salida retardo=07 aten=4)
Y otra variacioacuten es importar la funcioacuten o variable deseada directamente from SonidoEfectoseco import filtroeco
De nuevo se carga el submoacutedulo eco pero se hace la funcioacuten filtroeco disponible directamente filtroeco(entrada salida retardo=07 aten=4)
Observa que al utilizar from paquete import elemento el elemento puede ser tanto un submoacutedulo (o subpaquete) del paquete como cualquier otro nombre definido por el paquete como una funcioacuten clase o variable La sentencia import comprueba primero si el elemento estaacute definido en el paquete Si no asume que es un moacutedulo e intenta cargarlo Si no lo consigue se provoca una excepcioacuten ImportError Sin embargo cuando se utiliza la sintaxis
importelementosubelementosubsubelemento cada elemento menos el
uacuteltimo debe ser un paquete El uacuteltimo elemento puede ser un moacutedulo o un paquete
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
27
pero no una clase funcioacuten o variable definida en el nivel superior
3117 Importar de un paquete
Y iquestqueacute ocurre cuando el usuario escribe from SonidoEfectos import En teoriacutea deberiacutea rastrearse el sistema para encontrar queacute submoacutedulos existen en el paquete e importarlos todos Por desgracia esta operacioacuten no funciona muy bien en las plataformas Windows y Mac en las que el sistema de ficheros no tiene una idea muy precisa de las mayuacutesculas de un fichero En estas plataformas no hay un modo garantizado de conocer si un fichero bdquoECOPY‟ deberiacutea ser importado como eco Eco o ECO (por ejemplo Windows 95 tiene la molesta costumbre de mostrar todos los nombres de fichero con la primera letra en mayuacutescula) La restriccioacuten de nombres de fichero DOS (8+3) antildeade otro problema para los nombres de moacutedulo largos La uacutenica solucioacuten es que el autor del paquete proporcione un iacutendice expliacutecito del paquete La sentencia import utiliza la siguiente convencioacuten Si el coacutedigo del bdquo__init__py‟ de un paquete define una lista llamada __all__ se considera que es la lista de nombres de moacutedulos que se deben importar cuando se encuentre from paquete import Depende del autor del paquete mantener la lista actualizada cuando se libere una nueva versioacuten del paquete Los autores del paquete pueden decidir no mantenerlo si no es uacutetil importar del paquete Por ejemplo el fichero bdquoSonidoEfectos__init__py‟ podriacutea contener el siguiente coacutedigo __all__ = [eco surround inverso] Esto significariacutea que from SonidoEfectos import importariacutea los tres submoacutedulos mencionados del paquete Sonido Si __all__ no estaacute definido la sentencia from SonidoEfectos import no importa todos los moacutedulos del subpaquete SonidoEfectos al espacio nominal actual Soacutelo se asegura de que el paquete SonidoEfectos ha sido importado (ejecutando posiblemente el coacutedigo de inicializacioacuten de bdquo__init__py‟) y luego importa cualesquiera nombres definidos en el paquete Esto incluye cualquier nombre definido (y submoacutedulos cargados expliacutecitamente) por bdquo__init__py‟ Tambieacuten incluye cualquier submoacutedulo del paquete expliacutecitamente importado por sentencias import anteriores Mira este coacutedigo import SonidoEfectoseco import SonidoEfectossurround from SonidoEfectos import En este ejemplo los moacutedulos eco y surround se importan al espacio nominal vigente porque estaacuten definidos en el paquete SonidoEfectos cuando se ejecuta la sentencia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
28
fromimport (esto tambieacuten funciona si estaacute definido __all__)
Observa que en general se debe evitar importar de un moacutedulo o paquete ya que suele dar como resultado coacutedigo poco legible Sin embargo se puede usar para evitar teclear en exceso en sesiones interactivas y cuando ciertos moacutedulos esteacuten disentildeados para exportar soacutelo nombres que cumplan ciertas reglas
Recuerda no hay nada incorrecto en utilizar from Paquete import
submoacutedulo_concreto De hecho es la notacioacuten recomendada salvo que el moacutedulo
que importa necesite usar submoacutedulos del mismo nombre de diferentes paquetes
3118 Referencias internas al paquete
Es comuacuten que los submoacutedulos necesiten hacerse referencias cruzadas Por ejemplo el moacutedulo surround podriacutea utilizar el moacutedulo eco De hecho tales referencias son tan comunes que la sentencia import busca antes en el paquete contenedor que en el camino de buacutesqueda de moacutedulos estaacutendar Por ello basta con que el moacutedulo surround use import eco o from eco import filtroeco Si el moacutedulo importado no se encuentra en el paquete actual (el paquete del que el moacutedulo actual es submoacutedulo) la sentencia import busca un moacutedulo de nivel superior con el nombre dado Cuando se estructuran los paquetes en subpaquetes (como el paquete Sonido del ejemplo) no hay un atajo para referirse a los submoacutedulos de los paquetes hermanos y se ha de utilizar el nombre completo del subpaquete Por ejemplo si el moacutedulo SonidoFiltrosvocoder necesita utilizar el moacutedulo eco del paquete SonidoEfectos debe utilizar from SonidoEfectos import eco
32 FUNCIONES INCLUIDAS EN NUMPY POR CATEGORIacuteAS (ARRAY CREATION)
A modo indicativo e introductorio se incluyen las funciones incluidas en la libreriacutea Numpy por categoriacuteas Ver maacutes informacioacuten en httpdocsscipyorgdocnumpy Numerical
arange() arrayrange()
linspace() logspace()
Ones and zeros
empty() empty_like()
eye() identity()
ones() ones_like()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
29
tri() tril() triu()
zeros() zeros_like()
From existing data
array() recarray()
asarray() asanyarray() asmatrix()
copy()
fromarrays() frombuffer() fromfile() fromfunction()
fromiter() loadtxt()
Building matrices
bmat()
diag() diagflat()
mat() matrix()
vander()
Reinterpreting arrays
view()
Types
astype()
cast[]()
int8() int16() int32() int64() int128()
uint8() uint16() uint32() uint64() uint128()
float16() float32() float64() float96() float128()
float256()
complex32() complex64() complex128() complex192()
complex256() complex512()
bool_()
object_()
void() str_() unicode_()
byte() ubyte()
short() ushort()
intc() uintc()
intp() uintp()
int_() uint()
longlong() ulonglong()
single() csingle()
float_() complex_()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
30
longfloat() clongfloat()
Kinds of array
asarray()
asanyarray()
asmatrix()
Changing the number of dimensions
atleast_1d() atleast_2d() atleast_3d()
broadcast()
expand_dims()
squeeze()
Transpose-like operations
rollaxis()
swapaxes()
T transpose()
Reshaping arrays
flat flatten()
ravel()
reshape() shape
Array modification
Joining arrays
append()
column_stack()
concatenate()
dstack() hstack() vstack()
Splitting arrays
array_split()
dsplit() hsplit() split() vsplit()
Enlarging arrays
tile()
repeat()
Adding and removing elements
delete()
insert()
resize()
trim_zeros()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
31
unique()
Rearranging elements
fliplr() flipud()
reshape()
roll()
rot90()
Indexing
[]
take()
put()
putmask()
Indexing syntax
slice()
newaxis
index_exp[]
Generating arrays suitable for indexing
c_[]
r_[]
s_[]
nonzero()
where()
indices()
ix_()
mgrid[]
ogrid()
Indexing-like operations
choose()
where()
compress()
diag() diagonal()
select()
Iterating
flat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
32
ndenumerate()
ndindex()
Logic
[]
all() any()
allclose()
alltrue()
nonzero()
piecewise()
sometrue()
Finding things
argmax() argmin()
searchsorted()
Array statistics
average() mean()
bincount() histogram()
corrcoef()
cov()
max() min() ptp()
median()
std() var()
ufuncs
abs() absolute()
add() multiply()
angle()
arccos() arcsin() arctan()
arccosh() arcsinh() arctanh()
arctan2()
bitwise_and() bitwise_or() bitwise_xor()
ceil() floor() round()
conj() conjugate()
cos() sin() tan()
cosh() sinh() tanh()
fix()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
33
hypot()
logical_and() logical_not() logical_or() logical_xor()
maximum() minimum()
ufunc methods
accumulate()
outer()
reduce()
Functional constructs
apply_along_axis()
apply_over_axis()
vectorize()
Random numbers
beta() binomial() gumbel() poisson() standard_normal()
uniform() vonmises() weibull()
bytes()
permutation()
rand() randint() randn()
random_integers()
random_sample()
ranf()
sample()
seed()
shuffle()
Array math
clip()
cross()
cumprod() cumsum()
diff()
digitize()
dot()
inner()
outer()
inv() pinv()
poly1d()
polyfit()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
34
prod() sum()
tensordot()
vdot()
FFT
fft()
fftfreq()
fftshift()
ifft()
Linear algebra
inv()
lstsq()
solve()
svd()
trace()
Array output
savetxt()
set_printoptions()
tofile()
tolist()
Other
sort() argsort()
binary_repr()
dtype()
fill()
finfo()
generic
imag real
inf nan
item()
lexsort()
ndim
shape
typeDict()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
35
Numpy Functions by Category (uacuteltima edicioacuten 2008-06-13 122659
efectuada por jh)
MoinMoin Powered
Pyt
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
36
4 METODOLOGIacuteA En este apartado se proporciona una descripcioacuten detallada de la metodologiacutea utilizada para el desarrollo e implementacioacuten de la biblioteca Utilizando un paradigma Estructurado de la programacioacuten que considera que la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Esto nos permite reutilizar coacutedigo programado y nos proporciona una mejor comprensioacuten de la programacioacuten En el uacuteltimo paquete de la libreriacutea tambieacuten se ha realizado una incursioacuten a la programacioacuten orientada a objetos con la declaracioacuten de algunas clases
41 ESTRUCTURA DE LA LIBRERIacuteA GEOTOPO En nuestro caso hemos partido del concepto de creacioacuten de una libreriacutea de funciones del aacutembito de la Topografiacutea y Geodesia Esta libreriacutea de Python se estructura como un paquete con el nombre de la libreriacutea ldquogeotopordquo que a su vez contiene 6 paquetes maacutes seguacuten tipologiacutea Asiacute tenemos
Imagen de los paquetes incluidos dentro del paquete (libreriacutea) geotopo
Por orden intuitivo desde el punto de vista de aplicacioacuten de las herramientas tenemos los siguientes paquetes
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
37
general que contiene funciones de tipo general y transversal al resto de herramientas
Moacutedulos implementados dentro de general
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
38
topografia que contiene aplicacioacuten topograacuteficas
Moacutedulos implementados dentro de topografia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
39
geodesia Aplicaciones geodeacutesicas
Moacutedulos implementados dentro de geodesia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
40
proy_cartograficas Herramientas de caacutelculos en diferentes proyeccionesetc
Moacutedulos implementados dentro de proy_cartograficas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
41
transformacioacuten Aplicaciones con modelo de rejilla del IGN y EGM08REDNAP
Moacutedulos implementados dentro de transformacioacuten
aplicaciones Distintos ejemplos de aplicabilidad de las funciones y clases implementadas en los moacutedulos de la libreriacutea
Cada uno de estos paquetes (carpetas) como se ha podido ver contiene a su vez varios moacutedulos y en cada uno de ellos y con su mismo nombre se define una uacutenica funcioacuten por moacutedulo salvo en la carpeta de transformcioacuten donde como se ha comentado antes nos adentramos dentro de la programacioacuten orientada a objetos y en algunos moacutedulos se implementan clases y dentro de estas funciones etc De esta manera al importar una funcioacuten la tenemos que importar desde el modulo que la contenga Dentro de cada carpeta se aprecia la existencia de un fichero llamado __init__py que convierte dicha carpeta en un paquete de Python Se advierte que desde el cierre de esta memoria versioacuten en papel a la entrega total de documentacioacuten puede haberse ampliado el nuacutemero de moacutedulos de la libreriacutea ldquogeotoprdquo que siacute se incluiriacutea en el CD con la implementacioacuten de coacutedigos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
42
42 DOCUMENTADO DE FUNCIONES Se puede documentar una funcioacuten en Python proporcionando una cadena de documentacioacuten (comentarios)
Las comillas triples implican una cadena multiliacutenea Todo lo que haya entre el principio y el final de las comillas es parte de una sola cadena incluyendo los retornos de carro y otras comillas Pueden usarse para definir cualquier cadena pero donde suelen estar maacutes presentes es haciendo de cadena de documentacioacuten Todo lo que hay entre las comillas triples es la cadena de documentacioacuten de la funcioacuten y se usa para explicar lo que hace la funcioacuten En caso de que exista una cadena de documentacioacuten debe ser la primera cosa definida en una funcioacuten (esto es lo primero tras los dos puntos) Teacutecnicamente no es necesario dotar a una funcioacuten de una cadena de documentacioacuten pero debemos de hacerlo siempre En Python esto tiene un incentivo antildeadido la cadena de documentacioacuten estaacute disponible en tiempo de ejecucioacuten como atributo de la funcioacuten
Lecturas complementarias sobre las funciones de documentacioacuten
PEP 257 define las convenciones al respecto de las cadenas de documentacioacuten La Guiacutea de estilo de Python indica la manera de escribir una buena cadena de
documentacioacuten El Tutorial de Python expone convenciones para el espaciado dentro de las
cadenas de documentacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
43
Ejemplo de documentado de funciones con cadena de documentacioacuten
Toda la informacioacuten incluida dentro de una cadena de documentacioacuten de triple comillas estaacute accesible en tiempo de ejecucioacuten Asiacute si pedimos ayuda de una funcioacuten nos aparece toda la informacioacuten incluida en dicha cadena de documentacioacuten
Ejemplo de consulta de la ayuda de las funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
44
En la siguiente web podemos encontrar maacutes informacioacuten sobre el documentado de funciones en Python httpcoderwarcom201106hola-python-la-utilidad-de-los-comentarios Ademaacutes de los comentarios de las funciones en Python como en otros lenguajes de programacioacuten podemos incluir liacuteneas o simples palabras de comentarios En Python se usa el siacutembolo para preceder los comentarios Podemos comentar las liacuteneas de nuestro trabajo
Comentar un grupo de liacuteneas
Determinar el tipo de codificacioacuten Esto es importante para poder usar caracteres especiales como la tilde o la ntilde Generalmente se coloca en la primera liacutenea del programa Existen muchas codificaciones
Poner cabecera a nuestro programa De esta forma identificaremos el nombre del programador la fecha en que se realizoacute y demaacutes datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
45
En el caso que nos atantildee de la libreriacutea geotopo hemos considerado introducir unos comentarios descriptivos de los moacutedulos mediante el caraacutecter y tras la definicioacuten de las funciones se incluyen unas cadenas de documentacioacuten
Ejemplo de la documentacioacuten de moacutedulos y funcioneshellip
Para evitar problemas de codificacioacuten como ha ocurrido durante la implementacioacuten del coacutedigo se han incluido al inicio del mismo dos liacuteneas para solucionar el problema Estas liacuteneas son
Comentarios de los moacutedulos
Cadena de documentacioacuten de funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
46
-- coding iso 8859-1 -
ISO 8859-1 es una norma de la ISO que define la codificacioacuten del alfabeto latino incluyendo diacriacuteticos como letras aceacutentuadas ntilde) y letras especiales necesarios para la escritura de las siguientes lenguas originarias de Europa occidental alemaacuten aragoneacutes asturiano castellano catalaacuten daneacutes escoceacutes espantildeol feroeacutes fineacutes franceacutes gaeacutelico gallego ingleacutes islandeacutes italiano neerlandeacutes noruego portugueacutes sueco y Euskera Tambieacuten conocida como Alfabeto Latino nordm 1 o ISO Latiacuten 1 Esta norma pertenece al grupo de juegos de caracteres de la ISO conocidos como ISOIEC 8859 que se caracterizan por poseer la codificacioacuten ASCII en su rango inicial (128 caracteres) y otros 128 caracteres para cada codificacioacuten con lo que en total utilizan 8 bits -- coding cp1252 -
Si trabajamos con IDLE con el uso de los acentos (en general con los caracteres no ASCII) nos daraacute error Si en el coacutedigo de un programa escribimos una cadena que contenga caracteres no ASCII(acentos ntildeiquestiexcl) al guardar el archivo por primera vez IDLE nos muestra el siguiente mensaje de aviso
Si pulsamos el botoacuten ldquoEdit my filerdquo Al principio del programa se insertaraacute la liacutenea siguiente
-- coding cp1252 --
Que indica el juego de caracteres utilizado en el archivo (cp1252 es el juego de caracteres de Windows para Europa occidental) A partir de entonces podemos guardar el archivo sin problemas Python no tiene una primera o uacuteltima linea exigida pero siacute que es habitual dar la localizacioacuten de Python como primera liacutenea en forma de comentario usrbinpython
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
47
43 FUNCIONES IMPLEMENTADAS A continuacioacuten se incluye una relacioacuten de las funciones implementadas por paquetes Ademaacutes de su nombre y un pequentildeo resumen de su aplicacioacuten se han incluido 3 apartados maacutes En verde Datos de entrada Indica los datos que necesita la funcioacuten Datos de salida Nos muestra si el resultado es uacutenico o una coleccioacuten de resultados (siempre en forma vector en el orden indicado) En rojo Llamadas o ldquoimportacioacutenrdquo de moacutedulos predefinidos del sistema ossys Llamadas a funciones de predefinidas del moacutedulo numpy En morado Llamadas a funciones definidas en esta libreriacutea (geotopo) bien incluidas en el mismo subpaquete que la propia funcioacuten definida o incluida en otro subpaquete De esta manera podemos tener una idea de las funciones implementadas los datos de partida necesarios y los resultados a obtener asiacute como la interrelacioacuten de cada funcioacuten con el resto de funciones de la libreriacutea geotopo Para el caso de cambio de proyeccioacuten o de Sistema de Referencia Coordenado se ha tomado la nomenclatura ldquodesderdquo ldquoardquo ldquoahorardquo Para sentildealar el ldquoardquo se ha elegido el nuacutemero 2 por su pronunciacioacuten to (a) Asiacute por ejemplo para el paso de latitud geodeacutesica a creciente en nombre de la funcioacuten seraacute lat2cre
431 Libreriacutea en Python ldquogeotopogeneralrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 areacor - Caacutelculo de la superficie interior de un poligono sobre el plano
entrada=(matriz) 2columnas xy salida=superficie
import ossys from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
48
busca2col - Localiza la primera fila con los valores recibidos en las dos columnas indicadas
Recibe Valor en la primera y segunda columnas posiciones de las columnas y matriz de busqueda
Devuelve Primera fila que cumple comenzando en 0 entrada=(valorcol1poscol1valorcol2poscol2matriz)
salida=orden de la primera fila que cumple comenzando en 0(oacute -1 si no existe) import ossys
from numpy import shape
busca - Localiza la primera ocurrencia de un nuacutemero en la primera columna de una matriz
entrada=(valormatriz)
salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscacol - Localiza la primera ocurrencia de un nuacutemero en la fila indicada de una matriz
entrada=(valormatriznfil) salida=posicioacuten nuacutemero de columna comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscafil - Localiza la primera ocurrencia de un nuacutemero en la columna indicada de una matriz
entrada=(valormatrizncol) salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
ordena - Ordena las filas de una matriz de menor a mayor seguacuten el contenido de la columna indicada
entrada=(colummatriz) salida=matriz de entrada ordenada
import ossys
from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
49
p_entera - Da la parte entera de un nuacutemero entrada=(nuacutemero) salida=parte entera del nuacutemero
import ossys from numpy import floor
perimetro - Calculo del perimetro de un poliacutegono sobre el plano a partir de las coord de sus veacutertices
entrada=(matriz ) 2columnas xy salida=periacutemetro
import ossys
from numpy import sqrtshape
psdo2rad - Cambio de formato de aacutengulos Pasa del conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex ) a radianes
entrada=(pseudesexa)
salida=radianes
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
rad2psdo - Cambio de formato de aacutengulos Pasa un angulo de radianes al conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex )
entrada=( radianes) salida= pseudesexa
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
50
432 Libreriacutea en Python ldquogeotopotopografiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 acimut - Caacutelculo del acimut entre dos puntos
entrada=(xiyixjyj)
salida=acimut en radianes
import ossys from numpy import arctan2pi
distancia ndash Caacutelculo de la distancia entre dos puntos del mismo
entrada=(xiyixjyj) salida=distancia (misma unidad que coordenadas de entrada
import ossys
from numpy import sqrt
edgcla ndash Caacutelculo del error de una distancia geomeacutetrica utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dgInstrnialtnl)
Dg=distancia geometrica Instr=Matriz de instrumentos
Ni=Altura de instrumento Altp=Altura de prisma
Nl=Nuacutemero de veces de medida de distancia
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edgclaprn ndash Calculo del error de una distancia geometrica utilizando la formulacion claacutesica de teoriacutea de errores Impresioacuten de resultados
entrada=(dgInstrnialtnlfsalida)
dg=distancia geometrica instr=Matriz de instrumentos
ni=Altura de instrumento altp=Altura de prisma
nl=Nuacutemero de veces de medida de distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
51
fsalida=Fichero de salidade datos
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edireh ndash Caacutelculo del error de la lectura horizontal realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(Instrnidisaltpnl)
salida=error de lectura horizontal en radianes
import ossys from numpy import sqrtpi
edirev ndash Caacutelculo del error de la lectura vertical realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(instrni nl) salida=error de lectura cenital en radianes en radianes
import ossys from numpy import sqrtpi
eincz ndash Caacutelculo del error de un desnivel trigonomeacutetrico utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dglvapedgelvInstrni) salida=xpypeplanisolzesolz
import ossys
from numpy import pisqrtcostan
intinv2 ndash Caacutelculo de la interseccioacuten inversa simple en el plano
entrada=(datosinstru)
salida= xpypangmin import ossys
from numpy import sincostanarctan2pizeros
from geotopogeneralordena import ordena
intinv2e ndash Caacutelculo de la interseccioacuten inversa simple en el plano Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru) salida= xpypeplani
import ossys from numpy import shapepisincostanarctan2dottransposezerossqrt
from geotopotopografiaedireh import edireh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
52
intinv3e ndash Caacutelculo de la interseccioacuten inversa 3D simple Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru)
salida= xpypeplanivzpvezp
import ossys from numpy import zerosshapesincos
from geotopotopografiaintinv2e import intinv2e from geotopotopografiadistancia import distancia
from geotopotopografiaedirev import edirev
from geotopotopografiaedgcla import edgcla from geotopotopografiaeincz import eincz
433 Libreriacutea en Python ldquogeotopogeodesiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 aut2lat - paso de latitud autaacutelica a geodeacutesica
entrada=(autnelipsoide) salida=lat
import ossys from numpy import sinarcsin
from geotopogeneralpsdo2rad import psdo2rad from geotopogeneralpsdo2rad import psdo2rad
calcpolo - caacutelculo del polo de la esfera a partir de tres puntos no alineados de la misma de forma que pasen a estar en un mismo paralelo tras realizarse el cambio de polo
entrada(lat1lon1lat2lon2lat3lon3) salida=[latnplonnpcolat]
import ossys from numpy import pisincosarccosarctanarctan2zeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
53
cla2enu - paso de un vector geodeacutesico expresado en componentes polares (observables claacutesicos) a componentes ENU entrada(azvdg)
salida=[ieiniu]
import ossys from numpy import sincoszeros
clhapv - lectura horizontal corregida por altitud del punto visado entrada=(lhzazlat1lat2h2nelipsoide) salida=lhz12c
import ossys
from numpy import sincospi from elipsoide import elipsoide
from radioem import radioem
clhsnlg - lectura horizontal corregida por paso de la seccioacuten normal a la liacutenea geodeacutesica entrada=(lhzs12az12lat1lat2nelipsoide)
salida=lhz12c import ossys
from numpy import sincospi
from elipsoide import elipsoide from radioem import radioem
cre2lat - paso de latitud creciente a geodeacutesica entrada=(crenelipsoide) salida=lat
import ossys
from numpy import sincostanarctanexppi from geotopogeneralpsdo2rad import psdo2rad
from elipsoide import elipsoide
efleutm - paso de la elipse de error de un punto del plano tangente al elipsoide al plano de la proyeccioacuten UTM
entrada=(latlonsemiaesemibeaziaenelipsoidehuso) salida=[semiasimibazia] import ossys from numpy import zerospi from geotopoproy_cartograficaskputm import kputm from geotopoproy_cartograficaskputmh import kputmh from geotopoproy_cartograficasconvutm import convutm from geotopoproy_cartograficasconvutmh import convutmh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
54
elip2esf - determinacioacuten de la esfera tangente al elipsoide en un paralelo indicado entrada=(nelipsoidelat)
salida=[afbe1e2]esfera
import ossys from numpy import zeros
from elipsoide import elipsoide from radiopv import radiopv
elipsoide - calculo los 5 paraacutemetros (afbe1 y 22) de los elipsoides ED50 GRS80 y WGS84 en funcioacuten de un coacutedigo 123 respectivamente entrada=(nelipsoide) 1 2 oacute 3 seguacuten ED50GRS80 oacute WGS84 respectivamente salida=[afbe1e2]
import ossys from numpy import sqrt zeros
enu2cla - paso de un vector geodeacutesico expresado en componentes ENU a componentes polares (observables claacutesicos) entrada=ieiniu salida=[azdgv]
import ossys
from numpy import zerosarcsenarctan2pisqrt
enu2xyz - paso de un vector geodeacutesico expresado en componentes ENU a componentes cartesianas tridimensionales entrada=(latlonieiniu)
salida=[ixiyiz] import ossys
from numpy import sincoszeros
eta_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del primer vertical entrada=(latlon)
salida= eta_ed50
import ossys from numpy import pisqrtcossintan
from elipsoide import elipsoide from radiopv import radiopv
from radioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
55
geo2tri - paso de coordenadas geodeacutesicas a cartesianas tridimensionales para un punto y elipsoide determinados entrada=(latlonhnelipsoide
salida=[XYZ]
import ossys from numpy import cossinzeros
from elipsoide import elipsoide from radiopv import radiopv
lam2lat - caacutelculo de la latitud geodeacutesica que le corresponde a una determinada longitud de arco de meridiano en el elipsoide indicado entrada=(lamnelipsoide salida=lat
import ossys from numpy import cossin
from elipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
lam - caacutelculo de la longitud de arco de meridiano a partir de la latitud geodeacutesica y del elipsoide entrada=(lamnelipsoide
salida=lam import ossys
from numpy import sin cos from elipsoide import elipsoide
lat2aut - paso de latitud geodeacutesica a autaacutelica entrada=(latnelipsoide)
salida=aut import ossys
from numpy import sinlog from elipsoide import elipsoide
lat2cre - paso de latitud geodeacutesica a creciente entrada=(latnelipsoide)
salide=cre import ossys
from numpy import sintanpilog
ond_ed50 - caacutelculo de la ondulacioacuten del geoide de un punto en Ed50 entrada =(latlon) salida=ondulacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
56
import ossys
from numpy import pisqrtcossintan
pdesfcr - problema directo en la esfera con el meacutetodo de cambio de base entrada=(lat1lon1saziresfera) salida=[latlon]
import ossys from numpy import cossintanarcsinarcosarctan2pizerostransposedot
pdg_dif1 - problema directo de la geodesia con la primera derivada entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2azi21] import ossys
from numpy import zerossincostanpi from radiopv import radiopv
from radioem import radioem
pdg_dif2 - problema directo de la geodesia con la primera y segunda derivada entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdg_dif3 - problema directo de la geodesia con la primera segunda y tercera derivada
entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdgrk4o - problema directo de la geodesia seguacuten meacutetodo de integracioacuten numeacuterica de Runge-Kutta de cuarto orden entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2
import ossys from numpy import zerossincostanpisqrt
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
57
from radioem import radioem
piesfcr - problema inverso en la esfera con el meacutetodo de cambio de base entrada=( lat1lon1lat2lon2resfera)
salida=[s12a12] import ossys
from numpy import cossintanarcsenarccosarctan2dotzerospi
pigbsl - problema inverso de la geodesia seguacuten el meacutetodo de Bessel entrada=( lat1lon1lat2lon2nelipsoide)
salida=[ s12a12a21]
import ossys from numpy import zerossincostanarcsinarctanarctan2arccossqrtpi
pigbslm - problema inverso de la geodesia seguacuten el meacutetodo de Bessel modificado por D David Henaacutendez Loacutepez
entrada=( lat1lon1lat2lon2nelipsoide) salida=[ s12a12a21]
import ossys from numpy import cossintanarcsinarcosarctanarctan2zerossqrtpi
from elipsoide import elipsoide
from radiopv import radiopv from piesfcr import piesfcr
from pdesfcr import pdesfcr
piloxo - problema inverso para la curva loxodroacutemica entrada=(lat1lon1lat2lon2nelipsoide)
salida=[dla12]
import ossys from numpy import arctan2coszerospi
from elipsoide import elipsoide from lat2cre import lat2cre
from radiopv import radiopv
from lam import lam
psi_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del meridiano entrada=(latlon) salida=psi_ed50
import ossys
from numpy import pisqrtcossintan from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
58
radioem - radio de curvatura de la elipse meridiana en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radioem
import ossys from numpy import sin
from elipsoide import elipsoide
radioeul - radio de la seccioacuten normal de un determinado acimut a partir del teorema de Euler entrada=(lataznelipsoide)
salida=radieul import ossys
from numpy import sincos from radioem import radioem
from radiopv import radiopv
radiopv - radio de curvatura del primer vertical en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radiopv
import ossys from numpy impor sqrtsin
from elipsoide import elipsoide
rdcae - reduccioacuten de la distancia de la cuerda al arco elipsoide entrada=( dcazlat1nelipsoide) salida=recae
impor ossys from numpy import sincosarcsen
from radioem import radioem from radiopv import radiopv
rdtce - reduccioacuten de la distancia del terreno a la cuerda elipsoide entrada=(dgazlat1h1h2nelipsoide)
salida=rdtce import ossys
from numpy import sincossqrt from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
59
tri2geo - paso de coordenadas cartesianas tridimensionales a geodeacutesicas en un punto y elipsoide determinados entrada=(XYZnelipsoide)
salida=[latlonh]
import ossys from numpy import cossintanarctanarctan2sqrtzeros
from elipsoide import elipsoide from radiopv import radiopv
xyz2clae - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a observables claacutesicos sobre el elipsoide y desnivel elipsoidal entrada=( X1Y1Z1DXDYDZnelipsoide) salida=[s12az12h12]
import ossys from numpy import zeros
from tri2geo import tri2geo
from pigbslm import pigbslm
xyz2clat - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes polares en el terreno entrada=( lat1lon1ixiyiz)
salida=[ dgaz12lv] import ossys
from numpy import zeros from xyz2enu import xyz2enu
from enu2cla import enu2cla
xyz2enu - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes ENU entrada=(latlonIXIYIZ)
salida=[ieiniu]
import ossys from numpy import sincoszeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
60
434 Libreriacutea en Python ldquogeotopoproy_cartograficasrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 calhuso - caacutelculo del huso correspondiente a un punto en la proyeccioacuten UTM a partir de su longitud geodeacutesica entrada=(lon)
salida=huso
import ossys from numpy import
cdel2geo - paso de un punto de la proyeccioacuten ciliacutendrica directa equivalente de Lambert al elipsoide
entrada=(XYLon0TXTYnelipsoide) salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaaut2lat import aut2lat
convestp - caacutelculo de la convergencia de meridianos de un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lonlon0)
salida=convest import ossys
convgk - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0nelipsoide)
salida=convgk
import ossys from numpy import sincostan
from geotopogeodesiaelipsoide import elipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
61
convlamb - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(lonlat0lon0)
salida=convlamb
import ossys from numpy import sin
convutm - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=convutm import ossys
from numpy import tancossinpi
from cahuso import calhuso from geotopogeodesiaelipsoide import elipsoide
convutmh - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso indicado entrada=(latlonnelipsoide)
salida=convutmh
import ossys from numpy import tancossinpi
from geotopogeodesiaelipsoide import elipsoide
dcdgputm - paso de la distancia cuerda en la proyeccioacuten UTM entre dos puntos a la correspondiente a la proyeccioacuten UTM de la liacutenea geoacutedesica que los une en el elipsoide entrada=(lat1lon1lat2lon2nelipsoide
salida=correccioacuten en metros import ossys
from numpy import cos from utm2geo import utm2geo
from geo2utmh import geo2utmh
from calhuso import calhuso from getopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
62
dcesfera - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general conforme en una esfera entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida=dc (reduccioacuten angular de la cuerda en radianes import ossys
from numpy import sincos from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
dcestp - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en la esfera al pasar a la proyeccioacuten estereograacutefica polar entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=dc(reduccioacuten angular de la cuerda en radianes)
import ossys from numpy import cossin
from kplamb import kplamb
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
from geotopogeodesiaradiopv import radiopv
dcgk - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general de Gauss-Kruumlger entrada=(lat1lon1lat2lon2lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos from geo2gk import geo2gk
from gk2geo import gk2geo
from geotopogeodesiaradioem import radioem from geotopogeodesiaradiopv import radiopv
from getopogeodesiaelipsoide import elipsoide
dclamb - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert entrada=(lat1lon1lat2lon2lat0pelipsoide
salida= dc(reduccioacuten angular de la cuerda en radianes)
import ossys
from numpy import sintancosexpzeros from geo2lamb import geo2lamb
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
63
from kdlamb import kdlamb
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
from geotopogeodesiaradiopv import radiopv
dclambf - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert con maacutes precisioacuten que la funcioacuten anterior entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos sin
from kplamb import kplamb from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o from geotopogeodesiaradiopv import radiopv
dcutm - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=( lat1lon1lat2lon2nelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaradioem import radioem
dcutmh - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso indicado entrada=( lat1lon1lat2lon2husonelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh
from utm2geo import utm2geo from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
64
dgpdcutm - paso de la distancia geodeacutesica proyectada en el plano UTM a la distancia correspondiente a la cuerda en esta proyeccioacuten para una geodeacutesica del elipsoide entrada=( lat1lon1lat2lon2snelipsoide)
salida=correccioacuten import ossys
from numpy import cos from geo2utmh import geo2utmh
from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut
esf2esfg - paso de un punto de una esfera a la esfera con cambio de polo Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo
entrada=(latlonlatplonp)
salida=[latlong]
import ossys from numpy import cossintanarcsenarctandotzerospi
from geotopogeodesiapiesfcr import piesfcr
esf2estp - paso de un punto de la esfera a las planas de la proyeccioacuten estereograacutefica polar entrada=(latlonlon0radiotxty)
salida=[xy] estp import ossys
from numpy import zerossincos
esfg2esf - paso de un punto de la esfera con cambio de polo a la esfera original Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo entrada=(latnlonnlatplonp
salida=[lat0lon0giro import ossys
from numpy import cossintanarcsenarctan2dotzerospitranspose from geotopogeodesiapiesfcr import piesfcr
esfc2lat - paso de latitud sobre la esfera a la correspondiente sobre el elipsoide seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
65
salida=lat
import ossys from numpy import sintanarctanpi
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiaelipsoide import elipsoide
estp2esf - paso de un punto de la proyeccioacuten estereograacutefica polar a la esfera entrada=(xylon0radiotxty)
salida=[xy] import ossys
from numpy import zerosarctan2arctansinpi
geo2cdel - paso de un punto del elipsoide a la proyeccioacuten ciliacutendrica directa equivalente de Lambert entrada=( latlonlon0txtynelipsoide)
salida=[XY] import ossys
from numpy import zeros
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialat2aut import lat2aut
geo2esto - paso de una nube de puntos del elipsoide a la proyeccioacuten estereograacutefica oblicua oacuteptima entrada=(latlonlat0lon0txtynelipsoide)
salida=[XY]
import ossys from numpy import
from lat2esc import lat2esc
from esf2esfg import esf2esfg from esf2estp import esf2estp
from geotopogeodesiaradiopv import radiopv
geo2gk - paso de un punto del elipsoide a la proyeccioacuten general de Gauss-Kruumlger entrada=( latlonlon0ptxtynelipsoide)
salida= [xy]gk import ossys
from numpy import costanpizeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesialam import lam
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
66
geo2lamb - paso de un punto del elipsoide a la proyeccioacuten general coacutenica conforme de Lambert entrada=( latlonlat0lon0ptxtynelipsoide)
salida=[xy]lambert
import ossys from numpy import sintancosexpzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
geo2merc - paso de un punto del elipsoide a la proyeccioacuten de Mercator entrada=( latlonlon0txtynelipsoide)
salida= [xy]mercator import ossys
from numpy import zeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialat2cre import lat2cre
geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
import ossys from numpy import zerostancospi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
geo2utmh - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=[XY] UTM
import ossys
from numpy import zerostancospi from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
gk2geo - paso de un punto de la proyeccioacuten general de Gauss-Kruumlger al elipsoide entrada=(XYlon0ptxtynelipsoide)
salida=[latlon]
import ossys
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
67
from numpy import zerostancospi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
kdesfera - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general conforme sobre una esfera Utiliza la integracioacuten numeacuterica de Simpson entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida= kdesfera import ossys
from kpesfera import kpesfera from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o
kdestp - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica de la esfera al proyectarla en la proyeccioacuten estereograacutefica polar Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0radiotxty)
salida=kdestp import ossys
from kpestp import kpestp from esf2estp import esf2estp
from estp2esf import estp2esf
kdgk - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general de Gauss-Kruumlger Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0pnelipsoide)
salida=kdgk import ossys
from geo2gk import geo2gk from gk2geo import gk2geo
from kpgk import kpgk
kdlamb - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica el elipsoide al proyectarla en la proyeccioacuten general coacutenica conforme de Lambert Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=kdlamb import ossys
from geolamb import geolamb from lamb2geo import lamb2geo
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
68
kdutm - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso del primer punto Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2nelipsoide)
salida=kdutm import ossys
from calhuso import calhuso from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kdutmh - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso indicado Utiliza la integracioacuten numeacuterica de Simpson
entrada= lat1lon1lat2lon2husohelipsoide) salida=kdutmh
import ossys from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kpesfera - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general conforme sobre una esfera entrada=( latlat0nelipsoide)
salida=kpesfera import ossys
from numpy import cossintanexp from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaelipsoide import elipsoide
kpestp - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lat)
salida=kpestp import ossys
from numpy import sin
kpgk - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0pnelipsoide)
salida=kpgk
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
69
import ossys
from numpy import sincostan from clahuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
kplamb - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(latlat0pnelipsoide)
salida=kplamb
import ossys from numpy import cossintanexp
from geotopogeodesialat2cre import lat2cre from geotopogeodesiaradiopv import radiopv
kputm - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=kputm
import ossys from numpy import tancossinpi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
kputmh - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=kputmh
import ossys
from numpy import sincostanpi from geotopogeodesiaelipsoide import elipsoide
lamb2geo - paso de un punto de la proyeccioacuten general coacutenica conforme de Lambert al elipsoide entrada=( xylat0lon0ptxtynelipsoide)
salida=[latlon] import ossys
from numpy import sintanarctanpilogsqrtzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
from geotopogeodesiacre2lat import cre2lat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
70
lat2esc - paso de la latitud geodeacutesica sobre el elipsoide a la correspondiente sobre la esfera seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide)
salida=latesfc
import ossys from numpy import sintanarctanpi
from geotopogeodesiaelipsoide import elipsoide
merc2geo - paso de un punto de la proyeccioacuten de Mercator al elipsoide entrada= (xylon0txtynelipsoide)
salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesiacre2lat import cre2lat
utm2geo - paso de un punto de la proyeccioacuten UTM al elipsoide entrada=(XYhusonelipsoide)
salida=[latlon] import ossys
from numpy import sqrtpitancossinzeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
435 Libreriacutea en Python ldquogeotopotransformacionrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 egm08rednap ndash fichero que almacena la clase Egm08rednap para el manejo de geoides en formato egm08rednap Define la funcioacuten getOndulation(selflatitudlongitud) Llama al fichero geoide que a su vez llama a los ficheros EGM08_REDNAP
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
71
entrada=(latitudlongitud)
salida=ondulacioacuten import ossys
from numpy import fromfile reshape from geoide import Geoide
geoide ndash fichero que almacena la clase Geoide para el manejo de geoides en formato egm08rednap La clase Geoide almacena ldquollamardquo a los geoides EGM08_REDNAP de la Peniacutensula o Baleares seguacuten corresponda Define las funciones getNoOndulacioacuten y getOndulacioacuten en funcioacuten de que encuentre las coordenadas de entrada dentro de los ficheros
entrada=(latitudlongitud) salida=ondulacioacuten
import ossys from numpy import fromfile reshapepifloorndarray
ntv2 ndash fichero que almacena la funcioacuten ntv2Espana Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(longitudlatitud) en deg en ED50 salida=(longitud latitud) en deg en ETRS89
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
ntv2_2 ndash fichero que almacena la funcioacuten ntv2Espana Adaptacioacuten del fichero anterior Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz) En la adatacioacuten realizada obtenemos soacutelo los diferenciales de caacutelculo de paso de ED50 a ETRS89 para tomarlo en el caacutelculo de la aproximacioacuten del sentido inverso entre ETRS89 a ED50 El paso de nodos del fichero utilizado es cada 200‟ lo que equivaldriacutea a 6000 m aproximadamente por lo que la aproximacioacuten seriacutea vaacutelida
entrada=(longitudlatitud) en deg en ETRS89 salida=(diflongitud diflatitud) en deg en ED50
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
72
sped2etpy ndash fichero rejilla del IGN Para transformacioacuten de coordenadas en los Sistemas de Referencia ED50 a ETRS89 Adaptado a Python y descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(fichero contenedor de informacioacuten) No entramos con ninguacuten valor
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
73
5 APLICABILIDAD DE LA LIBRERIacuteA Y CONCLUSIONES FINALES Finalmente hemos implementado los 5 subpaquetes de moacutedulos con funciones y clases incluidos en el paquete (libreriacutea) geotopo destinados a caacutelculos topograacuteficos y geodeacutesicos
Estructura final de la libreriacutea geotopo
Como puede verse en el paquete de geotopo se ha incluido un moacutedulo de aplicaciones en las que se han implementado unos ejercicios praacutecticos aplicando las distintas funciones de la libreriacutea Antes de entrar a describir los casos praacutecticos implementados hemos de decir que directamente podemos obtener resultados de cada una de las funiones Asiacute si queremos pasar de coordenadas geograacuteficas a coordenadas utm mirando en la descripcioacuten de las funciones tenemos geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
74
import ossys
from numpy import zerostancospi from calhuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
Pues bien una vez seleccionada la funcioacuten a utilizar abrimos el moacutedulo correspondiente con IDLE
Coacutedigo de la funcioacuten abierto con IDLE
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
75
Imagen de la ejecucioacuten de Run Module
Ejecutando Run Module Python abre el Python Shell En esta pantalla tenemos que introducir el nombre de la funcioacuten a usar geo2utm y entre pareacutentesis los valores que se especifican de entrada en la descripcioacuten de la funcioacuten entrada=(latlonnelipsoide)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
76
Llamada a la ejecucioacuten de la funcioacuten desde Python Shell
Como hemos indicado antes y por su relevancia y empleabilidad en otras funciones con ldquonelipsoiderdquo se entiende un coacutedigo del 1 al 3 que representa cada uno un elipsoides de referencia seguacuten los Sistemas de Referencia Coordenados en este caso 1=ED50 elipsoide Internacional Hayford 1924 2=ETRS89 elipsoide GRS80 y 3=WGS84
Al introducir los datos ejecutamos con Intro Obtenemos 2 valores en forma de vector que respresentan seguacuten la descripcioacuten de la funcioacuten salida=[XY] UTM
Podemos volver a caacutelcular las coordenadas UTM en el SCR ETRS89 (en caso de que lalitud y longitud vinieran dadas en el mismohellip) simplemente copiando la liacutenea de entrada pegaacutendola abajo y cambiando 1 por 2 como iacutendice del elipsoide y volviendo a ejecutar con enter
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
77
Dentro de Python Shell se puede copiar coacutedigo de liacuteneas anteriores y
pegar abajo Para caacutelculos maacutes complejos de mayor nuacutemero de puntos etc a modo de praacutectica se ha implementado el coacutedigo de distintos tipos de caacutelculo de ejemplo Distribuidos en 2 tipologiacuteas diferentes ldquotopografiardquo y ldquogeodesiardquo se han incluido coacutedigos para la resolucioacuten e impresioacuten de distintos tipos de problemas realizando ldquoimportrdquo de funciones declaradas en los moacutedulos de los distintos subpaquetes de geotopo
51 CASOS PRAacuteCTICOS TOPOGRAFIacuteA En total se han realizada 4 casos praacutecticos dentro del apartado de topografiacutea Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica topo_practica1 Del resto soacutelo se ha incluido la salida de datos
511 Implementacioacuten del coacutedigo topo_praacutectica1
usrbinpython
-- coding iso-8859-1 --
-- coding cp1252 --
Praacutectica 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
Datos Coordenadas del punto de estacioacuten
Sistema de referencia local
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmesn)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
78
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
En esta versioacuten de la praacutectica utilizando la libreriacutea geotopo en el caacutelculo de azimutes
periacutemetro y superficie
import ossys
from numpy import matrixarrayshapepizerosconcatenatemeansincossqrt
from geotopotopografiaacimut import acimut
from geotopogeneralperimetro import perimetro
from geotopogeneralareacor import areacor
Radio medio terrestre en metros
rt=63700000
Informacioacuten del punto de estacioacuten El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto de estacioacuten
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Altitud del punto en metros
- Quinta columna- Altura de instrumento en metros
pe=array([[100030242663090376657208150]])
Informacioacuten de las referencias
- Cada fila es un punto de referencia
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Lectura azimutal en grados centesimales
ref=array([[200127863973359492354821][2002322174932757501335646][20033289406282
69902313540][2004261222126827453319067]])
Informacioacuten de los puntos radiados
- Cada fila es una observacioacuten claacutesica a un punto radiado
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Lectura azimutal en grados centesimales
- Tercera columna- Lectura cenital en grados centesimales
- Cuarta columna- Distancia geomeacutetrica en metros
- Quinta columna- Altura de instrumento en metros
rad=array([[30013387131001173422431180][300211877101000083399617200][3003240
5756999039440097150][300433037831000468414996150]])
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos de referencia
Caacutelculo de las dimensiones de la matriz de puntos de referencia
- mref seraacute el nuacutemero de filas el nuacutemero de puntos
- nref seraacute el nuacutemero de columnas 4
[mrefnref]=refshape
Se extrae la informacioacuten del punto de estacioacuten
num_pe=pe[00]
x_pe=pe[01]
y_pe=pe[02]
z_pe=pe[03]
alti_pe=pe[04]
Caacutelculo de azitutes del punto de estacioacuten a cada uno de los puntos radiados
La funcioacuten azimut de la libreriacutea Geotop devuelve el valor en radianes
acimutes=zeros((mref1))
for i in range (1mref+1)
Se leen la identificacioacuten y las coordenadas del punto radiado y se almacenan en variables
temporales
num_pref=ref[i-10]
x_pref=ref[i-11]
y_pref=ref[i-12]
azi_pe_pref=acimut(x_pey_pex_prefy_pref)
acimutes[i-10]=azi_pe_pref2000pi
ref=concatenate((refacimutes)axis=1)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
79
Caacutelculo de la desorientacioacuten de cada direccioacutenccedil
desor=zeros((mref1))
for i in range(1mref+1)
Se leen los valores angulares y se transforman a radianes almacenaacutendose en variables
temporales
lhz_pe_pref=ref[i-13]pi2000
azi_pe_pref=ref[i-14]pi2000
des_pe_pref=azi_pe_pref-lhz_pe_pref
if des_pe_preflt0
des_pe_pref=des_pe_pref+20pi
desor[i-10]=des_pe_pref200pi
ref=concatenate((refdesor)axis=1)
Caacutelculo de la desorientacioacuten media con la funcioacuten de python
des_mean=mean(ref[5])pi200
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos radiados
[mradnrad]=radshape
Caacutelculo de coordenadas polares que se almacenan en la matriz coor_polares
- Primera columna- Nuacutemero entero identificador del punto radiado
- Segunda columna- Azimut en grados centesimales
- Tercera columna- Distancia reducida en metros
Caacutelculo de coordenadas cartesianas que se almacenan en la matriz coor_cart
- Primera columna- Nuacutemero entero identificador del punto del punto radiado
- Segunda columna- Coordenada X
- Tercera columna- Coordenada Y
- Cuarta columna- Altitud
antes se almacenan las coordenadas polares en la matriz coord_polares (numero de
puntoacimutdistancia reducida)
coord_polares=zeros((mrad3))
coord_cart=zeros((mrad4))
for i in range(1mrad+1)
num_prad=rad[i-10]
lhz_pe_prad=rad[i-11]pi2000
lv_pe_prad=rad[i-12]pi2000
dg_pe_prad=rad[i-13]
altp_pe_prad=rad[i-14]
coord_polares[i-10]=num_prad
azi_pe_prad=lhz_pe_prad+des_mean
if azi_pe_pradgt(20pi)
azi_pe_prad=azi_pe_prad-20pi
coord_polares[i-11]=azi_pe_prad2000pi
dr_pe_prad=dg_pe_pradsin(lv_pe_prad)
coord_polares[i-12]=dr_pe_prad
coord_cart[i-10]=num_prad
coord_cart[i-11]= x_pe+dr_pe_pradsin(azi_pe_prad)
coord_cart[i-12]= y_pe+dr_pe_pradcos(azi_pe_prad)
coord_cart[i-13]= z_pe+alti_pe+dg_pe_pradcos(lv_pe_prad)-
altp_pe_prad+042dr_pe_prad2rt
Caacutelculo del periacutemetro de la parcela utilizando la funcioacuten periacutemetro de Geotopo
coord=zeros((mrad2))
for i in range (1mrad+1)
coord[i-10]=coord_cart[i-11]
coord[i-11]=coord_cart[i-12]
perim=perimetro(coord)
Caacutelculo de la superficie de la parcela utilizando la funcioacuten areacor de Geotopo
superficie=areacor(coord)
superficie_error=areacore(coord)
Impresioacuten de resultados
fsalida=open(topopractica1salw)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
80
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
fsalidawrite(TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(nPRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALESn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimaln)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia Localn)
Impresioacuten del paso 1 Paso de coordenadas cartesianas a polares Azimutes
fsalidawrite(n1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada
visualn)
fsalidawrite( Punto Inicial Punto Final Acimut Desorientacioacutenn)
for i in range(1mref+1)
num_pref=ref[i-10]
azi=ref[i-14]
des=ref[i-15]
fsalidawrite(100fnum_pe)
fsalidawrite(150fnum_pref)
fsalidawrite(184fazi)
fsalidawrite(184fndes)
Impresioacuten del paso 2 Caacutelculo de la desorientacioacuten media
fsalidawrite(n2 Caacutelculo de la desorientacioacuten median)
fsalidawrite( Desorientacioacuten media154fn(des_mean200pi))
Impresioacuten del paso 3 Caacutelculo de la coordenadas polares
fsalidawrite(n3 Caacutelculo de las coordenadas polaresn)
fsalidawrite( Punto Acimut Distancian)
for i in range (1mrad+1)
num_prad=coord_polares[i-10]
azi=coord_polares[i-11]
dist=coord_polares[i-12]
fsalidawrite(100fnum_prad)
fsalidawrite(184fazi)
fsalidawrite(184fndist)
Impresioacuten del paso 4 Caacutelculo de la coordenadas cartesianas
fsalidawrite(n4 Caacutelculo de las coordenadas cartesianasn)
fsalidawrite( Punto X Y Zn)
for i in range (1mrad+1)
num_prad=coord_cart[i-10]
x=coord_cart[i-11]
y=coord_cart[i-12]
z=coord_cart[i-13]
fsalidawrite(100fnum_prad)
fsalidawrite(154fx)
fsalidawrite(154fy)
fsalidawrite(154fnz)
Impresioacuten del paso 5 valor del periacutemetro
fsalidawrite(n5 Caacutelculo del periacutemetro de la parcelan)
fsalidawrite( Periacutemetro153f mnperim)
Impresioacuten del paso 6 valor de la superficie de la parcela
fsalidawrite(n6 Caacutelculo de la superficie de la parcelan)
fsalidawrite( Superficie153f m2nsuperficie)
fsalidaclose()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
81
512 Impresioacuten del fichero de salida de resultados topo_praacutectica1
Ejecuando el programa anterior obtenemos un fichero con los resultados y la presentacioacuten mejorada que hemos implementado SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada visual
Punto Inicial Punto Final Acimut Desorientacioacuten
1000 2001 3539187 3184366
1000 2002 520128 3184482
1000 2003 1497887 3184347
1000 2004 2503428 3184361
2 Caacutelculo de la desorientacioacuten media
Desorientacioacuten media 3184389
3 Caacutelculo de las coordenadas polares
Punto Acimut Distancia
3001 3523102 4224303
3002 372099 3996170
3003 1590145 4400965
3004 2488172 4149959
4 Caacutelculo de las coordenadas cartesianas
Punto X Y Z
3001 27365966 33997199 6561414
3002 32447650 34236535 6566664
3003 32884285 27383773 6578851
3004 27363219 27915286 6569143
5 Caacutelculo del periacutemetro de la parcela
Periacutemetro 2358248 m
6 Caacutelculo de la superficie de la parcela
Superficie 342540930 m2
513 Salida de resultados topo_praacutectica2
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN DIRECTA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3264596 m
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
82
Y= 4065437 m
Previsioacuten de error planimeacutetrico= 0035 m
Vector con soluciones en z y su error
Z=725931 m Previsioacuten de error altimeacutetrico 0023 m
Z=725926 m Previsioacuten de error altimeacutetrico 0024 m
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN INVERSA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3010146 m
Y= 3411841 m
Previsioacuten de error planimeacutetrico= 0022 m
Vector con soluciones en z y su error
Z=515695 m Previsioacuten de error altimeacutetrico 0021 m
Z=515703 m Previsioacuten de error altimeacutetrico 0024 m
Z=515698 m Previsioacuten de error altimeacutetrico 0022 m
514 Salida de resultados topo_praacutectica3
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 3 CALCULO DE DATOS DE REPLANTEO PARA ESTACION TOTAL EN UN SISTEMA DE REFERENCIA
LOCAL
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
ResultadosDatos de replanteo
Base Punto Azimut Distancia CotaProyecto CotaTerreno CotaRoja
1 1 3856489 75460 96930 96539 0391
1 2 2667262 77786 96903 98259 -1356
1 3 1219144 40883 95329 94688 0641
1 4 279600 67437 95045 95587 -0542
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
83
515 Salida de resultados topo_praacutectica4
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 4 TRANSFORMACIOacuteN ENTRE SISTEMAS DE REFERENCIA LOCALES HELMERT 2D
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
Planteamiento del sistema de ecuaciones que define la transformacioacuten planimeacutetrica
Matriz A
1000 0000 3258686 -2709414
0000 1000 2709414 3258686
1000 0000 2075590 -2105320
0000 1000 2105320 2075590
Vector teacuterminos independientes
4554780
228501
3244004
443737
1 Resultados de los paraacutemetros de la transformacioacuten
- Planimetriacutea
- Traslacioacuten en coordenada x del sistema S1 al sistema S2 324401 m
- Traslacioacuten en coordenada y del sistema S1 al sistema S2 -20424 m
- Valor para el paraacutemetro a (a=landacos_giro) 0805119725
adimensional
- Valor para el paraacutemetro b (b=landasin_giro) -0593023724
adimensional
- Valor para el factor de escala (landa=sqrt(a2+b2)) 0999947
tanto por uno
- Valor para el giro (giro=arctan2(ba) -404157
grados centesimales
- Altimetriacutea
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 1 6056 m
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 2 6083 m
- Traslacioacuten media en coordenada z del sistema S1 al sistema S2 6070 m
2 Resultado de la transformacioacuten del punto 3 al sistema de referencia local S2
- Coordenada x de 3 en el sistema de referencia local S2 4072286 m
- Coordenada y de 3 en el sistema de referencia local S2 45170 m
- Coordenada z de 3 en el sistema de referencia local S2 104748 m
52 CASOS PRAacuteCTICOS GEODESIA En total se han realizada 5 casos praacutecticos dentro del apartado de geodesia Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica geo_practica1 Del resto soacutelo se ha incluido la salida de datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
84
521 Implementacioacuten del coacutedigo geo_praacutectica1
Semana Geomaacutetica 2011 Bogotaacute DC Colombia
IGAC-Instituto Agustiacuten Codazzi
Taller Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea GeoTop
Impartido por Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
Dr David Hernaacutendez Loacutepez davidhernandezulcmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
Praacutectica 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
Datos Coordenadas de la Red ERGNSS - Red de Estaciones Permanentes GNSS - Instituto
Geograacutefico Nacional Espantildea
Sistema de referencia ETRS89 (Elipsoide GRS80)
Coacutedigo EPSG para coordenadas geodeacutesicas sobre el elipsoide 4258
En esta versioacuten de la praacutectica se utiliza la libreriacutea GeoTop
Otra variante con respecto a la versioacuten anterior de la praacutectica es que se parte de coordenadas
geodeacutesicas en seudo decimal sexagesimal
Documentacioacuten La formulacioacuten empleada figura en el apartado 13 Parametrizacioacuten del
elipsoide del documento
OctaveTallerGeodesiaDocumentacionApuntes_DHL_2010GeodesiaElipsoidalpdf
Matriz de coordenadas
- Cada fila es un punto una estacioacuten de referencia GNSS
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada geodeacutesica longitud en suedo decimal sexagesimal
- Tercera columna- Coordenada geodeacutesica latitud en suedo decimal sexagesimal
- Cuarta columna- Altitud elipsoidal en metros
from numpy import zerosarraygenfromtxt
from geotopogeodesiaelipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiatri2geo import tri2geo
from geotopogeodesiageo2tri import geo2tri
c4258h=[ 1 432151770811 -82356167472 66917
2 382020103584 -02852437048 60356
3 385840494457 -15123054192 751736
4 365109112636 -22734018800 127517
5 392843898433 -62030426066 436527
6 432819118007 -34753038539 99287
7 355331090227 -51823016758 52475
8 375456176191 -44315999947 202082
9 371159923466 -65513077151 81860
10 402645009016 -34234283233 766920
11 423518259367 -53903511817 970254
12 364334003748 -42336718238 119848
13 393309445258 23728383134 62063
14 422728617761 -23007691629 503204
15 405642292231 -52945108842 854969
16 394031263811 -35750290360 808968
17 402101790155 -10727483699 956188
18 392850970441 -02015543423 77592
19 421102318373 -84847057525 87790
20 403129631681 -30519065001 972777
21 413800221985 -05255792567 296111
22 281829034024 -162958855078 2417483
23 282837857413 -161428164273 51787
24 282505711067 -163302841359 54475
25 280249784309 -164306688806 58543
26 284549932439 -175337787438 2199221]
Los datos los guardamos en un txt en la misma carpeta del trabajo e importamos
c4258h=genfromtxt(CPython27geotopoaplicacionestalleresgeo_practica1dattxt)
Caacutelculo de las dimensiones de la matriz de coordenadas
- m seraacute el nuacutemero de filas el nuacutemero de puntos
- n seraacute el nuacutemero de columnas 4
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
85
[mn]=c4258hshape
grs80=elipsoide(2)
Recibe Codigo del elipsoide (nelipsoide)
1 - Ed50 Devuelve el elipsoide Internacional 1924
2 - Etrs89 Devuelve el elipsoide GRS80
3 - Wgs84 Devuelve el elipsoide Wgs84
Definicioacuten del elipsoide
fsalida=open(geo_practica1salw)
fsalidawrite(SEMANA GEOMAacuteTICA - 2011n)
fsalidawrite(TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software
libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE
COORDENADAS GEODEacuteSICAS Y ECEFn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal
ggmmssfsn)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia ETRS89n)
fsalidawrite(- Paraacutemetros del elipsoide GRS80n)
fsalidawrite( - Semieje mayor 103f mngrs80[0])
fsalidawrite( - Inverso del aplanamiento 109f adimngrs80[1])
fsalidawrite( - Semieje menor 103f mngrs80[2])
fsalidawrite( - Primera excentricidad al cuadrado 109f adimngrs80[3]2)
fsalidawrite( - Segunda excentricidad al cuadrado 109f adimngrs80[4]2)
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(1 Paso de coordenadas geodeacutesicas a ECEFn)
fsalidawrite(NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF
CoorZECEFn)
c4258XYZ=zeros((m4))
for i in range (1m+1)
np=c4258h[i-10]
longitudRad=psdo2rad(c4258h[i-12])
latitudRad=psdo2rad(c4258h[i-11])
hElip=c4258h[i-13]
[xecefyecefzecef]=geo2tri(latitudRadlongitudRadhElip2)
fsalidawrite(80fnp)
fsalidawrite(159fc4258h[i-11])
fsalidawrite(159fc4258h[i-12])
fsalidawrite(123fhElip)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(n)
c4258XYZ[i-10]=np
c4258XYZ[i-11]=xecef
c4258XYZ[i-12]=yecef
c4258XYZ[i-13]=zecef
Caacutelculo e impresioacuten del paso 2 de coordenadas ECEF a geodeacutesicas
fsalidawrite(2 Paso de coordenadas ECEF a geodeacutesicasn)
fsalidawrite( NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud
AltElipn)
for i in range(1m+1)
np=c4258XYZ[i-10]
xecef=c4258XYZ[i-11]
yecef=c4258XYZ[i-12]
zecef=c4258XYZ[i-13]
[latitudlongitudhElip]=tri2geo(xecefyecefzecef2)
fsalidawrite(80fnp)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(159frad2psdo(latitud))
fsalidawrite(159frad2psdo(longitud))
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
86
fsalidawrite(153fnhElip)
fsalidaclose()
522 Impresioacuten del fichero de salida de resultados geo_praacutectica1
SEMANA GEOMAacuteTICA - 2011
TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea
GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal ggmmssfs
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia ETRS89
- Paraacutemetros del elipsoide GRS80
- Semieje mayor 6378137000 m
- Inverso del aplanamiento 0003352811 adim
- Semieje menor 6356752314 m
- Primera excentricidad al cuadrado 0006694380 adim
- Segunda excentricidad al cuadrado 0006739497 adim
1 Paso de coordenadas geodeacutesicas a ECEF
NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF CoorZECEF
1 43215177081 -8235616747 66917 4594489890 -678368010 4357065904
2 38202010358 -0285243705 60356 5009051399 -42072472 3935057504
3 38584049446 -1512305419 751736 4962848206 -160854365 3990884209
4 36510911264 -2273401880 127517 5105220295 -219278803 3804386889
5 39284389843 -6203042607 436527 4899866820 -544567584 4033769790
6 43281911801 -3475303854 99287 4625924690 -307096765 4365771175
7 35533109023 -5182301676 52475 5150908012 -478415023 3718518240
8 37545617619 -4431599995 202082 5021256063 -414685080 3898182184
9 37115992347 -6551307715 81860 5049613168 -612885631 3835143860
10 40264500902 -3423428323 766920 4851137670 -314518688 4116282036
11 42351825937 -5390351182 970254 4680871385 -463168384 4294606572
12 36433400375 -4233671824 119848 5103282414 -392096752 3793146894
13 39330944526 2372838313 62063 4919369704 225499577 4039849606
14 42272861776 -2300769163 503204 4708688612 -205761707 4283609369
15 40564229223 -5294510884 854969 4803054799 -462131609 4158378661
16 39403126381 -3575029036 808968 4904660519 -339868032 4050823512
17 40210179016 -1072748370 956188 4867391684 -95523894 4108341277
18 39285097044 -0201554342 77592 4929534046 -29050676 4033709925
19 42110231837 -8484705753 87790 4677481077 -725205068 4260827192
20 40312963168 -3051906500 972777 4848724914 -261632472 4123093922
21 41380022199 -0525579257 296111 4773803543 -73506519 4215453698
22 28182903402 -16295885508 2417483 5390243531 -1596630330 3007752593
23 28283785741 -16142816427 51787 5386836438 -1569217617 3023118925
24 28250571107 -16330284136 54475 5381262061 -1599192518 3017377791
25 28024978431 -16430668881 58543 5395193089 -1620537044 2981146536
26 28454993244 -17533778744 2199221 5326646317 -1719826438 3052043561
2 Paso de coordenadas ECEF a geodeacutesicas
NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud AltElip
1 4594489890 -678368010 4357065904 43215177081 -8235616747 66917
2 5009051399 -42072472 3935057504 38202010358 -0285243705 60356
3 4962848206 -160854365 3990884209 38584049446 -1512305419 751736
4 5105220295 -219278803 3804386889 36510911264 -2273401880 127517
5 4899866820 -544567584 4033769790 39284389843 -6203042607 436527
6 4625924690 -307096765 4365771175 43281911801 -3475303854 99287
7 5150908012 -478415023 3718518240 35533109023 -5182301676 52475
8 5021256063 -414685080 3898182184 37545617619 -4431599995 202082
9 5049613168 -612885631 3835143860 37115992347 -6551307715 81860
10 4851137670 -314518688 4116282036 40264500902 -3423428323 766920
11 4680871385 -463168384 4294606572 42351825937 -5390351182 970254
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
87
12 5103282414 -392096752 3793146894 36433400375 -4233671824 119848
13 4919369704 225499577 4039849606 39330944526 2372838313 62063
14 4708688612 -205761707 4283609369 42272861776 -2300769163 503204
15 4803054799 -462131609 4158378661 40564229223 -5294510884 854969
16 4904660519 -339868032 4050823512 39403126381 -3575029036 808968
17 4867391684 -95523894 4108341277 40210179016 -1072748370 956188
18 4929534046 -29050676 4033709925 39285097044 -0201554342 77592
19 4677481077 -725205068 4260827192 42110231837 -8484705753 87790
20 4848724914 -261632472 4123093922 40312963168 -3051906500 972777
21 4773803543 -73506519 4215453698 41380022199 -0525579257 296111
22 5390243531 -1596630330 3007752593 28182903402 -16295885508 2417483
23 5386836438 -1569217617 3023118925 28283785741 -16142816427 51787
24 5381262061 -1599192518 3017377791 28250571107 -16330284136 54475
25 5395193089 -1620537044 2981146536 28024978431 -16430668881 58543
26 5326646317 -1719826438 3052043561 28454993244 -17533778744 2199221
523 Salida de resultados geo_praacutectica2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
88
524 Salida de resultados geo_praacutectica3
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
89
525 Salida de resultados geo_praacutectica4
helliphellip
helliphellip
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
90
526 Salida de resultados geo_praacutectica5
Con la implementacioacuten y caacutelculo de los 9 casos praacutecticos realizados e incluidos en este Proyecto Final de Maacutester se puede obtener una idea de la aplicabilidad de esta libreriacutea en aplicaciones de caacutelculos topograacuteficos y geodeacutesicos Igualmente y como uno de los puntos de partida de este Proyecto obtenemos una libreriacutea muy potente para el uso en aacutembitos universitarios facilitando al profesorado el planteamiento y resolucioacuten de los distintos casos praacutecticos de las asignaturas y al tratarse de coacutedigo abierto se facilita que los alumnos implementen nuevas utilidades formatos de salida etc Convirtiendo geotopo en una herramienta de trabajo diario
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
91
6 CONCLUSIONES FINALES Como conclusiones finales podemos enumerar
Se ha corroborado lo que dicen los impulsores de Python se trata de un lenguaje limpio sencillo y claro muy proacuteximo a pseudocoacutedigo
Resulta interesante la utilizacioacuten de software libre para caacutelculos geodeacutesicos y topografiacuteacos Al tratarse de software libre es accesible a cualquier tipo de usuario
Al partir de la consideracioacuten de un paradigma estructurado de programacioacuten hemos conseguido implementar gran nuacutemero de funciones en ficheros (moacutedulos) de pequentildeo tamantildeo facilitando la programacioacuten Tambieacuten se ha iniciado en la programacioacuten orientada a objetos con la declaracioacuten de alguna clase
La importacioacuten de moacutedulos facilita a la implementacioacuten de coacutedigo sin necesitar volver a escribir el coacutedigo importado y ante cualquier modificacioacuten del mismo automaacuteticamente se actualiza en todos los programas o moacutedulos donde se importe dicho moacutedulo
Con las funciones definidas dentro de Numpy hemos realizado la mayor parte de los caacutelculos necesarios en nuestra biblioteca
Se ha de realizar la importacioacuten expresa de gran nuacutemero de operaciones matemaacuteticas Salvo + - y casi todos los demaacutes operadores se han de importar desde Numpy por ejemplo pi sqrt sin cos etc A veces puede resultar un poco complicado hacer la importacioacuten de estos operadores pero cuando se avanza en la programacioacuten hasta parece maacutes didactico reflejar todas las funciones importadas de otros moacutedulos
Se ha apreciado que en algunos casos las mismas funciones estaacuten incluidas en distintos moacutedulos y ademaacutes con nombres diferentes Asiacute en Numpy tenemos arcsin arccos arctan etc y en SciPy asin acos atan cuando se refieren a las mismas funciones arcoseno arcocoseno y arcotangente
Se ha creado una libreriacutea abierta accesible y editable para moder modificar
coacutedigo y tambieacuten poder ampliar con el implementado de nuevas funciones que aumenten el potencial de la misma Esto tambieacuten se incluye dentro de las liacuteneas futuras de actuacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
92
7 LIacuteNEAS FUTURAS DE ACTUACIOacuteN
De forma general se establecen las siguientes liacuteneas futuras de actuacioacuten e investigacioacuten
Avance en el desarrollo a aplicaciones informaacuteticas mediante el uso de software libre y en especial de Python
Estudio de la aplicabilidad de Python en el caacutelculo minimo-cuadraacutetico de sistemas de ecuaciones aplicables en topografiacutea y geodesia Para ello se ha de profundizar en el estudio de las diferencias entre los tipos array que contiene numpy y los tipos matrix par el caacutelculo avanzado de sistemas de ecuaciones
Aplicacioacuten de Python para el caacutelculo y ajuste de Redes Geodeacutesicas mediante la utilizacioacuten de miacutenimos cuadrados Con este fin estariacuteamos evitando el tener que recurrir a los softwares de caacutelculo de las casas comerciales ahorrando asiacute un coste importante y el poder realizar los ajustes y presentaciones de resultados adapatados a nuestras necesidades
Inclusioacuten de una interfaz graacutefica a los caacutelculos realizados para poder tener visualmente el resultado de los mismos
Aplicabilidad de python en el procesado de imaacutegenes Utilizacioacuten de la libreriacutea PIL (Python Imaging Library) que agrega capacidades de procesamiento de imaacutegenes al interprete Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
93
8 ANEJO
81 EQUIVALENCIAS ENTRE FUNCIONES EN MATLAB Y PYTHON Al partir de la libreiacutea Geotop en Octave hemos de tener en cuenta la equivanlencia entre algunas funciones de MatlabOctave con Python Asiacute tenemos MATLAB numpyarray numpymatrix Notes
ndims(a) ndim(a) or andim get the number of dimensions of a (tensor rank)
size(a) shape(a) or ashape get the size of the matrix
size(an) ashape[n-1]
get the number of elements of the nth dimension of array a (Note that MATLABreg uses 1 based indexing while Python uses 0 based indexing See note INDEXING)
MATLAB numpyarray numpymatrix Notes
[ 1 2 3 4 5 6 ] array([[123] [456]])
mat([[123] [456]]) or mat(1 2 3 4 5 6)
2x3 matrix literal
[ a b c d ] vstack([hstack([ab]) hstack([cd])])
bmat(a b c d) construct a matrix from blocks abc and d
a(end) a[-1] a[-1][00] access last element in the 1xn matrix a
a(25) a[14] access element in second row fifth column
a(2) a[1] or a[1] entire second row of a
a(15) a[05] or a[5] or a[05] the first five rows of a
a(end-4end) a[-5] the last five rows of a
a(1359) a[03][49] rows one to three and columns five to nine of a This gives read-only access
a([245][13]) a[ix_([134][02])] rows 24 and 5 and columns 1 and 3 This allows the matrix to be modified and doesnt require a regular slice
a(3221) a[ 2212] every other row of a starting with the third and going to the twenty-first
a(12end) a[ 2] every other row of a starting with the first
a(end-11) or flipud(a) a[ -1] a with rows in reverse order
a([1end 1]) a[r_[len(a)0]] a with copy of the first row appended to the end
a atranspose() or aT transpose of a
a aconj()transpose() or aconj()T
aH conjugate transpose of a
a b dot(ab) a b matrix multiply
a b a b multiply(ab) element-wise multiply
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
94
MATLAB numpyarray numpymatrix Notes
ab ab element-wise divide
a^3 a3 power(a3) element-wise exponentiation
(agt05) (agt05) matrix whose ijth element is (a_ij gt 05)
find(agt05) nonzero(agt05) find the indices where (a gt 05)
a(find(vgt05)) a[nonzero(vgt05)[0]] a[nonzero(vAgt05)[0]] extract the columms of a where vector v gt 05
a(find(vgt05)) a[vTgt05] a[vTgt05)] extract the columms of a where column vector v gt 05
a(alt05)=0 a[alt05]=0 a with elements less than 05 zeroed out
a (agt05) a (agt05) mat(aA (agt05)A) a with elements less than 05 zeroed out
a() = 3 a[] = 3 set all values to the same scalar value
y=x y = xcopy() numpy assigns by reference
y=x(2) y = x[1]copy() numpy slices are by reference
y=x() y = xflatten(1) turn array into vector (note that this forces a copy)
110 arange(111) or r_[111] or r_[11010j]
mat(arange(111)) or r_[111r]
create an increasing vector see note RANGES
09 arange(10) or r_[10] or r_[910j]
mat(arange(10)) or r_[10r]
create an increasing vector see note RANGES
[110] arange(111)[ newaxis] r_[111c] create a column vector
zeros(34) zeros((34)) mat() 3x4 rank-2 array full of 64-bit floating point zeros
zeros(345) zeros((345)) mat() 3x4x5 rank-3 array full of 64-bit floating point zeros
ones(34) ones((34)) mat() 3x4 rank-2 array full of 64-bit floating point ones
eye(3) eye(3) mat() 3x3 identity matrix
diag(a) diag(a) mat() vector of diagonal elements of a
diag(a0) diag(a0) mat() square diagonal matrix whose nonzero values are the elements of a
rand(34) randomrand(34) mat() random 3x4 matrix
linspace(134) linspace(134) mat() 4 equally spaced samples between 1 and 3 inclusive
[xy]=meshgrid(0805) mgrid[0906] or meshgrid(r_[09]r_[06]
mat() two 2D arrays one of x values the other of y values
ogrid[0906] or ix_(r_[09]r_[06]
mat() the best way to eval functions on a grid
[xy]=meshgrid([124][245]) meshgrid([124][245]) mat()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
95
ix_([124][245]) mat() the best way to eval functions on a grid
MATLAB numpyarray numpymatrix Notes
repmat(a m n) tile(a (m n)) mat() create m by n copies of a
[a b]
concatenate((ab)1) or hstack((ab)) or column_stack((ab)) or c_[ab]
concatenate((ab)1) concatenate columns of a and b
[a b] concatenate((ab)) or vstack((ab)) or r_[ab]
concatenate((ab)) concatenate rows of a and b
max(max(a)) amax() maximum element of a (with ndims(a)lt=2 for matlab)
max(a) amax(0) maximum element of each column of matrix a
max(a[]2) amax(1) maximum element of each row of matrix a
max(ab) maximum(a b) compares a and b element-wise and returns the maximum value from each pair
norm(v) sqrt(dot(vv)) or Scilinalgnorm(v) or linalgnorm(v)
sqrt(dot(vAvA)) or Scilinalgnorm(v) or linalgnorm(v)
L2 norm of vector v
a amp b logical_and(ab) element-by-element AND operator (Numpy ufunc) see note LOGICOPS
a | b logical_or(ab) element-by-element OR operator (Numpy ufunc) see note LOGICOPS
bitand(ab) a amp b bitwise AND operator (Python native and Numpy ufunc)
bitor(ab) a | b bitwise OR operator (Python native and Numpy ufunc)
inv(a) linalginv(a) inverse of square matrix a
pinv(a) linalgpinv(a) pseudo-inverse of matrix a
rank(a) linalgmatrix_rank(a) rank of a matrix a
ab linalgsolve(ab) if a is square
linalglstsq(ab) otherwise solution of a x = b for x
ba Solve aT xT = bT instead solution of x a = b for x
[USV]=svd(a) U S Vh = linalgsvd(a) V = VhT singular value decomposition of a
chol(a) linalgcholesky(a)T
cholesky factorization of a matrix (chol(a) in matlab returns an upper triangular matrix but linalgcholesky(a) returns a lower triangular matrix)
[VD]=eig(a) DV = linalgeig(a) eigenvalues and eigenvectors of a
[VD]=eig(ab) VD = Scilinalgeig(ab) eigenvalues and eigenvectors of ab
[VD]=eigs(ak) find the k largest eigenvalues and eigenvectors of a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
96
MATLAB numpyarray numpymatrix notes
[QRP]=qr(a0) QR = Scilinalgqr(a) mat() QR decomposition
[LUP]=lu(a) LU = Scilinalglu(a) or LUP=Scilinalglu_factor(a)
mat() LU decomposition
conjgrad Scilinalgcg mat() Conjugate gradients solver
fft(a) fft(a) mat() Fourier transform of a
ifft(a) ifft(a) mat() inverse Fourier transform of a
sort(a) sort(a) or asort() mat() sort the matrix
[bI] = sortrows(ai) I = argsort(a[i]) b=a[I] sort the rows of the matrix
regress(yX) linalglstsq(Xy) multilinear regression
decimate(x q) Scisignalresample(x len(x)q) downsample with low-pass filtering
unique(a) unique(a)
squeeze(a) asqueeze()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
97
9 BIBLIOGRAFIacuteA
DOWNEY A ELKNER J MEYERS C Aprenda a Pensar Como un Programador con Python GARCIacuteA-ASENJO VILLAMAYOR L HERNAacuteNDEZ LOacutePEZ D Geodesia Febrero 2005 GONZAacuteLEZ DUQUE R Python PARA TODOS Edicioacuten Internet bajo licencia Creative Commons Reconocimiento 25 Espantildea Descargable en httpmundogeeknettutorial-python MARZAL A GRACIA I Introduccioacuten a la programacioacuten con Python Departamento de Lenguajes y Sistemas Informaacuteticos Universitat Jaume I 2003 Edicioacuten Internet NUMPY COMMUNITY NumPy Reference Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg NUMPY COMMUNITY NumPy User Guide Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg VAN ROSSUM G Guiacutea de aprendizaje de PythonRelease 241ordf0 Edicioacuten Intenet Septiembre 2005 Descargable en httpwwwscipyorg VAN ROSSUM G El tutorial de Python Edicioacuten Intenet Descargable en httppythonorgarpyarTutorial
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
98
10 PAacuteGINAS WEB CONSULTADAS httpenfoquevirtualwordpresscomcategorytutorial httpgeektheplanetnet1347how-to-instalar-pydev-en-aptanaxhtml httpmundogeeknetarchivos20080328python-modulos-y-paquetes httpwwwthebitsourcecomprogramming-software-developmentpythonpython-application-development-aptana-pydev httpwwwyoutubecomwatchv=XtnfY2cBbMA youtube interesante trabajo con pydev y modulos httpcodingderkeilercomArchivePythoncomplangpython2005-08msg03511html paacutegina que explica coacutemo solucionar los problemas de Non-ASCII character httpeswikibooksorgwikiInmersiC3B3n_en_PythonSu_primer_programa_en_PythonDocumentado_de_funciones paacutegina que explica la cadena de documentacioacuten despueacutes de definir una funcioacuten con ldquordquordquo___rdquordquordquo (triples comillas) httpwwwpythonorgdevpepspep-0008 style guide for python code httpmundogeeknetarchivos20080707documentacion-en-python habla de la forma de documentar en python httpwwwpythonorgdevpepspep-0257 documentacioacuten y comentarios httpprogramandoideascomcomentarios-en-python documentacioacuten y comentarios httpwwwyoutubecomwatchv=v0sqRYuL5e8 tutorial de python con aptana httpwwwyoutubecomwatchv=29mq1Bn52GYampfeature=related youtube tutorial httpprojectsscipyorgnumpybrowsertrunknumpymatlibpyrev=8567 paacutegina que habla un poco de matrices
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
99
httpwwwgfceduco~arsranguias42p8guia42html cosas interesantes de matrices httpdocencia-euptunizaresctmedrascipy_tutorialscipy_tutorialhtml varios sobre python httpdocspythonorgtutorialmoduleshtml muy buena de paquetes etc httpwwwlinux-ittcom200804python-mdulos-y-paqueteshtml maacutes sobre paquetes httpwwwmclibreorgconsultarpythonotrosin03_idlehtmlccedil coding cp1252 httpwwwmclibreorgconsultarpython tutorial de python en la web Idle httpbioinfcomavupvescourseslinuxpythonmoduloshtml csv listasetc httpwwwdavidricardocommxp=1173 ok muy bueno importacioacuten csv como matriz httpwwwaprenderpythonorg httpwwwscipyorgNumpy_Example_List_With_Doc paacutegina muy importante de scipy httpjsbsanblogspotcom201101calculo-de-un-area-de-un-poligonohtml video sobre caacutelculo de areas de poliacutegonos irregulares httpmathesaurussourceforgenetmatlab-numpyhtml viprelacioacuten entre operaciones con octave y con python httpwwwscipyorgTentative_NumPy_Tutorial pagina importante de scipy httptecnologicumwordpresscomastronomiavideo-tutoriales-de-python todos los videotutoriales de python httpwwwyoutubecomwatchv=Oj3MZXWXGiUampfeature=related csv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
100
httptranslategoogleestranslatehl=esamplangpair=en7Cesampu=httpwwwscipyorgNumPy_for_Matlab_Users interesante sobre numpyhellip httpwikipythonorgmoinHowToSorting interesante de sort httpwikipythonorgmoinHowToSortingOperator_Module_Functions sort itemgetteretc httpcodeactivestatecomrecipes304440-sorting-dictionaries-by-value-in-python-24 operator itemgetter httpmundogeeknetarchivos20080402python-entrada-salida-ficheros entrada salida de archivos httpwwwgulicorgalmacenhttlaclwpchap11htm formato de escritura textos nuacutemeros y decimales httpwwwprogramacioncomarticuloguia_de_aprendizaje_de_python_657 formatos de salida httpnumpysourceforgenetnumdocHTMLnumdochtmpgfId-57315 muy importante sobre arraysetc httpwwwhjcbnlpythonArrayshtml muy importante sobre arraysetc httpwwwalecjacobsoncomweblogp=1570 cargar un txt como una matriz en python httpdocsscipyorgdocnumpyreferencegeneratednumpygenfromtxthtml getfromtxt de numpy httpwwwalegsaonlinecomart13php httpwwwumesdocenciabarzanaIAGPIagp3html httpwebusales~dhernandsoftwarehtmGeotop httpmailpythonorgpipermailtutor2008-March060886html From future import division
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
101
httpwwwyoutubecomwatchv=I6GMIQBD6EU youtube diccionarios httpmundogeeknetarchivos20080121python-tipos-basicos-ii-colecciones diccionarios httpstaffnotiaces~rcardeneshgdiveintopython3-esnative-datatypeshtml diccionarios httpwwwestrellateyardeorgdiscovermanual-python-lo-mas-basico diccionarios httpeswikibooksorgwikiInmersiC3B3n_en_PythonTipos_de_datos_nativosPresentaciC3B3n_de_los_diccionarios diccionarios httpdocspythonorgartutorialdatastructureshtmldiccionarios python estructura de diccionarios httpwwwwikilearningcomtutorialintroduccion_informal_a_matlab_y_octave-matrices_y_algebra_lineal_i19256-8 concatenar matrices httpwwwslidesharenetsantiagosilascomputao-cientfica-com-numpy-e-scipy-7797060 detalles de numpy vectores matricesetc httpwwwscipyorgNumPy_for_Matlab_Usershead-e9a492daa18afcd86e84e07cd2824a9b1b651935 muy importante de scipy arrays y matriceshellip httpdocsscipyorgdocnumpyreferencegeneratednumpyconcatenatehtml muy importante de scipy arrays y matriceshellip httppyspanishdocsourceforgenettut traduccioacuten del tutorial de Guido httpwwwscipyorgNumpy_Example_List_With_Dochead-5202db3259f69441c695ab0efc0cdf45341829fc httppyspanishdocsourceforgenetlibmodule-picklehtml funcioacuten pickle
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
102
httpnicocesarcomq=node23 carga de ficheros binarios httpstaffnotiaces~rcardeneshgdiveintopython3-esfileshtml apertura cierre carga de ficheros etc httppythonr2wordpresscom20080829leer-archivos-binarios-en-python lectura de ficheros binarios httpwwwignesignlayoutInherramientasdo descarga de ficheros regilla del IGN httpterrasitgvaeseskbtransformacion-coordenadas-utm-ed50-utm-etrs89-utilizando-libreria-proj4 paacutegina de la gva sobre cambio de sistema y fichero rejilla httpdocspythonorglibrarystructhtml moacutedulo struct de python para lectura de ficheros binarios httpwwwslidesharenetjpadillaaprogramacion-orientada-a-objetos-en-python programacioacuten orientada a objetos con python httppyspanishdocsourceforgenettutnode7html recorrer diccionarios httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 interesante aplicacioacuten fichero rejilla ntv2 en python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
1
TABLA DE CONTENIDOS
1 OBJETIVOS DEL TRABAJO 3
2 CONTEXTO DEL PROYECTO 4
21 iquestPOR QUEacute SOFTWARE LIBRE 4
22 LENGUAJES DE PROGRAMACIOacuteN 7
23 PARADIGMAS DE PROGRAMACIOacuteN 8
24 iquestPOR QUEacute PYTHON 9
241 Caracteriacutesticas de Python 9
3 INSTRUMENTACIOacuteN Y SOFTWARE EMPLEADOS PHYTON 12
31 INTRODUCCIOacuteN A PYTHON 12
311 Guiacutea de aprendizaje de Python por Guido Van Rossum v24 16
3111 Llamar al inteacuterprete 17
3112 Moacutedulos 22
3113 El camino de buacutesqueda de moacutedulos 23
3114 Ficheros Python ldquoCompiladosrdquo 23
3115 Moacutedulos estandar 24
3116 Paquetes 24
3117 Importar de un paquete 27
3118 Referencias internas al paquete 28
32 FUNCIONES INCLUIDAS EN NUMPY POR CATEGORIacuteAS (ARRAY CREATION) 28
4 METODOLOGIacuteA 36
41 ESTRUCTURA DE LA LIBRERIacuteA GEOTOPO 36
42 DOCUMENTADO DE FUNCIONES 42
43 FUNCIONES IMPLEMENTADAS 47
431 Libreriacutea en Python ldquogeotopogeneralrdquo 47
432 Libreriacutea en Python ldquogeotopotopografiardquo 50
433 Libreriacutea en Python ldquogeotopogeodesiardquo 52
434 Libreriacutea en Python ldquogeotopoproy_cartograficasrdquo 60
435 Libreriacutea en Python ldquogeotopotransformacionrdquo 70
5 APLICABILIDAD DE LA LIBRERIacuteA Y CONCLUSIONES FINALES 73
51 CASOS PRAacuteCTICOS TOPOGRAFIacuteA 77
511 Implementacioacuten del coacutedigo topo_praacutectica1 77
512 Impresioacuten del fichero de salida de resultados topo_praacutectica1 81
513 Salida de resultados topo_praacutectica2 81
514 Salida de resultados topo_praacutectica3 82
515 Salida de resultados topo_praacutectica4 83
52 CASOS PRAacuteCTICOS GEODESIA 83
521 Implementacioacuten del coacutedigo geo_praacutectica1 84
522 Impresioacuten del fichero de salida de resultados geo_praacutectica1 86
523 Salida de resultados geo_praacutectica2 87
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
2
524 Salida de resultados geo_praacutectica3 88
525 Salida de resultados geo_praacutectica4 89
526 Salida de resultados geo_praacutectica5 90
6 CONCLUSIONES FINALES 91
7 LIacuteNEAS FUTURAS DE ACTUACIOacuteN 92
8 ANEJO 93
81 EQUIVALENCIAS ENTRE FUNCIONES EN MATLAB Y PYTHON 93
9 BIBLIOGRAFIacuteA 97
10 PAacuteGINAS WEB CONSULTADAS 98
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
3
1 OBJETIVOS DEL TRABAJO Dentro del marco general de la guiacutea docente del Maacutester en Geotecnoloacutegias Cartograacuteficas en Ingenieriacutea y Arquitectura impartido por la Escuela Politeacutecnica Superior de Aacutevila de la Universidad de Salamanca se establece como requisito para la obtencioacuten de esta titulacioacuten la realizacioacuten de un proyecto final de maacutester A tal fin responde el presente trabajo en el que se ha optado por la realizacioacuten de un proyecto de desarrollo de herramientas en Python para caacutelculos geodeacutesicos y topograacuteficos Como Ingeniero Teacutecnico en Topografiacutea numerosas han sido las necesidades de disponer de herramientas informaacuteticas para los distintos caacutelculos necesarios desde la etapa de estudiante en la Universidad como una vez incurso en la vida laboral Desde el simple caacutelculo de un acimut y distancia entre dos puntos medidas de superficies encerradas en poliacutegonos irregulares datos de replanteo de puntos caacutelculo de previsioacuten de errores o las diferentes transformaciones de coordenadas de grandes cantidades de puntos entre unas proyecciones y otras y entre distintos Sistemas de Referencia Coordenados Partiendo de esta necesidad y de la existencia de la libreriacutea ldquoGeotoprdquo en Octave del Profesor y Co-tutor de este proyecto Dr D David Hernaacutendez Loacutepez se han elaborado una serie de herramientas en Python para caacutelculos geodeacutesicos y topograacuteficos en Python principalmente migrando del lenguaje Octave a lenguaje Python Ademaacutes del uso para caacutelculos topograacuteficos en aacutembitos del uso diario de ingenieros Teacutecnicos en Topografiacutea o cualquier Ingenieriacutea afiacuten esta libreriacutea tambieacuten se concibe como una herramienta de uso para el estudiante de estas disciplinas en las Universidades Al tratarse de software libre es perfectamente editable y adaptable a las necesidades de caacutelculo y presentacioacuten que se consideren oportunas La eleccioacuten de Python aunque posteriormente se desarrolle maacutes se debe a que se trata de un lenguaje de programacioacuten faacutecil de aprender y potente Tiene eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de plataformas El inteacuterprete de Python y la extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables y se pueden distribuir libremente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
4
2 CONTEXTO DEL PROYECTO Dentro de los objetivos de este proyecto se encuentra el aprendizaje y desarrollo de herramientas con software libre y tambieacuten la eleccioacuten de Python al tratarse de un lenguaje de programacioacuten que aunque parece novedoso esta encontrando gran aceptacioacuten en entornos docentes y tambieacuten en el desarrollo de programacioacuten en la empresa privada
21 iquestPOR QUEacute SOFTWARE LIBRE Muchiacutesimos gobiernos de todo el mundo estaacuten empezando a ver al software libre como una poderosa herramienta para disminuir sus costos de administracioacuten reducir la dependencia tecnoloacutegica y fomentar sus industrias locales de software Las razones principales que impulsan la migracioacuten de los sistemas de informacioacuten de las administraciones puacuteblicas al software libre son
Ahorro econoacutemico El bajo o nulo coste de los productos libres permiten a las PYMES servicios y ampliar sus infraestructuras sin que se vean mermados sus intentos de crecimiento por no poder hacer frente al pago de cantidades en licencias
Independencia tecnoloacutegica mayor transparencia aumento de la interoperabilidad permite auditar el coacutedigo fuente etc El secretismo tenoloacutegico es uno de los grandes frenos y desequilibrios existentes para el desarrollo en el modelo de propiedad intelectual
Fomenta el desarrollo local y la industria nacional de software La praacutectica totalidad de los concursos para desarrollo de software para la administracioacuten puacuteblica pasan por compatibilizar con productos de la factoriacutea de Microsoft por lo que garantiza la perpetuacioacuten e ingresos hacia Microsoft y no favorece a las empresas locales que pudieran ofrecer productos equivalentes Ademaacutes de la reduccioacuten de costes por uso de software libre iquestqueacute podriacutean aportar esas inversiones si los beneficiados fuesen empresas del propio estado en lugar de mandar a una compantildeiacutea extranjera esas enormes cantidades de dinero
Facilita la adaptacioacuten a las necesidades concretas de las administraciones en materia linguumliacutestica legislativa de accesibilidad e imagen
El conocimiento generado es puacuteblico Fomento de la libre competencia al basarse en servicios y no licencias
Uno de los modelos de negocio que genera el software libre es la contratacioacuten de servicios de atencioacuten al cliente Este sistema permite que las compantildeiacuteas que den el servicio compitan en igualdad de condiciones a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
5
no poseer la propiedad del producto del cual dan el servicio
Tratamiento seguro de los datos y la informacioacuten Formatos estaacutendar Los formatos estaacutendar permiten una
interoperatividad maacutes alta entre sistemas evitando incompatibilidades Los estaacutendares de facto son vaacutelidos en ocasiones para lograr una alta interoperatividad si se omite el hecho que estos exigen el pago de royalities a terceros y por razones de mercado no interesa que se perpetuacuteen mucho tiempo
Sistemas sin puertas traseras y maacutes seguros El acceso al coacutedigo fuente permite que tanto hackers como empresas de seguridad de todo el mundo puedan auditar los programas por lo que la existencia de puertas traseras es iloacutegica ya que se pondriacutea en evidencia y contraviene el intereacutes de la comunidad que es la que lo genera
Correccioacuten maacutes raacutepida y eficiente de fallos El funcionamiento e intereacutes conjunto de la comunidad ha demostrado solucionar maacutes raacutepidamente los fallos de seguridad en el software libre algo que desgraciadamente en el software propietario es maacutes difiacutecil y costoso
Meacutetodos simples y unificados de gestioacuten de software Actualmente la mayoriacutea de distribuciones de linux incorporan alguno de los sistemas que unifican el meacutetodo de instalacioacuten de programas libreriacuteas etc Por parte de los usuarios Asiacute se permite el acceso a las miles de aplicaciones existentes de forma segura y gratuita a la par que evitan tener que recurrir a paacuteginas web de dudosa eacutetica desde las que los usuarios instalan sin saberlo spyware o virus informaacuteticos en sus sistemas Este sistema de acceso y gestioacuten del software se hace praacutecticamente utoacutepico si se extrapola al mercado propietario
Sistema en expansioacuten El software libre ya no es una promesa es una realidad y se utiliza en sitemas de produccioacuten por algunas de las empresas tecnoloacutegicas maacutes importantes como IBM Sun Microsystems Google Hewlett-Packard etc Paradoacutejicamente incluso Microsoft que posee sus propias herramientas emplea GNU Linux en muchos de sus servidores
Entre los paiacuteses maacutes adeptos al software libre sus desarrollos y alcance de sus
proyectos de migracioacuten se encuentran de la siguiente manera ALEMANIA Alemania es el paiacutes con mayor uso del software libre del mundo No
soacutelo estaacute presente en todas sus dependencias gubernamentales y universidades sino que tiene programas multimillonarios para el desarrollo de aplicaciones libres En 2009 destinoacute maacutes de 500 millones de Euros al proyecto ldquoOpen Source and Green ITrdquo El software libre es tan importante para los alemanes que incluso el 59 de sus empresas lo utiliza el argumento maacutes utilizado no es la reduccioacuten de costos sino la posibilidad de poder modificar el coacutedigo fuente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
6
BRASIL Fue el primer paiacutes en migrar masivamente sus sistemas de informacioacuten a alternativas open source Se llevoacute a cabo en primera instancia en el estado de Riacuteo Grande luego se realizoacute a escala nacional
ARGENTINA Existen varias iniciativas estatales que apuntan a fomentar el desarrollo de software libre Actualmente el software libre estaacute implementado en algunas provincias siendo Santa Fe el maacuteximo exponente de utilizacioacuten doacutende todo el software ha sido liberado bajo licencia GPL
FRANCIA La Asamblea Nacional utiliza software libre en todos sus sistemas y terminales de trabajo Francia viene tomando impulso en el desarrollo de software open source existen iniciativas para que el 20 del software contratado por la Administracioacuten Puacuteblica sea libre para el 2012 tambieacuten ofrece beneficios fiscales para las agrupaciones de usuarios y desarrolladores de SL
ESPANtildeA Espantildea se ha apostado como uno de los mayores impulsores mundiales del uso de software libre Actualmente existen 200 empresas proveedoras de soluciones 100 comunidades de usuarios y 180 centros educativos donde el software de coacutedigo abierto es una realidad cotidiana Muchos ayuntamientos y universidades ya se pasaron a sistemas open source
A principios de 2010 se presentoacute un proyecto liderado por la Plataforma Tecnoloacutegica Espantildeola de Software y Servicios con el apoyo del Plan Avanza Dicho plan pretende colocar a Espantildea a la par del resto de Europa en el disentildeo y uso de software libre de confianza y calidad similares a los comerciales Este proyecto llamado Vulcano trata de unificar el trabajo de distintas universidades centros tecnoloacutegicos y empresas que hasta el momento habiacutean dedicado sus esfuerzos al aacutembito de la educacioacuten
En un entrevista ofrecida por David Saacutenchez Director de Comunicacioacuten y Relaciones Instituciones en CENATIC que es el Centro Nacional de Referencia de Aplicacioacuten de las Tecnologiacuteas de la informacioacuten y la Comunicacioacuten basadas en Fuentes Abiertas podemos encontrar httpwwwmuylinuxcom20110407entrevistamos-a-david-sanchez-de-cenatic
CENATIC es una Fundacioacuten Puacuteblica Estatal del gobierno de Espantildea promovida por el Ministerio de Industria Turismo y Comercio y la Junta de Extremadura que ademaacutes cuenta en su patronato con las comunidades autoacutenomas de Andaluciacutea Aragoacuten Asturias Cantabria Cataluntildea Islas Balares Paiacutes Vasco y Galicia asiacute como las empresas Atos Origin Telefoacutenica y Grupo Aacutepex
Su trabajo es promover el conocimiento y uso del software libre en todos los aacutembitos de la sociedad con especial atencioacuten en las administraciones puacuteblicas las empresas el sector tecnoloacutegico proveedor o usuario de tecnologiacuteas libres y las comunidades de desarrollo a traveacutes de proyectos especiacuteficos para cada uno de estos sectores
ldquo La apuesta a del Administracioacuten del Estado por el software libre se inicioacute ya en los 90 cuando el entonces ministerio para las Administraciones Puacuteblicas llevoacute a cabo la primera gran migracioacuten a software libre de 1375 servidores Llegaron tambieacuten proyectos como el del Principado de Asturias para generar de forma colaborativa un
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
7
marco basado en software libre que permitioacute crear cluacutester de empresas locales capaces de aportar servicios de eAdministracion que de otra manera tendriacutean que haber contratado fuera de su comunidadrdquo
ldquo O el proyecto de gvSIG de la Conselleriacutea d‟Infrestructures i Transport de la Generalitat Valenciana un sistema de informacioacuten geograacutefico que cuenta con un tejido empresarial local alrededor del proyecto y estaacuten haciendo de la Comunidad Valenciana el nuacutecleo maacutes activo a nivel mundial de desarrollo GIS en entornos libres Tambieacuten es muy conocido el proyecto de Red Tecnoloacutegica Educativa de la Junta de Extremadura con Linex como primera distribucioacuten regional y concepto pionero adoptado ya por 7 comunidades autoacutenomasrdquo ldquoFinalmente a nivel de administracioacuten local hasta el 80 de los grandes ayuntamientos cuentan hoy en diacutea con proyectos de software libre siendo quizaacute el maacutes destacado el del Ayuntamiento de Zaragozardquo
22 LENGUAJES DE PROGRAMACIOacuteN Un lenguaje de programacioacuten es un lenguaje artificial que puede ser usado para controlar el comportamiento de una maacutequina especialmente una computadora Estos se componen de un conjunto de reglas sintaacutecticas y semaacutenticas que permiten expresar instrucciones que luego seraacuten interpretadas Debe distinguirse de ldquolenguaje informaacuteticordquo que es una definicioacuten maacutes amplia puesto que estos incluyen otros lenguajes como son el HTML o PDF que dan formato a un texto y no es programacioacuten en siacute misma El programador es el encargado de utilizar un lenguaje de programacioacuten para crear un conjunto de instrucciones que al final constituiraacute un programa o subprograma informaacutetico En su uso un lenguaje de programacioacuten puede acercarse a la forma humana de expresarse y por eso este tipo de lenguajes es llamado de alto nivel Esto significa que utilizan palabras y formas en sus estructuras que se asemejan al lenguaje natural (especialmente al ingleacutes) En cambio aquellos lenguajes que se aproximan maacutes a la forma en la cual la computadora se maneja son llamados lenguajes de bajo nivel Esto significa que lo que el programador deba escribir se acercaraacute al lenguaje maacutequina que es en definitiva lo que las computadoras pueden interpretar De todas maneras un lenguaje de programacioacuten difiere en muchos aspectos de un lenguaje humano Un coacutedigo escrito en un lenguaje de programacioacuten especiacutefico siempre se interpreta de la misma manera (no como los idiomas humanos ambiguos) los errores son mucho maacutes significativos (a tal punto de que un coacutedigo puede volverse ininterpretable por la computadora) etc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
8
El coacutedigo fuente es el conjunto de instrucciones que conforman un programa (o subprograma o moacutedulo) El coacutedigo fuente debe ser compilado para poder ser interpretado y ejecutado por la computadora La compilacioacuten traduce el coacutedigo fuente (que depende del lenguaje de programacioacuten) a un lenguaje maacutequina (que depende del sistema de la maacutequina) Existen lenguajes del tipo script que son directamente ejecutados por un inteacuterprete y no necesitan compilacioacuten Los lenguajes de programacioacuten pueden clasificarse empleando distintos meacutetodos y puntos de vista Esta clasificacioacuten se basa en el paradigma que utilizan Se debe aclarar que existen muchos maacutes paradigmas y subparadigmas de programacioacuten no incluidos dentro de los mencionados Ademaacutes todaviacutea hay conflictos en las definiciones y alcances de ciertos paradigmas
23 PARADIGMAS DE PROGRAMACIOacuteN Un paradigma de programacioacuten provee (y determina) la visioacuten y meacutetodos de un programador en la construccioacuten de un programa o subprograma Diferentes paradigmas resultan en diferentes estilos de programacioacuten y en diferentes formas de pensar la solucioacuten de problemas (con la solucioacuten de muacuteltiples ldquoproblemasrdquo se construye una aplicacioacuten) Los lenguajes de programacioacuten son basados en uno o maacutes paradigmas (Veacutease Programacioacuten en muacuteltiples paradigmas) Por ejemplo Smalltalk y Java son lenguajes basados en el paradigma orientado a objetos El lenguaje de programacioacuten Scheme en cambio soporta soacutelo programacioacuten funcional En cambio Python soporta muacuteltiples paradigmas Clasificacioacuten por paradigmas de programacioacuten Paradigma Imperativo describe la programacioacuten como una secuencia instrucciones o comandos que cambian el estado de un programa El coacutedigo maacutequina en general estaacute basado en el paradigma imperativo Su contrario es el paradigma declarativo En este paradigma se incluye el paradigma procedimental (procedural) entre otros Paradigma Declarativo No se basa en el coacutemo se hace algo (coacutemo se logra un objetivo paso a paso) sino que describe (declara) coacutemo es algo En otras palabras se enfoca en describir las propiedades de la solucioacuten buscada dejando indeterminado el algoritmo (conjunto de instrucciones) usado para encontrar esa solucioacuten Es maacutes complicado de implementar que el paradigma imperativo tiene desventajas en la eficiencia pero ventajas en la solucioacuten de determinados problemas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
9
Paradigma Estructurado la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Ademaacutes la programacioacuten se controla con secuencia seleccioacuten e iteracioacuten Permite reutilizar coacutedigo programado y otorga una mejor compresioacuten de la programacioacuten Es contrario al paradigma inestructurado de poco uso que no tiene ninguna estructura es simplemente un ldquobloquerdquo como por ejemplo los archivos batch (bat) Paradigma Orientado a Objetos estaacute basado en la idea de encapsular estado y operaciones en objetos En general la programacioacuten se resuelve comunicando dichos objetos a traveacutes de mensajes (programacioacuten orientada a mensajes) Se puede incluir -aunque no formalmente- dentro de este paradigma el paradigma basado en objetos que ademaacutes posee herencia y subtipos entre objetos Ej Simula Smalltalk C++ Java Visual Basic NET etc Su principal ventaja es la reutilizacioacuten de coacutedigos y su facilidad para pensar soluciones a determinados problemas Paradigma Funcional este paradigma concibe a la computacioacuten como la evaluacioacuten de funciones matemaacuteticas y evita declarar y cambiar datos En otras palabras hace hincapieacute en la aplicacioacuten de las funciones y composicioacuten entre ellas maacutes que en los cambios de estados y la ejecucioacuten secuencial de comandos (como lo hace el paradigma procedimental) Permite resolver ciertos problemas de forma elegante y los lenguajes puramente funcionales evitan los efectos secundarios comunes en otro tipo de programaciones Paradigma loacutegico se basa en la definicioacuten de reglas loacutegicas para luego a traveacutes de un motor de inferencias loacutegicas responder preguntas planteadas al sistema y asiacute resolver los problemas Ej prolog Otros paradigmas y subparadigmas son paradigma orientado al sujeto paradigma heuriacutestico paradigma reflectante programacioacuten basada en reglas paradigma basado en restricciones programacioacuten basada en prototipos etc
24 iquestPOR QUEacute PYTHON
241 Caracteriacutesticas de Python
Python es un lenguaje de programacioacuten de tipo script creado por Guido van Rossum a principios de los antildeos 90 cuyo nombre proviene del grupo ldquoMonty Pythonrdquo El objetivo es un lenguaje con una sintaxis muy limpia y con un coacutedigo legible Python es un lenguaje de programacioacuten multiparadigma Esto significa que maacutes que forzar a los programadores a adoptar un estilo particular de programacioacuten permite varios estilos programacioacuten orientada a objetos programacioacuten imperativa funcional estructurada
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
10
etc Otros paradigmas estaacuten soportados mediante el uso de extensiones Los lenguajes de script (lenguajes interpretados de muy alto nivel como Perl y Python) gozan de creciente importancia e implantacioacuten en el mundo del software libre Python es un lenguaje de programacioacuten faacutecil de aprender y potente Dispone de eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos simple pero eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de las plataformas En Python no hay terminadores de sentencia (como el punto y como de CC++Java) ni marcas de iniciofin de bloque (como las llaves de esos mismos lenguajes) La indentacioacuten como forma de marcar bloques elimina errores propios de los lenguajes citados y que son frecuentes en los estudiantes y tambieacuten en los programadores profesionales sentencias condicionales sin accioacuten por antildeadir un punto y coma incorrectos bucles con una sola sentencia cuando parece que hay dos o maacutes (por omisioacuten de llaves con un sangrado inadecuado del programa) sentencias con semaacutentica ldquoalteradardquo por usar una coma cuando corresponde un punto y coma o por omitir un punto y coma al declarar un registro antes de una funcioacuten etc La indentacioacuten soacutelo resulta molesta cuando el tamantildeo de un bloque de cierta profundidad excede del tamantildeo de la ventana del editor Python es un lenguaje interpretado Los lenguajes interpretados permiten ciclos de desarrollo breves (edicioacuten y ejecucioacuten) que animan a los estudiantes a experimentar Python dispone de un entorno de ejecucioacuten que ayuda a detectar los errores (incluyendo aquellos que soacutelo se manifiestan en ejecucioacuten) sentildealaacutendolos con mensajes muy informativos Python ofrece ademaacutes un entorno interactivo con el que es posible efectuar pequentildeas pruebas o disentildear incrementalmente las soluciones a los problemas La contrapartida de que se trate de un lenguaje interpretado es obviamente la menor velocidad de ejecucioacuten Python puede considerarse pseudocoacutedigo ejecutable Es muy expresivo y su sintaxis sencilla interfiere poco en la implementacioacuten de algoritmos asiacute que resulta un buen sustituto del pseudocoacutedigo con la ventaja de que los algoritmos codificados en Python siacute son ejecutables Python ofrece un rico conjunto de estructuras de datos flexibles El tipo lista de python (un vector dinaacutemico heterogeacuteneo) permite introducir con naturalidad el concepto de secuencia y presentar los algoritmos baacutesicos de manejo de secuencias Que la indexacioacuten empiece siempre en 0 ayuda a dar el salto a C C++ o Java El entorno de ejecucioacuten proporciona comprobacioacuten de validez de los iacutendices eliminando asiacute una de las principales fuentes de problemas de C y C++ El hecho de que las listas sean
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
11
redimensionables elimina al programador la necesidad de tomar decisiones acerca de la longitud maacutexima de los vectores demasiado pronto Por otra parte Python es un lenguaje muy ortogonal una vez se ha aprendido a manejar listas por ejemplo se sabe manejar cadenas ya que ambos tipos son secuenciales y presentan conjuntos de operadores con igual nombre y semaacutentica Ademaacutes de listas y cadenas Python ofrece tuplas (listas inmutables) y diccionarios (vectores asociativos) Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc No es que haya que presentar todos los moacutedulos pero sirve para ayudar a consultar la documentacioacuten de las bibliotecas disponibles favorece la programacioacuten eficiente
Python es orientado a objetos A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulos en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar al de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
El inteacuterprete de Python y su extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables para las plataformas maacutes importantes en la sede web de Python httppythonorg y se pueden distribuir libremente La misma sede contiene tambieacuten distribuciones y direcciones de muchos moacutedulos programas y herramientas Python de terceras partes ademaacutes de documentacioacuten adicional Es faacutecil ampliar el inteacuterprete de Python con nuevas funciones y tipos de datos implementados en C o C++ (u otros lenguajes a los que se pueda acceder desde C) Python es tambieacuten adecuado como lenguaje de extensioacuten para aplicaciones adaptables al usuario Algunas de las empresas que usan Python son Google Yahoo Industrial Light amp Magic Walt Disney NASA SGI Inc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
12
3 INSTRUMENTACIOacuteN Y SOFTWARE EMPLEADOS PHYTON
31 INTRODUCCIOacuteN A PYTHON Como se comentoacute en el punto anterior Python
es orientado a objetos (realmente es multiparadigma aceptando distintos tipos de paradigmas) A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulo en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar a l de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc
Entre estas bibliotecas cabe mencionar Numpy Numpy es un moacutedulo de Python escrito en C que define los vectores numeacutericos las matrices y las operaciones entre ellos Ademaacutes de las funciones sobre vectores y matrices tambieacuten incluye funciones trigonomeacutetricas del tipo sin cos tan etc Numpy es el paquete fundamental necesario para programacioacuten cientiacutefica con Python Contiene entre otras cosa
Un poderoso N-dimensional objeto vector Sofisticadas funciones Herramientas para integracioacuten con coacutedigo de C C++ y Fortram Uacutetiles de algebra lineal Transformada de Fourier y capacidades de
nuacutemeros aleatorios Ademaacutes de sus usos cientiacuteficos obvios NumPy tambieacuten se puede utilizar como un eficiente multi-dimensional contenedor de datos geneacutericos Pueden ser definidos tipos arbitrarios de datos Esto permite integrar a la perfeccioacuten y raacutepidamente con una amplia variedad de bases de datos El objeto principal de Numpy es el vector homogeacuteneo multidimensional Eacuteste es una tabla de elementos (generalmente nuacutemeros) todos del mismo tipo indexados por una tupla de enteros positivos Por ldquomultidimensionalrdquo entendemos que los vectores pueden tener varias dimensiones de ejes El nuacutemero de ejes se llamaraacuten a menudo ldquorangordquo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
13
Por ejemplo las coordenadas de un punto en el espacio 3D seriacutea [1 2 1] que
representariacutea un vector de rango 1 de longitud 3 Otro ejemplo seriacutea
[[ 1 0 0]
[ 0 1 2]]
que representa un array de rango 2 (2 dimensiones) Para maacutes informacioacuten mirar
Numpy Glossary
Otras libreriacuteas importantes en Python son Scipy es otra libreriacutea que usa Numpy El desarrollo de Scipy comenzoacute en el antildeo 2001 Sus oriacutegenes se remontan al paquete con extensiones numeacutericas para Python denominado Numeric Posteriormente aparecioacute Numarray con la intencioacuten de construir un paquete maacutes flexible y de limpiar el coacutedigo aunque resultoacute ser maacutes lengo para caacutelculos matriciales en pocas dimensiones En el antildeo 2005 el principal impulsor de Scipy Travis Oliphant reunificoacute ambos en un uacutenico paquete que integrse las ventajas de ambos y se denominoacute Numpy considerado el nuacutecleo de Scipy Scipy en siacute mismo se concibe actualmente como una extensioacuten de las funcionalidades de Numpy
Scipy posee moacutedulos para optimizacioacuten de funciones integracioacuten funciones especiales resolucioacuten de ecuaciones diferenciales ordinarias y otros muchos aspectos
Puede ser usado con Linux Windows y ha sido tambieacuten compilado para Sun y Mac
Scipy es un proyecto de software libre que ha sido patrocinado por una compantildeiacutea Enthought inc
Su organizacioacuten se estructura en subpaquetes que se pueden considerar especializados en dominios cientiacuteficos determinados Podemos encontrar estos paquetes seguacuten la ayuda de scipy (v046)
stats -- Statistical Functions sparse -- Sparse matrix lib -- Python wrappers to external libraries linalg -- Linear algebra routines signal -- Signal Processing Tools misc -- Various utilities that dont have another home interpolate -- Interpolation Tools [] optimize -- Optimization Tools [] cluster -- Vector Quantization Kmeans [] fftpack -- Discrete Fourier Transform algorithms []
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
14
io -- Data input and output [] maxentropy -- Routines for fitting maximum entropy models [] integrate -- Integration routines [] liblapack -- Wrappers to LAPACK library [] special -- Special Functions [] libblas -- Wrappers to BLAS library []
Matplotlib es una libreriacutea de Python que facilita la publicacioacuten de calidad de la publicacioacuten interactiva Permite obtener graacuteficas de calidad para publicaciones Su principal submoacutedulo para dibujar es pyplot Mayavi Ipython PIL (Python Imaging Library) Pythonxy EPD (Enthought python distribution $$) hellip Este texto como Memoria de un Proyecto Final de Maacutester no pretende ser ni mucho menos un manual de Python pero siacute son necesarios unos conocimientos previos primero para comprender la filosofiacutea del programador y posteriormente saber las utilidades que podemos obtener al trabajar con Python Para ello vamos a incluir algunos detalles incluidos entro de la Guiacutea de aprendizaje de Python por Guido Van Rossum v24 creador de Python Para la realizacioacuten de este documento se ha consultado como aparece en Bibliografiacutea y Referencias en la Web numerosa documentacioacuten pero como punto de partida parece loacutegico recoger la documentacioacuten de la Guiacutea de aprendizaje del propio creador de Python Python contiene una serie de palabras clave dependientes de la versioacuten de instalacioacuten para asegurarnos de las palabras clave de la versioacuten descargada podemos introducir el siguiente coacutedigo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
15
Palabras clave de Python De la misma manera Python trae consigo ciertas funciones que vienen de serie esto es no es necesario cargarlas desde ninguacuten moacutedulo Dichas funciones dependen de la versioacuten de Python instalada En la paacutegina httpdocspythonorglibraryfunctionshtml Nos encontramos con dicha relacioacuten A modo de resumen eacutestas son (ver paacutegina siguiente)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
16
Funciones internas de Python
311 Guiacutea de aprendizaje de Python por Guido Van Rossum v24
Extractos del documento Si en alguna ocasioacuten hemos escrito un guioacuten para un inteacuterprete de oacuterdenes (o shell script) de UNIX largo puede que hayamos sentido que nos encantariacutea antildeadir una caracteriacutestica maacutes pero ya es tan lento tan grande tan complicadohellip O la caracteriacutestica involucra una llamada al sistema u otra funcioacuten accesible soacutelo desde C El problema en siacute no suele ser tan complejo como para transformar el guioacuten en un programa en C Igual el programa requiere cadenas de longitud variable u otros tipos de datos (como listas ordenadas de nombres de fichero) faacuteciles en sh pero tediosas en C o quizaacute no tengamos tanta soltura con C Otra situacioacuten Quizaacute tengas que trabajar con bibliotecas de C diversas y el ciclo normal en C de escribir-compilar-probar-recompilar es demasiado lento Necesitas desarrollar software con maacutes velocidad Posiblemente has escrito un programa al que vendriacutea bien un lenguaje de extensioacuten y no quieres disentildear un lenguaje escribir y depurar el inteacuterprete y adosarlo a la aplicacioacuten En tales casos Python puede ser el lenguaje que necesitas Python es simple pero es un lenguaje de programacioacuten real Ofrece maacutes apoyo e infraestructura para programas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
17
grandes que el inteacuterprete de oacuterdenes Por otra parte tambieacuten ofrece mucho maacutes comprobacioacuten de errores que C y al ser un lenguaje de muy alto nivel tiene incluidos tipos de datos de alto nivel como matrices flexibles y diccionarios que llevariacutean diacuteas de programacioacuten en C Dados sus tipos de datos maacutes generales se puede aplicar a un rango de problemas maacutes amplio que Awk o incluso Perl pero muchas cosas son al menos igual de faacuteciles en Python que en esos lenguajes Python te permite dividir su programa en moacutedulos reutilizables desde otros programas en Python Viene con una gran coleccioacuten de moacutedulos estaacutendar que puedes utilizar como base de tus programas (o como ejemplos para empezar a aprender Python) Tambieacuten hay moacutedulos incluidos que proporcionan ES de ficheros llamadas al sistema ldquosocketsrdquo y hasta interfaces graacuteficas con el usuario como Tk Python es un lenguaje interpretado lo que ahorra un tiempo considerable en el desarrollo del programa pues no es necesario compilar ni enlazar El inteacuterprete se puede utilizar de modo interacivo lo que facilita experimentar con caracteriacutesticas del lenguaje escribir programas desechables o probar funciones durante el desarrrollo del prgram de la base hacia arriba Tambieacuten es una calculadora muy uacutetil Python permite escribir programas muy compactos y legibles Los programas escritos en Python son normalmente mucho maacutes cortos que sus equivalentes en C o C++ por varios motivos
Los tipos de datos de alto nivel permiten expresar operaciones complejas en una sola sentencia
El agrupamiento de sentencias se realiza mediante sangrado (indentacioacuten) en lugar de beginend o llaves
No es necesario declarar los argumentos ni las variables
Python es ampliable si ya sabes programar en C es faacutecil antildeadir una nueva funcioacuten o moacutedulo al inteacuterprete para realizar operaciones criacuteticas a la maacutexima velocidad o para enlazar programas en Python con bibliotecas que soacutelo estaacuten disponibles en forma binaria (como bibliotecas de graacuteficos especiacuteficas del fabricante) Una vez enganchado puedes enlazar el inteacuterprete de Python a una aplicacioacuten escrita en C y utilizarlo como lenguaje de macros para dicha aplicacioacuten
3111 Llamar al inteacuterprete
En UNIX el inteacuterprete de Python se suele instalar como bdquousrlocalbinpython‟ en aquellas maacutequinas donde esteacute disponible En Windows se instala en el directorio bdquoArchivos de programa‟ o en cualquier otro directorio seleccionado Poner este directorio en la ruta de ejecutables hace posible arrancarlo tecleando en el inteacuterprete de oacuterdenes la orden
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
18
Python
Como la eleccioacuten del directorio donde reside el inteacuterprete es una opcioacuten de instalacioacuten es posible que se halle en otros lugares Consulta con tu guru de Python local o tu administrador de sistemas (por ejemplo bdquousrlocalpython‟ es una alternativa recuente) Teclear un caraacutecter fin de fichero (Control-D en UNIX Control-Z en DOS o Windows) en el inteacuterprete causa la salida del inteacuterprete con un estado cero Si eso no funciona se puede salir del inteacuterprete tecleando las siguientes oacuterdenes bdquoimport sys sysexit()‟ Las opciones de edicioacuten de la liacutenea de oacuterdenes no son muy destacables En UNIX es posible que quien instalara el inteacuterprete en su sistema incluyera soporte para la biblioteca de GNU bdquoreadline‟ que permite una edicioacuten de liacutenea maacutes elaborada y la recuperacioacuten de oacuterdenes anteriores El modo maacutes raacutepido de ver si hay soporte de edicioacuten de liacuteneas es teclear Control-P en cuanto aparece el inteacuterprete Si pita la edicioacuten de liacuteneas estaacute disponible Si no sale nada o sale ^P no estaacute disponible la edicioacuten de liacuteneas y soacutelo se puede utilizar la tecla de borrado para borrar el uacuteltimo caraacutecter tecleado El inteacuterprete funciona como el inteacuterprete de oacuterdenes de UNIX cuando se lo llama con la entrada estaacutendar conectada a un dispositivo tty lee y ejecuta las oacuterdenes interactivamente cuando se le da un nombre de fichero como argumento o se le da un fichero como entrada estaacutendar lee y ejecuta un guion desde ese fichero Otro modo de arrancar el inteacuterprete es bdquopython -c orden [argumento] ‟ que ejecuta las sentencias de orden de forma anaacuteloga a la opcioacuten -c de la liacutenea de oacuterdenes Como las sentencias de Python suelen contener espacios u otros caracteres que la liacutenea de oacuterdenes considera especiales lo mejor es encerrar orden entre dobles comillas por completo
Imagen de la pantalla al abrir Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
19
Hay moacutedulos de Python que son uacutetiles como programas independientes Se los puede llamar mediante ldquopython-m moacutedulo[arg] helliprdquo que ejecuta el fichero de coacutedigo fuente de module como si se hubiera dado el nombre completo en la liacutenea de oacuterdenes Cuando se leen oacuterdenes desde una tty se dice que el inteacuterprete estaacute en modo interacitov En este modo espera a la siguiente orden con el indicador principal que suele ser tras signos ldquomayorrdquo (ldquogtgtgtrdquo) Para las liacuteneas adicionales se utiliza el indicador secundario por omisioacuten tres puntos (ldquohelliprdquo)
Programar en Python puede hacerse de varias maneras seguacuten la necesidad o el gusto de cada persona Para los neoacutefitos mi recomendacioacuten es que utilicen el ambiente graacutefico interactivo llamado IDLE Esta herramienta viene incluiacuteda con el moacutedulo tkinter Ademaacutes de resaltar la sintaxis en colores permite editar archivos fuente y es maacutes amigable al inicio
El IDLE tiene dos ambientes el shell interactivo con tiacutetulo Python Shell en su ventana muestra el prompt gtgtgt y espera un comando y uno o maacutes editores que se abren con el menuacute File --gt New Window Cada editor empieza con el tiacutetulo Untitled en su ventana el cual cambia hasta que se salva a un archivo con File --gt Save As (y subsecuentemente File --gt Save) Cada editor nos permite ejecutar el coacutedigo Python que contiene
Se recomienda crear una carpeta para realizar y guardar los ejemplos Para correr idle cambiar primero a esa carpeta y entonces correr idle En MS- Windows
Cejemplosgt Cpython22idleidle
En Linux
[usuariopc ejemplos]$ idle amp La primera vez que hacemos un ejemplo hemos de intentar hacerlo paso a paso en forma interactiva en el shell tecleando cada comando Es la forma en que aprendemos maacutes que si simplemente copiamos y pegamos Una vez que tecleamos y funcionan las cosas podemos copiar del shell interactivo y pegamos a una ventana de editor y salvamos en un archivo con terminacioacuten py para que conservemos lo que hicimos para siempre
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
20
Imagen del Shell interactivo de IDLE
Acceso a nueva ventana dentro del Shell interactivo de IDLE
Nueva ventana del editor de IDLE Una vez que partiendo de una ventana vacia tenemos nuestro coacutedigo hemos de seleccionar FileSave As para guardar el archivo y tenerlo disponible
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
21
Ventana del editor de IDLE con coacutedigo preparado para guardar
Una vez que nos hemos asegurado de que tenemos el coacutedigo guardado iquestcoacutemo hacemos para ejecutar el programa La respuesta es seleccionando Run Module En caso de seleccionar Run Module antes de guardar el coacutedigo Python nos pide que lo guardemos anteshellip Al seleccionar Run Module Python iraacute interpretando liacutenea por liacutenea y mostrando los resultados a traveacutes del Inteacuterprete Si existiese alguacuten error de sintaxis se avisa del tipo de error y doacutende se produce Una vez corregido el problema se vuelve a intentar el Run Module
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
22
El tener un inteacuterprete permite ir probando partes de programas sobre las que no se estaacute seguro y ver coacutemo reaccionan para poder decidir si se incluyen o no y coacutemo se pueden adaptar Asiacute se estaacute continuamente alternando entre el inteacuterprete y el programa Maacutes informacioacuten en httpdocspythonorglibraryidlehtml
3112 Moacutedulos
Si salimos del inteacuterprete de Python y vuelves a entrar las definiciones que se hayan hecho (funciones y variables) se pierden Por ello si se quiere escribir un programa algo maacutes largo seraacute mejor que se utilice un editor de texto para preparar la entrada del inteacuterprete y ejecutarlo con ese fichero como entrada Esto se llama crear un guioacuten Seguacuten vayan creciendo los programas puede que quieras dividirlos en varios ficheros para facilitar el mantenimiento Puede que tambieacuten quieras utilizar una funcioacuten que has escrito en varios programas sin tener que copiar su definicioacuten en cada programa Para lograr esto Python tiene un modo de poner definiciones en un fichero y utilizarlas en un guioacuten o en una instancia interactiva del inteacuterprete Tal fichero se llama moacutedulo las definiciones de un moacutedulo se pueden importar a otros moacutedulos o al moacutedulo principal (la coleccioacuten de variables accesible desde un guioacuten ejecutado desde el nivel superior y en el modo de calculadora) Un moacutedulo es un fichero que contiene definiciones y sentencias de Python El nombre del fichero es el nombre del moacutedulo con el sufijo ldquopyrdquo Dentro de un moacutedulo el nombre del moacutedulo (como cadena) es accesible mediante la variable global __name__ Un moacutedulo puede contener sentencias ejecutables ademaacutes de definiciones de funciones Estas sentencias sirven para inicializar el moacutedulo Soacutelo se ejecutan la primera vez que se importa el moacutedulo en alguna parte1 Cada moacutedulo tiene su propia tabla de siacutembolos que utilizan todas las funciones definidas por el moacutedulo como tabla de siacutembolos global Por ello el autor de un moacutedulo puede utilizar variables globales dentro del moacutedulo sin preocuparse por conflictos con las variables globales de un usuario del moacutedulo Por otra parte si sabes lo que haces puedes tocar las variables globales de un moacutedulo con la misma notacioacuten utilizada para referirse a sus funciones nombreModnombreElem Los moacutedulos pueden importar otros moacutedulos Es una costumbre no obligatoria colocar todas las sentencias ldquoimportrdquo al principio del moacutedulo (o guioacuten) Los nombres del moacutedulo importado se colocan en la tabla de siacutembolos global del moacutedulo (o guioacuten) que lo importa Existe una variacioacuten de la sentencia import que importa los nombres de un moacutedulo directamente a la tabla de siacutembolos del moacutedulo que lo importa Por ejemplo
gtgtgt from fibo import fib fib2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
23
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto no introduce el nombre del moacutedulo del que se toman los elementos importados en la tabla de siacutembolos local (por lo que en el ejemplo no estaacute definido fibo) Ademaacutes existe una variacioacuten que importa todos los nombres que define un moacutedulo gtgtgt from fibo import
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto importa todos los nombres excepto los que empiezan por un guioacuten bajo (_)
3113 El camino de buacutesqueda de moacutedulos
Cuando se importa un moacutedulo denominado fiambre el inteacuterprete busca un fichero denominado bdquofiambrepy‟ en el directorio actual y luego en la lista de directorios especificada por la variable de entorno PYTHONPATH Tiene la misma sintaxis que la variable de liacutenea de oacuterdenes PATH de UNIX que es una lista de nombres de directorios Cuando PYTHONPATH no tiene ninguacuten valor o no se encuentra el fichero se continuacutea la buacutesqueda en un camino dependiente de la instalacioacuten En UNIX normalmente es bdquousrlocallibpython‟ En realidad se buscan los moacutedulos en la lista de directorios dada por la variable syspath que se inicializa desde el directorio que contiene el guioacuten de entrada (o el directorio actual) PYTHONPATH y el valor por omisioacuten dependiente de la instalacioacuten Esto permite que los programas que saben lo que hacen modifiquen o reemplacen el camino de buacutesqueda de moacutedulos Obseacutervese que como el directorio que contiene el guioacuten bajo ejecucioacuten estaacute en el camino de buacutesqueda de moacutedulos es importante que el moacutedulo no tenga el mismo nombre que un moacutedulo estaacutendar o Python lo intentaraacute cargar el guioacuten como moacutedulo cuando se importe el moacutedulo Normalmente esto provocaraacute errores
3114 Ficheros Python ldquoCompiladosrdquo
Como mejora considerable del tiempo de arranque de programas cortos que utilizan muchos moacutedulos estaacutendar si existe un fichero llamado bdquofiambrepyc‟ en el directorio donde se encuentra bdquofiambrepy‟ se supone que contiene una versioacuten previamente ldquocompilada a byterdquo del moacutedulo fiambre La fecha y hora de la versioacuten de bdquofiambrepy‟
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
24
utilizada para generar bdquofiambrepyc‟ se graba en bdquofiambrepyc‟ y no se considera el fichero bdquopyc‟ si no concuerdan Normalmente no hay que hacer nada para generar el fichero bdquofiambrepyc‟ Siempre que bdquofiambrepy‟ se compile sin errores se hace un intento de escribir la versioacuten compilada a bdquofiambrepyc‟ No se provoca un error si falla el intento Si por cualquier motivo no se escribe completamente el fichero el fichero bdquofiambrepyc‟ resultante seraacute reconocido como no vaacutelido y posteriormente ignorado El contenido del fichero bdquofiambrepyc‟ es independiente de la plataforma por lo que se puede compartir un directorio de moacutedulos entre maacutequinas de diferentes arquitecturas
3115 Moacutedulos estandar
Python viene con una biblioteca de moacutedulos estaacutendar descrita en un documento aparte la Referencia de las bibliotecas Algunos moacutedulos son internos al inteacuterprete y proporcionan acceso a las operaciones que no son parte del nuacutecleo del lenguaje pero se han incluido por eficiencia o para proporcionar acceso a primitivas del sistema operativo como las llamadas al sistema El conjunto de dichos moacutedulos es una opcioacuten de configuracioacuten que tambieacuten depende de la plataforma subyacente Por ejemplo el moacutedulo amoeba soacutelo se proporciona en sistemas que de alguacuten modo tienen acceso a primitivas Amoeba Hay un moacutedulo en particular que merece una especial atencioacuten el moacutedulo sys que es siempre interno en cualquier inteacuterprete de Python Estas variables soacutelo estaacuten definidas si el inteacuterprete estaacute en modo interactivo La variable syspath es una lista de cadenas que determina el camino de buacutesqueda de moacutedulos del inteacuterprete Se inicializa a un valor por omisioacuten tomado de la variable de entorno PYTHONPATH o de un valor por omisioacuten interno si PYTHONPATH no tiene valor Se puede modificar mediante operaciones de lista estaacutendar por ejemplo gtgtgt import sys gtgtgt syspathappend(‟ufsguidolibpython‟)
3116 Paquetes
Los paquetes son un meacutetodo de estructurar el espacio nominal de moacutedulos de Python mediante el uso de ldquonombres de moacutedulos con puntordquo Por ejemplo el nombre de moacutedulo AB hace referencia a un submoacutedulo denominado ldquoBrdquo de un paquete denominado ldquoArdquo Del mismo modo que el uso de moacutedulos evita que los autores de diferentes moacutedulos tengan que preocuparse de los nombres de variables globales de los otros la utilizacioacuten de nombres de moacutedulo con puntos evita que los autores de paquetes multi-moacutedulo como Numpy o Pil (Biblioteca de tratamiento de imagen de
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
25
python) tengan que preocuparse de los nombres de los moacutedulos ajenos Supoacuten que deseas disentildear una coleccioacuten de moacutedulos (un paquete) para tratar de manera uniforme ficheros de sonido y datos de sonido Existen muchos formatos de fichero de sonido (que se suelen distinguir por la extensioacuten como bdquowav‟ bdquoaiff‟ o bdquoau‟) por lo que podriacuteas necesitar crear y mantener una coleccioacuten creciente de moacutedulos de conversioacuten entre los diferentes formatos Tambieacuten existen muchas operaciones posibles sobre los datos de sonido (tales como mezclar antildeadir eco ecualizar o generar un efecto artificial de estereofoniacutea) por lo que ademaacutes estariacuteas escribiendo una serie de moacutedulos interminable para realizar estas operaciones He aquiacute una posible estructura de tu paquete (expresado en teacuterminos de sistema de ficheros jeraacuterquico)
Sonido Paquete de nivel superior __init__py Inicializa el paquete de sonido
Formatos Subpaquete de conversiones de formato de ficheros __init__py leerwavpy escriwavpy leeraiffpy escriaiffpy leeraupy escriaupy Efectos Subpaquete de efectos de sonido __init__py ecopy surroundpy inversopy Filtros Subpaquete de filtros __init__py ecualizadorpy vocoderpy karaokepy
Modelo de estructura paquetemoacutedulo Al importar el paquete Python rastrea los directorios de syspath buscando por el subdirectorio de paquetes Los ficheros bdquo__init__py‟ son necesarios para que Python trate los directorios como contenedores de paquetes Se hace asiacute para evitar que los directorios con nombres
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
26
comunes como bdquotest‟ oculten accidentalmente moacutedulos vaacutelidos que aparezcan maacutes tarde dentro del camino de buacutesqueda En el caso maacutes sencillo bdquo__init__py‟ puede ser un fichero vaciacuteo pero tambieacuten puede ejecutar coacutedigo de inicializacioacuten del paquete o actualizar la variable __all__ descrita posteriormente Los usuarios del paquete pueden importar moacutedulos individuales del paquete por ejemplo import SonidoEfectoseco
De este modo se carga el submoacutedulo SonidoEfectoseco Hay que hacer referencia a eacutel por su nombre completo SonidoEfectosecofiltroeco(entrada salida retardo=07
aten=4)
Un modo alternativo de importar el submoacutedulo es from SonidoEfectos import eco
Asiacute tambieacuten se carga el submoacutedulo eco y se hace disponible sin su prefijo de paquete por lo que se puede utilizar del siguiente modo ecofiltroeco(entrada salida retardo=07 aten=4)
Y otra variacioacuten es importar la funcioacuten o variable deseada directamente from SonidoEfectoseco import filtroeco
De nuevo se carga el submoacutedulo eco pero se hace la funcioacuten filtroeco disponible directamente filtroeco(entrada salida retardo=07 aten=4)
Observa que al utilizar from paquete import elemento el elemento puede ser tanto un submoacutedulo (o subpaquete) del paquete como cualquier otro nombre definido por el paquete como una funcioacuten clase o variable La sentencia import comprueba primero si el elemento estaacute definido en el paquete Si no asume que es un moacutedulo e intenta cargarlo Si no lo consigue se provoca una excepcioacuten ImportError Sin embargo cuando se utiliza la sintaxis
importelementosubelementosubsubelemento cada elemento menos el
uacuteltimo debe ser un paquete El uacuteltimo elemento puede ser un moacutedulo o un paquete
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
27
pero no una clase funcioacuten o variable definida en el nivel superior
3117 Importar de un paquete
Y iquestqueacute ocurre cuando el usuario escribe from SonidoEfectos import En teoriacutea deberiacutea rastrearse el sistema para encontrar queacute submoacutedulos existen en el paquete e importarlos todos Por desgracia esta operacioacuten no funciona muy bien en las plataformas Windows y Mac en las que el sistema de ficheros no tiene una idea muy precisa de las mayuacutesculas de un fichero En estas plataformas no hay un modo garantizado de conocer si un fichero bdquoECOPY‟ deberiacutea ser importado como eco Eco o ECO (por ejemplo Windows 95 tiene la molesta costumbre de mostrar todos los nombres de fichero con la primera letra en mayuacutescula) La restriccioacuten de nombres de fichero DOS (8+3) antildeade otro problema para los nombres de moacutedulo largos La uacutenica solucioacuten es que el autor del paquete proporcione un iacutendice expliacutecito del paquete La sentencia import utiliza la siguiente convencioacuten Si el coacutedigo del bdquo__init__py‟ de un paquete define una lista llamada __all__ se considera que es la lista de nombres de moacutedulos que se deben importar cuando se encuentre from paquete import Depende del autor del paquete mantener la lista actualizada cuando se libere una nueva versioacuten del paquete Los autores del paquete pueden decidir no mantenerlo si no es uacutetil importar del paquete Por ejemplo el fichero bdquoSonidoEfectos__init__py‟ podriacutea contener el siguiente coacutedigo __all__ = [eco surround inverso] Esto significariacutea que from SonidoEfectos import importariacutea los tres submoacutedulos mencionados del paquete Sonido Si __all__ no estaacute definido la sentencia from SonidoEfectos import no importa todos los moacutedulos del subpaquete SonidoEfectos al espacio nominal actual Soacutelo se asegura de que el paquete SonidoEfectos ha sido importado (ejecutando posiblemente el coacutedigo de inicializacioacuten de bdquo__init__py‟) y luego importa cualesquiera nombres definidos en el paquete Esto incluye cualquier nombre definido (y submoacutedulos cargados expliacutecitamente) por bdquo__init__py‟ Tambieacuten incluye cualquier submoacutedulo del paquete expliacutecitamente importado por sentencias import anteriores Mira este coacutedigo import SonidoEfectoseco import SonidoEfectossurround from SonidoEfectos import En este ejemplo los moacutedulos eco y surround se importan al espacio nominal vigente porque estaacuten definidos en el paquete SonidoEfectos cuando se ejecuta la sentencia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
28
fromimport (esto tambieacuten funciona si estaacute definido __all__)
Observa que en general se debe evitar importar de un moacutedulo o paquete ya que suele dar como resultado coacutedigo poco legible Sin embargo se puede usar para evitar teclear en exceso en sesiones interactivas y cuando ciertos moacutedulos esteacuten disentildeados para exportar soacutelo nombres que cumplan ciertas reglas
Recuerda no hay nada incorrecto en utilizar from Paquete import
submoacutedulo_concreto De hecho es la notacioacuten recomendada salvo que el moacutedulo
que importa necesite usar submoacutedulos del mismo nombre de diferentes paquetes
3118 Referencias internas al paquete
Es comuacuten que los submoacutedulos necesiten hacerse referencias cruzadas Por ejemplo el moacutedulo surround podriacutea utilizar el moacutedulo eco De hecho tales referencias son tan comunes que la sentencia import busca antes en el paquete contenedor que en el camino de buacutesqueda de moacutedulos estaacutendar Por ello basta con que el moacutedulo surround use import eco o from eco import filtroeco Si el moacutedulo importado no se encuentra en el paquete actual (el paquete del que el moacutedulo actual es submoacutedulo) la sentencia import busca un moacutedulo de nivel superior con el nombre dado Cuando se estructuran los paquetes en subpaquetes (como el paquete Sonido del ejemplo) no hay un atajo para referirse a los submoacutedulos de los paquetes hermanos y se ha de utilizar el nombre completo del subpaquete Por ejemplo si el moacutedulo SonidoFiltrosvocoder necesita utilizar el moacutedulo eco del paquete SonidoEfectos debe utilizar from SonidoEfectos import eco
32 FUNCIONES INCLUIDAS EN NUMPY POR CATEGORIacuteAS (ARRAY CREATION)
A modo indicativo e introductorio se incluyen las funciones incluidas en la libreriacutea Numpy por categoriacuteas Ver maacutes informacioacuten en httpdocsscipyorgdocnumpy Numerical
arange() arrayrange()
linspace() logspace()
Ones and zeros
empty() empty_like()
eye() identity()
ones() ones_like()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
29
tri() tril() triu()
zeros() zeros_like()
From existing data
array() recarray()
asarray() asanyarray() asmatrix()
copy()
fromarrays() frombuffer() fromfile() fromfunction()
fromiter() loadtxt()
Building matrices
bmat()
diag() diagflat()
mat() matrix()
vander()
Reinterpreting arrays
view()
Types
astype()
cast[]()
int8() int16() int32() int64() int128()
uint8() uint16() uint32() uint64() uint128()
float16() float32() float64() float96() float128()
float256()
complex32() complex64() complex128() complex192()
complex256() complex512()
bool_()
object_()
void() str_() unicode_()
byte() ubyte()
short() ushort()
intc() uintc()
intp() uintp()
int_() uint()
longlong() ulonglong()
single() csingle()
float_() complex_()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
30
longfloat() clongfloat()
Kinds of array
asarray()
asanyarray()
asmatrix()
Changing the number of dimensions
atleast_1d() atleast_2d() atleast_3d()
broadcast()
expand_dims()
squeeze()
Transpose-like operations
rollaxis()
swapaxes()
T transpose()
Reshaping arrays
flat flatten()
ravel()
reshape() shape
Array modification
Joining arrays
append()
column_stack()
concatenate()
dstack() hstack() vstack()
Splitting arrays
array_split()
dsplit() hsplit() split() vsplit()
Enlarging arrays
tile()
repeat()
Adding and removing elements
delete()
insert()
resize()
trim_zeros()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
31
unique()
Rearranging elements
fliplr() flipud()
reshape()
roll()
rot90()
Indexing
[]
take()
put()
putmask()
Indexing syntax
slice()
newaxis
index_exp[]
Generating arrays suitable for indexing
c_[]
r_[]
s_[]
nonzero()
where()
indices()
ix_()
mgrid[]
ogrid()
Indexing-like operations
choose()
where()
compress()
diag() diagonal()
select()
Iterating
flat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
32
ndenumerate()
ndindex()
Logic
[]
all() any()
allclose()
alltrue()
nonzero()
piecewise()
sometrue()
Finding things
argmax() argmin()
searchsorted()
Array statistics
average() mean()
bincount() histogram()
corrcoef()
cov()
max() min() ptp()
median()
std() var()
ufuncs
abs() absolute()
add() multiply()
angle()
arccos() arcsin() arctan()
arccosh() arcsinh() arctanh()
arctan2()
bitwise_and() bitwise_or() bitwise_xor()
ceil() floor() round()
conj() conjugate()
cos() sin() tan()
cosh() sinh() tanh()
fix()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
33
hypot()
logical_and() logical_not() logical_or() logical_xor()
maximum() minimum()
ufunc methods
accumulate()
outer()
reduce()
Functional constructs
apply_along_axis()
apply_over_axis()
vectorize()
Random numbers
beta() binomial() gumbel() poisson() standard_normal()
uniform() vonmises() weibull()
bytes()
permutation()
rand() randint() randn()
random_integers()
random_sample()
ranf()
sample()
seed()
shuffle()
Array math
clip()
cross()
cumprod() cumsum()
diff()
digitize()
dot()
inner()
outer()
inv() pinv()
poly1d()
polyfit()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
34
prod() sum()
tensordot()
vdot()
FFT
fft()
fftfreq()
fftshift()
ifft()
Linear algebra
inv()
lstsq()
solve()
svd()
trace()
Array output
savetxt()
set_printoptions()
tofile()
tolist()
Other
sort() argsort()
binary_repr()
dtype()
fill()
finfo()
generic
imag real
inf nan
item()
lexsort()
ndim
shape
typeDict()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
35
Numpy Functions by Category (uacuteltima edicioacuten 2008-06-13 122659
efectuada por jh)
MoinMoin Powered
Pyt
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
36
4 METODOLOGIacuteA En este apartado se proporciona una descripcioacuten detallada de la metodologiacutea utilizada para el desarrollo e implementacioacuten de la biblioteca Utilizando un paradigma Estructurado de la programacioacuten que considera que la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Esto nos permite reutilizar coacutedigo programado y nos proporciona una mejor comprensioacuten de la programacioacuten En el uacuteltimo paquete de la libreriacutea tambieacuten se ha realizado una incursioacuten a la programacioacuten orientada a objetos con la declaracioacuten de algunas clases
41 ESTRUCTURA DE LA LIBRERIacuteA GEOTOPO En nuestro caso hemos partido del concepto de creacioacuten de una libreriacutea de funciones del aacutembito de la Topografiacutea y Geodesia Esta libreriacutea de Python se estructura como un paquete con el nombre de la libreriacutea ldquogeotopordquo que a su vez contiene 6 paquetes maacutes seguacuten tipologiacutea Asiacute tenemos
Imagen de los paquetes incluidos dentro del paquete (libreriacutea) geotopo
Por orden intuitivo desde el punto de vista de aplicacioacuten de las herramientas tenemos los siguientes paquetes
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
37
general que contiene funciones de tipo general y transversal al resto de herramientas
Moacutedulos implementados dentro de general
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
38
topografia que contiene aplicacioacuten topograacuteficas
Moacutedulos implementados dentro de topografia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
39
geodesia Aplicaciones geodeacutesicas
Moacutedulos implementados dentro de geodesia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
40
proy_cartograficas Herramientas de caacutelculos en diferentes proyeccionesetc
Moacutedulos implementados dentro de proy_cartograficas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
41
transformacioacuten Aplicaciones con modelo de rejilla del IGN y EGM08REDNAP
Moacutedulos implementados dentro de transformacioacuten
aplicaciones Distintos ejemplos de aplicabilidad de las funciones y clases implementadas en los moacutedulos de la libreriacutea
Cada uno de estos paquetes (carpetas) como se ha podido ver contiene a su vez varios moacutedulos y en cada uno de ellos y con su mismo nombre se define una uacutenica funcioacuten por moacutedulo salvo en la carpeta de transformcioacuten donde como se ha comentado antes nos adentramos dentro de la programacioacuten orientada a objetos y en algunos moacutedulos se implementan clases y dentro de estas funciones etc De esta manera al importar una funcioacuten la tenemos que importar desde el modulo que la contenga Dentro de cada carpeta se aprecia la existencia de un fichero llamado __init__py que convierte dicha carpeta en un paquete de Python Se advierte que desde el cierre de esta memoria versioacuten en papel a la entrega total de documentacioacuten puede haberse ampliado el nuacutemero de moacutedulos de la libreriacutea ldquogeotoprdquo que siacute se incluiriacutea en el CD con la implementacioacuten de coacutedigos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
42
42 DOCUMENTADO DE FUNCIONES Se puede documentar una funcioacuten en Python proporcionando una cadena de documentacioacuten (comentarios)
Las comillas triples implican una cadena multiliacutenea Todo lo que haya entre el principio y el final de las comillas es parte de una sola cadena incluyendo los retornos de carro y otras comillas Pueden usarse para definir cualquier cadena pero donde suelen estar maacutes presentes es haciendo de cadena de documentacioacuten Todo lo que hay entre las comillas triples es la cadena de documentacioacuten de la funcioacuten y se usa para explicar lo que hace la funcioacuten En caso de que exista una cadena de documentacioacuten debe ser la primera cosa definida en una funcioacuten (esto es lo primero tras los dos puntos) Teacutecnicamente no es necesario dotar a una funcioacuten de una cadena de documentacioacuten pero debemos de hacerlo siempre En Python esto tiene un incentivo antildeadido la cadena de documentacioacuten estaacute disponible en tiempo de ejecucioacuten como atributo de la funcioacuten
Lecturas complementarias sobre las funciones de documentacioacuten
PEP 257 define las convenciones al respecto de las cadenas de documentacioacuten La Guiacutea de estilo de Python indica la manera de escribir una buena cadena de
documentacioacuten El Tutorial de Python expone convenciones para el espaciado dentro de las
cadenas de documentacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
43
Ejemplo de documentado de funciones con cadena de documentacioacuten
Toda la informacioacuten incluida dentro de una cadena de documentacioacuten de triple comillas estaacute accesible en tiempo de ejecucioacuten Asiacute si pedimos ayuda de una funcioacuten nos aparece toda la informacioacuten incluida en dicha cadena de documentacioacuten
Ejemplo de consulta de la ayuda de las funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
44
En la siguiente web podemos encontrar maacutes informacioacuten sobre el documentado de funciones en Python httpcoderwarcom201106hola-python-la-utilidad-de-los-comentarios Ademaacutes de los comentarios de las funciones en Python como en otros lenguajes de programacioacuten podemos incluir liacuteneas o simples palabras de comentarios En Python se usa el siacutembolo para preceder los comentarios Podemos comentar las liacuteneas de nuestro trabajo
Comentar un grupo de liacuteneas
Determinar el tipo de codificacioacuten Esto es importante para poder usar caracteres especiales como la tilde o la ntilde Generalmente se coloca en la primera liacutenea del programa Existen muchas codificaciones
Poner cabecera a nuestro programa De esta forma identificaremos el nombre del programador la fecha en que se realizoacute y demaacutes datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
45
En el caso que nos atantildee de la libreriacutea geotopo hemos considerado introducir unos comentarios descriptivos de los moacutedulos mediante el caraacutecter y tras la definicioacuten de las funciones se incluyen unas cadenas de documentacioacuten
Ejemplo de la documentacioacuten de moacutedulos y funcioneshellip
Para evitar problemas de codificacioacuten como ha ocurrido durante la implementacioacuten del coacutedigo se han incluido al inicio del mismo dos liacuteneas para solucionar el problema Estas liacuteneas son
Comentarios de los moacutedulos
Cadena de documentacioacuten de funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
46
-- coding iso 8859-1 -
ISO 8859-1 es una norma de la ISO que define la codificacioacuten del alfabeto latino incluyendo diacriacuteticos como letras aceacutentuadas ntilde) y letras especiales necesarios para la escritura de las siguientes lenguas originarias de Europa occidental alemaacuten aragoneacutes asturiano castellano catalaacuten daneacutes escoceacutes espantildeol feroeacutes fineacutes franceacutes gaeacutelico gallego ingleacutes islandeacutes italiano neerlandeacutes noruego portugueacutes sueco y Euskera Tambieacuten conocida como Alfabeto Latino nordm 1 o ISO Latiacuten 1 Esta norma pertenece al grupo de juegos de caracteres de la ISO conocidos como ISOIEC 8859 que se caracterizan por poseer la codificacioacuten ASCII en su rango inicial (128 caracteres) y otros 128 caracteres para cada codificacioacuten con lo que en total utilizan 8 bits -- coding cp1252 -
Si trabajamos con IDLE con el uso de los acentos (en general con los caracteres no ASCII) nos daraacute error Si en el coacutedigo de un programa escribimos una cadena que contenga caracteres no ASCII(acentos ntildeiquestiexcl) al guardar el archivo por primera vez IDLE nos muestra el siguiente mensaje de aviso
Si pulsamos el botoacuten ldquoEdit my filerdquo Al principio del programa se insertaraacute la liacutenea siguiente
-- coding cp1252 --
Que indica el juego de caracteres utilizado en el archivo (cp1252 es el juego de caracteres de Windows para Europa occidental) A partir de entonces podemos guardar el archivo sin problemas Python no tiene una primera o uacuteltima linea exigida pero siacute que es habitual dar la localizacioacuten de Python como primera liacutenea en forma de comentario usrbinpython
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
47
43 FUNCIONES IMPLEMENTADAS A continuacioacuten se incluye una relacioacuten de las funciones implementadas por paquetes Ademaacutes de su nombre y un pequentildeo resumen de su aplicacioacuten se han incluido 3 apartados maacutes En verde Datos de entrada Indica los datos que necesita la funcioacuten Datos de salida Nos muestra si el resultado es uacutenico o una coleccioacuten de resultados (siempre en forma vector en el orden indicado) En rojo Llamadas o ldquoimportacioacutenrdquo de moacutedulos predefinidos del sistema ossys Llamadas a funciones de predefinidas del moacutedulo numpy En morado Llamadas a funciones definidas en esta libreriacutea (geotopo) bien incluidas en el mismo subpaquete que la propia funcioacuten definida o incluida en otro subpaquete De esta manera podemos tener una idea de las funciones implementadas los datos de partida necesarios y los resultados a obtener asiacute como la interrelacioacuten de cada funcioacuten con el resto de funciones de la libreriacutea geotopo Para el caso de cambio de proyeccioacuten o de Sistema de Referencia Coordenado se ha tomado la nomenclatura ldquodesderdquo ldquoardquo ldquoahorardquo Para sentildealar el ldquoardquo se ha elegido el nuacutemero 2 por su pronunciacioacuten to (a) Asiacute por ejemplo para el paso de latitud geodeacutesica a creciente en nombre de la funcioacuten seraacute lat2cre
431 Libreriacutea en Python ldquogeotopogeneralrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 areacor - Caacutelculo de la superficie interior de un poligono sobre el plano
entrada=(matriz) 2columnas xy salida=superficie
import ossys from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
48
busca2col - Localiza la primera fila con los valores recibidos en las dos columnas indicadas
Recibe Valor en la primera y segunda columnas posiciones de las columnas y matriz de busqueda
Devuelve Primera fila que cumple comenzando en 0 entrada=(valorcol1poscol1valorcol2poscol2matriz)
salida=orden de la primera fila que cumple comenzando en 0(oacute -1 si no existe) import ossys
from numpy import shape
busca - Localiza la primera ocurrencia de un nuacutemero en la primera columna de una matriz
entrada=(valormatriz)
salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscacol - Localiza la primera ocurrencia de un nuacutemero en la fila indicada de una matriz
entrada=(valormatriznfil) salida=posicioacuten nuacutemero de columna comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscafil - Localiza la primera ocurrencia de un nuacutemero en la columna indicada de una matriz
entrada=(valormatrizncol) salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
ordena - Ordena las filas de una matriz de menor a mayor seguacuten el contenido de la columna indicada
entrada=(colummatriz) salida=matriz de entrada ordenada
import ossys
from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
49
p_entera - Da la parte entera de un nuacutemero entrada=(nuacutemero) salida=parte entera del nuacutemero
import ossys from numpy import floor
perimetro - Calculo del perimetro de un poliacutegono sobre el plano a partir de las coord de sus veacutertices
entrada=(matriz ) 2columnas xy salida=periacutemetro
import ossys
from numpy import sqrtshape
psdo2rad - Cambio de formato de aacutengulos Pasa del conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex ) a radianes
entrada=(pseudesexa)
salida=radianes
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
rad2psdo - Cambio de formato de aacutengulos Pasa un angulo de radianes al conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex )
entrada=( radianes) salida= pseudesexa
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
50
432 Libreriacutea en Python ldquogeotopotopografiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 acimut - Caacutelculo del acimut entre dos puntos
entrada=(xiyixjyj)
salida=acimut en radianes
import ossys from numpy import arctan2pi
distancia ndash Caacutelculo de la distancia entre dos puntos del mismo
entrada=(xiyixjyj) salida=distancia (misma unidad que coordenadas de entrada
import ossys
from numpy import sqrt
edgcla ndash Caacutelculo del error de una distancia geomeacutetrica utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dgInstrnialtnl)
Dg=distancia geometrica Instr=Matriz de instrumentos
Ni=Altura de instrumento Altp=Altura de prisma
Nl=Nuacutemero de veces de medida de distancia
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edgclaprn ndash Calculo del error de una distancia geometrica utilizando la formulacion claacutesica de teoriacutea de errores Impresioacuten de resultados
entrada=(dgInstrnialtnlfsalida)
dg=distancia geometrica instr=Matriz de instrumentos
ni=Altura de instrumento altp=Altura de prisma
nl=Nuacutemero de veces de medida de distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
51
fsalida=Fichero de salidade datos
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edireh ndash Caacutelculo del error de la lectura horizontal realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(Instrnidisaltpnl)
salida=error de lectura horizontal en radianes
import ossys from numpy import sqrtpi
edirev ndash Caacutelculo del error de la lectura vertical realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(instrni nl) salida=error de lectura cenital en radianes en radianes
import ossys from numpy import sqrtpi
eincz ndash Caacutelculo del error de un desnivel trigonomeacutetrico utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dglvapedgelvInstrni) salida=xpypeplanisolzesolz
import ossys
from numpy import pisqrtcostan
intinv2 ndash Caacutelculo de la interseccioacuten inversa simple en el plano
entrada=(datosinstru)
salida= xpypangmin import ossys
from numpy import sincostanarctan2pizeros
from geotopogeneralordena import ordena
intinv2e ndash Caacutelculo de la interseccioacuten inversa simple en el plano Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru) salida= xpypeplani
import ossys from numpy import shapepisincostanarctan2dottransposezerossqrt
from geotopotopografiaedireh import edireh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
52
intinv3e ndash Caacutelculo de la interseccioacuten inversa 3D simple Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru)
salida= xpypeplanivzpvezp
import ossys from numpy import zerosshapesincos
from geotopotopografiaintinv2e import intinv2e from geotopotopografiadistancia import distancia
from geotopotopografiaedirev import edirev
from geotopotopografiaedgcla import edgcla from geotopotopografiaeincz import eincz
433 Libreriacutea en Python ldquogeotopogeodesiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 aut2lat - paso de latitud autaacutelica a geodeacutesica
entrada=(autnelipsoide) salida=lat
import ossys from numpy import sinarcsin
from geotopogeneralpsdo2rad import psdo2rad from geotopogeneralpsdo2rad import psdo2rad
calcpolo - caacutelculo del polo de la esfera a partir de tres puntos no alineados de la misma de forma que pasen a estar en un mismo paralelo tras realizarse el cambio de polo
entrada(lat1lon1lat2lon2lat3lon3) salida=[latnplonnpcolat]
import ossys from numpy import pisincosarccosarctanarctan2zeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
53
cla2enu - paso de un vector geodeacutesico expresado en componentes polares (observables claacutesicos) a componentes ENU entrada(azvdg)
salida=[ieiniu]
import ossys from numpy import sincoszeros
clhapv - lectura horizontal corregida por altitud del punto visado entrada=(lhzazlat1lat2h2nelipsoide) salida=lhz12c
import ossys
from numpy import sincospi from elipsoide import elipsoide
from radioem import radioem
clhsnlg - lectura horizontal corregida por paso de la seccioacuten normal a la liacutenea geodeacutesica entrada=(lhzs12az12lat1lat2nelipsoide)
salida=lhz12c import ossys
from numpy import sincospi
from elipsoide import elipsoide from radioem import radioem
cre2lat - paso de latitud creciente a geodeacutesica entrada=(crenelipsoide) salida=lat
import ossys
from numpy import sincostanarctanexppi from geotopogeneralpsdo2rad import psdo2rad
from elipsoide import elipsoide
efleutm - paso de la elipse de error de un punto del plano tangente al elipsoide al plano de la proyeccioacuten UTM
entrada=(latlonsemiaesemibeaziaenelipsoidehuso) salida=[semiasimibazia] import ossys from numpy import zerospi from geotopoproy_cartograficaskputm import kputm from geotopoproy_cartograficaskputmh import kputmh from geotopoproy_cartograficasconvutm import convutm from geotopoproy_cartograficasconvutmh import convutmh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
54
elip2esf - determinacioacuten de la esfera tangente al elipsoide en un paralelo indicado entrada=(nelipsoidelat)
salida=[afbe1e2]esfera
import ossys from numpy import zeros
from elipsoide import elipsoide from radiopv import radiopv
elipsoide - calculo los 5 paraacutemetros (afbe1 y 22) de los elipsoides ED50 GRS80 y WGS84 en funcioacuten de un coacutedigo 123 respectivamente entrada=(nelipsoide) 1 2 oacute 3 seguacuten ED50GRS80 oacute WGS84 respectivamente salida=[afbe1e2]
import ossys from numpy import sqrt zeros
enu2cla - paso de un vector geodeacutesico expresado en componentes ENU a componentes polares (observables claacutesicos) entrada=ieiniu salida=[azdgv]
import ossys
from numpy import zerosarcsenarctan2pisqrt
enu2xyz - paso de un vector geodeacutesico expresado en componentes ENU a componentes cartesianas tridimensionales entrada=(latlonieiniu)
salida=[ixiyiz] import ossys
from numpy import sincoszeros
eta_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del primer vertical entrada=(latlon)
salida= eta_ed50
import ossys from numpy import pisqrtcossintan
from elipsoide import elipsoide from radiopv import radiopv
from radioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
55
geo2tri - paso de coordenadas geodeacutesicas a cartesianas tridimensionales para un punto y elipsoide determinados entrada=(latlonhnelipsoide
salida=[XYZ]
import ossys from numpy import cossinzeros
from elipsoide import elipsoide from radiopv import radiopv
lam2lat - caacutelculo de la latitud geodeacutesica que le corresponde a una determinada longitud de arco de meridiano en el elipsoide indicado entrada=(lamnelipsoide salida=lat
import ossys from numpy import cossin
from elipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
lam - caacutelculo de la longitud de arco de meridiano a partir de la latitud geodeacutesica y del elipsoide entrada=(lamnelipsoide
salida=lam import ossys
from numpy import sin cos from elipsoide import elipsoide
lat2aut - paso de latitud geodeacutesica a autaacutelica entrada=(latnelipsoide)
salida=aut import ossys
from numpy import sinlog from elipsoide import elipsoide
lat2cre - paso de latitud geodeacutesica a creciente entrada=(latnelipsoide)
salide=cre import ossys
from numpy import sintanpilog
ond_ed50 - caacutelculo de la ondulacioacuten del geoide de un punto en Ed50 entrada =(latlon) salida=ondulacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
56
import ossys
from numpy import pisqrtcossintan
pdesfcr - problema directo en la esfera con el meacutetodo de cambio de base entrada=(lat1lon1saziresfera) salida=[latlon]
import ossys from numpy import cossintanarcsinarcosarctan2pizerostransposedot
pdg_dif1 - problema directo de la geodesia con la primera derivada entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2azi21] import ossys
from numpy import zerossincostanpi from radiopv import radiopv
from radioem import radioem
pdg_dif2 - problema directo de la geodesia con la primera y segunda derivada entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdg_dif3 - problema directo de la geodesia con la primera segunda y tercera derivada
entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdgrk4o - problema directo de la geodesia seguacuten meacutetodo de integracioacuten numeacuterica de Runge-Kutta de cuarto orden entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2
import ossys from numpy import zerossincostanpisqrt
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
57
from radioem import radioem
piesfcr - problema inverso en la esfera con el meacutetodo de cambio de base entrada=( lat1lon1lat2lon2resfera)
salida=[s12a12] import ossys
from numpy import cossintanarcsenarccosarctan2dotzerospi
pigbsl - problema inverso de la geodesia seguacuten el meacutetodo de Bessel entrada=( lat1lon1lat2lon2nelipsoide)
salida=[ s12a12a21]
import ossys from numpy import zerossincostanarcsinarctanarctan2arccossqrtpi
pigbslm - problema inverso de la geodesia seguacuten el meacutetodo de Bessel modificado por D David Henaacutendez Loacutepez
entrada=( lat1lon1lat2lon2nelipsoide) salida=[ s12a12a21]
import ossys from numpy import cossintanarcsinarcosarctanarctan2zerossqrtpi
from elipsoide import elipsoide
from radiopv import radiopv from piesfcr import piesfcr
from pdesfcr import pdesfcr
piloxo - problema inverso para la curva loxodroacutemica entrada=(lat1lon1lat2lon2nelipsoide)
salida=[dla12]
import ossys from numpy import arctan2coszerospi
from elipsoide import elipsoide from lat2cre import lat2cre
from radiopv import radiopv
from lam import lam
psi_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del meridiano entrada=(latlon) salida=psi_ed50
import ossys
from numpy import pisqrtcossintan from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
58
radioem - radio de curvatura de la elipse meridiana en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radioem
import ossys from numpy import sin
from elipsoide import elipsoide
radioeul - radio de la seccioacuten normal de un determinado acimut a partir del teorema de Euler entrada=(lataznelipsoide)
salida=radieul import ossys
from numpy import sincos from radioem import radioem
from radiopv import radiopv
radiopv - radio de curvatura del primer vertical en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radiopv
import ossys from numpy impor sqrtsin
from elipsoide import elipsoide
rdcae - reduccioacuten de la distancia de la cuerda al arco elipsoide entrada=( dcazlat1nelipsoide) salida=recae
impor ossys from numpy import sincosarcsen
from radioem import radioem from radiopv import radiopv
rdtce - reduccioacuten de la distancia del terreno a la cuerda elipsoide entrada=(dgazlat1h1h2nelipsoide)
salida=rdtce import ossys
from numpy import sincossqrt from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
59
tri2geo - paso de coordenadas cartesianas tridimensionales a geodeacutesicas en un punto y elipsoide determinados entrada=(XYZnelipsoide)
salida=[latlonh]
import ossys from numpy import cossintanarctanarctan2sqrtzeros
from elipsoide import elipsoide from radiopv import radiopv
xyz2clae - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a observables claacutesicos sobre el elipsoide y desnivel elipsoidal entrada=( X1Y1Z1DXDYDZnelipsoide) salida=[s12az12h12]
import ossys from numpy import zeros
from tri2geo import tri2geo
from pigbslm import pigbslm
xyz2clat - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes polares en el terreno entrada=( lat1lon1ixiyiz)
salida=[ dgaz12lv] import ossys
from numpy import zeros from xyz2enu import xyz2enu
from enu2cla import enu2cla
xyz2enu - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes ENU entrada=(latlonIXIYIZ)
salida=[ieiniu]
import ossys from numpy import sincoszeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
60
434 Libreriacutea en Python ldquogeotopoproy_cartograficasrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 calhuso - caacutelculo del huso correspondiente a un punto en la proyeccioacuten UTM a partir de su longitud geodeacutesica entrada=(lon)
salida=huso
import ossys from numpy import
cdel2geo - paso de un punto de la proyeccioacuten ciliacutendrica directa equivalente de Lambert al elipsoide
entrada=(XYLon0TXTYnelipsoide) salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaaut2lat import aut2lat
convestp - caacutelculo de la convergencia de meridianos de un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lonlon0)
salida=convest import ossys
convgk - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0nelipsoide)
salida=convgk
import ossys from numpy import sincostan
from geotopogeodesiaelipsoide import elipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
61
convlamb - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(lonlat0lon0)
salida=convlamb
import ossys from numpy import sin
convutm - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=convutm import ossys
from numpy import tancossinpi
from cahuso import calhuso from geotopogeodesiaelipsoide import elipsoide
convutmh - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso indicado entrada=(latlonnelipsoide)
salida=convutmh
import ossys from numpy import tancossinpi
from geotopogeodesiaelipsoide import elipsoide
dcdgputm - paso de la distancia cuerda en la proyeccioacuten UTM entre dos puntos a la correspondiente a la proyeccioacuten UTM de la liacutenea geoacutedesica que los une en el elipsoide entrada=(lat1lon1lat2lon2nelipsoide
salida=correccioacuten en metros import ossys
from numpy import cos from utm2geo import utm2geo
from geo2utmh import geo2utmh
from calhuso import calhuso from getopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
62
dcesfera - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general conforme en una esfera entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida=dc (reduccioacuten angular de la cuerda en radianes import ossys
from numpy import sincos from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
dcestp - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en la esfera al pasar a la proyeccioacuten estereograacutefica polar entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=dc(reduccioacuten angular de la cuerda en radianes)
import ossys from numpy import cossin
from kplamb import kplamb
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
from geotopogeodesiaradiopv import radiopv
dcgk - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general de Gauss-Kruumlger entrada=(lat1lon1lat2lon2lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos from geo2gk import geo2gk
from gk2geo import gk2geo
from geotopogeodesiaradioem import radioem from geotopogeodesiaradiopv import radiopv
from getopogeodesiaelipsoide import elipsoide
dclamb - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert entrada=(lat1lon1lat2lon2lat0pelipsoide
salida= dc(reduccioacuten angular de la cuerda en radianes)
import ossys
from numpy import sintancosexpzeros from geo2lamb import geo2lamb
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
63
from kdlamb import kdlamb
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
from geotopogeodesiaradiopv import radiopv
dclambf - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert con maacutes precisioacuten que la funcioacuten anterior entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos sin
from kplamb import kplamb from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o from geotopogeodesiaradiopv import radiopv
dcutm - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=( lat1lon1lat2lon2nelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaradioem import radioem
dcutmh - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso indicado entrada=( lat1lon1lat2lon2husonelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh
from utm2geo import utm2geo from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
64
dgpdcutm - paso de la distancia geodeacutesica proyectada en el plano UTM a la distancia correspondiente a la cuerda en esta proyeccioacuten para una geodeacutesica del elipsoide entrada=( lat1lon1lat2lon2snelipsoide)
salida=correccioacuten import ossys
from numpy import cos from geo2utmh import geo2utmh
from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut
esf2esfg - paso de un punto de una esfera a la esfera con cambio de polo Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo
entrada=(latlonlatplonp)
salida=[latlong]
import ossys from numpy import cossintanarcsenarctandotzerospi
from geotopogeodesiapiesfcr import piesfcr
esf2estp - paso de un punto de la esfera a las planas de la proyeccioacuten estereograacutefica polar entrada=(latlonlon0radiotxty)
salida=[xy] estp import ossys
from numpy import zerossincos
esfg2esf - paso de un punto de la esfera con cambio de polo a la esfera original Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo entrada=(latnlonnlatplonp
salida=[lat0lon0giro import ossys
from numpy import cossintanarcsenarctan2dotzerospitranspose from geotopogeodesiapiesfcr import piesfcr
esfc2lat - paso de latitud sobre la esfera a la correspondiente sobre el elipsoide seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
65
salida=lat
import ossys from numpy import sintanarctanpi
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiaelipsoide import elipsoide
estp2esf - paso de un punto de la proyeccioacuten estereograacutefica polar a la esfera entrada=(xylon0radiotxty)
salida=[xy] import ossys
from numpy import zerosarctan2arctansinpi
geo2cdel - paso de un punto del elipsoide a la proyeccioacuten ciliacutendrica directa equivalente de Lambert entrada=( latlonlon0txtynelipsoide)
salida=[XY] import ossys
from numpy import zeros
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialat2aut import lat2aut
geo2esto - paso de una nube de puntos del elipsoide a la proyeccioacuten estereograacutefica oblicua oacuteptima entrada=(latlonlat0lon0txtynelipsoide)
salida=[XY]
import ossys from numpy import
from lat2esc import lat2esc
from esf2esfg import esf2esfg from esf2estp import esf2estp
from geotopogeodesiaradiopv import radiopv
geo2gk - paso de un punto del elipsoide a la proyeccioacuten general de Gauss-Kruumlger entrada=( latlonlon0ptxtynelipsoide)
salida= [xy]gk import ossys
from numpy import costanpizeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesialam import lam
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
66
geo2lamb - paso de un punto del elipsoide a la proyeccioacuten general coacutenica conforme de Lambert entrada=( latlonlat0lon0ptxtynelipsoide)
salida=[xy]lambert
import ossys from numpy import sintancosexpzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
geo2merc - paso de un punto del elipsoide a la proyeccioacuten de Mercator entrada=( latlonlon0txtynelipsoide)
salida= [xy]mercator import ossys
from numpy import zeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialat2cre import lat2cre
geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
import ossys from numpy import zerostancospi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
geo2utmh - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=[XY] UTM
import ossys
from numpy import zerostancospi from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
gk2geo - paso de un punto de la proyeccioacuten general de Gauss-Kruumlger al elipsoide entrada=(XYlon0ptxtynelipsoide)
salida=[latlon]
import ossys
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
67
from numpy import zerostancospi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
kdesfera - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general conforme sobre una esfera Utiliza la integracioacuten numeacuterica de Simpson entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida= kdesfera import ossys
from kpesfera import kpesfera from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o
kdestp - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica de la esfera al proyectarla en la proyeccioacuten estereograacutefica polar Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0radiotxty)
salida=kdestp import ossys
from kpestp import kpestp from esf2estp import esf2estp
from estp2esf import estp2esf
kdgk - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general de Gauss-Kruumlger Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0pnelipsoide)
salida=kdgk import ossys
from geo2gk import geo2gk from gk2geo import gk2geo
from kpgk import kpgk
kdlamb - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica el elipsoide al proyectarla en la proyeccioacuten general coacutenica conforme de Lambert Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=kdlamb import ossys
from geolamb import geolamb from lamb2geo import lamb2geo
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
68
kdutm - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso del primer punto Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2nelipsoide)
salida=kdutm import ossys
from calhuso import calhuso from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kdutmh - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso indicado Utiliza la integracioacuten numeacuterica de Simpson
entrada= lat1lon1lat2lon2husohelipsoide) salida=kdutmh
import ossys from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kpesfera - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general conforme sobre una esfera entrada=( latlat0nelipsoide)
salida=kpesfera import ossys
from numpy import cossintanexp from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaelipsoide import elipsoide
kpestp - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lat)
salida=kpestp import ossys
from numpy import sin
kpgk - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0pnelipsoide)
salida=kpgk
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
69
import ossys
from numpy import sincostan from clahuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
kplamb - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(latlat0pnelipsoide)
salida=kplamb
import ossys from numpy import cossintanexp
from geotopogeodesialat2cre import lat2cre from geotopogeodesiaradiopv import radiopv
kputm - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=kputm
import ossys from numpy import tancossinpi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
kputmh - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=kputmh
import ossys
from numpy import sincostanpi from geotopogeodesiaelipsoide import elipsoide
lamb2geo - paso de un punto de la proyeccioacuten general coacutenica conforme de Lambert al elipsoide entrada=( xylat0lon0ptxtynelipsoide)
salida=[latlon] import ossys
from numpy import sintanarctanpilogsqrtzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
from geotopogeodesiacre2lat import cre2lat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
70
lat2esc - paso de la latitud geodeacutesica sobre el elipsoide a la correspondiente sobre la esfera seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide)
salida=latesfc
import ossys from numpy import sintanarctanpi
from geotopogeodesiaelipsoide import elipsoide
merc2geo - paso de un punto de la proyeccioacuten de Mercator al elipsoide entrada= (xylon0txtynelipsoide)
salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesiacre2lat import cre2lat
utm2geo - paso de un punto de la proyeccioacuten UTM al elipsoide entrada=(XYhusonelipsoide)
salida=[latlon] import ossys
from numpy import sqrtpitancossinzeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
435 Libreriacutea en Python ldquogeotopotransformacionrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 egm08rednap ndash fichero que almacena la clase Egm08rednap para el manejo de geoides en formato egm08rednap Define la funcioacuten getOndulation(selflatitudlongitud) Llama al fichero geoide que a su vez llama a los ficheros EGM08_REDNAP
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
71
entrada=(latitudlongitud)
salida=ondulacioacuten import ossys
from numpy import fromfile reshape from geoide import Geoide
geoide ndash fichero que almacena la clase Geoide para el manejo de geoides en formato egm08rednap La clase Geoide almacena ldquollamardquo a los geoides EGM08_REDNAP de la Peniacutensula o Baleares seguacuten corresponda Define las funciones getNoOndulacioacuten y getOndulacioacuten en funcioacuten de que encuentre las coordenadas de entrada dentro de los ficheros
entrada=(latitudlongitud) salida=ondulacioacuten
import ossys from numpy import fromfile reshapepifloorndarray
ntv2 ndash fichero que almacena la funcioacuten ntv2Espana Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(longitudlatitud) en deg en ED50 salida=(longitud latitud) en deg en ETRS89
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
ntv2_2 ndash fichero que almacena la funcioacuten ntv2Espana Adaptacioacuten del fichero anterior Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz) En la adatacioacuten realizada obtenemos soacutelo los diferenciales de caacutelculo de paso de ED50 a ETRS89 para tomarlo en el caacutelculo de la aproximacioacuten del sentido inverso entre ETRS89 a ED50 El paso de nodos del fichero utilizado es cada 200‟ lo que equivaldriacutea a 6000 m aproximadamente por lo que la aproximacioacuten seriacutea vaacutelida
entrada=(longitudlatitud) en deg en ETRS89 salida=(diflongitud diflatitud) en deg en ED50
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
72
sped2etpy ndash fichero rejilla del IGN Para transformacioacuten de coordenadas en los Sistemas de Referencia ED50 a ETRS89 Adaptado a Python y descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(fichero contenedor de informacioacuten) No entramos con ninguacuten valor
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
73
5 APLICABILIDAD DE LA LIBRERIacuteA Y CONCLUSIONES FINALES Finalmente hemos implementado los 5 subpaquetes de moacutedulos con funciones y clases incluidos en el paquete (libreriacutea) geotopo destinados a caacutelculos topograacuteficos y geodeacutesicos
Estructura final de la libreriacutea geotopo
Como puede verse en el paquete de geotopo se ha incluido un moacutedulo de aplicaciones en las que se han implementado unos ejercicios praacutecticos aplicando las distintas funciones de la libreriacutea Antes de entrar a describir los casos praacutecticos implementados hemos de decir que directamente podemos obtener resultados de cada una de las funiones Asiacute si queremos pasar de coordenadas geograacuteficas a coordenadas utm mirando en la descripcioacuten de las funciones tenemos geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
74
import ossys
from numpy import zerostancospi from calhuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
Pues bien una vez seleccionada la funcioacuten a utilizar abrimos el moacutedulo correspondiente con IDLE
Coacutedigo de la funcioacuten abierto con IDLE
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
75
Imagen de la ejecucioacuten de Run Module
Ejecutando Run Module Python abre el Python Shell En esta pantalla tenemos que introducir el nombre de la funcioacuten a usar geo2utm y entre pareacutentesis los valores que se especifican de entrada en la descripcioacuten de la funcioacuten entrada=(latlonnelipsoide)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
76
Llamada a la ejecucioacuten de la funcioacuten desde Python Shell
Como hemos indicado antes y por su relevancia y empleabilidad en otras funciones con ldquonelipsoiderdquo se entiende un coacutedigo del 1 al 3 que representa cada uno un elipsoides de referencia seguacuten los Sistemas de Referencia Coordenados en este caso 1=ED50 elipsoide Internacional Hayford 1924 2=ETRS89 elipsoide GRS80 y 3=WGS84
Al introducir los datos ejecutamos con Intro Obtenemos 2 valores en forma de vector que respresentan seguacuten la descripcioacuten de la funcioacuten salida=[XY] UTM
Podemos volver a caacutelcular las coordenadas UTM en el SCR ETRS89 (en caso de que lalitud y longitud vinieran dadas en el mismohellip) simplemente copiando la liacutenea de entrada pegaacutendola abajo y cambiando 1 por 2 como iacutendice del elipsoide y volviendo a ejecutar con enter
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
77
Dentro de Python Shell se puede copiar coacutedigo de liacuteneas anteriores y
pegar abajo Para caacutelculos maacutes complejos de mayor nuacutemero de puntos etc a modo de praacutectica se ha implementado el coacutedigo de distintos tipos de caacutelculo de ejemplo Distribuidos en 2 tipologiacuteas diferentes ldquotopografiardquo y ldquogeodesiardquo se han incluido coacutedigos para la resolucioacuten e impresioacuten de distintos tipos de problemas realizando ldquoimportrdquo de funciones declaradas en los moacutedulos de los distintos subpaquetes de geotopo
51 CASOS PRAacuteCTICOS TOPOGRAFIacuteA En total se han realizada 4 casos praacutecticos dentro del apartado de topografiacutea Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica topo_practica1 Del resto soacutelo se ha incluido la salida de datos
511 Implementacioacuten del coacutedigo topo_praacutectica1
usrbinpython
-- coding iso-8859-1 --
-- coding cp1252 --
Praacutectica 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
Datos Coordenadas del punto de estacioacuten
Sistema de referencia local
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmesn)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
78
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
En esta versioacuten de la praacutectica utilizando la libreriacutea geotopo en el caacutelculo de azimutes
periacutemetro y superficie
import ossys
from numpy import matrixarrayshapepizerosconcatenatemeansincossqrt
from geotopotopografiaacimut import acimut
from geotopogeneralperimetro import perimetro
from geotopogeneralareacor import areacor
Radio medio terrestre en metros
rt=63700000
Informacioacuten del punto de estacioacuten El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto de estacioacuten
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Altitud del punto en metros
- Quinta columna- Altura de instrumento en metros
pe=array([[100030242663090376657208150]])
Informacioacuten de las referencias
- Cada fila es un punto de referencia
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Lectura azimutal en grados centesimales
ref=array([[200127863973359492354821][2002322174932757501335646][20033289406282
69902313540][2004261222126827453319067]])
Informacioacuten de los puntos radiados
- Cada fila es una observacioacuten claacutesica a un punto radiado
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Lectura azimutal en grados centesimales
- Tercera columna- Lectura cenital en grados centesimales
- Cuarta columna- Distancia geomeacutetrica en metros
- Quinta columna- Altura de instrumento en metros
rad=array([[30013387131001173422431180][300211877101000083399617200][3003240
5756999039440097150][300433037831000468414996150]])
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos de referencia
Caacutelculo de las dimensiones de la matriz de puntos de referencia
- mref seraacute el nuacutemero de filas el nuacutemero de puntos
- nref seraacute el nuacutemero de columnas 4
[mrefnref]=refshape
Se extrae la informacioacuten del punto de estacioacuten
num_pe=pe[00]
x_pe=pe[01]
y_pe=pe[02]
z_pe=pe[03]
alti_pe=pe[04]
Caacutelculo de azitutes del punto de estacioacuten a cada uno de los puntos radiados
La funcioacuten azimut de la libreriacutea Geotop devuelve el valor en radianes
acimutes=zeros((mref1))
for i in range (1mref+1)
Se leen la identificacioacuten y las coordenadas del punto radiado y se almacenan en variables
temporales
num_pref=ref[i-10]
x_pref=ref[i-11]
y_pref=ref[i-12]
azi_pe_pref=acimut(x_pey_pex_prefy_pref)
acimutes[i-10]=azi_pe_pref2000pi
ref=concatenate((refacimutes)axis=1)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
79
Caacutelculo de la desorientacioacuten de cada direccioacutenccedil
desor=zeros((mref1))
for i in range(1mref+1)
Se leen los valores angulares y se transforman a radianes almacenaacutendose en variables
temporales
lhz_pe_pref=ref[i-13]pi2000
azi_pe_pref=ref[i-14]pi2000
des_pe_pref=azi_pe_pref-lhz_pe_pref
if des_pe_preflt0
des_pe_pref=des_pe_pref+20pi
desor[i-10]=des_pe_pref200pi
ref=concatenate((refdesor)axis=1)
Caacutelculo de la desorientacioacuten media con la funcioacuten de python
des_mean=mean(ref[5])pi200
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos radiados
[mradnrad]=radshape
Caacutelculo de coordenadas polares que se almacenan en la matriz coor_polares
- Primera columna- Nuacutemero entero identificador del punto radiado
- Segunda columna- Azimut en grados centesimales
- Tercera columna- Distancia reducida en metros
Caacutelculo de coordenadas cartesianas que se almacenan en la matriz coor_cart
- Primera columna- Nuacutemero entero identificador del punto del punto radiado
- Segunda columna- Coordenada X
- Tercera columna- Coordenada Y
- Cuarta columna- Altitud
antes se almacenan las coordenadas polares en la matriz coord_polares (numero de
puntoacimutdistancia reducida)
coord_polares=zeros((mrad3))
coord_cart=zeros((mrad4))
for i in range(1mrad+1)
num_prad=rad[i-10]
lhz_pe_prad=rad[i-11]pi2000
lv_pe_prad=rad[i-12]pi2000
dg_pe_prad=rad[i-13]
altp_pe_prad=rad[i-14]
coord_polares[i-10]=num_prad
azi_pe_prad=lhz_pe_prad+des_mean
if azi_pe_pradgt(20pi)
azi_pe_prad=azi_pe_prad-20pi
coord_polares[i-11]=azi_pe_prad2000pi
dr_pe_prad=dg_pe_pradsin(lv_pe_prad)
coord_polares[i-12]=dr_pe_prad
coord_cart[i-10]=num_prad
coord_cart[i-11]= x_pe+dr_pe_pradsin(azi_pe_prad)
coord_cart[i-12]= y_pe+dr_pe_pradcos(azi_pe_prad)
coord_cart[i-13]= z_pe+alti_pe+dg_pe_pradcos(lv_pe_prad)-
altp_pe_prad+042dr_pe_prad2rt
Caacutelculo del periacutemetro de la parcela utilizando la funcioacuten periacutemetro de Geotopo
coord=zeros((mrad2))
for i in range (1mrad+1)
coord[i-10]=coord_cart[i-11]
coord[i-11]=coord_cart[i-12]
perim=perimetro(coord)
Caacutelculo de la superficie de la parcela utilizando la funcioacuten areacor de Geotopo
superficie=areacor(coord)
superficie_error=areacore(coord)
Impresioacuten de resultados
fsalida=open(topopractica1salw)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
80
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
fsalidawrite(TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(nPRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALESn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimaln)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia Localn)
Impresioacuten del paso 1 Paso de coordenadas cartesianas a polares Azimutes
fsalidawrite(n1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada
visualn)
fsalidawrite( Punto Inicial Punto Final Acimut Desorientacioacutenn)
for i in range(1mref+1)
num_pref=ref[i-10]
azi=ref[i-14]
des=ref[i-15]
fsalidawrite(100fnum_pe)
fsalidawrite(150fnum_pref)
fsalidawrite(184fazi)
fsalidawrite(184fndes)
Impresioacuten del paso 2 Caacutelculo de la desorientacioacuten media
fsalidawrite(n2 Caacutelculo de la desorientacioacuten median)
fsalidawrite( Desorientacioacuten media154fn(des_mean200pi))
Impresioacuten del paso 3 Caacutelculo de la coordenadas polares
fsalidawrite(n3 Caacutelculo de las coordenadas polaresn)
fsalidawrite( Punto Acimut Distancian)
for i in range (1mrad+1)
num_prad=coord_polares[i-10]
azi=coord_polares[i-11]
dist=coord_polares[i-12]
fsalidawrite(100fnum_prad)
fsalidawrite(184fazi)
fsalidawrite(184fndist)
Impresioacuten del paso 4 Caacutelculo de la coordenadas cartesianas
fsalidawrite(n4 Caacutelculo de las coordenadas cartesianasn)
fsalidawrite( Punto X Y Zn)
for i in range (1mrad+1)
num_prad=coord_cart[i-10]
x=coord_cart[i-11]
y=coord_cart[i-12]
z=coord_cart[i-13]
fsalidawrite(100fnum_prad)
fsalidawrite(154fx)
fsalidawrite(154fy)
fsalidawrite(154fnz)
Impresioacuten del paso 5 valor del periacutemetro
fsalidawrite(n5 Caacutelculo del periacutemetro de la parcelan)
fsalidawrite( Periacutemetro153f mnperim)
Impresioacuten del paso 6 valor de la superficie de la parcela
fsalidawrite(n6 Caacutelculo de la superficie de la parcelan)
fsalidawrite( Superficie153f m2nsuperficie)
fsalidaclose()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
81
512 Impresioacuten del fichero de salida de resultados topo_praacutectica1
Ejecuando el programa anterior obtenemos un fichero con los resultados y la presentacioacuten mejorada que hemos implementado SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada visual
Punto Inicial Punto Final Acimut Desorientacioacuten
1000 2001 3539187 3184366
1000 2002 520128 3184482
1000 2003 1497887 3184347
1000 2004 2503428 3184361
2 Caacutelculo de la desorientacioacuten media
Desorientacioacuten media 3184389
3 Caacutelculo de las coordenadas polares
Punto Acimut Distancia
3001 3523102 4224303
3002 372099 3996170
3003 1590145 4400965
3004 2488172 4149959
4 Caacutelculo de las coordenadas cartesianas
Punto X Y Z
3001 27365966 33997199 6561414
3002 32447650 34236535 6566664
3003 32884285 27383773 6578851
3004 27363219 27915286 6569143
5 Caacutelculo del periacutemetro de la parcela
Periacutemetro 2358248 m
6 Caacutelculo de la superficie de la parcela
Superficie 342540930 m2
513 Salida de resultados topo_praacutectica2
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN DIRECTA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3264596 m
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
82
Y= 4065437 m
Previsioacuten de error planimeacutetrico= 0035 m
Vector con soluciones en z y su error
Z=725931 m Previsioacuten de error altimeacutetrico 0023 m
Z=725926 m Previsioacuten de error altimeacutetrico 0024 m
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN INVERSA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3010146 m
Y= 3411841 m
Previsioacuten de error planimeacutetrico= 0022 m
Vector con soluciones en z y su error
Z=515695 m Previsioacuten de error altimeacutetrico 0021 m
Z=515703 m Previsioacuten de error altimeacutetrico 0024 m
Z=515698 m Previsioacuten de error altimeacutetrico 0022 m
514 Salida de resultados topo_praacutectica3
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 3 CALCULO DE DATOS DE REPLANTEO PARA ESTACION TOTAL EN UN SISTEMA DE REFERENCIA
LOCAL
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
ResultadosDatos de replanteo
Base Punto Azimut Distancia CotaProyecto CotaTerreno CotaRoja
1 1 3856489 75460 96930 96539 0391
1 2 2667262 77786 96903 98259 -1356
1 3 1219144 40883 95329 94688 0641
1 4 279600 67437 95045 95587 -0542
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
83
515 Salida de resultados topo_praacutectica4
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 4 TRANSFORMACIOacuteN ENTRE SISTEMAS DE REFERENCIA LOCALES HELMERT 2D
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
Planteamiento del sistema de ecuaciones que define la transformacioacuten planimeacutetrica
Matriz A
1000 0000 3258686 -2709414
0000 1000 2709414 3258686
1000 0000 2075590 -2105320
0000 1000 2105320 2075590
Vector teacuterminos independientes
4554780
228501
3244004
443737
1 Resultados de los paraacutemetros de la transformacioacuten
- Planimetriacutea
- Traslacioacuten en coordenada x del sistema S1 al sistema S2 324401 m
- Traslacioacuten en coordenada y del sistema S1 al sistema S2 -20424 m
- Valor para el paraacutemetro a (a=landacos_giro) 0805119725
adimensional
- Valor para el paraacutemetro b (b=landasin_giro) -0593023724
adimensional
- Valor para el factor de escala (landa=sqrt(a2+b2)) 0999947
tanto por uno
- Valor para el giro (giro=arctan2(ba) -404157
grados centesimales
- Altimetriacutea
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 1 6056 m
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 2 6083 m
- Traslacioacuten media en coordenada z del sistema S1 al sistema S2 6070 m
2 Resultado de la transformacioacuten del punto 3 al sistema de referencia local S2
- Coordenada x de 3 en el sistema de referencia local S2 4072286 m
- Coordenada y de 3 en el sistema de referencia local S2 45170 m
- Coordenada z de 3 en el sistema de referencia local S2 104748 m
52 CASOS PRAacuteCTICOS GEODESIA En total se han realizada 5 casos praacutecticos dentro del apartado de geodesia Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica geo_practica1 Del resto soacutelo se ha incluido la salida de datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
84
521 Implementacioacuten del coacutedigo geo_praacutectica1
Semana Geomaacutetica 2011 Bogotaacute DC Colombia
IGAC-Instituto Agustiacuten Codazzi
Taller Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea GeoTop
Impartido por Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
Dr David Hernaacutendez Loacutepez davidhernandezulcmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
Praacutectica 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
Datos Coordenadas de la Red ERGNSS - Red de Estaciones Permanentes GNSS - Instituto
Geograacutefico Nacional Espantildea
Sistema de referencia ETRS89 (Elipsoide GRS80)
Coacutedigo EPSG para coordenadas geodeacutesicas sobre el elipsoide 4258
En esta versioacuten de la praacutectica se utiliza la libreriacutea GeoTop
Otra variante con respecto a la versioacuten anterior de la praacutectica es que se parte de coordenadas
geodeacutesicas en seudo decimal sexagesimal
Documentacioacuten La formulacioacuten empleada figura en el apartado 13 Parametrizacioacuten del
elipsoide del documento
OctaveTallerGeodesiaDocumentacionApuntes_DHL_2010GeodesiaElipsoidalpdf
Matriz de coordenadas
- Cada fila es un punto una estacioacuten de referencia GNSS
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada geodeacutesica longitud en suedo decimal sexagesimal
- Tercera columna- Coordenada geodeacutesica latitud en suedo decimal sexagesimal
- Cuarta columna- Altitud elipsoidal en metros
from numpy import zerosarraygenfromtxt
from geotopogeodesiaelipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiatri2geo import tri2geo
from geotopogeodesiageo2tri import geo2tri
c4258h=[ 1 432151770811 -82356167472 66917
2 382020103584 -02852437048 60356
3 385840494457 -15123054192 751736
4 365109112636 -22734018800 127517
5 392843898433 -62030426066 436527
6 432819118007 -34753038539 99287
7 355331090227 -51823016758 52475
8 375456176191 -44315999947 202082
9 371159923466 -65513077151 81860
10 402645009016 -34234283233 766920
11 423518259367 -53903511817 970254
12 364334003748 -42336718238 119848
13 393309445258 23728383134 62063
14 422728617761 -23007691629 503204
15 405642292231 -52945108842 854969
16 394031263811 -35750290360 808968
17 402101790155 -10727483699 956188
18 392850970441 -02015543423 77592
19 421102318373 -84847057525 87790
20 403129631681 -30519065001 972777
21 413800221985 -05255792567 296111
22 281829034024 -162958855078 2417483
23 282837857413 -161428164273 51787
24 282505711067 -163302841359 54475
25 280249784309 -164306688806 58543
26 284549932439 -175337787438 2199221]
Los datos los guardamos en un txt en la misma carpeta del trabajo e importamos
c4258h=genfromtxt(CPython27geotopoaplicacionestalleresgeo_practica1dattxt)
Caacutelculo de las dimensiones de la matriz de coordenadas
- m seraacute el nuacutemero de filas el nuacutemero de puntos
- n seraacute el nuacutemero de columnas 4
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
85
[mn]=c4258hshape
grs80=elipsoide(2)
Recibe Codigo del elipsoide (nelipsoide)
1 - Ed50 Devuelve el elipsoide Internacional 1924
2 - Etrs89 Devuelve el elipsoide GRS80
3 - Wgs84 Devuelve el elipsoide Wgs84
Definicioacuten del elipsoide
fsalida=open(geo_practica1salw)
fsalidawrite(SEMANA GEOMAacuteTICA - 2011n)
fsalidawrite(TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software
libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE
COORDENADAS GEODEacuteSICAS Y ECEFn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal
ggmmssfsn)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia ETRS89n)
fsalidawrite(- Paraacutemetros del elipsoide GRS80n)
fsalidawrite( - Semieje mayor 103f mngrs80[0])
fsalidawrite( - Inverso del aplanamiento 109f adimngrs80[1])
fsalidawrite( - Semieje menor 103f mngrs80[2])
fsalidawrite( - Primera excentricidad al cuadrado 109f adimngrs80[3]2)
fsalidawrite( - Segunda excentricidad al cuadrado 109f adimngrs80[4]2)
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(1 Paso de coordenadas geodeacutesicas a ECEFn)
fsalidawrite(NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF
CoorZECEFn)
c4258XYZ=zeros((m4))
for i in range (1m+1)
np=c4258h[i-10]
longitudRad=psdo2rad(c4258h[i-12])
latitudRad=psdo2rad(c4258h[i-11])
hElip=c4258h[i-13]
[xecefyecefzecef]=geo2tri(latitudRadlongitudRadhElip2)
fsalidawrite(80fnp)
fsalidawrite(159fc4258h[i-11])
fsalidawrite(159fc4258h[i-12])
fsalidawrite(123fhElip)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(n)
c4258XYZ[i-10]=np
c4258XYZ[i-11]=xecef
c4258XYZ[i-12]=yecef
c4258XYZ[i-13]=zecef
Caacutelculo e impresioacuten del paso 2 de coordenadas ECEF a geodeacutesicas
fsalidawrite(2 Paso de coordenadas ECEF a geodeacutesicasn)
fsalidawrite( NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud
AltElipn)
for i in range(1m+1)
np=c4258XYZ[i-10]
xecef=c4258XYZ[i-11]
yecef=c4258XYZ[i-12]
zecef=c4258XYZ[i-13]
[latitudlongitudhElip]=tri2geo(xecefyecefzecef2)
fsalidawrite(80fnp)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(159frad2psdo(latitud))
fsalidawrite(159frad2psdo(longitud))
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
86
fsalidawrite(153fnhElip)
fsalidaclose()
522 Impresioacuten del fichero de salida de resultados geo_praacutectica1
SEMANA GEOMAacuteTICA - 2011
TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea
GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal ggmmssfs
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia ETRS89
- Paraacutemetros del elipsoide GRS80
- Semieje mayor 6378137000 m
- Inverso del aplanamiento 0003352811 adim
- Semieje menor 6356752314 m
- Primera excentricidad al cuadrado 0006694380 adim
- Segunda excentricidad al cuadrado 0006739497 adim
1 Paso de coordenadas geodeacutesicas a ECEF
NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF CoorZECEF
1 43215177081 -8235616747 66917 4594489890 -678368010 4357065904
2 38202010358 -0285243705 60356 5009051399 -42072472 3935057504
3 38584049446 -1512305419 751736 4962848206 -160854365 3990884209
4 36510911264 -2273401880 127517 5105220295 -219278803 3804386889
5 39284389843 -6203042607 436527 4899866820 -544567584 4033769790
6 43281911801 -3475303854 99287 4625924690 -307096765 4365771175
7 35533109023 -5182301676 52475 5150908012 -478415023 3718518240
8 37545617619 -4431599995 202082 5021256063 -414685080 3898182184
9 37115992347 -6551307715 81860 5049613168 -612885631 3835143860
10 40264500902 -3423428323 766920 4851137670 -314518688 4116282036
11 42351825937 -5390351182 970254 4680871385 -463168384 4294606572
12 36433400375 -4233671824 119848 5103282414 -392096752 3793146894
13 39330944526 2372838313 62063 4919369704 225499577 4039849606
14 42272861776 -2300769163 503204 4708688612 -205761707 4283609369
15 40564229223 -5294510884 854969 4803054799 -462131609 4158378661
16 39403126381 -3575029036 808968 4904660519 -339868032 4050823512
17 40210179016 -1072748370 956188 4867391684 -95523894 4108341277
18 39285097044 -0201554342 77592 4929534046 -29050676 4033709925
19 42110231837 -8484705753 87790 4677481077 -725205068 4260827192
20 40312963168 -3051906500 972777 4848724914 -261632472 4123093922
21 41380022199 -0525579257 296111 4773803543 -73506519 4215453698
22 28182903402 -16295885508 2417483 5390243531 -1596630330 3007752593
23 28283785741 -16142816427 51787 5386836438 -1569217617 3023118925
24 28250571107 -16330284136 54475 5381262061 -1599192518 3017377791
25 28024978431 -16430668881 58543 5395193089 -1620537044 2981146536
26 28454993244 -17533778744 2199221 5326646317 -1719826438 3052043561
2 Paso de coordenadas ECEF a geodeacutesicas
NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud AltElip
1 4594489890 -678368010 4357065904 43215177081 -8235616747 66917
2 5009051399 -42072472 3935057504 38202010358 -0285243705 60356
3 4962848206 -160854365 3990884209 38584049446 -1512305419 751736
4 5105220295 -219278803 3804386889 36510911264 -2273401880 127517
5 4899866820 -544567584 4033769790 39284389843 -6203042607 436527
6 4625924690 -307096765 4365771175 43281911801 -3475303854 99287
7 5150908012 -478415023 3718518240 35533109023 -5182301676 52475
8 5021256063 -414685080 3898182184 37545617619 -4431599995 202082
9 5049613168 -612885631 3835143860 37115992347 -6551307715 81860
10 4851137670 -314518688 4116282036 40264500902 -3423428323 766920
11 4680871385 -463168384 4294606572 42351825937 -5390351182 970254
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
87
12 5103282414 -392096752 3793146894 36433400375 -4233671824 119848
13 4919369704 225499577 4039849606 39330944526 2372838313 62063
14 4708688612 -205761707 4283609369 42272861776 -2300769163 503204
15 4803054799 -462131609 4158378661 40564229223 -5294510884 854969
16 4904660519 -339868032 4050823512 39403126381 -3575029036 808968
17 4867391684 -95523894 4108341277 40210179016 -1072748370 956188
18 4929534046 -29050676 4033709925 39285097044 -0201554342 77592
19 4677481077 -725205068 4260827192 42110231837 -8484705753 87790
20 4848724914 -261632472 4123093922 40312963168 -3051906500 972777
21 4773803543 -73506519 4215453698 41380022199 -0525579257 296111
22 5390243531 -1596630330 3007752593 28182903402 -16295885508 2417483
23 5386836438 -1569217617 3023118925 28283785741 -16142816427 51787
24 5381262061 -1599192518 3017377791 28250571107 -16330284136 54475
25 5395193089 -1620537044 2981146536 28024978431 -16430668881 58543
26 5326646317 -1719826438 3052043561 28454993244 -17533778744 2199221
523 Salida de resultados geo_praacutectica2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
88
524 Salida de resultados geo_praacutectica3
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
89
525 Salida de resultados geo_praacutectica4
helliphellip
helliphellip
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
90
526 Salida de resultados geo_praacutectica5
Con la implementacioacuten y caacutelculo de los 9 casos praacutecticos realizados e incluidos en este Proyecto Final de Maacutester se puede obtener una idea de la aplicabilidad de esta libreriacutea en aplicaciones de caacutelculos topograacuteficos y geodeacutesicos Igualmente y como uno de los puntos de partida de este Proyecto obtenemos una libreriacutea muy potente para el uso en aacutembitos universitarios facilitando al profesorado el planteamiento y resolucioacuten de los distintos casos praacutecticos de las asignaturas y al tratarse de coacutedigo abierto se facilita que los alumnos implementen nuevas utilidades formatos de salida etc Convirtiendo geotopo en una herramienta de trabajo diario
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
91
6 CONCLUSIONES FINALES Como conclusiones finales podemos enumerar
Se ha corroborado lo que dicen los impulsores de Python se trata de un lenguaje limpio sencillo y claro muy proacuteximo a pseudocoacutedigo
Resulta interesante la utilizacioacuten de software libre para caacutelculos geodeacutesicos y topografiacuteacos Al tratarse de software libre es accesible a cualquier tipo de usuario
Al partir de la consideracioacuten de un paradigma estructurado de programacioacuten hemos conseguido implementar gran nuacutemero de funciones en ficheros (moacutedulos) de pequentildeo tamantildeo facilitando la programacioacuten Tambieacuten se ha iniciado en la programacioacuten orientada a objetos con la declaracioacuten de alguna clase
La importacioacuten de moacutedulos facilita a la implementacioacuten de coacutedigo sin necesitar volver a escribir el coacutedigo importado y ante cualquier modificacioacuten del mismo automaacuteticamente se actualiza en todos los programas o moacutedulos donde se importe dicho moacutedulo
Con las funciones definidas dentro de Numpy hemos realizado la mayor parte de los caacutelculos necesarios en nuestra biblioteca
Se ha de realizar la importacioacuten expresa de gran nuacutemero de operaciones matemaacuteticas Salvo + - y casi todos los demaacutes operadores se han de importar desde Numpy por ejemplo pi sqrt sin cos etc A veces puede resultar un poco complicado hacer la importacioacuten de estos operadores pero cuando se avanza en la programacioacuten hasta parece maacutes didactico reflejar todas las funciones importadas de otros moacutedulos
Se ha apreciado que en algunos casos las mismas funciones estaacuten incluidas en distintos moacutedulos y ademaacutes con nombres diferentes Asiacute en Numpy tenemos arcsin arccos arctan etc y en SciPy asin acos atan cuando se refieren a las mismas funciones arcoseno arcocoseno y arcotangente
Se ha creado una libreriacutea abierta accesible y editable para moder modificar
coacutedigo y tambieacuten poder ampliar con el implementado de nuevas funciones que aumenten el potencial de la misma Esto tambieacuten se incluye dentro de las liacuteneas futuras de actuacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
92
7 LIacuteNEAS FUTURAS DE ACTUACIOacuteN
De forma general se establecen las siguientes liacuteneas futuras de actuacioacuten e investigacioacuten
Avance en el desarrollo a aplicaciones informaacuteticas mediante el uso de software libre y en especial de Python
Estudio de la aplicabilidad de Python en el caacutelculo minimo-cuadraacutetico de sistemas de ecuaciones aplicables en topografiacutea y geodesia Para ello se ha de profundizar en el estudio de las diferencias entre los tipos array que contiene numpy y los tipos matrix par el caacutelculo avanzado de sistemas de ecuaciones
Aplicacioacuten de Python para el caacutelculo y ajuste de Redes Geodeacutesicas mediante la utilizacioacuten de miacutenimos cuadrados Con este fin estariacuteamos evitando el tener que recurrir a los softwares de caacutelculo de las casas comerciales ahorrando asiacute un coste importante y el poder realizar los ajustes y presentaciones de resultados adapatados a nuestras necesidades
Inclusioacuten de una interfaz graacutefica a los caacutelculos realizados para poder tener visualmente el resultado de los mismos
Aplicabilidad de python en el procesado de imaacutegenes Utilizacioacuten de la libreriacutea PIL (Python Imaging Library) que agrega capacidades de procesamiento de imaacutegenes al interprete Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
93
8 ANEJO
81 EQUIVALENCIAS ENTRE FUNCIONES EN MATLAB Y PYTHON Al partir de la libreiacutea Geotop en Octave hemos de tener en cuenta la equivanlencia entre algunas funciones de MatlabOctave con Python Asiacute tenemos MATLAB numpyarray numpymatrix Notes
ndims(a) ndim(a) or andim get the number of dimensions of a (tensor rank)
size(a) shape(a) or ashape get the size of the matrix
size(an) ashape[n-1]
get the number of elements of the nth dimension of array a (Note that MATLABreg uses 1 based indexing while Python uses 0 based indexing See note INDEXING)
MATLAB numpyarray numpymatrix Notes
[ 1 2 3 4 5 6 ] array([[123] [456]])
mat([[123] [456]]) or mat(1 2 3 4 5 6)
2x3 matrix literal
[ a b c d ] vstack([hstack([ab]) hstack([cd])])
bmat(a b c d) construct a matrix from blocks abc and d
a(end) a[-1] a[-1][00] access last element in the 1xn matrix a
a(25) a[14] access element in second row fifth column
a(2) a[1] or a[1] entire second row of a
a(15) a[05] or a[5] or a[05] the first five rows of a
a(end-4end) a[-5] the last five rows of a
a(1359) a[03][49] rows one to three and columns five to nine of a This gives read-only access
a([245][13]) a[ix_([134][02])] rows 24 and 5 and columns 1 and 3 This allows the matrix to be modified and doesnt require a regular slice
a(3221) a[ 2212] every other row of a starting with the third and going to the twenty-first
a(12end) a[ 2] every other row of a starting with the first
a(end-11) or flipud(a) a[ -1] a with rows in reverse order
a([1end 1]) a[r_[len(a)0]] a with copy of the first row appended to the end
a atranspose() or aT transpose of a
a aconj()transpose() or aconj()T
aH conjugate transpose of a
a b dot(ab) a b matrix multiply
a b a b multiply(ab) element-wise multiply
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
94
MATLAB numpyarray numpymatrix Notes
ab ab element-wise divide
a^3 a3 power(a3) element-wise exponentiation
(agt05) (agt05) matrix whose ijth element is (a_ij gt 05)
find(agt05) nonzero(agt05) find the indices where (a gt 05)
a(find(vgt05)) a[nonzero(vgt05)[0]] a[nonzero(vAgt05)[0]] extract the columms of a where vector v gt 05
a(find(vgt05)) a[vTgt05] a[vTgt05)] extract the columms of a where column vector v gt 05
a(alt05)=0 a[alt05]=0 a with elements less than 05 zeroed out
a (agt05) a (agt05) mat(aA (agt05)A) a with elements less than 05 zeroed out
a() = 3 a[] = 3 set all values to the same scalar value
y=x y = xcopy() numpy assigns by reference
y=x(2) y = x[1]copy() numpy slices are by reference
y=x() y = xflatten(1) turn array into vector (note that this forces a copy)
110 arange(111) or r_[111] or r_[11010j]
mat(arange(111)) or r_[111r]
create an increasing vector see note RANGES
09 arange(10) or r_[10] or r_[910j]
mat(arange(10)) or r_[10r]
create an increasing vector see note RANGES
[110] arange(111)[ newaxis] r_[111c] create a column vector
zeros(34) zeros((34)) mat() 3x4 rank-2 array full of 64-bit floating point zeros
zeros(345) zeros((345)) mat() 3x4x5 rank-3 array full of 64-bit floating point zeros
ones(34) ones((34)) mat() 3x4 rank-2 array full of 64-bit floating point ones
eye(3) eye(3) mat() 3x3 identity matrix
diag(a) diag(a) mat() vector of diagonal elements of a
diag(a0) diag(a0) mat() square diagonal matrix whose nonzero values are the elements of a
rand(34) randomrand(34) mat() random 3x4 matrix
linspace(134) linspace(134) mat() 4 equally spaced samples between 1 and 3 inclusive
[xy]=meshgrid(0805) mgrid[0906] or meshgrid(r_[09]r_[06]
mat() two 2D arrays one of x values the other of y values
ogrid[0906] or ix_(r_[09]r_[06]
mat() the best way to eval functions on a grid
[xy]=meshgrid([124][245]) meshgrid([124][245]) mat()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
95
ix_([124][245]) mat() the best way to eval functions on a grid
MATLAB numpyarray numpymatrix Notes
repmat(a m n) tile(a (m n)) mat() create m by n copies of a
[a b]
concatenate((ab)1) or hstack((ab)) or column_stack((ab)) or c_[ab]
concatenate((ab)1) concatenate columns of a and b
[a b] concatenate((ab)) or vstack((ab)) or r_[ab]
concatenate((ab)) concatenate rows of a and b
max(max(a)) amax() maximum element of a (with ndims(a)lt=2 for matlab)
max(a) amax(0) maximum element of each column of matrix a
max(a[]2) amax(1) maximum element of each row of matrix a
max(ab) maximum(a b) compares a and b element-wise and returns the maximum value from each pair
norm(v) sqrt(dot(vv)) or Scilinalgnorm(v) or linalgnorm(v)
sqrt(dot(vAvA)) or Scilinalgnorm(v) or linalgnorm(v)
L2 norm of vector v
a amp b logical_and(ab) element-by-element AND operator (Numpy ufunc) see note LOGICOPS
a | b logical_or(ab) element-by-element OR operator (Numpy ufunc) see note LOGICOPS
bitand(ab) a amp b bitwise AND operator (Python native and Numpy ufunc)
bitor(ab) a | b bitwise OR operator (Python native and Numpy ufunc)
inv(a) linalginv(a) inverse of square matrix a
pinv(a) linalgpinv(a) pseudo-inverse of matrix a
rank(a) linalgmatrix_rank(a) rank of a matrix a
ab linalgsolve(ab) if a is square
linalglstsq(ab) otherwise solution of a x = b for x
ba Solve aT xT = bT instead solution of x a = b for x
[USV]=svd(a) U S Vh = linalgsvd(a) V = VhT singular value decomposition of a
chol(a) linalgcholesky(a)T
cholesky factorization of a matrix (chol(a) in matlab returns an upper triangular matrix but linalgcholesky(a) returns a lower triangular matrix)
[VD]=eig(a) DV = linalgeig(a) eigenvalues and eigenvectors of a
[VD]=eig(ab) VD = Scilinalgeig(ab) eigenvalues and eigenvectors of ab
[VD]=eigs(ak) find the k largest eigenvalues and eigenvectors of a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
96
MATLAB numpyarray numpymatrix notes
[QRP]=qr(a0) QR = Scilinalgqr(a) mat() QR decomposition
[LUP]=lu(a) LU = Scilinalglu(a) or LUP=Scilinalglu_factor(a)
mat() LU decomposition
conjgrad Scilinalgcg mat() Conjugate gradients solver
fft(a) fft(a) mat() Fourier transform of a
ifft(a) ifft(a) mat() inverse Fourier transform of a
sort(a) sort(a) or asort() mat() sort the matrix
[bI] = sortrows(ai) I = argsort(a[i]) b=a[I] sort the rows of the matrix
regress(yX) linalglstsq(Xy) multilinear regression
decimate(x q) Scisignalresample(x len(x)q) downsample with low-pass filtering
unique(a) unique(a)
squeeze(a) asqueeze()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
97
9 BIBLIOGRAFIacuteA
DOWNEY A ELKNER J MEYERS C Aprenda a Pensar Como un Programador con Python GARCIacuteA-ASENJO VILLAMAYOR L HERNAacuteNDEZ LOacutePEZ D Geodesia Febrero 2005 GONZAacuteLEZ DUQUE R Python PARA TODOS Edicioacuten Internet bajo licencia Creative Commons Reconocimiento 25 Espantildea Descargable en httpmundogeeknettutorial-python MARZAL A GRACIA I Introduccioacuten a la programacioacuten con Python Departamento de Lenguajes y Sistemas Informaacuteticos Universitat Jaume I 2003 Edicioacuten Internet NUMPY COMMUNITY NumPy Reference Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg NUMPY COMMUNITY NumPy User Guide Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg VAN ROSSUM G Guiacutea de aprendizaje de PythonRelease 241ordf0 Edicioacuten Intenet Septiembre 2005 Descargable en httpwwwscipyorg VAN ROSSUM G El tutorial de Python Edicioacuten Intenet Descargable en httppythonorgarpyarTutorial
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
98
10 PAacuteGINAS WEB CONSULTADAS httpenfoquevirtualwordpresscomcategorytutorial httpgeektheplanetnet1347how-to-instalar-pydev-en-aptanaxhtml httpmundogeeknetarchivos20080328python-modulos-y-paquetes httpwwwthebitsourcecomprogramming-software-developmentpythonpython-application-development-aptana-pydev httpwwwyoutubecomwatchv=XtnfY2cBbMA youtube interesante trabajo con pydev y modulos httpcodingderkeilercomArchivePythoncomplangpython2005-08msg03511html paacutegina que explica coacutemo solucionar los problemas de Non-ASCII character httpeswikibooksorgwikiInmersiC3B3n_en_PythonSu_primer_programa_en_PythonDocumentado_de_funciones paacutegina que explica la cadena de documentacioacuten despueacutes de definir una funcioacuten con ldquordquordquo___rdquordquordquo (triples comillas) httpwwwpythonorgdevpepspep-0008 style guide for python code httpmundogeeknetarchivos20080707documentacion-en-python habla de la forma de documentar en python httpwwwpythonorgdevpepspep-0257 documentacioacuten y comentarios httpprogramandoideascomcomentarios-en-python documentacioacuten y comentarios httpwwwyoutubecomwatchv=v0sqRYuL5e8 tutorial de python con aptana httpwwwyoutubecomwatchv=29mq1Bn52GYampfeature=related youtube tutorial httpprojectsscipyorgnumpybrowsertrunknumpymatlibpyrev=8567 paacutegina que habla un poco de matrices
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
99
httpwwwgfceduco~arsranguias42p8guia42html cosas interesantes de matrices httpdocencia-euptunizaresctmedrascipy_tutorialscipy_tutorialhtml varios sobre python httpdocspythonorgtutorialmoduleshtml muy buena de paquetes etc httpwwwlinux-ittcom200804python-mdulos-y-paqueteshtml maacutes sobre paquetes httpwwwmclibreorgconsultarpythonotrosin03_idlehtmlccedil coding cp1252 httpwwwmclibreorgconsultarpython tutorial de python en la web Idle httpbioinfcomavupvescourseslinuxpythonmoduloshtml csv listasetc httpwwwdavidricardocommxp=1173 ok muy bueno importacioacuten csv como matriz httpwwwaprenderpythonorg httpwwwscipyorgNumpy_Example_List_With_Doc paacutegina muy importante de scipy httpjsbsanblogspotcom201101calculo-de-un-area-de-un-poligonohtml video sobre caacutelculo de areas de poliacutegonos irregulares httpmathesaurussourceforgenetmatlab-numpyhtml viprelacioacuten entre operaciones con octave y con python httpwwwscipyorgTentative_NumPy_Tutorial pagina importante de scipy httptecnologicumwordpresscomastronomiavideo-tutoriales-de-python todos los videotutoriales de python httpwwwyoutubecomwatchv=Oj3MZXWXGiUampfeature=related csv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
100
httptranslategoogleestranslatehl=esamplangpair=en7Cesampu=httpwwwscipyorgNumPy_for_Matlab_Users interesante sobre numpyhellip httpwikipythonorgmoinHowToSorting interesante de sort httpwikipythonorgmoinHowToSortingOperator_Module_Functions sort itemgetteretc httpcodeactivestatecomrecipes304440-sorting-dictionaries-by-value-in-python-24 operator itemgetter httpmundogeeknetarchivos20080402python-entrada-salida-ficheros entrada salida de archivos httpwwwgulicorgalmacenhttlaclwpchap11htm formato de escritura textos nuacutemeros y decimales httpwwwprogramacioncomarticuloguia_de_aprendizaje_de_python_657 formatos de salida httpnumpysourceforgenetnumdocHTMLnumdochtmpgfId-57315 muy importante sobre arraysetc httpwwwhjcbnlpythonArrayshtml muy importante sobre arraysetc httpwwwalecjacobsoncomweblogp=1570 cargar un txt como una matriz en python httpdocsscipyorgdocnumpyreferencegeneratednumpygenfromtxthtml getfromtxt de numpy httpwwwalegsaonlinecomart13php httpwwwumesdocenciabarzanaIAGPIagp3html httpwebusales~dhernandsoftwarehtmGeotop httpmailpythonorgpipermailtutor2008-March060886html From future import division
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
101
httpwwwyoutubecomwatchv=I6GMIQBD6EU youtube diccionarios httpmundogeeknetarchivos20080121python-tipos-basicos-ii-colecciones diccionarios httpstaffnotiaces~rcardeneshgdiveintopython3-esnative-datatypeshtml diccionarios httpwwwestrellateyardeorgdiscovermanual-python-lo-mas-basico diccionarios httpeswikibooksorgwikiInmersiC3B3n_en_PythonTipos_de_datos_nativosPresentaciC3B3n_de_los_diccionarios diccionarios httpdocspythonorgartutorialdatastructureshtmldiccionarios python estructura de diccionarios httpwwwwikilearningcomtutorialintroduccion_informal_a_matlab_y_octave-matrices_y_algebra_lineal_i19256-8 concatenar matrices httpwwwslidesharenetsantiagosilascomputao-cientfica-com-numpy-e-scipy-7797060 detalles de numpy vectores matricesetc httpwwwscipyorgNumPy_for_Matlab_Usershead-e9a492daa18afcd86e84e07cd2824a9b1b651935 muy importante de scipy arrays y matriceshellip httpdocsscipyorgdocnumpyreferencegeneratednumpyconcatenatehtml muy importante de scipy arrays y matriceshellip httppyspanishdocsourceforgenettut traduccioacuten del tutorial de Guido httpwwwscipyorgNumpy_Example_List_With_Dochead-5202db3259f69441c695ab0efc0cdf45341829fc httppyspanishdocsourceforgenetlibmodule-picklehtml funcioacuten pickle
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
102
httpnicocesarcomq=node23 carga de ficheros binarios httpstaffnotiaces~rcardeneshgdiveintopython3-esfileshtml apertura cierre carga de ficheros etc httppythonr2wordpresscom20080829leer-archivos-binarios-en-python lectura de ficheros binarios httpwwwignesignlayoutInherramientasdo descarga de ficheros regilla del IGN httpterrasitgvaeseskbtransformacion-coordenadas-utm-ed50-utm-etrs89-utilizando-libreria-proj4 paacutegina de la gva sobre cambio de sistema y fichero rejilla httpdocspythonorglibrarystructhtml moacutedulo struct de python para lectura de ficheros binarios httpwwwslidesharenetjpadillaaprogramacion-orientada-a-objetos-en-python programacioacuten orientada a objetos con python httppyspanishdocsourceforgenettutnode7html recorrer diccionarios httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 interesante aplicacioacuten fichero rejilla ntv2 en python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
2
524 Salida de resultados geo_praacutectica3 88
525 Salida de resultados geo_praacutectica4 89
526 Salida de resultados geo_praacutectica5 90
6 CONCLUSIONES FINALES 91
7 LIacuteNEAS FUTURAS DE ACTUACIOacuteN 92
8 ANEJO 93
81 EQUIVALENCIAS ENTRE FUNCIONES EN MATLAB Y PYTHON 93
9 BIBLIOGRAFIacuteA 97
10 PAacuteGINAS WEB CONSULTADAS 98
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
3
1 OBJETIVOS DEL TRABAJO Dentro del marco general de la guiacutea docente del Maacutester en Geotecnoloacutegias Cartograacuteficas en Ingenieriacutea y Arquitectura impartido por la Escuela Politeacutecnica Superior de Aacutevila de la Universidad de Salamanca se establece como requisito para la obtencioacuten de esta titulacioacuten la realizacioacuten de un proyecto final de maacutester A tal fin responde el presente trabajo en el que se ha optado por la realizacioacuten de un proyecto de desarrollo de herramientas en Python para caacutelculos geodeacutesicos y topograacuteficos Como Ingeniero Teacutecnico en Topografiacutea numerosas han sido las necesidades de disponer de herramientas informaacuteticas para los distintos caacutelculos necesarios desde la etapa de estudiante en la Universidad como una vez incurso en la vida laboral Desde el simple caacutelculo de un acimut y distancia entre dos puntos medidas de superficies encerradas en poliacutegonos irregulares datos de replanteo de puntos caacutelculo de previsioacuten de errores o las diferentes transformaciones de coordenadas de grandes cantidades de puntos entre unas proyecciones y otras y entre distintos Sistemas de Referencia Coordenados Partiendo de esta necesidad y de la existencia de la libreriacutea ldquoGeotoprdquo en Octave del Profesor y Co-tutor de este proyecto Dr D David Hernaacutendez Loacutepez se han elaborado una serie de herramientas en Python para caacutelculos geodeacutesicos y topograacuteficos en Python principalmente migrando del lenguaje Octave a lenguaje Python Ademaacutes del uso para caacutelculos topograacuteficos en aacutembitos del uso diario de ingenieros Teacutecnicos en Topografiacutea o cualquier Ingenieriacutea afiacuten esta libreriacutea tambieacuten se concibe como una herramienta de uso para el estudiante de estas disciplinas en las Universidades Al tratarse de software libre es perfectamente editable y adaptable a las necesidades de caacutelculo y presentacioacuten que se consideren oportunas La eleccioacuten de Python aunque posteriormente se desarrolle maacutes se debe a que se trata de un lenguaje de programacioacuten faacutecil de aprender y potente Tiene eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de plataformas El inteacuterprete de Python y la extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables y se pueden distribuir libremente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
4
2 CONTEXTO DEL PROYECTO Dentro de los objetivos de este proyecto se encuentra el aprendizaje y desarrollo de herramientas con software libre y tambieacuten la eleccioacuten de Python al tratarse de un lenguaje de programacioacuten que aunque parece novedoso esta encontrando gran aceptacioacuten en entornos docentes y tambieacuten en el desarrollo de programacioacuten en la empresa privada
21 iquestPOR QUEacute SOFTWARE LIBRE Muchiacutesimos gobiernos de todo el mundo estaacuten empezando a ver al software libre como una poderosa herramienta para disminuir sus costos de administracioacuten reducir la dependencia tecnoloacutegica y fomentar sus industrias locales de software Las razones principales que impulsan la migracioacuten de los sistemas de informacioacuten de las administraciones puacuteblicas al software libre son
Ahorro econoacutemico El bajo o nulo coste de los productos libres permiten a las PYMES servicios y ampliar sus infraestructuras sin que se vean mermados sus intentos de crecimiento por no poder hacer frente al pago de cantidades en licencias
Independencia tecnoloacutegica mayor transparencia aumento de la interoperabilidad permite auditar el coacutedigo fuente etc El secretismo tenoloacutegico es uno de los grandes frenos y desequilibrios existentes para el desarrollo en el modelo de propiedad intelectual
Fomenta el desarrollo local y la industria nacional de software La praacutectica totalidad de los concursos para desarrollo de software para la administracioacuten puacuteblica pasan por compatibilizar con productos de la factoriacutea de Microsoft por lo que garantiza la perpetuacioacuten e ingresos hacia Microsoft y no favorece a las empresas locales que pudieran ofrecer productos equivalentes Ademaacutes de la reduccioacuten de costes por uso de software libre iquestqueacute podriacutean aportar esas inversiones si los beneficiados fuesen empresas del propio estado en lugar de mandar a una compantildeiacutea extranjera esas enormes cantidades de dinero
Facilita la adaptacioacuten a las necesidades concretas de las administraciones en materia linguumliacutestica legislativa de accesibilidad e imagen
El conocimiento generado es puacuteblico Fomento de la libre competencia al basarse en servicios y no licencias
Uno de los modelos de negocio que genera el software libre es la contratacioacuten de servicios de atencioacuten al cliente Este sistema permite que las compantildeiacuteas que den el servicio compitan en igualdad de condiciones a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
5
no poseer la propiedad del producto del cual dan el servicio
Tratamiento seguro de los datos y la informacioacuten Formatos estaacutendar Los formatos estaacutendar permiten una
interoperatividad maacutes alta entre sistemas evitando incompatibilidades Los estaacutendares de facto son vaacutelidos en ocasiones para lograr una alta interoperatividad si se omite el hecho que estos exigen el pago de royalities a terceros y por razones de mercado no interesa que se perpetuacuteen mucho tiempo
Sistemas sin puertas traseras y maacutes seguros El acceso al coacutedigo fuente permite que tanto hackers como empresas de seguridad de todo el mundo puedan auditar los programas por lo que la existencia de puertas traseras es iloacutegica ya que se pondriacutea en evidencia y contraviene el intereacutes de la comunidad que es la que lo genera
Correccioacuten maacutes raacutepida y eficiente de fallos El funcionamiento e intereacutes conjunto de la comunidad ha demostrado solucionar maacutes raacutepidamente los fallos de seguridad en el software libre algo que desgraciadamente en el software propietario es maacutes difiacutecil y costoso
Meacutetodos simples y unificados de gestioacuten de software Actualmente la mayoriacutea de distribuciones de linux incorporan alguno de los sistemas que unifican el meacutetodo de instalacioacuten de programas libreriacuteas etc Por parte de los usuarios Asiacute se permite el acceso a las miles de aplicaciones existentes de forma segura y gratuita a la par que evitan tener que recurrir a paacuteginas web de dudosa eacutetica desde las que los usuarios instalan sin saberlo spyware o virus informaacuteticos en sus sistemas Este sistema de acceso y gestioacuten del software se hace praacutecticamente utoacutepico si se extrapola al mercado propietario
Sistema en expansioacuten El software libre ya no es una promesa es una realidad y se utiliza en sitemas de produccioacuten por algunas de las empresas tecnoloacutegicas maacutes importantes como IBM Sun Microsystems Google Hewlett-Packard etc Paradoacutejicamente incluso Microsoft que posee sus propias herramientas emplea GNU Linux en muchos de sus servidores
Entre los paiacuteses maacutes adeptos al software libre sus desarrollos y alcance de sus
proyectos de migracioacuten se encuentran de la siguiente manera ALEMANIA Alemania es el paiacutes con mayor uso del software libre del mundo No
soacutelo estaacute presente en todas sus dependencias gubernamentales y universidades sino que tiene programas multimillonarios para el desarrollo de aplicaciones libres En 2009 destinoacute maacutes de 500 millones de Euros al proyecto ldquoOpen Source and Green ITrdquo El software libre es tan importante para los alemanes que incluso el 59 de sus empresas lo utiliza el argumento maacutes utilizado no es la reduccioacuten de costos sino la posibilidad de poder modificar el coacutedigo fuente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
6
BRASIL Fue el primer paiacutes en migrar masivamente sus sistemas de informacioacuten a alternativas open source Se llevoacute a cabo en primera instancia en el estado de Riacuteo Grande luego se realizoacute a escala nacional
ARGENTINA Existen varias iniciativas estatales que apuntan a fomentar el desarrollo de software libre Actualmente el software libre estaacute implementado en algunas provincias siendo Santa Fe el maacuteximo exponente de utilizacioacuten doacutende todo el software ha sido liberado bajo licencia GPL
FRANCIA La Asamblea Nacional utiliza software libre en todos sus sistemas y terminales de trabajo Francia viene tomando impulso en el desarrollo de software open source existen iniciativas para que el 20 del software contratado por la Administracioacuten Puacuteblica sea libre para el 2012 tambieacuten ofrece beneficios fiscales para las agrupaciones de usuarios y desarrolladores de SL
ESPANtildeA Espantildea se ha apostado como uno de los mayores impulsores mundiales del uso de software libre Actualmente existen 200 empresas proveedoras de soluciones 100 comunidades de usuarios y 180 centros educativos donde el software de coacutedigo abierto es una realidad cotidiana Muchos ayuntamientos y universidades ya se pasaron a sistemas open source
A principios de 2010 se presentoacute un proyecto liderado por la Plataforma Tecnoloacutegica Espantildeola de Software y Servicios con el apoyo del Plan Avanza Dicho plan pretende colocar a Espantildea a la par del resto de Europa en el disentildeo y uso de software libre de confianza y calidad similares a los comerciales Este proyecto llamado Vulcano trata de unificar el trabajo de distintas universidades centros tecnoloacutegicos y empresas que hasta el momento habiacutean dedicado sus esfuerzos al aacutembito de la educacioacuten
En un entrevista ofrecida por David Saacutenchez Director de Comunicacioacuten y Relaciones Instituciones en CENATIC que es el Centro Nacional de Referencia de Aplicacioacuten de las Tecnologiacuteas de la informacioacuten y la Comunicacioacuten basadas en Fuentes Abiertas podemos encontrar httpwwwmuylinuxcom20110407entrevistamos-a-david-sanchez-de-cenatic
CENATIC es una Fundacioacuten Puacuteblica Estatal del gobierno de Espantildea promovida por el Ministerio de Industria Turismo y Comercio y la Junta de Extremadura que ademaacutes cuenta en su patronato con las comunidades autoacutenomas de Andaluciacutea Aragoacuten Asturias Cantabria Cataluntildea Islas Balares Paiacutes Vasco y Galicia asiacute como las empresas Atos Origin Telefoacutenica y Grupo Aacutepex
Su trabajo es promover el conocimiento y uso del software libre en todos los aacutembitos de la sociedad con especial atencioacuten en las administraciones puacuteblicas las empresas el sector tecnoloacutegico proveedor o usuario de tecnologiacuteas libres y las comunidades de desarrollo a traveacutes de proyectos especiacuteficos para cada uno de estos sectores
ldquo La apuesta a del Administracioacuten del Estado por el software libre se inicioacute ya en los 90 cuando el entonces ministerio para las Administraciones Puacuteblicas llevoacute a cabo la primera gran migracioacuten a software libre de 1375 servidores Llegaron tambieacuten proyectos como el del Principado de Asturias para generar de forma colaborativa un
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
7
marco basado en software libre que permitioacute crear cluacutester de empresas locales capaces de aportar servicios de eAdministracion que de otra manera tendriacutean que haber contratado fuera de su comunidadrdquo
ldquo O el proyecto de gvSIG de la Conselleriacutea d‟Infrestructures i Transport de la Generalitat Valenciana un sistema de informacioacuten geograacutefico que cuenta con un tejido empresarial local alrededor del proyecto y estaacuten haciendo de la Comunidad Valenciana el nuacutecleo maacutes activo a nivel mundial de desarrollo GIS en entornos libres Tambieacuten es muy conocido el proyecto de Red Tecnoloacutegica Educativa de la Junta de Extremadura con Linex como primera distribucioacuten regional y concepto pionero adoptado ya por 7 comunidades autoacutenomasrdquo ldquoFinalmente a nivel de administracioacuten local hasta el 80 de los grandes ayuntamientos cuentan hoy en diacutea con proyectos de software libre siendo quizaacute el maacutes destacado el del Ayuntamiento de Zaragozardquo
22 LENGUAJES DE PROGRAMACIOacuteN Un lenguaje de programacioacuten es un lenguaje artificial que puede ser usado para controlar el comportamiento de una maacutequina especialmente una computadora Estos se componen de un conjunto de reglas sintaacutecticas y semaacutenticas que permiten expresar instrucciones que luego seraacuten interpretadas Debe distinguirse de ldquolenguaje informaacuteticordquo que es una definicioacuten maacutes amplia puesto que estos incluyen otros lenguajes como son el HTML o PDF que dan formato a un texto y no es programacioacuten en siacute misma El programador es el encargado de utilizar un lenguaje de programacioacuten para crear un conjunto de instrucciones que al final constituiraacute un programa o subprograma informaacutetico En su uso un lenguaje de programacioacuten puede acercarse a la forma humana de expresarse y por eso este tipo de lenguajes es llamado de alto nivel Esto significa que utilizan palabras y formas en sus estructuras que se asemejan al lenguaje natural (especialmente al ingleacutes) En cambio aquellos lenguajes que se aproximan maacutes a la forma en la cual la computadora se maneja son llamados lenguajes de bajo nivel Esto significa que lo que el programador deba escribir se acercaraacute al lenguaje maacutequina que es en definitiva lo que las computadoras pueden interpretar De todas maneras un lenguaje de programacioacuten difiere en muchos aspectos de un lenguaje humano Un coacutedigo escrito en un lenguaje de programacioacuten especiacutefico siempre se interpreta de la misma manera (no como los idiomas humanos ambiguos) los errores son mucho maacutes significativos (a tal punto de que un coacutedigo puede volverse ininterpretable por la computadora) etc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
8
El coacutedigo fuente es el conjunto de instrucciones que conforman un programa (o subprograma o moacutedulo) El coacutedigo fuente debe ser compilado para poder ser interpretado y ejecutado por la computadora La compilacioacuten traduce el coacutedigo fuente (que depende del lenguaje de programacioacuten) a un lenguaje maacutequina (que depende del sistema de la maacutequina) Existen lenguajes del tipo script que son directamente ejecutados por un inteacuterprete y no necesitan compilacioacuten Los lenguajes de programacioacuten pueden clasificarse empleando distintos meacutetodos y puntos de vista Esta clasificacioacuten se basa en el paradigma que utilizan Se debe aclarar que existen muchos maacutes paradigmas y subparadigmas de programacioacuten no incluidos dentro de los mencionados Ademaacutes todaviacutea hay conflictos en las definiciones y alcances de ciertos paradigmas
23 PARADIGMAS DE PROGRAMACIOacuteN Un paradigma de programacioacuten provee (y determina) la visioacuten y meacutetodos de un programador en la construccioacuten de un programa o subprograma Diferentes paradigmas resultan en diferentes estilos de programacioacuten y en diferentes formas de pensar la solucioacuten de problemas (con la solucioacuten de muacuteltiples ldquoproblemasrdquo se construye una aplicacioacuten) Los lenguajes de programacioacuten son basados en uno o maacutes paradigmas (Veacutease Programacioacuten en muacuteltiples paradigmas) Por ejemplo Smalltalk y Java son lenguajes basados en el paradigma orientado a objetos El lenguaje de programacioacuten Scheme en cambio soporta soacutelo programacioacuten funcional En cambio Python soporta muacuteltiples paradigmas Clasificacioacuten por paradigmas de programacioacuten Paradigma Imperativo describe la programacioacuten como una secuencia instrucciones o comandos que cambian el estado de un programa El coacutedigo maacutequina en general estaacute basado en el paradigma imperativo Su contrario es el paradigma declarativo En este paradigma se incluye el paradigma procedimental (procedural) entre otros Paradigma Declarativo No se basa en el coacutemo se hace algo (coacutemo se logra un objetivo paso a paso) sino que describe (declara) coacutemo es algo En otras palabras se enfoca en describir las propiedades de la solucioacuten buscada dejando indeterminado el algoritmo (conjunto de instrucciones) usado para encontrar esa solucioacuten Es maacutes complicado de implementar que el paradigma imperativo tiene desventajas en la eficiencia pero ventajas en la solucioacuten de determinados problemas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
9
Paradigma Estructurado la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Ademaacutes la programacioacuten se controla con secuencia seleccioacuten e iteracioacuten Permite reutilizar coacutedigo programado y otorga una mejor compresioacuten de la programacioacuten Es contrario al paradigma inestructurado de poco uso que no tiene ninguna estructura es simplemente un ldquobloquerdquo como por ejemplo los archivos batch (bat) Paradigma Orientado a Objetos estaacute basado en la idea de encapsular estado y operaciones en objetos En general la programacioacuten se resuelve comunicando dichos objetos a traveacutes de mensajes (programacioacuten orientada a mensajes) Se puede incluir -aunque no formalmente- dentro de este paradigma el paradigma basado en objetos que ademaacutes posee herencia y subtipos entre objetos Ej Simula Smalltalk C++ Java Visual Basic NET etc Su principal ventaja es la reutilizacioacuten de coacutedigos y su facilidad para pensar soluciones a determinados problemas Paradigma Funcional este paradigma concibe a la computacioacuten como la evaluacioacuten de funciones matemaacuteticas y evita declarar y cambiar datos En otras palabras hace hincapieacute en la aplicacioacuten de las funciones y composicioacuten entre ellas maacutes que en los cambios de estados y la ejecucioacuten secuencial de comandos (como lo hace el paradigma procedimental) Permite resolver ciertos problemas de forma elegante y los lenguajes puramente funcionales evitan los efectos secundarios comunes en otro tipo de programaciones Paradigma loacutegico se basa en la definicioacuten de reglas loacutegicas para luego a traveacutes de un motor de inferencias loacutegicas responder preguntas planteadas al sistema y asiacute resolver los problemas Ej prolog Otros paradigmas y subparadigmas son paradigma orientado al sujeto paradigma heuriacutestico paradigma reflectante programacioacuten basada en reglas paradigma basado en restricciones programacioacuten basada en prototipos etc
24 iquestPOR QUEacute PYTHON
241 Caracteriacutesticas de Python
Python es un lenguaje de programacioacuten de tipo script creado por Guido van Rossum a principios de los antildeos 90 cuyo nombre proviene del grupo ldquoMonty Pythonrdquo El objetivo es un lenguaje con una sintaxis muy limpia y con un coacutedigo legible Python es un lenguaje de programacioacuten multiparadigma Esto significa que maacutes que forzar a los programadores a adoptar un estilo particular de programacioacuten permite varios estilos programacioacuten orientada a objetos programacioacuten imperativa funcional estructurada
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
10
etc Otros paradigmas estaacuten soportados mediante el uso de extensiones Los lenguajes de script (lenguajes interpretados de muy alto nivel como Perl y Python) gozan de creciente importancia e implantacioacuten en el mundo del software libre Python es un lenguaje de programacioacuten faacutecil de aprender y potente Dispone de eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos simple pero eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de las plataformas En Python no hay terminadores de sentencia (como el punto y como de CC++Java) ni marcas de iniciofin de bloque (como las llaves de esos mismos lenguajes) La indentacioacuten como forma de marcar bloques elimina errores propios de los lenguajes citados y que son frecuentes en los estudiantes y tambieacuten en los programadores profesionales sentencias condicionales sin accioacuten por antildeadir un punto y coma incorrectos bucles con una sola sentencia cuando parece que hay dos o maacutes (por omisioacuten de llaves con un sangrado inadecuado del programa) sentencias con semaacutentica ldquoalteradardquo por usar una coma cuando corresponde un punto y coma o por omitir un punto y coma al declarar un registro antes de una funcioacuten etc La indentacioacuten soacutelo resulta molesta cuando el tamantildeo de un bloque de cierta profundidad excede del tamantildeo de la ventana del editor Python es un lenguaje interpretado Los lenguajes interpretados permiten ciclos de desarrollo breves (edicioacuten y ejecucioacuten) que animan a los estudiantes a experimentar Python dispone de un entorno de ejecucioacuten que ayuda a detectar los errores (incluyendo aquellos que soacutelo se manifiestan en ejecucioacuten) sentildealaacutendolos con mensajes muy informativos Python ofrece ademaacutes un entorno interactivo con el que es posible efectuar pequentildeas pruebas o disentildear incrementalmente las soluciones a los problemas La contrapartida de que se trate de un lenguaje interpretado es obviamente la menor velocidad de ejecucioacuten Python puede considerarse pseudocoacutedigo ejecutable Es muy expresivo y su sintaxis sencilla interfiere poco en la implementacioacuten de algoritmos asiacute que resulta un buen sustituto del pseudocoacutedigo con la ventaja de que los algoritmos codificados en Python siacute son ejecutables Python ofrece un rico conjunto de estructuras de datos flexibles El tipo lista de python (un vector dinaacutemico heterogeacuteneo) permite introducir con naturalidad el concepto de secuencia y presentar los algoritmos baacutesicos de manejo de secuencias Que la indexacioacuten empiece siempre en 0 ayuda a dar el salto a C C++ o Java El entorno de ejecucioacuten proporciona comprobacioacuten de validez de los iacutendices eliminando asiacute una de las principales fuentes de problemas de C y C++ El hecho de que las listas sean
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
11
redimensionables elimina al programador la necesidad de tomar decisiones acerca de la longitud maacutexima de los vectores demasiado pronto Por otra parte Python es un lenguaje muy ortogonal una vez se ha aprendido a manejar listas por ejemplo se sabe manejar cadenas ya que ambos tipos son secuenciales y presentan conjuntos de operadores con igual nombre y semaacutentica Ademaacutes de listas y cadenas Python ofrece tuplas (listas inmutables) y diccionarios (vectores asociativos) Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc No es que haya que presentar todos los moacutedulos pero sirve para ayudar a consultar la documentacioacuten de las bibliotecas disponibles favorece la programacioacuten eficiente
Python es orientado a objetos A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulos en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar al de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
El inteacuterprete de Python y su extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables para las plataformas maacutes importantes en la sede web de Python httppythonorg y se pueden distribuir libremente La misma sede contiene tambieacuten distribuciones y direcciones de muchos moacutedulos programas y herramientas Python de terceras partes ademaacutes de documentacioacuten adicional Es faacutecil ampliar el inteacuterprete de Python con nuevas funciones y tipos de datos implementados en C o C++ (u otros lenguajes a los que se pueda acceder desde C) Python es tambieacuten adecuado como lenguaje de extensioacuten para aplicaciones adaptables al usuario Algunas de las empresas que usan Python son Google Yahoo Industrial Light amp Magic Walt Disney NASA SGI Inc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
12
3 INSTRUMENTACIOacuteN Y SOFTWARE EMPLEADOS PHYTON
31 INTRODUCCIOacuteN A PYTHON Como se comentoacute en el punto anterior Python
es orientado a objetos (realmente es multiparadigma aceptando distintos tipos de paradigmas) A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulo en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar a l de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc
Entre estas bibliotecas cabe mencionar Numpy Numpy es un moacutedulo de Python escrito en C que define los vectores numeacutericos las matrices y las operaciones entre ellos Ademaacutes de las funciones sobre vectores y matrices tambieacuten incluye funciones trigonomeacutetricas del tipo sin cos tan etc Numpy es el paquete fundamental necesario para programacioacuten cientiacutefica con Python Contiene entre otras cosa
Un poderoso N-dimensional objeto vector Sofisticadas funciones Herramientas para integracioacuten con coacutedigo de C C++ y Fortram Uacutetiles de algebra lineal Transformada de Fourier y capacidades de
nuacutemeros aleatorios Ademaacutes de sus usos cientiacuteficos obvios NumPy tambieacuten se puede utilizar como un eficiente multi-dimensional contenedor de datos geneacutericos Pueden ser definidos tipos arbitrarios de datos Esto permite integrar a la perfeccioacuten y raacutepidamente con una amplia variedad de bases de datos El objeto principal de Numpy es el vector homogeacuteneo multidimensional Eacuteste es una tabla de elementos (generalmente nuacutemeros) todos del mismo tipo indexados por una tupla de enteros positivos Por ldquomultidimensionalrdquo entendemos que los vectores pueden tener varias dimensiones de ejes El nuacutemero de ejes se llamaraacuten a menudo ldquorangordquo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
13
Por ejemplo las coordenadas de un punto en el espacio 3D seriacutea [1 2 1] que
representariacutea un vector de rango 1 de longitud 3 Otro ejemplo seriacutea
[[ 1 0 0]
[ 0 1 2]]
que representa un array de rango 2 (2 dimensiones) Para maacutes informacioacuten mirar
Numpy Glossary
Otras libreriacuteas importantes en Python son Scipy es otra libreriacutea que usa Numpy El desarrollo de Scipy comenzoacute en el antildeo 2001 Sus oriacutegenes se remontan al paquete con extensiones numeacutericas para Python denominado Numeric Posteriormente aparecioacute Numarray con la intencioacuten de construir un paquete maacutes flexible y de limpiar el coacutedigo aunque resultoacute ser maacutes lengo para caacutelculos matriciales en pocas dimensiones En el antildeo 2005 el principal impulsor de Scipy Travis Oliphant reunificoacute ambos en un uacutenico paquete que integrse las ventajas de ambos y se denominoacute Numpy considerado el nuacutecleo de Scipy Scipy en siacute mismo se concibe actualmente como una extensioacuten de las funcionalidades de Numpy
Scipy posee moacutedulos para optimizacioacuten de funciones integracioacuten funciones especiales resolucioacuten de ecuaciones diferenciales ordinarias y otros muchos aspectos
Puede ser usado con Linux Windows y ha sido tambieacuten compilado para Sun y Mac
Scipy es un proyecto de software libre que ha sido patrocinado por una compantildeiacutea Enthought inc
Su organizacioacuten se estructura en subpaquetes que se pueden considerar especializados en dominios cientiacuteficos determinados Podemos encontrar estos paquetes seguacuten la ayuda de scipy (v046)
stats -- Statistical Functions sparse -- Sparse matrix lib -- Python wrappers to external libraries linalg -- Linear algebra routines signal -- Signal Processing Tools misc -- Various utilities that dont have another home interpolate -- Interpolation Tools [] optimize -- Optimization Tools [] cluster -- Vector Quantization Kmeans [] fftpack -- Discrete Fourier Transform algorithms []
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
14
io -- Data input and output [] maxentropy -- Routines for fitting maximum entropy models [] integrate -- Integration routines [] liblapack -- Wrappers to LAPACK library [] special -- Special Functions [] libblas -- Wrappers to BLAS library []
Matplotlib es una libreriacutea de Python que facilita la publicacioacuten de calidad de la publicacioacuten interactiva Permite obtener graacuteficas de calidad para publicaciones Su principal submoacutedulo para dibujar es pyplot Mayavi Ipython PIL (Python Imaging Library) Pythonxy EPD (Enthought python distribution $$) hellip Este texto como Memoria de un Proyecto Final de Maacutester no pretende ser ni mucho menos un manual de Python pero siacute son necesarios unos conocimientos previos primero para comprender la filosofiacutea del programador y posteriormente saber las utilidades que podemos obtener al trabajar con Python Para ello vamos a incluir algunos detalles incluidos entro de la Guiacutea de aprendizaje de Python por Guido Van Rossum v24 creador de Python Para la realizacioacuten de este documento se ha consultado como aparece en Bibliografiacutea y Referencias en la Web numerosa documentacioacuten pero como punto de partida parece loacutegico recoger la documentacioacuten de la Guiacutea de aprendizaje del propio creador de Python Python contiene una serie de palabras clave dependientes de la versioacuten de instalacioacuten para asegurarnos de las palabras clave de la versioacuten descargada podemos introducir el siguiente coacutedigo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
15
Palabras clave de Python De la misma manera Python trae consigo ciertas funciones que vienen de serie esto es no es necesario cargarlas desde ninguacuten moacutedulo Dichas funciones dependen de la versioacuten de Python instalada En la paacutegina httpdocspythonorglibraryfunctionshtml Nos encontramos con dicha relacioacuten A modo de resumen eacutestas son (ver paacutegina siguiente)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
16
Funciones internas de Python
311 Guiacutea de aprendizaje de Python por Guido Van Rossum v24
Extractos del documento Si en alguna ocasioacuten hemos escrito un guioacuten para un inteacuterprete de oacuterdenes (o shell script) de UNIX largo puede que hayamos sentido que nos encantariacutea antildeadir una caracteriacutestica maacutes pero ya es tan lento tan grande tan complicadohellip O la caracteriacutestica involucra una llamada al sistema u otra funcioacuten accesible soacutelo desde C El problema en siacute no suele ser tan complejo como para transformar el guioacuten en un programa en C Igual el programa requiere cadenas de longitud variable u otros tipos de datos (como listas ordenadas de nombres de fichero) faacuteciles en sh pero tediosas en C o quizaacute no tengamos tanta soltura con C Otra situacioacuten Quizaacute tengas que trabajar con bibliotecas de C diversas y el ciclo normal en C de escribir-compilar-probar-recompilar es demasiado lento Necesitas desarrollar software con maacutes velocidad Posiblemente has escrito un programa al que vendriacutea bien un lenguaje de extensioacuten y no quieres disentildear un lenguaje escribir y depurar el inteacuterprete y adosarlo a la aplicacioacuten En tales casos Python puede ser el lenguaje que necesitas Python es simple pero es un lenguaje de programacioacuten real Ofrece maacutes apoyo e infraestructura para programas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
17
grandes que el inteacuterprete de oacuterdenes Por otra parte tambieacuten ofrece mucho maacutes comprobacioacuten de errores que C y al ser un lenguaje de muy alto nivel tiene incluidos tipos de datos de alto nivel como matrices flexibles y diccionarios que llevariacutean diacuteas de programacioacuten en C Dados sus tipos de datos maacutes generales se puede aplicar a un rango de problemas maacutes amplio que Awk o incluso Perl pero muchas cosas son al menos igual de faacuteciles en Python que en esos lenguajes Python te permite dividir su programa en moacutedulos reutilizables desde otros programas en Python Viene con una gran coleccioacuten de moacutedulos estaacutendar que puedes utilizar como base de tus programas (o como ejemplos para empezar a aprender Python) Tambieacuten hay moacutedulos incluidos que proporcionan ES de ficheros llamadas al sistema ldquosocketsrdquo y hasta interfaces graacuteficas con el usuario como Tk Python es un lenguaje interpretado lo que ahorra un tiempo considerable en el desarrollo del programa pues no es necesario compilar ni enlazar El inteacuterprete se puede utilizar de modo interacivo lo que facilita experimentar con caracteriacutesticas del lenguaje escribir programas desechables o probar funciones durante el desarrrollo del prgram de la base hacia arriba Tambieacuten es una calculadora muy uacutetil Python permite escribir programas muy compactos y legibles Los programas escritos en Python son normalmente mucho maacutes cortos que sus equivalentes en C o C++ por varios motivos
Los tipos de datos de alto nivel permiten expresar operaciones complejas en una sola sentencia
El agrupamiento de sentencias se realiza mediante sangrado (indentacioacuten) en lugar de beginend o llaves
No es necesario declarar los argumentos ni las variables
Python es ampliable si ya sabes programar en C es faacutecil antildeadir una nueva funcioacuten o moacutedulo al inteacuterprete para realizar operaciones criacuteticas a la maacutexima velocidad o para enlazar programas en Python con bibliotecas que soacutelo estaacuten disponibles en forma binaria (como bibliotecas de graacuteficos especiacuteficas del fabricante) Una vez enganchado puedes enlazar el inteacuterprete de Python a una aplicacioacuten escrita en C y utilizarlo como lenguaje de macros para dicha aplicacioacuten
3111 Llamar al inteacuterprete
En UNIX el inteacuterprete de Python se suele instalar como bdquousrlocalbinpython‟ en aquellas maacutequinas donde esteacute disponible En Windows se instala en el directorio bdquoArchivos de programa‟ o en cualquier otro directorio seleccionado Poner este directorio en la ruta de ejecutables hace posible arrancarlo tecleando en el inteacuterprete de oacuterdenes la orden
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
18
Python
Como la eleccioacuten del directorio donde reside el inteacuterprete es una opcioacuten de instalacioacuten es posible que se halle en otros lugares Consulta con tu guru de Python local o tu administrador de sistemas (por ejemplo bdquousrlocalpython‟ es una alternativa recuente) Teclear un caraacutecter fin de fichero (Control-D en UNIX Control-Z en DOS o Windows) en el inteacuterprete causa la salida del inteacuterprete con un estado cero Si eso no funciona se puede salir del inteacuterprete tecleando las siguientes oacuterdenes bdquoimport sys sysexit()‟ Las opciones de edicioacuten de la liacutenea de oacuterdenes no son muy destacables En UNIX es posible que quien instalara el inteacuterprete en su sistema incluyera soporte para la biblioteca de GNU bdquoreadline‟ que permite una edicioacuten de liacutenea maacutes elaborada y la recuperacioacuten de oacuterdenes anteriores El modo maacutes raacutepido de ver si hay soporte de edicioacuten de liacuteneas es teclear Control-P en cuanto aparece el inteacuterprete Si pita la edicioacuten de liacuteneas estaacute disponible Si no sale nada o sale ^P no estaacute disponible la edicioacuten de liacuteneas y soacutelo se puede utilizar la tecla de borrado para borrar el uacuteltimo caraacutecter tecleado El inteacuterprete funciona como el inteacuterprete de oacuterdenes de UNIX cuando se lo llama con la entrada estaacutendar conectada a un dispositivo tty lee y ejecuta las oacuterdenes interactivamente cuando se le da un nombre de fichero como argumento o se le da un fichero como entrada estaacutendar lee y ejecuta un guion desde ese fichero Otro modo de arrancar el inteacuterprete es bdquopython -c orden [argumento] ‟ que ejecuta las sentencias de orden de forma anaacuteloga a la opcioacuten -c de la liacutenea de oacuterdenes Como las sentencias de Python suelen contener espacios u otros caracteres que la liacutenea de oacuterdenes considera especiales lo mejor es encerrar orden entre dobles comillas por completo
Imagen de la pantalla al abrir Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
19
Hay moacutedulos de Python que son uacutetiles como programas independientes Se los puede llamar mediante ldquopython-m moacutedulo[arg] helliprdquo que ejecuta el fichero de coacutedigo fuente de module como si se hubiera dado el nombre completo en la liacutenea de oacuterdenes Cuando se leen oacuterdenes desde una tty se dice que el inteacuterprete estaacute en modo interacitov En este modo espera a la siguiente orden con el indicador principal que suele ser tras signos ldquomayorrdquo (ldquogtgtgtrdquo) Para las liacuteneas adicionales se utiliza el indicador secundario por omisioacuten tres puntos (ldquohelliprdquo)
Programar en Python puede hacerse de varias maneras seguacuten la necesidad o el gusto de cada persona Para los neoacutefitos mi recomendacioacuten es que utilicen el ambiente graacutefico interactivo llamado IDLE Esta herramienta viene incluiacuteda con el moacutedulo tkinter Ademaacutes de resaltar la sintaxis en colores permite editar archivos fuente y es maacutes amigable al inicio
El IDLE tiene dos ambientes el shell interactivo con tiacutetulo Python Shell en su ventana muestra el prompt gtgtgt y espera un comando y uno o maacutes editores que se abren con el menuacute File --gt New Window Cada editor empieza con el tiacutetulo Untitled en su ventana el cual cambia hasta que se salva a un archivo con File --gt Save As (y subsecuentemente File --gt Save) Cada editor nos permite ejecutar el coacutedigo Python que contiene
Se recomienda crear una carpeta para realizar y guardar los ejemplos Para correr idle cambiar primero a esa carpeta y entonces correr idle En MS- Windows
Cejemplosgt Cpython22idleidle
En Linux
[usuariopc ejemplos]$ idle amp La primera vez que hacemos un ejemplo hemos de intentar hacerlo paso a paso en forma interactiva en el shell tecleando cada comando Es la forma en que aprendemos maacutes que si simplemente copiamos y pegamos Una vez que tecleamos y funcionan las cosas podemos copiar del shell interactivo y pegamos a una ventana de editor y salvamos en un archivo con terminacioacuten py para que conservemos lo que hicimos para siempre
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
20
Imagen del Shell interactivo de IDLE
Acceso a nueva ventana dentro del Shell interactivo de IDLE
Nueva ventana del editor de IDLE Una vez que partiendo de una ventana vacia tenemos nuestro coacutedigo hemos de seleccionar FileSave As para guardar el archivo y tenerlo disponible
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
21
Ventana del editor de IDLE con coacutedigo preparado para guardar
Una vez que nos hemos asegurado de que tenemos el coacutedigo guardado iquestcoacutemo hacemos para ejecutar el programa La respuesta es seleccionando Run Module En caso de seleccionar Run Module antes de guardar el coacutedigo Python nos pide que lo guardemos anteshellip Al seleccionar Run Module Python iraacute interpretando liacutenea por liacutenea y mostrando los resultados a traveacutes del Inteacuterprete Si existiese alguacuten error de sintaxis se avisa del tipo de error y doacutende se produce Una vez corregido el problema se vuelve a intentar el Run Module
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
22
El tener un inteacuterprete permite ir probando partes de programas sobre las que no se estaacute seguro y ver coacutemo reaccionan para poder decidir si se incluyen o no y coacutemo se pueden adaptar Asiacute se estaacute continuamente alternando entre el inteacuterprete y el programa Maacutes informacioacuten en httpdocspythonorglibraryidlehtml
3112 Moacutedulos
Si salimos del inteacuterprete de Python y vuelves a entrar las definiciones que se hayan hecho (funciones y variables) se pierden Por ello si se quiere escribir un programa algo maacutes largo seraacute mejor que se utilice un editor de texto para preparar la entrada del inteacuterprete y ejecutarlo con ese fichero como entrada Esto se llama crear un guioacuten Seguacuten vayan creciendo los programas puede que quieras dividirlos en varios ficheros para facilitar el mantenimiento Puede que tambieacuten quieras utilizar una funcioacuten que has escrito en varios programas sin tener que copiar su definicioacuten en cada programa Para lograr esto Python tiene un modo de poner definiciones en un fichero y utilizarlas en un guioacuten o en una instancia interactiva del inteacuterprete Tal fichero se llama moacutedulo las definiciones de un moacutedulo se pueden importar a otros moacutedulos o al moacutedulo principal (la coleccioacuten de variables accesible desde un guioacuten ejecutado desde el nivel superior y en el modo de calculadora) Un moacutedulo es un fichero que contiene definiciones y sentencias de Python El nombre del fichero es el nombre del moacutedulo con el sufijo ldquopyrdquo Dentro de un moacutedulo el nombre del moacutedulo (como cadena) es accesible mediante la variable global __name__ Un moacutedulo puede contener sentencias ejecutables ademaacutes de definiciones de funciones Estas sentencias sirven para inicializar el moacutedulo Soacutelo se ejecutan la primera vez que se importa el moacutedulo en alguna parte1 Cada moacutedulo tiene su propia tabla de siacutembolos que utilizan todas las funciones definidas por el moacutedulo como tabla de siacutembolos global Por ello el autor de un moacutedulo puede utilizar variables globales dentro del moacutedulo sin preocuparse por conflictos con las variables globales de un usuario del moacutedulo Por otra parte si sabes lo que haces puedes tocar las variables globales de un moacutedulo con la misma notacioacuten utilizada para referirse a sus funciones nombreModnombreElem Los moacutedulos pueden importar otros moacutedulos Es una costumbre no obligatoria colocar todas las sentencias ldquoimportrdquo al principio del moacutedulo (o guioacuten) Los nombres del moacutedulo importado se colocan en la tabla de siacutembolos global del moacutedulo (o guioacuten) que lo importa Existe una variacioacuten de la sentencia import que importa los nombres de un moacutedulo directamente a la tabla de siacutembolos del moacutedulo que lo importa Por ejemplo
gtgtgt from fibo import fib fib2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
23
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto no introduce el nombre del moacutedulo del que se toman los elementos importados en la tabla de siacutembolos local (por lo que en el ejemplo no estaacute definido fibo) Ademaacutes existe una variacioacuten que importa todos los nombres que define un moacutedulo gtgtgt from fibo import
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto importa todos los nombres excepto los que empiezan por un guioacuten bajo (_)
3113 El camino de buacutesqueda de moacutedulos
Cuando se importa un moacutedulo denominado fiambre el inteacuterprete busca un fichero denominado bdquofiambrepy‟ en el directorio actual y luego en la lista de directorios especificada por la variable de entorno PYTHONPATH Tiene la misma sintaxis que la variable de liacutenea de oacuterdenes PATH de UNIX que es una lista de nombres de directorios Cuando PYTHONPATH no tiene ninguacuten valor o no se encuentra el fichero se continuacutea la buacutesqueda en un camino dependiente de la instalacioacuten En UNIX normalmente es bdquousrlocallibpython‟ En realidad se buscan los moacutedulos en la lista de directorios dada por la variable syspath que se inicializa desde el directorio que contiene el guioacuten de entrada (o el directorio actual) PYTHONPATH y el valor por omisioacuten dependiente de la instalacioacuten Esto permite que los programas que saben lo que hacen modifiquen o reemplacen el camino de buacutesqueda de moacutedulos Obseacutervese que como el directorio que contiene el guioacuten bajo ejecucioacuten estaacute en el camino de buacutesqueda de moacutedulos es importante que el moacutedulo no tenga el mismo nombre que un moacutedulo estaacutendar o Python lo intentaraacute cargar el guioacuten como moacutedulo cuando se importe el moacutedulo Normalmente esto provocaraacute errores
3114 Ficheros Python ldquoCompiladosrdquo
Como mejora considerable del tiempo de arranque de programas cortos que utilizan muchos moacutedulos estaacutendar si existe un fichero llamado bdquofiambrepyc‟ en el directorio donde se encuentra bdquofiambrepy‟ se supone que contiene una versioacuten previamente ldquocompilada a byterdquo del moacutedulo fiambre La fecha y hora de la versioacuten de bdquofiambrepy‟
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
24
utilizada para generar bdquofiambrepyc‟ se graba en bdquofiambrepyc‟ y no se considera el fichero bdquopyc‟ si no concuerdan Normalmente no hay que hacer nada para generar el fichero bdquofiambrepyc‟ Siempre que bdquofiambrepy‟ se compile sin errores se hace un intento de escribir la versioacuten compilada a bdquofiambrepyc‟ No se provoca un error si falla el intento Si por cualquier motivo no se escribe completamente el fichero el fichero bdquofiambrepyc‟ resultante seraacute reconocido como no vaacutelido y posteriormente ignorado El contenido del fichero bdquofiambrepyc‟ es independiente de la plataforma por lo que se puede compartir un directorio de moacutedulos entre maacutequinas de diferentes arquitecturas
3115 Moacutedulos estandar
Python viene con una biblioteca de moacutedulos estaacutendar descrita en un documento aparte la Referencia de las bibliotecas Algunos moacutedulos son internos al inteacuterprete y proporcionan acceso a las operaciones que no son parte del nuacutecleo del lenguaje pero se han incluido por eficiencia o para proporcionar acceso a primitivas del sistema operativo como las llamadas al sistema El conjunto de dichos moacutedulos es una opcioacuten de configuracioacuten que tambieacuten depende de la plataforma subyacente Por ejemplo el moacutedulo amoeba soacutelo se proporciona en sistemas que de alguacuten modo tienen acceso a primitivas Amoeba Hay un moacutedulo en particular que merece una especial atencioacuten el moacutedulo sys que es siempre interno en cualquier inteacuterprete de Python Estas variables soacutelo estaacuten definidas si el inteacuterprete estaacute en modo interactivo La variable syspath es una lista de cadenas que determina el camino de buacutesqueda de moacutedulos del inteacuterprete Se inicializa a un valor por omisioacuten tomado de la variable de entorno PYTHONPATH o de un valor por omisioacuten interno si PYTHONPATH no tiene valor Se puede modificar mediante operaciones de lista estaacutendar por ejemplo gtgtgt import sys gtgtgt syspathappend(‟ufsguidolibpython‟)
3116 Paquetes
Los paquetes son un meacutetodo de estructurar el espacio nominal de moacutedulos de Python mediante el uso de ldquonombres de moacutedulos con puntordquo Por ejemplo el nombre de moacutedulo AB hace referencia a un submoacutedulo denominado ldquoBrdquo de un paquete denominado ldquoArdquo Del mismo modo que el uso de moacutedulos evita que los autores de diferentes moacutedulos tengan que preocuparse de los nombres de variables globales de los otros la utilizacioacuten de nombres de moacutedulo con puntos evita que los autores de paquetes multi-moacutedulo como Numpy o Pil (Biblioteca de tratamiento de imagen de
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
25
python) tengan que preocuparse de los nombres de los moacutedulos ajenos Supoacuten que deseas disentildear una coleccioacuten de moacutedulos (un paquete) para tratar de manera uniforme ficheros de sonido y datos de sonido Existen muchos formatos de fichero de sonido (que se suelen distinguir por la extensioacuten como bdquowav‟ bdquoaiff‟ o bdquoau‟) por lo que podriacuteas necesitar crear y mantener una coleccioacuten creciente de moacutedulos de conversioacuten entre los diferentes formatos Tambieacuten existen muchas operaciones posibles sobre los datos de sonido (tales como mezclar antildeadir eco ecualizar o generar un efecto artificial de estereofoniacutea) por lo que ademaacutes estariacuteas escribiendo una serie de moacutedulos interminable para realizar estas operaciones He aquiacute una posible estructura de tu paquete (expresado en teacuterminos de sistema de ficheros jeraacuterquico)
Sonido Paquete de nivel superior __init__py Inicializa el paquete de sonido
Formatos Subpaquete de conversiones de formato de ficheros __init__py leerwavpy escriwavpy leeraiffpy escriaiffpy leeraupy escriaupy Efectos Subpaquete de efectos de sonido __init__py ecopy surroundpy inversopy Filtros Subpaquete de filtros __init__py ecualizadorpy vocoderpy karaokepy
Modelo de estructura paquetemoacutedulo Al importar el paquete Python rastrea los directorios de syspath buscando por el subdirectorio de paquetes Los ficheros bdquo__init__py‟ son necesarios para que Python trate los directorios como contenedores de paquetes Se hace asiacute para evitar que los directorios con nombres
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
26
comunes como bdquotest‟ oculten accidentalmente moacutedulos vaacutelidos que aparezcan maacutes tarde dentro del camino de buacutesqueda En el caso maacutes sencillo bdquo__init__py‟ puede ser un fichero vaciacuteo pero tambieacuten puede ejecutar coacutedigo de inicializacioacuten del paquete o actualizar la variable __all__ descrita posteriormente Los usuarios del paquete pueden importar moacutedulos individuales del paquete por ejemplo import SonidoEfectoseco
De este modo se carga el submoacutedulo SonidoEfectoseco Hay que hacer referencia a eacutel por su nombre completo SonidoEfectosecofiltroeco(entrada salida retardo=07
aten=4)
Un modo alternativo de importar el submoacutedulo es from SonidoEfectos import eco
Asiacute tambieacuten se carga el submoacutedulo eco y se hace disponible sin su prefijo de paquete por lo que se puede utilizar del siguiente modo ecofiltroeco(entrada salida retardo=07 aten=4)
Y otra variacioacuten es importar la funcioacuten o variable deseada directamente from SonidoEfectoseco import filtroeco
De nuevo se carga el submoacutedulo eco pero se hace la funcioacuten filtroeco disponible directamente filtroeco(entrada salida retardo=07 aten=4)
Observa que al utilizar from paquete import elemento el elemento puede ser tanto un submoacutedulo (o subpaquete) del paquete como cualquier otro nombre definido por el paquete como una funcioacuten clase o variable La sentencia import comprueba primero si el elemento estaacute definido en el paquete Si no asume que es un moacutedulo e intenta cargarlo Si no lo consigue se provoca una excepcioacuten ImportError Sin embargo cuando se utiliza la sintaxis
importelementosubelementosubsubelemento cada elemento menos el
uacuteltimo debe ser un paquete El uacuteltimo elemento puede ser un moacutedulo o un paquete
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
27
pero no una clase funcioacuten o variable definida en el nivel superior
3117 Importar de un paquete
Y iquestqueacute ocurre cuando el usuario escribe from SonidoEfectos import En teoriacutea deberiacutea rastrearse el sistema para encontrar queacute submoacutedulos existen en el paquete e importarlos todos Por desgracia esta operacioacuten no funciona muy bien en las plataformas Windows y Mac en las que el sistema de ficheros no tiene una idea muy precisa de las mayuacutesculas de un fichero En estas plataformas no hay un modo garantizado de conocer si un fichero bdquoECOPY‟ deberiacutea ser importado como eco Eco o ECO (por ejemplo Windows 95 tiene la molesta costumbre de mostrar todos los nombres de fichero con la primera letra en mayuacutescula) La restriccioacuten de nombres de fichero DOS (8+3) antildeade otro problema para los nombres de moacutedulo largos La uacutenica solucioacuten es que el autor del paquete proporcione un iacutendice expliacutecito del paquete La sentencia import utiliza la siguiente convencioacuten Si el coacutedigo del bdquo__init__py‟ de un paquete define una lista llamada __all__ se considera que es la lista de nombres de moacutedulos que se deben importar cuando se encuentre from paquete import Depende del autor del paquete mantener la lista actualizada cuando se libere una nueva versioacuten del paquete Los autores del paquete pueden decidir no mantenerlo si no es uacutetil importar del paquete Por ejemplo el fichero bdquoSonidoEfectos__init__py‟ podriacutea contener el siguiente coacutedigo __all__ = [eco surround inverso] Esto significariacutea que from SonidoEfectos import importariacutea los tres submoacutedulos mencionados del paquete Sonido Si __all__ no estaacute definido la sentencia from SonidoEfectos import no importa todos los moacutedulos del subpaquete SonidoEfectos al espacio nominal actual Soacutelo se asegura de que el paquete SonidoEfectos ha sido importado (ejecutando posiblemente el coacutedigo de inicializacioacuten de bdquo__init__py‟) y luego importa cualesquiera nombres definidos en el paquete Esto incluye cualquier nombre definido (y submoacutedulos cargados expliacutecitamente) por bdquo__init__py‟ Tambieacuten incluye cualquier submoacutedulo del paquete expliacutecitamente importado por sentencias import anteriores Mira este coacutedigo import SonidoEfectoseco import SonidoEfectossurround from SonidoEfectos import En este ejemplo los moacutedulos eco y surround se importan al espacio nominal vigente porque estaacuten definidos en el paquete SonidoEfectos cuando se ejecuta la sentencia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
28
fromimport (esto tambieacuten funciona si estaacute definido __all__)
Observa que en general se debe evitar importar de un moacutedulo o paquete ya que suele dar como resultado coacutedigo poco legible Sin embargo se puede usar para evitar teclear en exceso en sesiones interactivas y cuando ciertos moacutedulos esteacuten disentildeados para exportar soacutelo nombres que cumplan ciertas reglas
Recuerda no hay nada incorrecto en utilizar from Paquete import
submoacutedulo_concreto De hecho es la notacioacuten recomendada salvo que el moacutedulo
que importa necesite usar submoacutedulos del mismo nombre de diferentes paquetes
3118 Referencias internas al paquete
Es comuacuten que los submoacutedulos necesiten hacerse referencias cruzadas Por ejemplo el moacutedulo surround podriacutea utilizar el moacutedulo eco De hecho tales referencias son tan comunes que la sentencia import busca antes en el paquete contenedor que en el camino de buacutesqueda de moacutedulos estaacutendar Por ello basta con que el moacutedulo surround use import eco o from eco import filtroeco Si el moacutedulo importado no se encuentra en el paquete actual (el paquete del que el moacutedulo actual es submoacutedulo) la sentencia import busca un moacutedulo de nivel superior con el nombre dado Cuando se estructuran los paquetes en subpaquetes (como el paquete Sonido del ejemplo) no hay un atajo para referirse a los submoacutedulos de los paquetes hermanos y se ha de utilizar el nombre completo del subpaquete Por ejemplo si el moacutedulo SonidoFiltrosvocoder necesita utilizar el moacutedulo eco del paquete SonidoEfectos debe utilizar from SonidoEfectos import eco
32 FUNCIONES INCLUIDAS EN NUMPY POR CATEGORIacuteAS (ARRAY CREATION)
A modo indicativo e introductorio se incluyen las funciones incluidas en la libreriacutea Numpy por categoriacuteas Ver maacutes informacioacuten en httpdocsscipyorgdocnumpy Numerical
arange() arrayrange()
linspace() logspace()
Ones and zeros
empty() empty_like()
eye() identity()
ones() ones_like()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
29
tri() tril() triu()
zeros() zeros_like()
From existing data
array() recarray()
asarray() asanyarray() asmatrix()
copy()
fromarrays() frombuffer() fromfile() fromfunction()
fromiter() loadtxt()
Building matrices
bmat()
diag() diagflat()
mat() matrix()
vander()
Reinterpreting arrays
view()
Types
astype()
cast[]()
int8() int16() int32() int64() int128()
uint8() uint16() uint32() uint64() uint128()
float16() float32() float64() float96() float128()
float256()
complex32() complex64() complex128() complex192()
complex256() complex512()
bool_()
object_()
void() str_() unicode_()
byte() ubyte()
short() ushort()
intc() uintc()
intp() uintp()
int_() uint()
longlong() ulonglong()
single() csingle()
float_() complex_()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
30
longfloat() clongfloat()
Kinds of array
asarray()
asanyarray()
asmatrix()
Changing the number of dimensions
atleast_1d() atleast_2d() atleast_3d()
broadcast()
expand_dims()
squeeze()
Transpose-like operations
rollaxis()
swapaxes()
T transpose()
Reshaping arrays
flat flatten()
ravel()
reshape() shape
Array modification
Joining arrays
append()
column_stack()
concatenate()
dstack() hstack() vstack()
Splitting arrays
array_split()
dsplit() hsplit() split() vsplit()
Enlarging arrays
tile()
repeat()
Adding and removing elements
delete()
insert()
resize()
trim_zeros()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
31
unique()
Rearranging elements
fliplr() flipud()
reshape()
roll()
rot90()
Indexing
[]
take()
put()
putmask()
Indexing syntax
slice()
newaxis
index_exp[]
Generating arrays suitable for indexing
c_[]
r_[]
s_[]
nonzero()
where()
indices()
ix_()
mgrid[]
ogrid()
Indexing-like operations
choose()
where()
compress()
diag() diagonal()
select()
Iterating
flat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
32
ndenumerate()
ndindex()
Logic
[]
all() any()
allclose()
alltrue()
nonzero()
piecewise()
sometrue()
Finding things
argmax() argmin()
searchsorted()
Array statistics
average() mean()
bincount() histogram()
corrcoef()
cov()
max() min() ptp()
median()
std() var()
ufuncs
abs() absolute()
add() multiply()
angle()
arccos() arcsin() arctan()
arccosh() arcsinh() arctanh()
arctan2()
bitwise_and() bitwise_or() bitwise_xor()
ceil() floor() round()
conj() conjugate()
cos() sin() tan()
cosh() sinh() tanh()
fix()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
33
hypot()
logical_and() logical_not() logical_or() logical_xor()
maximum() minimum()
ufunc methods
accumulate()
outer()
reduce()
Functional constructs
apply_along_axis()
apply_over_axis()
vectorize()
Random numbers
beta() binomial() gumbel() poisson() standard_normal()
uniform() vonmises() weibull()
bytes()
permutation()
rand() randint() randn()
random_integers()
random_sample()
ranf()
sample()
seed()
shuffle()
Array math
clip()
cross()
cumprod() cumsum()
diff()
digitize()
dot()
inner()
outer()
inv() pinv()
poly1d()
polyfit()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
34
prod() sum()
tensordot()
vdot()
FFT
fft()
fftfreq()
fftshift()
ifft()
Linear algebra
inv()
lstsq()
solve()
svd()
trace()
Array output
savetxt()
set_printoptions()
tofile()
tolist()
Other
sort() argsort()
binary_repr()
dtype()
fill()
finfo()
generic
imag real
inf nan
item()
lexsort()
ndim
shape
typeDict()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
35
Numpy Functions by Category (uacuteltima edicioacuten 2008-06-13 122659
efectuada por jh)
MoinMoin Powered
Pyt
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
36
4 METODOLOGIacuteA En este apartado se proporciona una descripcioacuten detallada de la metodologiacutea utilizada para el desarrollo e implementacioacuten de la biblioteca Utilizando un paradigma Estructurado de la programacioacuten que considera que la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Esto nos permite reutilizar coacutedigo programado y nos proporciona una mejor comprensioacuten de la programacioacuten En el uacuteltimo paquete de la libreriacutea tambieacuten se ha realizado una incursioacuten a la programacioacuten orientada a objetos con la declaracioacuten de algunas clases
41 ESTRUCTURA DE LA LIBRERIacuteA GEOTOPO En nuestro caso hemos partido del concepto de creacioacuten de una libreriacutea de funciones del aacutembito de la Topografiacutea y Geodesia Esta libreriacutea de Python se estructura como un paquete con el nombre de la libreriacutea ldquogeotopordquo que a su vez contiene 6 paquetes maacutes seguacuten tipologiacutea Asiacute tenemos
Imagen de los paquetes incluidos dentro del paquete (libreriacutea) geotopo
Por orden intuitivo desde el punto de vista de aplicacioacuten de las herramientas tenemos los siguientes paquetes
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
37
general que contiene funciones de tipo general y transversal al resto de herramientas
Moacutedulos implementados dentro de general
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
38
topografia que contiene aplicacioacuten topograacuteficas
Moacutedulos implementados dentro de topografia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
39
geodesia Aplicaciones geodeacutesicas
Moacutedulos implementados dentro de geodesia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
40
proy_cartograficas Herramientas de caacutelculos en diferentes proyeccionesetc
Moacutedulos implementados dentro de proy_cartograficas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
41
transformacioacuten Aplicaciones con modelo de rejilla del IGN y EGM08REDNAP
Moacutedulos implementados dentro de transformacioacuten
aplicaciones Distintos ejemplos de aplicabilidad de las funciones y clases implementadas en los moacutedulos de la libreriacutea
Cada uno de estos paquetes (carpetas) como se ha podido ver contiene a su vez varios moacutedulos y en cada uno de ellos y con su mismo nombre se define una uacutenica funcioacuten por moacutedulo salvo en la carpeta de transformcioacuten donde como se ha comentado antes nos adentramos dentro de la programacioacuten orientada a objetos y en algunos moacutedulos se implementan clases y dentro de estas funciones etc De esta manera al importar una funcioacuten la tenemos que importar desde el modulo que la contenga Dentro de cada carpeta se aprecia la existencia de un fichero llamado __init__py que convierte dicha carpeta en un paquete de Python Se advierte que desde el cierre de esta memoria versioacuten en papel a la entrega total de documentacioacuten puede haberse ampliado el nuacutemero de moacutedulos de la libreriacutea ldquogeotoprdquo que siacute se incluiriacutea en el CD con la implementacioacuten de coacutedigos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
42
42 DOCUMENTADO DE FUNCIONES Se puede documentar una funcioacuten en Python proporcionando una cadena de documentacioacuten (comentarios)
Las comillas triples implican una cadena multiliacutenea Todo lo que haya entre el principio y el final de las comillas es parte de una sola cadena incluyendo los retornos de carro y otras comillas Pueden usarse para definir cualquier cadena pero donde suelen estar maacutes presentes es haciendo de cadena de documentacioacuten Todo lo que hay entre las comillas triples es la cadena de documentacioacuten de la funcioacuten y se usa para explicar lo que hace la funcioacuten En caso de que exista una cadena de documentacioacuten debe ser la primera cosa definida en una funcioacuten (esto es lo primero tras los dos puntos) Teacutecnicamente no es necesario dotar a una funcioacuten de una cadena de documentacioacuten pero debemos de hacerlo siempre En Python esto tiene un incentivo antildeadido la cadena de documentacioacuten estaacute disponible en tiempo de ejecucioacuten como atributo de la funcioacuten
Lecturas complementarias sobre las funciones de documentacioacuten
PEP 257 define las convenciones al respecto de las cadenas de documentacioacuten La Guiacutea de estilo de Python indica la manera de escribir una buena cadena de
documentacioacuten El Tutorial de Python expone convenciones para el espaciado dentro de las
cadenas de documentacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
43
Ejemplo de documentado de funciones con cadena de documentacioacuten
Toda la informacioacuten incluida dentro de una cadena de documentacioacuten de triple comillas estaacute accesible en tiempo de ejecucioacuten Asiacute si pedimos ayuda de una funcioacuten nos aparece toda la informacioacuten incluida en dicha cadena de documentacioacuten
Ejemplo de consulta de la ayuda de las funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
44
En la siguiente web podemos encontrar maacutes informacioacuten sobre el documentado de funciones en Python httpcoderwarcom201106hola-python-la-utilidad-de-los-comentarios Ademaacutes de los comentarios de las funciones en Python como en otros lenguajes de programacioacuten podemos incluir liacuteneas o simples palabras de comentarios En Python se usa el siacutembolo para preceder los comentarios Podemos comentar las liacuteneas de nuestro trabajo
Comentar un grupo de liacuteneas
Determinar el tipo de codificacioacuten Esto es importante para poder usar caracteres especiales como la tilde o la ntilde Generalmente se coloca en la primera liacutenea del programa Existen muchas codificaciones
Poner cabecera a nuestro programa De esta forma identificaremos el nombre del programador la fecha en que se realizoacute y demaacutes datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
45
En el caso que nos atantildee de la libreriacutea geotopo hemos considerado introducir unos comentarios descriptivos de los moacutedulos mediante el caraacutecter y tras la definicioacuten de las funciones se incluyen unas cadenas de documentacioacuten
Ejemplo de la documentacioacuten de moacutedulos y funcioneshellip
Para evitar problemas de codificacioacuten como ha ocurrido durante la implementacioacuten del coacutedigo se han incluido al inicio del mismo dos liacuteneas para solucionar el problema Estas liacuteneas son
Comentarios de los moacutedulos
Cadena de documentacioacuten de funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
46
-- coding iso 8859-1 -
ISO 8859-1 es una norma de la ISO que define la codificacioacuten del alfabeto latino incluyendo diacriacuteticos como letras aceacutentuadas ntilde) y letras especiales necesarios para la escritura de las siguientes lenguas originarias de Europa occidental alemaacuten aragoneacutes asturiano castellano catalaacuten daneacutes escoceacutes espantildeol feroeacutes fineacutes franceacutes gaeacutelico gallego ingleacutes islandeacutes italiano neerlandeacutes noruego portugueacutes sueco y Euskera Tambieacuten conocida como Alfabeto Latino nordm 1 o ISO Latiacuten 1 Esta norma pertenece al grupo de juegos de caracteres de la ISO conocidos como ISOIEC 8859 que se caracterizan por poseer la codificacioacuten ASCII en su rango inicial (128 caracteres) y otros 128 caracteres para cada codificacioacuten con lo que en total utilizan 8 bits -- coding cp1252 -
Si trabajamos con IDLE con el uso de los acentos (en general con los caracteres no ASCII) nos daraacute error Si en el coacutedigo de un programa escribimos una cadena que contenga caracteres no ASCII(acentos ntildeiquestiexcl) al guardar el archivo por primera vez IDLE nos muestra el siguiente mensaje de aviso
Si pulsamos el botoacuten ldquoEdit my filerdquo Al principio del programa se insertaraacute la liacutenea siguiente
-- coding cp1252 --
Que indica el juego de caracteres utilizado en el archivo (cp1252 es el juego de caracteres de Windows para Europa occidental) A partir de entonces podemos guardar el archivo sin problemas Python no tiene una primera o uacuteltima linea exigida pero siacute que es habitual dar la localizacioacuten de Python como primera liacutenea en forma de comentario usrbinpython
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
47
43 FUNCIONES IMPLEMENTADAS A continuacioacuten se incluye una relacioacuten de las funciones implementadas por paquetes Ademaacutes de su nombre y un pequentildeo resumen de su aplicacioacuten se han incluido 3 apartados maacutes En verde Datos de entrada Indica los datos que necesita la funcioacuten Datos de salida Nos muestra si el resultado es uacutenico o una coleccioacuten de resultados (siempre en forma vector en el orden indicado) En rojo Llamadas o ldquoimportacioacutenrdquo de moacutedulos predefinidos del sistema ossys Llamadas a funciones de predefinidas del moacutedulo numpy En morado Llamadas a funciones definidas en esta libreriacutea (geotopo) bien incluidas en el mismo subpaquete que la propia funcioacuten definida o incluida en otro subpaquete De esta manera podemos tener una idea de las funciones implementadas los datos de partida necesarios y los resultados a obtener asiacute como la interrelacioacuten de cada funcioacuten con el resto de funciones de la libreriacutea geotopo Para el caso de cambio de proyeccioacuten o de Sistema de Referencia Coordenado se ha tomado la nomenclatura ldquodesderdquo ldquoardquo ldquoahorardquo Para sentildealar el ldquoardquo se ha elegido el nuacutemero 2 por su pronunciacioacuten to (a) Asiacute por ejemplo para el paso de latitud geodeacutesica a creciente en nombre de la funcioacuten seraacute lat2cre
431 Libreriacutea en Python ldquogeotopogeneralrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 areacor - Caacutelculo de la superficie interior de un poligono sobre el plano
entrada=(matriz) 2columnas xy salida=superficie
import ossys from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
48
busca2col - Localiza la primera fila con los valores recibidos en las dos columnas indicadas
Recibe Valor en la primera y segunda columnas posiciones de las columnas y matriz de busqueda
Devuelve Primera fila que cumple comenzando en 0 entrada=(valorcol1poscol1valorcol2poscol2matriz)
salida=orden de la primera fila que cumple comenzando en 0(oacute -1 si no existe) import ossys
from numpy import shape
busca - Localiza la primera ocurrencia de un nuacutemero en la primera columna de una matriz
entrada=(valormatriz)
salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscacol - Localiza la primera ocurrencia de un nuacutemero en la fila indicada de una matriz
entrada=(valormatriznfil) salida=posicioacuten nuacutemero de columna comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscafil - Localiza la primera ocurrencia de un nuacutemero en la columna indicada de una matriz
entrada=(valormatrizncol) salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
ordena - Ordena las filas de una matriz de menor a mayor seguacuten el contenido de la columna indicada
entrada=(colummatriz) salida=matriz de entrada ordenada
import ossys
from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
49
p_entera - Da la parte entera de un nuacutemero entrada=(nuacutemero) salida=parte entera del nuacutemero
import ossys from numpy import floor
perimetro - Calculo del perimetro de un poliacutegono sobre el plano a partir de las coord de sus veacutertices
entrada=(matriz ) 2columnas xy salida=periacutemetro
import ossys
from numpy import sqrtshape
psdo2rad - Cambio de formato de aacutengulos Pasa del conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex ) a radianes
entrada=(pseudesexa)
salida=radianes
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
rad2psdo - Cambio de formato de aacutengulos Pasa un angulo de radianes al conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex )
entrada=( radianes) salida= pseudesexa
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
50
432 Libreriacutea en Python ldquogeotopotopografiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 acimut - Caacutelculo del acimut entre dos puntos
entrada=(xiyixjyj)
salida=acimut en radianes
import ossys from numpy import arctan2pi
distancia ndash Caacutelculo de la distancia entre dos puntos del mismo
entrada=(xiyixjyj) salida=distancia (misma unidad que coordenadas de entrada
import ossys
from numpy import sqrt
edgcla ndash Caacutelculo del error de una distancia geomeacutetrica utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dgInstrnialtnl)
Dg=distancia geometrica Instr=Matriz de instrumentos
Ni=Altura de instrumento Altp=Altura de prisma
Nl=Nuacutemero de veces de medida de distancia
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edgclaprn ndash Calculo del error de una distancia geometrica utilizando la formulacion claacutesica de teoriacutea de errores Impresioacuten de resultados
entrada=(dgInstrnialtnlfsalida)
dg=distancia geometrica instr=Matriz de instrumentos
ni=Altura de instrumento altp=Altura de prisma
nl=Nuacutemero de veces de medida de distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
51
fsalida=Fichero de salidade datos
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edireh ndash Caacutelculo del error de la lectura horizontal realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(Instrnidisaltpnl)
salida=error de lectura horizontal en radianes
import ossys from numpy import sqrtpi
edirev ndash Caacutelculo del error de la lectura vertical realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(instrni nl) salida=error de lectura cenital en radianes en radianes
import ossys from numpy import sqrtpi
eincz ndash Caacutelculo del error de un desnivel trigonomeacutetrico utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dglvapedgelvInstrni) salida=xpypeplanisolzesolz
import ossys
from numpy import pisqrtcostan
intinv2 ndash Caacutelculo de la interseccioacuten inversa simple en el plano
entrada=(datosinstru)
salida= xpypangmin import ossys
from numpy import sincostanarctan2pizeros
from geotopogeneralordena import ordena
intinv2e ndash Caacutelculo de la interseccioacuten inversa simple en el plano Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru) salida= xpypeplani
import ossys from numpy import shapepisincostanarctan2dottransposezerossqrt
from geotopotopografiaedireh import edireh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
52
intinv3e ndash Caacutelculo de la interseccioacuten inversa 3D simple Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru)
salida= xpypeplanivzpvezp
import ossys from numpy import zerosshapesincos
from geotopotopografiaintinv2e import intinv2e from geotopotopografiadistancia import distancia
from geotopotopografiaedirev import edirev
from geotopotopografiaedgcla import edgcla from geotopotopografiaeincz import eincz
433 Libreriacutea en Python ldquogeotopogeodesiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 aut2lat - paso de latitud autaacutelica a geodeacutesica
entrada=(autnelipsoide) salida=lat
import ossys from numpy import sinarcsin
from geotopogeneralpsdo2rad import psdo2rad from geotopogeneralpsdo2rad import psdo2rad
calcpolo - caacutelculo del polo de la esfera a partir de tres puntos no alineados de la misma de forma que pasen a estar en un mismo paralelo tras realizarse el cambio de polo
entrada(lat1lon1lat2lon2lat3lon3) salida=[latnplonnpcolat]
import ossys from numpy import pisincosarccosarctanarctan2zeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
53
cla2enu - paso de un vector geodeacutesico expresado en componentes polares (observables claacutesicos) a componentes ENU entrada(azvdg)
salida=[ieiniu]
import ossys from numpy import sincoszeros
clhapv - lectura horizontal corregida por altitud del punto visado entrada=(lhzazlat1lat2h2nelipsoide) salida=lhz12c
import ossys
from numpy import sincospi from elipsoide import elipsoide
from radioem import radioem
clhsnlg - lectura horizontal corregida por paso de la seccioacuten normal a la liacutenea geodeacutesica entrada=(lhzs12az12lat1lat2nelipsoide)
salida=lhz12c import ossys
from numpy import sincospi
from elipsoide import elipsoide from radioem import radioem
cre2lat - paso de latitud creciente a geodeacutesica entrada=(crenelipsoide) salida=lat
import ossys
from numpy import sincostanarctanexppi from geotopogeneralpsdo2rad import psdo2rad
from elipsoide import elipsoide
efleutm - paso de la elipse de error de un punto del plano tangente al elipsoide al plano de la proyeccioacuten UTM
entrada=(latlonsemiaesemibeaziaenelipsoidehuso) salida=[semiasimibazia] import ossys from numpy import zerospi from geotopoproy_cartograficaskputm import kputm from geotopoproy_cartograficaskputmh import kputmh from geotopoproy_cartograficasconvutm import convutm from geotopoproy_cartograficasconvutmh import convutmh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
54
elip2esf - determinacioacuten de la esfera tangente al elipsoide en un paralelo indicado entrada=(nelipsoidelat)
salida=[afbe1e2]esfera
import ossys from numpy import zeros
from elipsoide import elipsoide from radiopv import radiopv
elipsoide - calculo los 5 paraacutemetros (afbe1 y 22) de los elipsoides ED50 GRS80 y WGS84 en funcioacuten de un coacutedigo 123 respectivamente entrada=(nelipsoide) 1 2 oacute 3 seguacuten ED50GRS80 oacute WGS84 respectivamente salida=[afbe1e2]
import ossys from numpy import sqrt zeros
enu2cla - paso de un vector geodeacutesico expresado en componentes ENU a componentes polares (observables claacutesicos) entrada=ieiniu salida=[azdgv]
import ossys
from numpy import zerosarcsenarctan2pisqrt
enu2xyz - paso de un vector geodeacutesico expresado en componentes ENU a componentes cartesianas tridimensionales entrada=(latlonieiniu)
salida=[ixiyiz] import ossys
from numpy import sincoszeros
eta_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del primer vertical entrada=(latlon)
salida= eta_ed50
import ossys from numpy import pisqrtcossintan
from elipsoide import elipsoide from radiopv import radiopv
from radioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
55
geo2tri - paso de coordenadas geodeacutesicas a cartesianas tridimensionales para un punto y elipsoide determinados entrada=(latlonhnelipsoide
salida=[XYZ]
import ossys from numpy import cossinzeros
from elipsoide import elipsoide from radiopv import radiopv
lam2lat - caacutelculo de la latitud geodeacutesica que le corresponde a una determinada longitud de arco de meridiano en el elipsoide indicado entrada=(lamnelipsoide salida=lat
import ossys from numpy import cossin
from elipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
lam - caacutelculo de la longitud de arco de meridiano a partir de la latitud geodeacutesica y del elipsoide entrada=(lamnelipsoide
salida=lam import ossys
from numpy import sin cos from elipsoide import elipsoide
lat2aut - paso de latitud geodeacutesica a autaacutelica entrada=(latnelipsoide)
salida=aut import ossys
from numpy import sinlog from elipsoide import elipsoide
lat2cre - paso de latitud geodeacutesica a creciente entrada=(latnelipsoide)
salide=cre import ossys
from numpy import sintanpilog
ond_ed50 - caacutelculo de la ondulacioacuten del geoide de un punto en Ed50 entrada =(latlon) salida=ondulacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
56
import ossys
from numpy import pisqrtcossintan
pdesfcr - problema directo en la esfera con el meacutetodo de cambio de base entrada=(lat1lon1saziresfera) salida=[latlon]
import ossys from numpy import cossintanarcsinarcosarctan2pizerostransposedot
pdg_dif1 - problema directo de la geodesia con la primera derivada entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2azi21] import ossys
from numpy import zerossincostanpi from radiopv import radiopv
from radioem import radioem
pdg_dif2 - problema directo de la geodesia con la primera y segunda derivada entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdg_dif3 - problema directo de la geodesia con la primera segunda y tercera derivada
entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdgrk4o - problema directo de la geodesia seguacuten meacutetodo de integracioacuten numeacuterica de Runge-Kutta de cuarto orden entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2
import ossys from numpy import zerossincostanpisqrt
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
57
from radioem import radioem
piesfcr - problema inverso en la esfera con el meacutetodo de cambio de base entrada=( lat1lon1lat2lon2resfera)
salida=[s12a12] import ossys
from numpy import cossintanarcsenarccosarctan2dotzerospi
pigbsl - problema inverso de la geodesia seguacuten el meacutetodo de Bessel entrada=( lat1lon1lat2lon2nelipsoide)
salida=[ s12a12a21]
import ossys from numpy import zerossincostanarcsinarctanarctan2arccossqrtpi
pigbslm - problema inverso de la geodesia seguacuten el meacutetodo de Bessel modificado por D David Henaacutendez Loacutepez
entrada=( lat1lon1lat2lon2nelipsoide) salida=[ s12a12a21]
import ossys from numpy import cossintanarcsinarcosarctanarctan2zerossqrtpi
from elipsoide import elipsoide
from radiopv import radiopv from piesfcr import piesfcr
from pdesfcr import pdesfcr
piloxo - problema inverso para la curva loxodroacutemica entrada=(lat1lon1lat2lon2nelipsoide)
salida=[dla12]
import ossys from numpy import arctan2coszerospi
from elipsoide import elipsoide from lat2cre import lat2cre
from radiopv import radiopv
from lam import lam
psi_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del meridiano entrada=(latlon) salida=psi_ed50
import ossys
from numpy import pisqrtcossintan from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
58
radioem - radio de curvatura de la elipse meridiana en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radioem
import ossys from numpy import sin
from elipsoide import elipsoide
radioeul - radio de la seccioacuten normal de un determinado acimut a partir del teorema de Euler entrada=(lataznelipsoide)
salida=radieul import ossys
from numpy import sincos from radioem import radioem
from radiopv import radiopv
radiopv - radio de curvatura del primer vertical en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radiopv
import ossys from numpy impor sqrtsin
from elipsoide import elipsoide
rdcae - reduccioacuten de la distancia de la cuerda al arco elipsoide entrada=( dcazlat1nelipsoide) salida=recae
impor ossys from numpy import sincosarcsen
from radioem import radioem from radiopv import radiopv
rdtce - reduccioacuten de la distancia del terreno a la cuerda elipsoide entrada=(dgazlat1h1h2nelipsoide)
salida=rdtce import ossys
from numpy import sincossqrt from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
59
tri2geo - paso de coordenadas cartesianas tridimensionales a geodeacutesicas en un punto y elipsoide determinados entrada=(XYZnelipsoide)
salida=[latlonh]
import ossys from numpy import cossintanarctanarctan2sqrtzeros
from elipsoide import elipsoide from radiopv import radiopv
xyz2clae - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a observables claacutesicos sobre el elipsoide y desnivel elipsoidal entrada=( X1Y1Z1DXDYDZnelipsoide) salida=[s12az12h12]
import ossys from numpy import zeros
from tri2geo import tri2geo
from pigbslm import pigbslm
xyz2clat - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes polares en el terreno entrada=( lat1lon1ixiyiz)
salida=[ dgaz12lv] import ossys
from numpy import zeros from xyz2enu import xyz2enu
from enu2cla import enu2cla
xyz2enu - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes ENU entrada=(latlonIXIYIZ)
salida=[ieiniu]
import ossys from numpy import sincoszeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
60
434 Libreriacutea en Python ldquogeotopoproy_cartograficasrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 calhuso - caacutelculo del huso correspondiente a un punto en la proyeccioacuten UTM a partir de su longitud geodeacutesica entrada=(lon)
salida=huso
import ossys from numpy import
cdel2geo - paso de un punto de la proyeccioacuten ciliacutendrica directa equivalente de Lambert al elipsoide
entrada=(XYLon0TXTYnelipsoide) salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaaut2lat import aut2lat
convestp - caacutelculo de la convergencia de meridianos de un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lonlon0)
salida=convest import ossys
convgk - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0nelipsoide)
salida=convgk
import ossys from numpy import sincostan
from geotopogeodesiaelipsoide import elipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
61
convlamb - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(lonlat0lon0)
salida=convlamb
import ossys from numpy import sin
convutm - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=convutm import ossys
from numpy import tancossinpi
from cahuso import calhuso from geotopogeodesiaelipsoide import elipsoide
convutmh - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso indicado entrada=(latlonnelipsoide)
salida=convutmh
import ossys from numpy import tancossinpi
from geotopogeodesiaelipsoide import elipsoide
dcdgputm - paso de la distancia cuerda en la proyeccioacuten UTM entre dos puntos a la correspondiente a la proyeccioacuten UTM de la liacutenea geoacutedesica que los une en el elipsoide entrada=(lat1lon1lat2lon2nelipsoide
salida=correccioacuten en metros import ossys
from numpy import cos from utm2geo import utm2geo
from geo2utmh import geo2utmh
from calhuso import calhuso from getopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
62
dcesfera - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general conforme en una esfera entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida=dc (reduccioacuten angular de la cuerda en radianes import ossys
from numpy import sincos from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
dcestp - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en la esfera al pasar a la proyeccioacuten estereograacutefica polar entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=dc(reduccioacuten angular de la cuerda en radianes)
import ossys from numpy import cossin
from kplamb import kplamb
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
from geotopogeodesiaradiopv import radiopv
dcgk - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general de Gauss-Kruumlger entrada=(lat1lon1lat2lon2lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos from geo2gk import geo2gk
from gk2geo import gk2geo
from geotopogeodesiaradioem import radioem from geotopogeodesiaradiopv import radiopv
from getopogeodesiaelipsoide import elipsoide
dclamb - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert entrada=(lat1lon1lat2lon2lat0pelipsoide
salida= dc(reduccioacuten angular de la cuerda en radianes)
import ossys
from numpy import sintancosexpzeros from geo2lamb import geo2lamb
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
63
from kdlamb import kdlamb
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
from geotopogeodesiaradiopv import radiopv
dclambf - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert con maacutes precisioacuten que la funcioacuten anterior entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos sin
from kplamb import kplamb from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o from geotopogeodesiaradiopv import radiopv
dcutm - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=( lat1lon1lat2lon2nelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaradioem import radioem
dcutmh - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso indicado entrada=( lat1lon1lat2lon2husonelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh
from utm2geo import utm2geo from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
64
dgpdcutm - paso de la distancia geodeacutesica proyectada en el plano UTM a la distancia correspondiente a la cuerda en esta proyeccioacuten para una geodeacutesica del elipsoide entrada=( lat1lon1lat2lon2snelipsoide)
salida=correccioacuten import ossys
from numpy import cos from geo2utmh import geo2utmh
from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut
esf2esfg - paso de un punto de una esfera a la esfera con cambio de polo Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo
entrada=(latlonlatplonp)
salida=[latlong]
import ossys from numpy import cossintanarcsenarctandotzerospi
from geotopogeodesiapiesfcr import piesfcr
esf2estp - paso de un punto de la esfera a las planas de la proyeccioacuten estereograacutefica polar entrada=(latlonlon0radiotxty)
salida=[xy] estp import ossys
from numpy import zerossincos
esfg2esf - paso de un punto de la esfera con cambio de polo a la esfera original Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo entrada=(latnlonnlatplonp
salida=[lat0lon0giro import ossys
from numpy import cossintanarcsenarctan2dotzerospitranspose from geotopogeodesiapiesfcr import piesfcr
esfc2lat - paso de latitud sobre la esfera a la correspondiente sobre el elipsoide seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
65
salida=lat
import ossys from numpy import sintanarctanpi
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiaelipsoide import elipsoide
estp2esf - paso de un punto de la proyeccioacuten estereograacutefica polar a la esfera entrada=(xylon0radiotxty)
salida=[xy] import ossys
from numpy import zerosarctan2arctansinpi
geo2cdel - paso de un punto del elipsoide a la proyeccioacuten ciliacutendrica directa equivalente de Lambert entrada=( latlonlon0txtynelipsoide)
salida=[XY] import ossys
from numpy import zeros
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialat2aut import lat2aut
geo2esto - paso de una nube de puntos del elipsoide a la proyeccioacuten estereograacutefica oblicua oacuteptima entrada=(latlonlat0lon0txtynelipsoide)
salida=[XY]
import ossys from numpy import
from lat2esc import lat2esc
from esf2esfg import esf2esfg from esf2estp import esf2estp
from geotopogeodesiaradiopv import radiopv
geo2gk - paso de un punto del elipsoide a la proyeccioacuten general de Gauss-Kruumlger entrada=( latlonlon0ptxtynelipsoide)
salida= [xy]gk import ossys
from numpy import costanpizeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesialam import lam
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
66
geo2lamb - paso de un punto del elipsoide a la proyeccioacuten general coacutenica conforme de Lambert entrada=( latlonlat0lon0ptxtynelipsoide)
salida=[xy]lambert
import ossys from numpy import sintancosexpzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
geo2merc - paso de un punto del elipsoide a la proyeccioacuten de Mercator entrada=( latlonlon0txtynelipsoide)
salida= [xy]mercator import ossys
from numpy import zeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialat2cre import lat2cre
geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
import ossys from numpy import zerostancospi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
geo2utmh - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=[XY] UTM
import ossys
from numpy import zerostancospi from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
gk2geo - paso de un punto de la proyeccioacuten general de Gauss-Kruumlger al elipsoide entrada=(XYlon0ptxtynelipsoide)
salida=[latlon]
import ossys
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
67
from numpy import zerostancospi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
kdesfera - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general conforme sobre una esfera Utiliza la integracioacuten numeacuterica de Simpson entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida= kdesfera import ossys
from kpesfera import kpesfera from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o
kdestp - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica de la esfera al proyectarla en la proyeccioacuten estereograacutefica polar Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0radiotxty)
salida=kdestp import ossys
from kpestp import kpestp from esf2estp import esf2estp
from estp2esf import estp2esf
kdgk - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general de Gauss-Kruumlger Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0pnelipsoide)
salida=kdgk import ossys
from geo2gk import geo2gk from gk2geo import gk2geo
from kpgk import kpgk
kdlamb - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica el elipsoide al proyectarla en la proyeccioacuten general coacutenica conforme de Lambert Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=kdlamb import ossys
from geolamb import geolamb from lamb2geo import lamb2geo
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
68
kdutm - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso del primer punto Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2nelipsoide)
salida=kdutm import ossys
from calhuso import calhuso from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kdutmh - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso indicado Utiliza la integracioacuten numeacuterica de Simpson
entrada= lat1lon1lat2lon2husohelipsoide) salida=kdutmh
import ossys from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kpesfera - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general conforme sobre una esfera entrada=( latlat0nelipsoide)
salida=kpesfera import ossys
from numpy import cossintanexp from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaelipsoide import elipsoide
kpestp - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lat)
salida=kpestp import ossys
from numpy import sin
kpgk - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0pnelipsoide)
salida=kpgk
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
69
import ossys
from numpy import sincostan from clahuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
kplamb - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(latlat0pnelipsoide)
salida=kplamb
import ossys from numpy import cossintanexp
from geotopogeodesialat2cre import lat2cre from geotopogeodesiaradiopv import radiopv
kputm - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=kputm
import ossys from numpy import tancossinpi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
kputmh - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=kputmh
import ossys
from numpy import sincostanpi from geotopogeodesiaelipsoide import elipsoide
lamb2geo - paso de un punto de la proyeccioacuten general coacutenica conforme de Lambert al elipsoide entrada=( xylat0lon0ptxtynelipsoide)
salida=[latlon] import ossys
from numpy import sintanarctanpilogsqrtzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
from geotopogeodesiacre2lat import cre2lat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
70
lat2esc - paso de la latitud geodeacutesica sobre el elipsoide a la correspondiente sobre la esfera seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide)
salida=latesfc
import ossys from numpy import sintanarctanpi
from geotopogeodesiaelipsoide import elipsoide
merc2geo - paso de un punto de la proyeccioacuten de Mercator al elipsoide entrada= (xylon0txtynelipsoide)
salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesiacre2lat import cre2lat
utm2geo - paso de un punto de la proyeccioacuten UTM al elipsoide entrada=(XYhusonelipsoide)
salida=[latlon] import ossys
from numpy import sqrtpitancossinzeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
435 Libreriacutea en Python ldquogeotopotransformacionrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 egm08rednap ndash fichero que almacena la clase Egm08rednap para el manejo de geoides en formato egm08rednap Define la funcioacuten getOndulation(selflatitudlongitud) Llama al fichero geoide que a su vez llama a los ficheros EGM08_REDNAP
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
71
entrada=(latitudlongitud)
salida=ondulacioacuten import ossys
from numpy import fromfile reshape from geoide import Geoide
geoide ndash fichero que almacena la clase Geoide para el manejo de geoides en formato egm08rednap La clase Geoide almacena ldquollamardquo a los geoides EGM08_REDNAP de la Peniacutensula o Baleares seguacuten corresponda Define las funciones getNoOndulacioacuten y getOndulacioacuten en funcioacuten de que encuentre las coordenadas de entrada dentro de los ficheros
entrada=(latitudlongitud) salida=ondulacioacuten
import ossys from numpy import fromfile reshapepifloorndarray
ntv2 ndash fichero que almacena la funcioacuten ntv2Espana Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(longitudlatitud) en deg en ED50 salida=(longitud latitud) en deg en ETRS89
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
ntv2_2 ndash fichero que almacena la funcioacuten ntv2Espana Adaptacioacuten del fichero anterior Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz) En la adatacioacuten realizada obtenemos soacutelo los diferenciales de caacutelculo de paso de ED50 a ETRS89 para tomarlo en el caacutelculo de la aproximacioacuten del sentido inverso entre ETRS89 a ED50 El paso de nodos del fichero utilizado es cada 200‟ lo que equivaldriacutea a 6000 m aproximadamente por lo que la aproximacioacuten seriacutea vaacutelida
entrada=(longitudlatitud) en deg en ETRS89 salida=(diflongitud diflatitud) en deg en ED50
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
72
sped2etpy ndash fichero rejilla del IGN Para transformacioacuten de coordenadas en los Sistemas de Referencia ED50 a ETRS89 Adaptado a Python y descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(fichero contenedor de informacioacuten) No entramos con ninguacuten valor
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
73
5 APLICABILIDAD DE LA LIBRERIacuteA Y CONCLUSIONES FINALES Finalmente hemos implementado los 5 subpaquetes de moacutedulos con funciones y clases incluidos en el paquete (libreriacutea) geotopo destinados a caacutelculos topograacuteficos y geodeacutesicos
Estructura final de la libreriacutea geotopo
Como puede verse en el paquete de geotopo se ha incluido un moacutedulo de aplicaciones en las que se han implementado unos ejercicios praacutecticos aplicando las distintas funciones de la libreriacutea Antes de entrar a describir los casos praacutecticos implementados hemos de decir que directamente podemos obtener resultados de cada una de las funiones Asiacute si queremos pasar de coordenadas geograacuteficas a coordenadas utm mirando en la descripcioacuten de las funciones tenemos geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
74
import ossys
from numpy import zerostancospi from calhuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
Pues bien una vez seleccionada la funcioacuten a utilizar abrimos el moacutedulo correspondiente con IDLE
Coacutedigo de la funcioacuten abierto con IDLE
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
75
Imagen de la ejecucioacuten de Run Module
Ejecutando Run Module Python abre el Python Shell En esta pantalla tenemos que introducir el nombre de la funcioacuten a usar geo2utm y entre pareacutentesis los valores que se especifican de entrada en la descripcioacuten de la funcioacuten entrada=(latlonnelipsoide)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
76
Llamada a la ejecucioacuten de la funcioacuten desde Python Shell
Como hemos indicado antes y por su relevancia y empleabilidad en otras funciones con ldquonelipsoiderdquo se entiende un coacutedigo del 1 al 3 que representa cada uno un elipsoides de referencia seguacuten los Sistemas de Referencia Coordenados en este caso 1=ED50 elipsoide Internacional Hayford 1924 2=ETRS89 elipsoide GRS80 y 3=WGS84
Al introducir los datos ejecutamos con Intro Obtenemos 2 valores en forma de vector que respresentan seguacuten la descripcioacuten de la funcioacuten salida=[XY] UTM
Podemos volver a caacutelcular las coordenadas UTM en el SCR ETRS89 (en caso de que lalitud y longitud vinieran dadas en el mismohellip) simplemente copiando la liacutenea de entrada pegaacutendola abajo y cambiando 1 por 2 como iacutendice del elipsoide y volviendo a ejecutar con enter
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
77
Dentro de Python Shell se puede copiar coacutedigo de liacuteneas anteriores y
pegar abajo Para caacutelculos maacutes complejos de mayor nuacutemero de puntos etc a modo de praacutectica se ha implementado el coacutedigo de distintos tipos de caacutelculo de ejemplo Distribuidos en 2 tipologiacuteas diferentes ldquotopografiardquo y ldquogeodesiardquo se han incluido coacutedigos para la resolucioacuten e impresioacuten de distintos tipos de problemas realizando ldquoimportrdquo de funciones declaradas en los moacutedulos de los distintos subpaquetes de geotopo
51 CASOS PRAacuteCTICOS TOPOGRAFIacuteA En total se han realizada 4 casos praacutecticos dentro del apartado de topografiacutea Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica topo_practica1 Del resto soacutelo se ha incluido la salida de datos
511 Implementacioacuten del coacutedigo topo_praacutectica1
usrbinpython
-- coding iso-8859-1 --
-- coding cp1252 --
Praacutectica 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
Datos Coordenadas del punto de estacioacuten
Sistema de referencia local
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmesn)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
78
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
En esta versioacuten de la praacutectica utilizando la libreriacutea geotopo en el caacutelculo de azimutes
periacutemetro y superficie
import ossys
from numpy import matrixarrayshapepizerosconcatenatemeansincossqrt
from geotopotopografiaacimut import acimut
from geotopogeneralperimetro import perimetro
from geotopogeneralareacor import areacor
Radio medio terrestre en metros
rt=63700000
Informacioacuten del punto de estacioacuten El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto de estacioacuten
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Altitud del punto en metros
- Quinta columna- Altura de instrumento en metros
pe=array([[100030242663090376657208150]])
Informacioacuten de las referencias
- Cada fila es un punto de referencia
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Lectura azimutal en grados centesimales
ref=array([[200127863973359492354821][2002322174932757501335646][20033289406282
69902313540][2004261222126827453319067]])
Informacioacuten de los puntos radiados
- Cada fila es una observacioacuten claacutesica a un punto radiado
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Lectura azimutal en grados centesimales
- Tercera columna- Lectura cenital en grados centesimales
- Cuarta columna- Distancia geomeacutetrica en metros
- Quinta columna- Altura de instrumento en metros
rad=array([[30013387131001173422431180][300211877101000083399617200][3003240
5756999039440097150][300433037831000468414996150]])
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos de referencia
Caacutelculo de las dimensiones de la matriz de puntos de referencia
- mref seraacute el nuacutemero de filas el nuacutemero de puntos
- nref seraacute el nuacutemero de columnas 4
[mrefnref]=refshape
Se extrae la informacioacuten del punto de estacioacuten
num_pe=pe[00]
x_pe=pe[01]
y_pe=pe[02]
z_pe=pe[03]
alti_pe=pe[04]
Caacutelculo de azitutes del punto de estacioacuten a cada uno de los puntos radiados
La funcioacuten azimut de la libreriacutea Geotop devuelve el valor en radianes
acimutes=zeros((mref1))
for i in range (1mref+1)
Se leen la identificacioacuten y las coordenadas del punto radiado y se almacenan en variables
temporales
num_pref=ref[i-10]
x_pref=ref[i-11]
y_pref=ref[i-12]
azi_pe_pref=acimut(x_pey_pex_prefy_pref)
acimutes[i-10]=azi_pe_pref2000pi
ref=concatenate((refacimutes)axis=1)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
79
Caacutelculo de la desorientacioacuten de cada direccioacutenccedil
desor=zeros((mref1))
for i in range(1mref+1)
Se leen los valores angulares y se transforman a radianes almacenaacutendose en variables
temporales
lhz_pe_pref=ref[i-13]pi2000
azi_pe_pref=ref[i-14]pi2000
des_pe_pref=azi_pe_pref-lhz_pe_pref
if des_pe_preflt0
des_pe_pref=des_pe_pref+20pi
desor[i-10]=des_pe_pref200pi
ref=concatenate((refdesor)axis=1)
Caacutelculo de la desorientacioacuten media con la funcioacuten de python
des_mean=mean(ref[5])pi200
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos radiados
[mradnrad]=radshape
Caacutelculo de coordenadas polares que se almacenan en la matriz coor_polares
- Primera columna- Nuacutemero entero identificador del punto radiado
- Segunda columna- Azimut en grados centesimales
- Tercera columna- Distancia reducida en metros
Caacutelculo de coordenadas cartesianas que se almacenan en la matriz coor_cart
- Primera columna- Nuacutemero entero identificador del punto del punto radiado
- Segunda columna- Coordenada X
- Tercera columna- Coordenada Y
- Cuarta columna- Altitud
antes se almacenan las coordenadas polares en la matriz coord_polares (numero de
puntoacimutdistancia reducida)
coord_polares=zeros((mrad3))
coord_cart=zeros((mrad4))
for i in range(1mrad+1)
num_prad=rad[i-10]
lhz_pe_prad=rad[i-11]pi2000
lv_pe_prad=rad[i-12]pi2000
dg_pe_prad=rad[i-13]
altp_pe_prad=rad[i-14]
coord_polares[i-10]=num_prad
azi_pe_prad=lhz_pe_prad+des_mean
if azi_pe_pradgt(20pi)
azi_pe_prad=azi_pe_prad-20pi
coord_polares[i-11]=azi_pe_prad2000pi
dr_pe_prad=dg_pe_pradsin(lv_pe_prad)
coord_polares[i-12]=dr_pe_prad
coord_cart[i-10]=num_prad
coord_cart[i-11]= x_pe+dr_pe_pradsin(azi_pe_prad)
coord_cart[i-12]= y_pe+dr_pe_pradcos(azi_pe_prad)
coord_cart[i-13]= z_pe+alti_pe+dg_pe_pradcos(lv_pe_prad)-
altp_pe_prad+042dr_pe_prad2rt
Caacutelculo del periacutemetro de la parcela utilizando la funcioacuten periacutemetro de Geotopo
coord=zeros((mrad2))
for i in range (1mrad+1)
coord[i-10]=coord_cart[i-11]
coord[i-11]=coord_cart[i-12]
perim=perimetro(coord)
Caacutelculo de la superficie de la parcela utilizando la funcioacuten areacor de Geotopo
superficie=areacor(coord)
superficie_error=areacore(coord)
Impresioacuten de resultados
fsalida=open(topopractica1salw)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
80
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
fsalidawrite(TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(nPRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALESn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimaln)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia Localn)
Impresioacuten del paso 1 Paso de coordenadas cartesianas a polares Azimutes
fsalidawrite(n1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada
visualn)
fsalidawrite( Punto Inicial Punto Final Acimut Desorientacioacutenn)
for i in range(1mref+1)
num_pref=ref[i-10]
azi=ref[i-14]
des=ref[i-15]
fsalidawrite(100fnum_pe)
fsalidawrite(150fnum_pref)
fsalidawrite(184fazi)
fsalidawrite(184fndes)
Impresioacuten del paso 2 Caacutelculo de la desorientacioacuten media
fsalidawrite(n2 Caacutelculo de la desorientacioacuten median)
fsalidawrite( Desorientacioacuten media154fn(des_mean200pi))
Impresioacuten del paso 3 Caacutelculo de la coordenadas polares
fsalidawrite(n3 Caacutelculo de las coordenadas polaresn)
fsalidawrite( Punto Acimut Distancian)
for i in range (1mrad+1)
num_prad=coord_polares[i-10]
azi=coord_polares[i-11]
dist=coord_polares[i-12]
fsalidawrite(100fnum_prad)
fsalidawrite(184fazi)
fsalidawrite(184fndist)
Impresioacuten del paso 4 Caacutelculo de la coordenadas cartesianas
fsalidawrite(n4 Caacutelculo de las coordenadas cartesianasn)
fsalidawrite( Punto X Y Zn)
for i in range (1mrad+1)
num_prad=coord_cart[i-10]
x=coord_cart[i-11]
y=coord_cart[i-12]
z=coord_cart[i-13]
fsalidawrite(100fnum_prad)
fsalidawrite(154fx)
fsalidawrite(154fy)
fsalidawrite(154fnz)
Impresioacuten del paso 5 valor del periacutemetro
fsalidawrite(n5 Caacutelculo del periacutemetro de la parcelan)
fsalidawrite( Periacutemetro153f mnperim)
Impresioacuten del paso 6 valor de la superficie de la parcela
fsalidawrite(n6 Caacutelculo de la superficie de la parcelan)
fsalidawrite( Superficie153f m2nsuperficie)
fsalidaclose()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
81
512 Impresioacuten del fichero de salida de resultados topo_praacutectica1
Ejecuando el programa anterior obtenemos un fichero con los resultados y la presentacioacuten mejorada que hemos implementado SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada visual
Punto Inicial Punto Final Acimut Desorientacioacuten
1000 2001 3539187 3184366
1000 2002 520128 3184482
1000 2003 1497887 3184347
1000 2004 2503428 3184361
2 Caacutelculo de la desorientacioacuten media
Desorientacioacuten media 3184389
3 Caacutelculo de las coordenadas polares
Punto Acimut Distancia
3001 3523102 4224303
3002 372099 3996170
3003 1590145 4400965
3004 2488172 4149959
4 Caacutelculo de las coordenadas cartesianas
Punto X Y Z
3001 27365966 33997199 6561414
3002 32447650 34236535 6566664
3003 32884285 27383773 6578851
3004 27363219 27915286 6569143
5 Caacutelculo del periacutemetro de la parcela
Periacutemetro 2358248 m
6 Caacutelculo de la superficie de la parcela
Superficie 342540930 m2
513 Salida de resultados topo_praacutectica2
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN DIRECTA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3264596 m
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
82
Y= 4065437 m
Previsioacuten de error planimeacutetrico= 0035 m
Vector con soluciones en z y su error
Z=725931 m Previsioacuten de error altimeacutetrico 0023 m
Z=725926 m Previsioacuten de error altimeacutetrico 0024 m
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN INVERSA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3010146 m
Y= 3411841 m
Previsioacuten de error planimeacutetrico= 0022 m
Vector con soluciones en z y su error
Z=515695 m Previsioacuten de error altimeacutetrico 0021 m
Z=515703 m Previsioacuten de error altimeacutetrico 0024 m
Z=515698 m Previsioacuten de error altimeacutetrico 0022 m
514 Salida de resultados topo_praacutectica3
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 3 CALCULO DE DATOS DE REPLANTEO PARA ESTACION TOTAL EN UN SISTEMA DE REFERENCIA
LOCAL
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
ResultadosDatos de replanteo
Base Punto Azimut Distancia CotaProyecto CotaTerreno CotaRoja
1 1 3856489 75460 96930 96539 0391
1 2 2667262 77786 96903 98259 -1356
1 3 1219144 40883 95329 94688 0641
1 4 279600 67437 95045 95587 -0542
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
83
515 Salida de resultados topo_praacutectica4
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 4 TRANSFORMACIOacuteN ENTRE SISTEMAS DE REFERENCIA LOCALES HELMERT 2D
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
Planteamiento del sistema de ecuaciones que define la transformacioacuten planimeacutetrica
Matriz A
1000 0000 3258686 -2709414
0000 1000 2709414 3258686
1000 0000 2075590 -2105320
0000 1000 2105320 2075590
Vector teacuterminos independientes
4554780
228501
3244004
443737
1 Resultados de los paraacutemetros de la transformacioacuten
- Planimetriacutea
- Traslacioacuten en coordenada x del sistema S1 al sistema S2 324401 m
- Traslacioacuten en coordenada y del sistema S1 al sistema S2 -20424 m
- Valor para el paraacutemetro a (a=landacos_giro) 0805119725
adimensional
- Valor para el paraacutemetro b (b=landasin_giro) -0593023724
adimensional
- Valor para el factor de escala (landa=sqrt(a2+b2)) 0999947
tanto por uno
- Valor para el giro (giro=arctan2(ba) -404157
grados centesimales
- Altimetriacutea
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 1 6056 m
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 2 6083 m
- Traslacioacuten media en coordenada z del sistema S1 al sistema S2 6070 m
2 Resultado de la transformacioacuten del punto 3 al sistema de referencia local S2
- Coordenada x de 3 en el sistema de referencia local S2 4072286 m
- Coordenada y de 3 en el sistema de referencia local S2 45170 m
- Coordenada z de 3 en el sistema de referencia local S2 104748 m
52 CASOS PRAacuteCTICOS GEODESIA En total se han realizada 5 casos praacutecticos dentro del apartado de geodesia Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica geo_practica1 Del resto soacutelo se ha incluido la salida de datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
84
521 Implementacioacuten del coacutedigo geo_praacutectica1
Semana Geomaacutetica 2011 Bogotaacute DC Colombia
IGAC-Instituto Agustiacuten Codazzi
Taller Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea GeoTop
Impartido por Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
Dr David Hernaacutendez Loacutepez davidhernandezulcmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
Praacutectica 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
Datos Coordenadas de la Red ERGNSS - Red de Estaciones Permanentes GNSS - Instituto
Geograacutefico Nacional Espantildea
Sistema de referencia ETRS89 (Elipsoide GRS80)
Coacutedigo EPSG para coordenadas geodeacutesicas sobre el elipsoide 4258
En esta versioacuten de la praacutectica se utiliza la libreriacutea GeoTop
Otra variante con respecto a la versioacuten anterior de la praacutectica es que se parte de coordenadas
geodeacutesicas en seudo decimal sexagesimal
Documentacioacuten La formulacioacuten empleada figura en el apartado 13 Parametrizacioacuten del
elipsoide del documento
OctaveTallerGeodesiaDocumentacionApuntes_DHL_2010GeodesiaElipsoidalpdf
Matriz de coordenadas
- Cada fila es un punto una estacioacuten de referencia GNSS
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada geodeacutesica longitud en suedo decimal sexagesimal
- Tercera columna- Coordenada geodeacutesica latitud en suedo decimal sexagesimal
- Cuarta columna- Altitud elipsoidal en metros
from numpy import zerosarraygenfromtxt
from geotopogeodesiaelipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiatri2geo import tri2geo
from geotopogeodesiageo2tri import geo2tri
c4258h=[ 1 432151770811 -82356167472 66917
2 382020103584 -02852437048 60356
3 385840494457 -15123054192 751736
4 365109112636 -22734018800 127517
5 392843898433 -62030426066 436527
6 432819118007 -34753038539 99287
7 355331090227 -51823016758 52475
8 375456176191 -44315999947 202082
9 371159923466 -65513077151 81860
10 402645009016 -34234283233 766920
11 423518259367 -53903511817 970254
12 364334003748 -42336718238 119848
13 393309445258 23728383134 62063
14 422728617761 -23007691629 503204
15 405642292231 -52945108842 854969
16 394031263811 -35750290360 808968
17 402101790155 -10727483699 956188
18 392850970441 -02015543423 77592
19 421102318373 -84847057525 87790
20 403129631681 -30519065001 972777
21 413800221985 -05255792567 296111
22 281829034024 -162958855078 2417483
23 282837857413 -161428164273 51787
24 282505711067 -163302841359 54475
25 280249784309 -164306688806 58543
26 284549932439 -175337787438 2199221]
Los datos los guardamos en un txt en la misma carpeta del trabajo e importamos
c4258h=genfromtxt(CPython27geotopoaplicacionestalleresgeo_practica1dattxt)
Caacutelculo de las dimensiones de la matriz de coordenadas
- m seraacute el nuacutemero de filas el nuacutemero de puntos
- n seraacute el nuacutemero de columnas 4
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
85
[mn]=c4258hshape
grs80=elipsoide(2)
Recibe Codigo del elipsoide (nelipsoide)
1 - Ed50 Devuelve el elipsoide Internacional 1924
2 - Etrs89 Devuelve el elipsoide GRS80
3 - Wgs84 Devuelve el elipsoide Wgs84
Definicioacuten del elipsoide
fsalida=open(geo_practica1salw)
fsalidawrite(SEMANA GEOMAacuteTICA - 2011n)
fsalidawrite(TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software
libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE
COORDENADAS GEODEacuteSICAS Y ECEFn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal
ggmmssfsn)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia ETRS89n)
fsalidawrite(- Paraacutemetros del elipsoide GRS80n)
fsalidawrite( - Semieje mayor 103f mngrs80[0])
fsalidawrite( - Inverso del aplanamiento 109f adimngrs80[1])
fsalidawrite( - Semieje menor 103f mngrs80[2])
fsalidawrite( - Primera excentricidad al cuadrado 109f adimngrs80[3]2)
fsalidawrite( - Segunda excentricidad al cuadrado 109f adimngrs80[4]2)
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(1 Paso de coordenadas geodeacutesicas a ECEFn)
fsalidawrite(NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF
CoorZECEFn)
c4258XYZ=zeros((m4))
for i in range (1m+1)
np=c4258h[i-10]
longitudRad=psdo2rad(c4258h[i-12])
latitudRad=psdo2rad(c4258h[i-11])
hElip=c4258h[i-13]
[xecefyecefzecef]=geo2tri(latitudRadlongitudRadhElip2)
fsalidawrite(80fnp)
fsalidawrite(159fc4258h[i-11])
fsalidawrite(159fc4258h[i-12])
fsalidawrite(123fhElip)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(n)
c4258XYZ[i-10]=np
c4258XYZ[i-11]=xecef
c4258XYZ[i-12]=yecef
c4258XYZ[i-13]=zecef
Caacutelculo e impresioacuten del paso 2 de coordenadas ECEF a geodeacutesicas
fsalidawrite(2 Paso de coordenadas ECEF a geodeacutesicasn)
fsalidawrite( NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud
AltElipn)
for i in range(1m+1)
np=c4258XYZ[i-10]
xecef=c4258XYZ[i-11]
yecef=c4258XYZ[i-12]
zecef=c4258XYZ[i-13]
[latitudlongitudhElip]=tri2geo(xecefyecefzecef2)
fsalidawrite(80fnp)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(159frad2psdo(latitud))
fsalidawrite(159frad2psdo(longitud))
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
86
fsalidawrite(153fnhElip)
fsalidaclose()
522 Impresioacuten del fichero de salida de resultados geo_praacutectica1
SEMANA GEOMAacuteTICA - 2011
TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea
GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal ggmmssfs
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia ETRS89
- Paraacutemetros del elipsoide GRS80
- Semieje mayor 6378137000 m
- Inverso del aplanamiento 0003352811 adim
- Semieje menor 6356752314 m
- Primera excentricidad al cuadrado 0006694380 adim
- Segunda excentricidad al cuadrado 0006739497 adim
1 Paso de coordenadas geodeacutesicas a ECEF
NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF CoorZECEF
1 43215177081 -8235616747 66917 4594489890 -678368010 4357065904
2 38202010358 -0285243705 60356 5009051399 -42072472 3935057504
3 38584049446 -1512305419 751736 4962848206 -160854365 3990884209
4 36510911264 -2273401880 127517 5105220295 -219278803 3804386889
5 39284389843 -6203042607 436527 4899866820 -544567584 4033769790
6 43281911801 -3475303854 99287 4625924690 -307096765 4365771175
7 35533109023 -5182301676 52475 5150908012 -478415023 3718518240
8 37545617619 -4431599995 202082 5021256063 -414685080 3898182184
9 37115992347 -6551307715 81860 5049613168 -612885631 3835143860
10 40264500902 -3423428323 766920 4851137670 -314518688 4116282036
11 42351825937 -5390351182 970254 4680871385 -463168384 4294606572
12 36433400375 -4233671824 119848 5103282414 -392096752 3793146894
13 39330944526 2372838313 62063 4919369704 225499577 4039849606
14 42272861776 -2300769163 503204 4708688612 -205761707 4283609369
15 40564229223 -5294510884 854969 4803054799 -462131609 4158378661
16 39403126381 -3575029036 808968 4904660519 -339868032 4050823512
17 40210179016 -1072748370 956188 4867391684 -95523894 4108341277
18 39285097044 -0201554342 77592 4929534046 -29050676 4033709925
19 42110231837 -8484705753 87790 4677481077 -725205068 4260827192
20 40312963168 -3051906500 972777 4848724914 -261632472 4123093922
21 41380022199 -0525579257 296111 4773803543 -73506519 4215453698
22 28182903402 -16295885508 2417483 5390243531 -1596630330 3007752593
23 28283785741 -16142816427 51787 5386836438 -1569217617 3023118925
24 28250571107 -16330284136 54475 5381262061 -1599192518 3017377791
25 28024978431 -16430668881 58543 5395193089 -1620537044 2981146536
26 28454993244 -17533778744 2199221 5326646317 -1719826438 3052043561
2 Paso de coordenadas ECEF a geodeacutesicas
NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud AltElip
1 4594489890 -678368010 4357065904 43215177081 -8235616747 66917
2 5009051399 -42072472 3935057504 38202010358 -0285243705 60356
3 4962848206 -160854365 3990884209 38584049446 -1512305419 751736
4 5105220295 -219278803 3804386889 36510911264 -2273401880 127517
5 4899866820 -544567584 4033769790 39284389843 -6203042607 436527
6 4625924690 -307096765 4365771175 43281911801 -3475303854 99287
7 5150908012 -478415023 3718518240 35533109023 -5182301676 52475
8 5021256063 -414685080 3898182184 37545617619 -4431599995 202082
9 5049613168 -612885631 3835143860 37115992347 -6551307715 81860
10 4851137670 -314518688 4116282036 40264500902 -3423428323 766920
11 4680871385 -463168384 4294606572 42351825937 -5390351182 970254
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
87
12 5103282414 -392096752 3793146894 36433400375 -4233671824 119848
13 4919369704 225499577 4039849606 39330944526 2372838313 62063
14 4708688612 -205761707 4283609369 42272861776 -2300769163 503204
15 4803054799 -462131609 4158378661 40564229223 -5294510884 854969
16 4904660519 -339868032 4050823512 39403126381 -3575029036 808968
17 4867391684 -95523894 4108341277 40210179016 -1072748370 956188
18 4929534046 -29050676 4033709925 39285097044 -0201554342 77592
19 4677481077 -725205068 4260827192 42110231837 -8484705753 87790
20 4848724914 -261632472 4123093922 40312963168 -3051906500 972777
21 4773803543 -73506519 4215453698 41380022199 -0525579257 296111
22 5390243531 -1596630330 3007752593 28182903402 -16295885508 2417483
23 5386836438 -1569217617 3023118925 28283785741 -16142816427 51787
24 5381262061 -1599192518 3017377791 28250571107 -16330284136 54475
25 5395193089 -1620537044 2981146536 28024978431 -16430668881 58543
26 5326646317 -1719826438 3052043561 28454993244 -17533778744 2199221
523 Salida de resultados geo_praacutectica2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
88
524 Salida de resultados geo_praacutectica3
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
89
525 Salida de resultados geo_praacutectica4
helliphellip
helliphellip
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
90
526 Salida de resultados geo_praacutectica5
Con la implementacioacuten y caacutelculo de los 9 casos praacutecticos realizados e incluidos en este Proyecto Final de Maacutester se puede obtener una idea de la aplicabilidad de esta libreriacutea en aplicaciones de caacutelculos topograacuteficos y geodeacutesicos Igualmente y como uno de los puntos de partida de este Proyecto obtenemos una libreriacutea muy potente para el uso en aacutembitos universitarios facilitando al profesorado el planteamiento y resolucioacuten de los distintos casos praacutecticos de las asignaturas y al tratarse de coacutedigo abierto se facilita que los alumnos implementen nuevas utilidades formatos de salida etc Convirtiendo geotopo en una herramienta de trabajo diario
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
91
6 CONCLUSIONES FINALES Como conclusiones finales podemos enumerar
Se ha corroborado lo que dicen los impulsores de Python se trata de un lenguaje limpio sencillo y claro muy proacuteximo a pseudocoacutedigo
Resulta interesante la utilizacioacuten de software libre para caacutelculos geodeacutesicos y topografiacuteacos Al tratarse de software libre es accesible a cualquier tipo de usuario
Al partir de la consideracioacuten de un paradigma estructurado de programacioacuten hemos conseguido implementar gran nuacutemero de funciones en ficheros (moacutedulos) de pequentildeo tamantildeo facilitando la programacioacuten Tambieacuten se ha iniciado en la programacioacuten orientada a objetos con la declaracioacuten de alguna clase
La importacioacuten de moacutedulos facilita a la implementacioacuten de coacutedigo sin necesitar volver a escribir el coacutedigo importado y ante cualquier modificacioacuten del mismo automaacuteticamente se actualiza en todos los programas o moacutedulos donde se importe dicho moacutedulo
Con las funciones definidas dentro de Numpy hemos realizado la mayor parte de los caacutelculos necesarios en nuestra biblioteca
Se ha de realizar la importacioacuten expresa de gran nuacutemero de operaciones matemaacuteticas Salvo + - y casi todos los demaacutes operadores se han de importar desde Numpy por ejemplo pi sqrt sin cos etc A veces puede resultar un poco complicado hacer la importacioacuten de estos operadores pero cuando se avanza en la programacioacuten hasta parece maacutes didactico reflejar todas las funciones importadas de otros moacutedulos
Se ha apreciado que en algunos casos las mismas funciones estaacuten incluidas en distintos moacutedulos y ademaacutes con nombres diferentes Asiacute en Numpy tenemos arcsin arccos arctan etc y en SciPy asin acos atan cuando se refieren a las mismas funciones arcoseno arcocoseno y arcotangente
Se ha creado una libreriacutea abierta accesible y editable para moder modificar
coacutedigo y tambieacuten poder ampliar con el implementado de nuevas funciones que aumenten el potencial de la misma Esto tambieacuten se incluye dentro de las liacuteneas futuras de actuacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
92
7 LIacuteNEAS FUTURAS DE ACTUACIOacuteN
De forma general se establecen las siguientes liacuteneas futuras de actuacioacuten e investigacioacuten
Avance en el desarrollo a aplicaciones informaacuteticas mediante el uso de software libre y en especial de Python
Estudio de la aplicabilidad de Python en el caacutelculo minimo-cuadraacutetico de sistemas de ecuaciones aplicables en topografiacutea y geodesia Para ello se ha de profundizar en el estudio de las diferencias entre los tipos array que contiene numpy y los tipos matrix par el caacutelculo avanzado de sistemas de ecuaciones
Aplicacioacuten de Python para el caacutelculo y ajuste de Redes Geodeacutesicas mediante la utilizacioacuten de miacutenimos cuadrados Con este fin estariacuteamos evitando el tener que recurrir a los softwares de caacutelculo de las casas comerciales ahorrando asiacute un coste importante y el poder realizar los ajustes y presentaciones de resultados adapatados a nuestras necesidades
Inclusioacuten de una interfaz graacutefica a los caacutelculos realizados para poder tener visualmente el resultado de los mismos
Aplicabilidad de python en el procesado de imaacutegenes Utilizacioacuten de la libreriacutea PIL (Python Imaging Library) que agrega capacidades de procesamiento de imaacutegenes al interprete Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
93
8 ANEJO
81 EQUIVALENCIAS ENTRE FUNCIONES EN MATLAB Y PYTHON Al partir de la libreiacutea Geotop en Octave hemos de tener en cuenta la equivanlencia entre algunas funciones de MatlabOctave con Python Asiacute tenemos MATLAB numpyarray numpymatrix Notes
ndims(a) ndim(a) or andim get the number of dimensions of a (tensor rank)
size(a) shape(a) or ashape get the size of the matrix
size(an) ashape[n-1]
get the number of elements of the nth dimension of array a (Note that MATLABreg uses 1 based indexing while Python uses 0 based indexing See note INDEXING)
MATLAB numpyarray numpymatrix Notes
[ 1 2 3 4 5 6 ] array([[123] [456]])
mat([[123] [456]]) or mat(1 2 3 4 5 6)
2x3 matrix literal
[ a b c d ] vstack([hstack([ab]) hstack([cd])])
bmat(a b c d) construct a matrix from blocks abc and d
a(end) a[-1] a[-1][00] access last element in the 1xn matrix a
a(25) a[14] access element in second row fifth column
a(2) a[1] or a[1] entire second row of a
a(15) a[05] or a[5] or a[05] the first five rows of a
a(end-4end) a[-5] the last five rows of a
a(1359) a[03][49] rows one to three and columns five to nine of a This gives read-only access
a([245][13]) a[ix_([134][02])] rows 24 and 5 and columns 1 and 3 This allows the matrix to be modified and doesnt require a regular slice
a(3221) a[ 2212] every other row of a starting with the third and going to the twenty-first
a(12end) a[ 2] every other row of a starting with the first
a(end-11) or flipud(a) a[ -1] a with rows in reverse order
a([1end 1]) a[r_[len(a)0]] a with copy of the first row appended to the end
a atranspose() or aT transpose of a
a aconj()transpose() or aconj()T
aH conjugate transpose of a
a b dot(ab) a b matrix multiply
a b a b multiply(ab) element-wise multiply
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
94
MATLAB numpyarray numpymatrix Notes
ab ab element-wise divide
a^3 a3 power(a3) element-wise exponentiation
(agt05) (agt05) matrix whose ijth element is (a_ij gt 05)
find(agt05) nonzero(agt05) find the indices where (a gt 05)
a(find(vgt05)) a[nonzero(vgt05)[0]] a[nonzero(vAgt05)[0]] extract the columms of a where vector v gt 05
a(find(vgt05)) a[vTgt05] a[vTgt05)] extract the columms of a where column vector v gt 05
a(alt05)=0 a[alt05]=0 a with elements less than 05 zeroed out
a (agt05) a (agt05) mat(aA (agt05)A) a with elements less than 05 zeroed out
a() = 3 a[] = 3 set all values to the same scalar value
y=x y = xcopy() numpy assigns by reference
y=x(2) y = x[1]copy() numpy slices are by reference
y=x() y = xflatten(1) turn array into vector (note that this forces a copy)
110 arange(111) or r_[111] or r_[11010j]
mat(arange(111)) or r_[111r]
create an increasing vector see note RANGES
09 arange(10) or r_[10] or r_[910j]
mat(arange(10)) or r_[10r]
create an increasing vector see note RANGES
[110] arange(111)[ newaxis] r_[111c] create a column vector
zeros(34) zeros((34)) mat() 3x4 rank-2 array full of 64-bit floating point zeros
zeros(345) zeros((345)) mat() 3x4x5 rank-3 array full of 64-bit floating point zeros
ones(34) ones((34)) mat() 3x4 rank-2 array full of 64-bit floating point ones
eye(3) eye(3) mat() 3x3 identity matrix
diag(a) diag(a) mat() vector of diagonal elements of a
diag(a0) diag(a0) mat() square diagonal matrix whose nonzero values are the elements of a
rand(34) randomrand(34) mat() random 3x4 matrix
linspace(134) linspace(134) mat() 4 equally spaced samples between 1 and 3 inclusive
[xy]=meshgrid(0805) mgrid[0906] or meshgrid(r_[09]r_[06]
mat() two 2D arrays one of x values the other of y values
ogrid[0906] or ix_(r_[09]r_[06]
mat() the best way to eval functions on a grid
[xy]=meshgrid([124][245]) meshgrid([124][245]) mat()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
95
ix_([124][245]) mat() the best way to eval functions on a grid
MATLAB numpyarray numpymatrix Notes
repmat(a m n) tile(a (m n)) mat() create m by n copies of a
[a b]
concatenate((ab)1) or hstack((ab)) or column_stack((ab)) or c_[ab]
concatenate((ab)1) concatenate columns of a and b
[a b] concatenate((ab)) or vstack((ab)) or r_[ab]
concatenate((ab)) concatenate rows of a and b
max(max(a)) amax() maximum element of a (with ndims(a)lt=2 for matlab)
max(a) amax(0) maximum element of each column of matrix a
max(a[]2) amax(1) maximum element of each row of matrix a
max(ab) maximum(a b) compares a and b element-wise and returns the maximum value from each pair
norm(v) sqrt(dot(vv)) or Scilinalgnorm(v) or linalgnorm(v)
sqrt(dot(vAvA)) or Scilinalgnorm(v) or linalgnorm(v)
L2 norm of vector v
a amp b logical_and(ab) element-by-element AND operator (Numpy ufunc) see note LOGICOPS
a | b logical_or(ab) element-by-element OR operator (Numpy ufunc) see note LOGICOPS
bitand(ab) a amp b bitwise AND operator (Python native and Numpy ufunc)
bitor(ab) a | b bitwise OR operator (Python native and Numpy ufunc)
inv(a) linalginv(a) inverse of square matrix a
pinv(a) linalgpinv(a) pseudo-inverse of matrix a
rank(a) linalgmatrix_rank(a) rank of a matrix a
ab linalgsolve(ab) if a is square
linalglstsq(ab) otherwise solution of a x = b for x
ba Solve aT xT = bT instead solution of x a = b for x
[USV]=svd(a) U S Vh = linalgsvd(a) V = VhT singular value decomposition of a
chol(a) linalgcholesky(a)T
cholesky factorization of a matrix (chol(a) in matlab returns an upper triangular matrix but linalgcholesky(a) returns a lower triangular matrix)
[VD]=eig(a) DV = linalgeig(a) eigenvalues and eigenvectors of a
[VD]=eig(ab) VD = Scilinalgeig(ab) eigenvalues and eigenvectors of ab
[VD]=eigs(ak) find the k largest eigenvalues and eigenvectors of a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
96
MATLAB numpyarray numpymatrix notes
[QRP]=qr(a0) QR = Scilinalgqr(a) mat() QR decomposition
[LUP]=lu(a) LU = Scilinalglu(a) or LUP=Scilinalglu_factor(a)
mat() LU decomposition
conjgrad Scilinalgcg mat() Conjugate gradients solver
fft(a) fft(a) mat() Fourier transform of a
ifft(a) ifft(a) mat() inverse Fourier transform of a
sort(a) sort(a) or asort() mat() sort the matrix
[bI] = sortrows(ai) I = argsort(a[i]) b=a[I] sort the rows of the matrix
regress(yX) linalglstsq(Xy) multilinear regression
decimate(x q) Scisignalresample(x len(x)q) downsample with low-pass filtering
unique(a) unique(a)
squeeze(a) asqueeze()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
97
9 BIBLIOGRAFIacuteA
DOWNEY A ELKNER J MEYERS C Aprenda a Pensar Como un Programador con Python GARCIacuteA-ASENJO VILLAMAYOR L HERNAacuteNDEZ LOacutePEZ D Geodesia Febrero 2005 GONZAacuteLEZ DUQUE R Python PARA TODOS Edicioacuten Internet bajo licencia Creative Commons Reconocimiento 25 Espantildea Descargable en httpmundogeeknettutorial-python MARZAL A GRACIA I Introduccioacuten a la programacioacuten con Python Departamento de Lenguajes y Sistemas Informaacuteticos Universitat Jaume I 2003 Edicioacuten Internet NUMPY COMMUNITY NumPy Reference Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg NUMPY COMMUNITY NumPy User Guide Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg VAN ROSSUM G Guiacutea de aprendizaje de PythonRelease 241ordf0 Edicioacuten Intenet Septiembre 2005 Descargable en httpwwwscipyorg VAN ROSSUM G El tutorial de Python Edicioacuten Intenet Descargable en httppythonorgarpyarTutorial
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
98
10 PAacuteGINAS WEB CONSULTADAS httpenfoquevirtualwordpresscomcategorytutorial httpgeektheplanetnet1347how-to-instalar-pydev-en-aptanaxhtml httpmundogeeknetarchivos20080328python-modulos-y-paquetes httpwwwthebitsourcecomprogramming-software-developmentpythonpython-application-development-aptana-pydev httpwwwyoutubecomwatchv=XtnfY2cBbMA youtube interesante trabajo con pydev y modulos httpcodingderkeilercomArchivePythoncomplangpython2005-08msg03511html paacutegina que explica coacutemo solucionar los problemas de Non-ASCII character httpeswikibooksorgwikiInmersiC3B3n_en_PythonSu_primer_programa_en_PythonDocumentado_de_funciones paacutegina que explica la cadena de documentacioacuten despueacutes de definir una funcioacuten con ldquordquordquo___rdquordquordquo (triples comillas) httpwwwpythonorgdevpepspep-0008 style guide for python code httpmundogeeknetarchivos20080707documentacion-en-python habla de la forma de documentar en python httpwwwpythonorgdevpepspep-0257 documentacioacuten y comentarios httpprogramandoideascomcomentarios-en-python documentacioacuten y comentarios httpwwwyoutubecomwatchv=v0sqRYuL5e8 tutorial de python con aptana httpwwwyoutubecomwatchv=29mq1Bn52GYampfeature=related youtube tutorial httpprojectsscipyorgnumpybrowsertrunknumpymatlibpyrev=8567 paacutegina que habla un poco de matrices
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
99
httpwwwgfceduco~arsranguias42p8guia42html cosas interesantes de matrices httpdocencia-euptunizaresctmedrascipy_tutorialscipy_tutorialhtml varios sobre python httpdocspythonorgtutorialmoduleshtml muy buena de paquetes etc httpwwwlinux-ittcom200804python-mdulos-y-paqueteshtml maacutes sobre paquetes httpwwwmclibreorgconsultarpythonotrosin03_idlehtmlccedil coding cp1252 httpwwwmclibreorgconsultarpython tutorial de python en la web Idle httpbioinfcomavupvescourseslinuxpythonmoduloshtml csv listasetc httpwwwdavidricardocommxp=1173 ok muy bueno importacioacuten csv como matriz httpwwwaprenderpythonorg httpwwwscipyorgNumpy_Example_List_With_Doc paacutegina muy importante de scipy httpjsbsanblogspotcom201101calculo-de-un-area-de-un-poligonohtml video sobre caacutelculo de areas de poliacutegonos irregulares httpmathesaurussourceforgenetmatlab-numpyhtml viprelacioacuten entre operaciones con octave y con python httpwwwscipyorgTentative_NumPy_Tutorial pagina importante de scipy httptecnologicumwordpresscomastronomiavideo-tutoriales-de-python todos los videotutoriales de python httpwwwyoutubecomwatchv=Oj3MZXWXGiUampfeature=related csv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
100
httptranslategoogleestranslatehl=esamplangpair=en7Cesampu=httpwwwscipyorgNumPy_for_Matlab_Users interesante sobre numpyhellip httpwikipythonorgmoinHowToSorting interesante de sort httpwikipythonorgmoinHowToSortingOperator_Module_Functions sort itemgetteretc httpcodeactivestatecomrecipes304440-sorting-dictionaries-by-value-in-python-24 operator itemgetter httpmundogeeknetarchivos20080402python-entrada-salida-ficheros entrada salida de archivos httpwwwgulicorgalmacenhttlaclwpchap11htm formato de escritura textos nuacutemeros y decimales httpwwwprogramacioncomarticuloguia_de_aprendizaje_de_python_657 formatos de salida httpnumpysourceforgenetnumdocHTMLnumdochtmpgfId-57315 muy importante sobre arraysetc httpwwwhjcbnlpythonArrayshtml muy importante sobre arraysetc httpwwwalecjacobsoncomweblogp=1570 cargar un txt como una matriz en python httpdocsscipyorgdocnumpyreferencegeneratednumpygenfromtxthtml getfromtxt de numpy httpwwwalegsaonlinecomart13php httpwwwumesdocenciabarzanaIAGPIagp3html httpwebusales~dhernandsoftwarehtmGeotop httpmailpythonorgpipermailtutor2008-March060886html From future import division
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
101
httpwwwyoutubecomwatchv=I6GMIQBD6EU youtube diccionarios httpmundogeeknetarchivos20080121python-tipos-basicos-ii-colecciones diccionarios httpstaffnotiaces~rcardeneshgdiveintopython3-esnative-datatypeshtml diccionarios httpwwwestrellateyardeorgdiscovermanual-python-lo-mas-basico diccionarios httpeswikibooksorgwikiInmersiC3B3n_en_PythonTipos_de_datos_nativosPresentaciC3B3n_de_los_diccionarios diccionarios httpdocspythonorgartutorialdatastructureshtmldiccionarios python estructura de diccionarios httpwwwwikilearningcomtutorialintroduccion_informal_a_matlab_y_octave-matrices_y_algebra_lineal_i19256-8 concatenar matrices httpwwwslidesharenetsantiagosilascomputao-cientfica-com-numpy-e-scipy-7797060 detalles de numpy vectores matricesetc httpwwwscipyorgNumPy_for_Matlab_Usershead-e9a492daa18afcd86e84e07cd2824a9b1b651935 muy importante de scipy arrays y matriceshellip httpdocsscipyorgdocnumpyreferencegeneratednumpyconcatenatehtml muy importante de scipy arrays y matriceshellip httppyspanishdocsourceforgenettut traduccioacuten del tutorial de Guido httpwwwscipyorgNumpy_Example_List_With_Dochead-5202db3259f69441c695ab0efc0cdf45341829fc httppyspanishdocsourceforgenetlibmodule-picklehtml funcioacuten pickle
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
102
httpnicocesarcomq=node23 carga de ficheros binarios httpstaffnotiaces~rcardeneshgdiveintopython3-esfileshtml apertura cierre carga de ficheros etc httppythonr2wordpresscom20080829leer-archivos-binarios-en-python lectura de ficheros binarios httpwwwignesignlayoutInherramientasdo descarga de ficheros regilla del IGN httpterrasitgvaeseskbtransformacion-coordenadas-utm-ed50-utm-etrs89-utilizando-libreria-proj4 paacutegina de la gva sobre cambio de sistema y fichero rejilla httpdocspythonorglibrarystructhtml moacutedulo struct de python para lectura de ficheros binarios httpwwwslidesharenetjpadillaaprogramacion-orientada-a-objetos-en-python programacioacuten orientada a objetos con python httppyspanishdocsourceforgenettutnode7html recorrer diccionarios httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 interesante aplicacioacuten fichero rejilla ntv2 en python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
3
1 OBJETIVOS DEL TRABAJO Dentro del marco general de la guiacutea docente del Maacutester en Geotecnoloacutegias Cartograacuteficas en Ingenieriacutea y Arquitectura impartido por la Escuela Politeacutecnica Superior de Aacutevila de la Universidad de Salamanca se establece como requisito para la obtencioacuten de esta titulacioacuten la realizacioacuten de un proyecto final de maacutester A tal fin responde el presente trabajo en el que se ha optado por la realizacioacuten de un proyecto de desarrollo de herramientas en Python para caacutelculos geodeacutesicos y topograacuteficos Como Ingeniero Teacutecnico en Topografiacutea numerosas han sido las necesidades de disponer de herramientas informaacuteticas para los distintos caacutelculos necesarios desde la etapa de estudiante en la Universidad como una vez incurso en la vida laboral Desde el simple caacutelculo de un acimut y distancia entre dos puntos medidas de superficies encerradas en poliacutegonos irregulares datos de replanteo de puntos caacutelculo de previsioacuten de errores o las diferentes transformaciones de coordenadas de grandes cantidades de puntos entre unas proyecciones y otras y entre distintos Sistemas de Referencia Coordenados Partiendo de esta necesidad y de la existencia de la libreriacutea ldquoGeotoprdquo en Octave del Profesor y Co-tutor de este proyecto Dr D David Hernaacutendez Loacutepez se han elaborado una serie de herramientas en Python para caacutelculos geodeacutesicos y topograacuteficos en Python principalmente migrando del lenguaje Octave a lenguaje Python Ademaacutes del uso para caacutelculos topograacuteficos en aacutembitos del uso diario de ingenieros Teacutecnicos en Topografiacutea o cualquier Ingenieriacutea afiacuten esta libreriacutea tambieacuten se concibe como una herramienta de uso para el estudiante de estas disciplinas en las Universidades Al tratarse de software libre es perfectamente editable y adaptable a las necesidades de caacutelculo y presentacioacuten que se consideren oportunas La eleccioacuten de Python aunque posteriormente se desarrolle maacutes se debe a que se trata de un lenguaje de programacioacuten faacutecil de aprender y potente Tiene eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de plataformas El inteacuterprete de Python y la extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables y se pueden distribuir libremente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
4
2 CONTEXTO DEL PROYECTO Dentro de los objetivos de este proyecto se encuentra el aprendizaje y desarrollo de herramientas con software libre y tambieacuten la eleccioacuten de Python al tratarse de un lenguaje de programacioacuten que aunque parece novedoso esta encontrando gran aceptacioacuten en entornos docentes y tambieacuten en el desarrollo de programacioacuten en la empresa privada
21 iquestPOR QUEacute SOFTWARE LIBRE Muchiacutesimos gobiernos de todo el mundo estaacuten empezando a ver al software libre como una poderosa herramienta para disminuir sus costos de administracioacuten reducir la dependencia tecnoloacutegica y fomentar sus industrias locales de software Las razones principales que impulsan la migracioacuten de los sistemas de informacioacuten de las administraciones puacuteblicas al software libre son
Ahorro econoacutemico El bajo o nulo coste de los productos libres permiten a las PYMES servicios y ampliar sus infraestructuras sin que se vean mermados sus intentos de crecimiento por no poder hacer frente al pago de cantidades en licencias
Independencia tecnoloacutegica mayor transparencia aumento de la interoperabilidad permite auditar el coacutedigo fuente etc El secretismo tenoloacutegico es uno de los grandes frenos y desequilibrios existentes para el desarrollo en el modelo de propiedad intelectual
Fomenta el desarrollo local y la industria nacional de software La praacutectica totalidad de los concursos para desarrollo de software para la administracioacuten puacuteblica pasan por compatibilizar con productos de la factoriacutea de Microsoft por lo que garantiza la perpetuacioacuten e ingresos hacia Microsoft y no favorece a las empresas locales que pudieran ofrecer productos equivalentes Ademaacutes de la reduccioacuten de costes por uso de software libre iquestqueacute podriacutean aportar esas inversiones si los beneficiados fuesen empresas del propio estado en lugar de mandar a una compantildeiacutea extranjera esas enormes cantidades de dinero
Facilita la adaptacioacuten a las necesidades concretas de las administraciones en materia linguumliacutestica legislativa de accesibilidad e imagen
El conocimiento generado es puacuteblico Fomento de la libre competencia al basarse en servicios y no licencias
Uno de los modelos de negocio que genera el software libre es la contratacioacuten de servicios de atencioacuten al cliente Este sistema permite que las compantildeiacuteas que den el servicio compitan en igualdad de condiciones a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
5
no poseer la propiedad del producto del cual dan el servicio
Tratamiento seguro de los datos y la informacioacuten Formatos estaacutendar Los formatos estaacutendar permiten una
interoperatividad maacutes alta entre sistemas evitando incompatibilidades Los estaacutendares de facto son vaacutelidos en ocasiones para lograr una alta interoperatividad si se omite el hecho que estos exigen el pago de royalities a terceros y por razones de mercado no interesa que se perpetuacuteen mucho tiempo
Sistemas sin puertas traseras y maacutes seguros El acceso al coacutedigo fuente permite que tanto hackers como empresas de seguridad de todo el mundo puedan auditar los programas por lo que la existencia de puertas traseras es iloacutegica ya que se pondriacutea en evidencia y contraviene el intereacutes de la comunidad que es la que lo genera
Correccioacuten maacutes raacutepida y eficiente de fallos El funcionamiento e intereacutes conjunto de la comunidad ha demostrado solucionar maacutes raacutepidamente los fallos de seguridad en el software libre algo que desgraciadamente en el software propietario es maacutes difiacutecil y costoso
Meacutetodos simples y unificados de gestioacuten de software Actualmente la mayoriacutea de distribuciones de linux incorporan alguno de los sistemas que unifican el meacutetodo de instalacioacuten de programas libreriacuteas etc Por parte de los usuarios Asiacute se permite el acceso a las miles de aplicaciones existentes de forma segura y gratuita a la par que evitan tener que recurrir a paacuteginas web de dudosa eacutetica desde las que los usuarios instalan sin saberlo spyware o virus informaacuteticos en sus sistemas Este sistema de acceso y gestioacuten del software se hace praacutecticamente utoacutepico si se extrapola al mercado propietario
Sistema en expansioacuten El software libre ya no es una promesa es una realidad y se utiliza en sitemas de produccioacuten por algunas de las empresas tecnoloacutegicas maacutes importantes como IBM Sun Microsystems Google Hewlett-Packard etc Paradoacutejicamente incluso Microsoft que posee sus propias herramientas emplea GNU Linux en muchos de sus servidores
Entre los paiacuteses maacutes adeptos al software libre sus desarrollos y alcance de sus
proyectos de migracioacuten se encuentran de la siguiente manera ALEMANIA Alemania es el paiacutes con mayor uso del software libre del mundo No
soacutelo estaacute presente en todas sus dependencias gubernamentales y universidades sino que tiene programas multimillonarios para el desarrollo de aplicaciones libres En 2009 destinoacute maacutes de 500 millones de Euros al proyecto ldquoOpen Source and Green ITrdquo El software libre es tan importante para los alemanes que incluso el 59 de sus empresas lo utiliza el argumento maacutes utilizado no es la reduccioacuten de costos sino la posibilidad de poder modificar el coacutedigo fuente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
6
BRASIL Fue el primer paiacutes en migrar masivamente sus sistemas de informacioacuten a alternativas open source Se llevoacute a cabo en primera instancia en el estado de Riacuteo Grande luego se realizoacute a escala nacional
ARGENTINA Existen varias iniciativas estatales que apuntan a fomentar el desarrollo de software libre Actualmente el software libre estaacute implementado en algunas provincias siendo Santa Fe el maacuteximo exponente de utilizacioacuten doacutende todo el software ha sido liberado bajo licencia GPL
FRANCIA La Asamblea Nacional utiliza software libre en todos sus sistemas y terminales de trabajo Francia viene tomando impulso en el desarrollo de software open source existen iniciativas para que el 20 del software contratado por la Administracioacuten Puacuteblica sea libre para el 2012 tambieacuten ofrece beneficios fiscales para las agrupaciones de usuarios y desarrolladores de SL
ESPANtildeA Espantildea se ha apostado como uno de los mayores impulsores mundiales del uso de software libre Actualmente existen 200 empresas proveedoras de soluciones 100 comunidades de usuarios y 180 centros educativos donde el software de coacutedigo abierto es una realidad cotidiana Muchos ayuntamientos y universidades ya se pasaron a sistemas open source
A principios de 2010 se presentoacute un proyecto liderado por la Plataforma Tecnoloacutegica Espantildeola de Software y Servicios con el apoyo del Plan Avanza Dicho plan pretende colocar a Espantildea a la par del resto de Europa en el disentildeo y uso de software libre de confianza y calidad similares a los comerciales Este proyecto llamado Vulcano trata de unificar el trabajo de distintas universidades centros tecnoloacutegicos y empresas que hasta el momento habiacutean dedicado sus esfuerzos al aacutembito de la educacioacuten
En un entrevista ofrecida por David Saacutenchez Director de Comunicacioacuten y Relaciones Instituciones en CENATIC que es el Centro Nacional de Referencia de Aplicacioacuten de las Tecnologiacuteas de la informacioacuten y la Comunicacioacuten basadas en Fuentes Abiertas podemos encontrar httpwwwmuylinuxcom20110407entrevistamos-a-david-sanchez-de-cenatic
CENATIC es una Fundacioacuten Puacuteblica Estatal del gobierno de Espantildea promovida por el Ministerio de Industria Turismo y Comercio y la Junta de Extremadura que ademaacutes cuenta en su patronato con las comunidades autoacutenomas de Andaluciacutea Aragoacuten Asturias Cantabria Cataluntildea Islas Balares Paiacutes Vasco y Galicia asiacute como las empresas Atos Origin Telefoacutenica y Grupo Aacutepex
Su trabajo es promover el conocimiento y uso del software libre en todos los aacutembitos de la sociedad con especial atencioacuten en las administraciones puacuteblicas las empresas el sector tecnoloacutegico proveedor o usuario de tecnologiacuteas libres y las comunidades de desarrollo a traveacutes de proyectos especiacuteficos para cada uno de estos sectores
ldquo La apuesta a del Administracioacuten del Estado por el software libre se inicioacute ya en los 90 cuando el entonces ministerio para las Administraciones Puacuteblicas llevoacute a cabo la primera gran migracioacuten a software libre de 1375 servidores Llegaron tambieacuten proyectos como el del Principado de Asturias para generar de forma colaborativa un
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
7
marco basado en software libre que permitioacute crear cluacutester de empresas locales capaces de aportar servicios de eAdministracion que de otra manera tendriacutean que haber contratado fuera de su comunidadrdquo
ldquo O el proyecto de gvSIG de la Conselleriacutea d‟Infrestructures i Transport de la Generalitat Valenciana un sistema de informacioacuten geograacutefico que cuenta con un tejido empresarial local alrededor del proyecto y estaacuten haciendo de la Comunidad Valenciana el nuacutecleo maacutes activo a nivel mundial de desarrollo GIS en entornos libres Tambieacuten es muy conocido el proyecto de Red Tecnoloacutegica Educativa de la Junta de Extremadura con Linex como primera distribucioacuten regional y concepto pionero adoptado ya por 7 comunidades autoacutenomasrdquo ldquoFinalmente a nivel de administracioacuten local hasta el 80 de los grandes ayuntamientos cuentan hoy en diacutea con proyectos de software libre siendo quizaacute el maacutes destacado el del Ayuntamiento de Zaragozardquo
22 LENGUAJES DE PROGRAMACIOacuteN Un lenguaje de programacioacuten es un lenguaje artificial que puede ser usado para controlar el comportamiento de una maacutequina especialmente una computadora Estos se componen de un conjunto de reglas sintaacutecticas y semaacutenticas que permiten expresar instrucciones que luego seraacuten interpretadas Debe distinguirse de ldquolenguaje informaacuteticordquo que es una definicioacuten maacutes amplia puesto que estos incluyen otros lenguajes como son el HTML o PDF que dan formato a un texto y no es programacioacuten en siacute misma El programador es el encargado de utilizar un lenguaje de programacioacuten para crear un conjunto de instrucciones que al final constituiraacute un programa o subprograma informaacutetico En su uso un lenguaje de programacioacuten puede acercarse a la forma humana de expresarse y por eso este tipo de lenguajes es llamado de alto nivel Esto significa que utilizan palabras y formas en sus estructuras que se asemejan al lenguaje natural (especialmente al ingleacutes) En cambio aquellos lenguajes que se aproximan maacutes a la forma en la cual la computadora se maneja son llamados lenguajes de bajo nivel Esto significa que lo que el programador deba escribir se acercaraacute al lenguaje maacutequina que es en definitiva lo que las computadoras pueden interpretar De todas maneras un lenguaje de programacioacuten difiere en muchos aspectos de un lenguaje humano Un coacutedigo escrito en un lenguaje de programacioacuten especiacutefico siempre se interpreta de la misma manera (no como los idiomas humanos ambiguos) los errores son mucho maacutes significativos (a tal punto de que un coacutedigo puede volverse ininterpretable por la computadora) etc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
8
El coacutedigo fuente es el conjunto de instrucciones que conforman un programa (o subprograma o moacutedulo) El coacutedigo fuente debe ser compilado para poder ser interpretado y ejecutado por la computadora La compilacioacuten traduce el coacutedigo fuente (que depende del lenguaje de programacioacuten) a un lenguaje maacutequina (que depende del sistema de la maacutequina) Existen lenguajes del tipo script que son directamente ejecutados por un inteacuterprete y no necesitan compilacioacuten Los lenguajes de programacioacuten pueden clasificarse empleando distintos meacutetodos y puntos de vista Esta clasificacioacuten se basa en el paradigma que utilizan Se debe aclarar que existen muchos maacutes paradigmas y subparadigmas de programacioacuten no incluidos dentro de los mencionados Ademaacutes todaviacutea hay conflictos en las definiciones y alcances de ciertos paradigmas
23 PARADIGMAS DE PROGRAMACIOacuteN Un paradigma de programacioacuten provee (y determina) la visioacuten y meacutetodos de un programador en la construccioacuten de un programa o subprograma Diferentes paradigmas resultan en diferentes estilos de programacioacuten y en diferentes formas de pensar la solucioacuten de problemas (con la solucioacuten de muacuteltiples ldquoproblemasrdquo se construye una aplicacioacuten) Los lenguajes de programacioacuten son basados en uno o maacutes paradigmas (Veacutease Programacioacuten en muacuteltiples paradigmas) Por ejemplo Smalltalk y Java son lenguajes basados en el paradigma orientado a objetos El lenguaje de programacioacuten Scheme en cambio soporta soacutelo programacioacuten funcional En cambio Python soporta muacuteltiples paradigmas Clasificacioacuten por paradigmas de programacioacuten Paradigma Imperativo describe la programacioacuten como una secuencia instrucciones o comandos que cambian el estado de un programa El coacutedigo maacutequina en general estaacute basado en el paradigma imperativo Su contrario es el paradigma declarativo En este paradigma se incluye el paradigma procedimental (procedural) entre otros Paradigma Declarativo No se basa en el coacutemo se hace algo (coacutemo se logra un objetivo paso a paso) sino que describe (declara) coacutemo es algo En otras palabras se enfoca en describir las propiedades de la solucioacuten buscada dejando indeterminado el algoritmo (conjunto de instrucciones) usado para encontrar esa solucioacuten Es maacutes complicado de implementar que el paradigma imperativo tiene desventajas en la eficiencia pero ventajas en la solucioacuten de determinados problemas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
9
Paradigma Estructurado la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Ademaacutes la programacioacuten se controla con secuencia seleccioacuten e iteracioacuten Permite reutilizar coacutedigo programado y otorga una mejor compresioacuten de la programacioacuten Es contrario al paradigma inestructurado de poco uso que no tiene ninguna estructura es simplemente un ldquobloquerdquo como por ejemplo los archivos batch (bat) Paradigma Orientado a Objetos estaacute basado en la idea de encapsular estado y operaciones en objetos En general la programacioacuten se resuelve comunicando dichos objetos a traveacutes de mensajes (programacioacuten orientada a mensajes) Se puede incluir -aunque no formalmente- dentro de este paradigma el paradigma basado en objetos que ademaacutes posee herencia y subtipos entre objetos Ej Simula Smalltalk C++ Java Visual Basic NET etc Su principal ventaja es la reutilizacioacuten de coacutedigos y su facilidad para pensar soluciones a determinados problemas Paradigma Funcional este paradigma concibe a la computacioacuten como la evaluacioacuten de funciones matemaacuteticas y evita declarar y cambiar datos En otras palabras hace hincapieacute en la aplicacioacuten de las funciones y composicioacuten entre ellas maacutes que en los cambios de estados y la ejecucioacuten secuencial de comandos (como lo hace el paradigma procedimental) Permite resolver ciertos problemas de forma elegante y los lenguajes puramente funcionales evitan los efectos secundarios comunes en otro tipo de programaciones Paradigma loacutegico se basa en la definicioacuten de reglas loacutegicas para luego a traveacutes de un motor de inferencias loacutegicas responder preguntas planteadas al sistema y asiacute resolver los problemas Ej prolog Otros paradigmas y subparadigmas son paradigma orientado al sujeto paradigma heuriacutestico paradigma reflectante programacioacuten basada en reglas paradigma basado en restricciones programacioacuten basada en prototipos etc
24 iquestPOR QUEacute PYTHON
241 Caracteriacutesticas de Python
Python es un lenguaje de programacioacuten de tipo script creado por Guido van Rossum a principios de los antildeos 90 cuyo nombre proviene del grupo ldquoMonty Pythonrdquo El objetivo es un lenguaje con una sintaxis muy limpia y con un coacutedigo legible Python es un lenguaje de programacioacuten multiparadigma Esto significa que maacutes que forzar a los programadores a adoptar un estilo particular de programacioacuten permite varios estilos programacioacuten orientada a objetos programacioacuten imperativa funcional estructurada
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
10
etc Otros paradigmas estaacuten soportados mediante el uso de extensiones Los lenguajes de script (lenguajes interpretados de muy alto nivel como Perl y Python) gozan de creciente importancia e implantacioacuten en el mundo del software libre Python es un lenguaje de programacioacuten faacutecil de aprender y potente Dispone de eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos simple pero eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de las plataformas En Python no hay terminadores de sentencia (como el punto y como de CC++Java) ni marcas de iniciofin de bloque (como las llaves de esos mismos lenguajes) La indentacioacuten como forma de marcar bloques elimina errores propios de los lenguajes citados y que son frecuentes en los estudiantes y tambieacuten en los programadores profesionales sentencias condicionales sin accioacuten por antildeadir un punto y coma incorrectos bucles con una sola sentencia cuando parece que hay dos o maacutes (por omisioacuten de llaves con un sangrado inadecuado del programa) sentencias con semaacutentica ldquoalteradardquo por usar una coma cuando corresponde un punto y coma o por omitir un punto y coma al declarar un registro antes de una funcioacuten etc La indentacioacuten soacutelo resulta molesta cuando el tamantildeo de un bloque de cierta profundidad excede del tamantildeo de la ventana del editor Python es un lenguaje interpretado Los lenguajes interpretados permiten ciclos de desarrollo breves (edicioacuten y ejecucioacuten) que animan a los estudiantes a experimentar Python dispone de un entorno de ejecucioacuten que ayuda a detectar los errores (incluyendo aquellos que soacutelo se manifiestan en ejecucioacuten) sentildealaacutendolos con mensajes muy informativos Python ofrece ademaacutes un entorno interactivo con el que es posible efectuar pequentildeas pruebas o disentildear incrementalmente las soluciones a los problemas La contrapartida de que se trate de un lenguaje interpretado es obviamente la menor velocidad de ejecucioacuten Python puede considerarse pseudocoacutedigo ejecutable Es muy expresivo y su sintaxis sencilla interfiere poco en la implementacioacuten de algoritmos asiacute que resulta un buen sustituto del pseudocoacutedigo con la ventaja de que los algoritmos codificados en Python siacute son ejecutables Python ofrece un rico conjunto de estructuras de datos flexibles El tipo lista de python (un vector dinaacutemico heterogeacuteneo) permite introducir con naturalidad el concepto de secuencia y presentar los algoritmos baacutesicos de manejo de secuencias Que la indexacioacuten empiece siempre en 0 ayuda a dar el salto a C C++ o Java El entorno de ejecucioacuten proporciona comprobacioacuten de validez de los iacutendices eliminando asiacute una de las principales fuentes de problemas de C y C++ El hecho de que las listas sean
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
11
redimensionables elimina al programador la necesidad de tomar decisiones acerca de la longitud maacutexima de los vectores demasiado pronto Por otra parte Python es un lenguaje muy ortogonal una vez se ha aprendido a manejar listas por ejemplo se sabe manejar cadenas ya que ambos tipos son secuenciales y presentan conjuntos de operadores con igual nombre y semaacutentica Ademaacutes de listas y cadenas Python ofrece tuplas (listas inmutables) y diccionarios (vectores asociativos) Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc No es que haya que presentar todos los moacutedulos pero sirve para ayudar a consultar la documentacioacuten de las bibliotecas disponibles favorece la programacioacuten eficiente
Python es orientado a objetos A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulos en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar al de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
El inteacuterprete de Python y su extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables para las plataformas maacutes importantes en la sede web de Python httppythonorg y se pueden distribuir libremente La misma sede contiene tambieacuten distribuciones y direcciones de muchos moacutedulos programas y herramientas Python de terceras partes ademaacutes de documentacioacuten adicional Es faacutecil ampliar el inteacuterprete de Python con nuevas funciones y tipos de datos implementados en C o C++ (u otros lenguajes a los que se pueda acceder desde C) Python es tambieacuten adecuado como lenguaje de extensioacuten para aplicaciones adaptables al usuario Algunas de las empresas que usan Python son Google Yahoo Industrial Light amp Magic Walt Disney NASA SGI Inc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
12
3 INSTRUMENTACIOacuteN Y SOFTWARE EMPLEADOS PHYTON
31 INTRODUCCIOacuteN A PYTHON Como se comentoacute en el punto anterior Python
es orientado a objetos (realmente es multiparadigma aceptando distintos tipos de paradigmas) A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulo en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar a l de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc
Entre estas bibliotecas cabe mencionar Numpy Numpy es un moacutedulo de Python escrito en C que define los vectores numeacutericos las matrices y las operaciones entre ellos Ademaacutes de las funciones sobre vectores y matrices tambieacuten incluye funciones trigonomeacutetricas del tipo sin cos tan etc Numpy es el paquete fundamental necesario para programacioacuten cientiacutefica con Python Contiene entre otras cosa
Un poderoso N-dimensional objeto vector Sofisticadas funciones Herramientas para integracioacuten con coacutedigo de C C++ y Fortram Uacutetiles de algebra lineal Transformada de Fourier y capacidades de
nuacutemeros aleatorios Ademaacutes de sus usos cientiacuteficos obvios NumPy tambieacuten se puede utilizar como un eficiente multi-dimensional contenedor de datos geneacutericos Pueden ser definidos tipos arbitrarios de datos Esto permite integrar a la perfeccioacuten y raacutepidamente con una amplia variedad de bases de datos El objeto principal de Numpy es el vector homogeacuteneo multidimensional Eacuteste es una tabla de elementos (generalmente nuacutemeros) todos del mismo tipo indexados por una tupla de enteros positivos Por ldquomultidimensionalrdquo entendemos que los vectores pueden tener varias dimensiones de ejes El nuacutemero de ejes se llamaraacuten a menudo ldquorangordquo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
13
Por ejemplo las coordenadas de un punto en el espacio 3D seriacutea [1 2 1] que
representariacutea un vector de rango 1 de longitud 3 Otro ejemplo seriacutea
[[ 1 0 0]
[ 0 1 2]]
que representa un array de rango 2 (2 dimensiones) Para maacutes informacioacuten mirar
Numpy Glossary
Otras libreriacuteas importantes en Python son Scipy es otra libreriacutea que usa Numpy El desarrollo de Scipy comenzoacute en el antildeo 2001 Sus oriacutegenes se remontan al paquete con extensiones numeacutericas para Python denominado Numeric Posteriormente aparecioacute Numarray con la intencioacuten de construir un paquete maacutes flexible y de limpiar el coacutedigo aunque resultoacute ser maacutes lengo para caacutelculos matriciales en pocas dimensiones En el antildeo 2005 el principal impulsor de Scipy Travis Oliphant reunificoacute ambos en un uacutenico paquete que integrse las ventajas de ambos y se denominoacute Numpy considerado el nuacutecleo de Scipy Scipy en siacute mismo se concibe actualmente como una extensioacuten de las funcionalidades de Numpy
Scipy posee moacutedulos para optimizacioacuten de funciones integracioacuten funciones especiales resolucioacuten de ecuaciones diferenciales ordinarias y otros muchos aspectos
Puede ser usado con Linux Windows y ha sido tambieacuten compilado para Sun y Mac
Scipy es un proyecto de software libre que ha sido patrocinado por una compantildeiacutea Enthought inc
Su organizacioacuten se estructura en subpaquetes que se pueden considerar especializados en dominios cientiacuteficos determinados Podemos encontrar estos paquetes seguacuten la ayuda de scipy (v046)
stats -- Statistical Functions sparse -- Sparse matrix lib -- Python wrappers to external libraries linalg -- Linear algebra routines signal -- Signal Processing Tools misc -- Various utilities that dont have another home interpolate -- Interpolation Tools [] optimize -- Optimization Tools [] cluster -- Vector Quantization Kmeans [] fftpack -- Discrete Fourier Transform algorithms []
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
14
io -- Data input and output [] maxentropy -- Routines for fitting maximum entropy models [] integrate -- Integration routines [] liblapack -- Wrappers to LAPACK library [] special -- Special Functions [] libblas -- Wrappers to BLAS library []
Matplotlib es una libreriacutea de Python que facilita la publicacioacuten de calidad de la publicacioacuten interactiva Permite obtener graacuteficas de calidad para publicaciones Su principal submoacutedulo para dibujar es pyplot Mayavi Ipython PIL (Python Imaging Library) Pythonxy EPD (Enthought python distribution $$) hellip Este texto como Memoria de un Proyecto Final de Maacutester no pretende ser ni mucho menos un manual de Python pero siacute son necesarios unos conocimientos previos primero para comprender la filosofiacutea del programador y posteriormente saber las utilidades que podemos obtener al trabajar con Python Para ello vamos a incluir algunos detalles incluidos entro de la Guiacutea de aprendizaje de Python por Guido Van Rossum v24 creador de Python Para la realizacioacuten de este documento se ha consultado como aparece en Bibliografiacutea y Referencias en la Web numerosa documentacioacuten pero como punto de partida parece loacutegico recoger la documentacioacuten de la Guiacutea de aprendizaje del propio creador de Python Python contiene una serie de palabras clave dependientes de la versioacuten de instalacioacuten para asegurarnos de las palabras clave de la versioacuten descargada podemos introducir el siguiente coacutedigo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
15
Palabras clave de Python De la misma manera Python trae consigo ciertas funciones que vienen de serie esto es no es necesario cargarlas desde ninguacuten moacutedulo Dichas funciones dependen de la versioacuten de Python instalada En la paacutegina httpdocspythonorglibraryfunctionshtml Nos encontramos con dicha relacioacuten A modo de resumen eacutestas son (ver paacutegina siguiente)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
16
Funciones internas de Python
311 Guiacutea de aprendizaje de Python por Guido Van Rossum v24
Extractos del documento Si en alguna ocasioacuten hemos escrito un guioacuten para un inteacuterprete de oacuterdenes (o shell script) de UNIX largo puede que hayamos sentido que nos encantariacutea antildeadir una caracteriacutestica maacutes pero ya es tan lento tan grande tan complicadohellip O la caracteriacutestica involucra una llamada al sistema u otra funcioacuten accesible soacutelo desde C El problema en siacute no suele ser tan complejo como para transformar el guioacuten en un programa en C Igual el programa requiere cadenas de longitud variable u otros tipos de datos (como listas ordenadas de nombres de fichero) faacuteciles en sh pero tediosas en C o quizaacute no tengamos tanta soltura con C Otra situacioacuten Quizaacute tengas que trabajar con bibliotecas de C diversas y el ciclo normal en C de escribir-compilar-probar-recompilar es demasiado lento Necesitas desarrollar software con maacutes velocidad Posiblemente has escrito un programa al que vendriacutea bien un lenguaje de extensioacuten y no quieres disentildear un lenguaje escribir y depurar el inteacuterprete y adosarlo a la aplicacioacuten En tales casos Python puede ser el lenguaje que necesitas Python es simple pero es un lenguaje de programacioacuten real Ofrece maacutes apoyo e infraestructura para programas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
17
grandes que el inteacuterprete de oacuterdenes Por otra parte tambieacuten ofrece mucho maacutes comprobacioacuten de errores que C y al ser un lenguaje de muy alto nivel tiene incluidos tipos de datos de alto nivel como matrices flexibles y diccionarios que llevariacutean diacuteas de programacioacuten en C Dados sus tipos de datos maacutes generales se puede aplicar a un rango de problemas maacutes amplio que Awk o incluso Perl pero muchas cosas son al menos igual de faacuteciles en Python que en esos lenguajes Python te permite dividir su programa en moacutedulos reutilizables desde otros programas en Python Viene con una gran coleccioacuten de moacutedulos estaacutendar que puedes utilizar como base de tus programas (o como ejemplos para empezar a aprender Python) Tambieacuten hay moacutedulos incluidos que proporcionan ES de ficheros llamadas al sistema ldquosocketsrdquo y hasta interfaces graacuteficas con el usuario como Tk Python es un lenguaje interpretado lo que ahorra un tiempo considerable en el desarrollo del programa pues no es necesario compilar ni enlazar El inteacuterprete se puede utilizar de modo interacivo lo que facilita experimentar con caracteriacutesticas del lenguaje escribir programas desechables o probar funciones durante el desarrrollo del prgram de la base hacia arriba Tambieacuten es una calculadora muy uacutetil Python permite escribir programas muy compactos y legibles Los programas escritos en Python son normalmente mucho maacutes cortos que sus equivalentes en C o C++ por varios motivos
Los tipos de datos de alto nivel permiten expresar operaciones complejas en una sola sentencia
El agrupamiento de sentencias se realiza mediante sangrado (indentacioacuten) en lugar de beginend o llaves
No es necesario declarar los argumentos ni las variables
Python es ampliable si ya sabes programar en C es faacutecil antildeadir una nueva funcioacuten o moacutedulo al inteacuterprete para realizar operaciones criacuteticas a la maacutexima velocidad o para enlazar programas en Python con bibliotecas que soacutelo estaacuten disponibles en forma binaria (como bibliotecas de graacuteficos especiacuteficas del fabricante) Una vez enganchado puedes enlazar el inteacuterprete de Python a una aplicacioacuten escrita en C y utilizarlo como lenguaje de macros para dicha aplicacioacuten
3111 Llamar al inteacuterprete
En UNIX el inteacuterprete de Python se suele instalar como bdquousrlocalbinpython‟ en aquellas maacutequinas donde esteacute disponible En Windows se instala en el directorio bdquoArchivos de programa‟ o en cualquier otro directorio seleccionado Poner este directorio en la ruta de ejecutables hace posible arrancarlo tecleando en el inteacuterprete de oacuterdenes la orden
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
18
Python
Como la eleccioacuten del directorio donde reside el inteacuterprete es una opcioacuten de instalacioacuten es posible que se halle en otros lugares Consulta con tu guru de Python local o tu administrador de sistemas (por ejemplo bdquousrlocalpython‟ es una alternativa recuente) Teclear un caraacutecter fin de fichero (Control-D en UNIX Control-Z en DOS o Windows) en el inteacuterprete causa la salida del inteacuterprete con un estado cero Si eso no funciona se puede salir del inteacuterprete tecleando las siguientes oacuterdenes bdquoimport sys sysexit()‟ Las opciones de edicioacuten de la liacutenea de oacuterdenes no son muy destacables En UNIX es posible que quien instalara el inteacuterprete en su sistema incluyera soporte para la biblioteca de GNU bdquoreadline‟ que permite una edicioacuten de liacutenea maacutes elaborada y la recuperacioacuten de oacuterdenes anteriores El modo maacutes raacutepido de ver si hay soporte de edicioacuten de liacuteneas es teclear Control-P en cuanto aparece el inteacuterprete Si pita la edicioacuten de liacuteneas estaacute disponible Si no sale nada o sale ^P no estaacute disponible la edicioacuten de liacuteneas y soacutelo se puede utilizar la tecla de borrado para borrar el uacuteltimo caraacutecter tecleado El inteacuterprete funciona como el inteacuterprete de oacuterdenes de UNIX cuando se lo llama con la entrada estaacutendar conectada a un dispositivo tty lee y ejecuta las oacuterdenes interactivamente cuando se le da un nombre de fichero como argumento o se le da un fichero como entrada estaacutendar lee y ejecuta un guion desde ese fichero Otro modo de arrancar el inteacuterprete es bdquopython -c orden [argumento] ‟ que ejecuta las sentencias de orden de forma anaacuteloga a la opcioacuten -c de la liacutenea de oacuterdenes Como las sentencias de Python suelen contener espacios u otros caracteres que la liacutenea de oacuterdenes considera especiales lo mejor es encerrar orden entre dobles comillas por completo
Imagen de la pantalla al abrir Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
19
Hay moacutedulos de Python que son uacutetiles como programas independientes Se los puede llamar mediante ldquopython-m moacutedulo[arg] helliprdquo que ejecuta el fichero de coacutedigo fuente de module como si se hubiera dado el nombre completo en la liacutenea de oacuterdenes Cuando se leen oacuterdenes desde una tty se dice que el inteacuterprete estaacute en modo interacitov En este modo espera a la siguiente orden con el indicador principal que suele ser tras signos ldquomayorrdquo (ldquogtgtgtrdquo) Para las liacuteneas adicionales se utiliza el indicador secundario por omisioacuten tres puntos (ldquohelliprdquo)
Programar en Python puede hacerse de varias maneras seguacuten la necesidad o el gusto de cada persona Para los neoacutefitos mi recomendacioacuten es que utilicen el ambiente graacutefico interactivo llamado IDLE Esta herramienta viene incluiacuteda con el moacutedulo tkinter Ademaacutes de resaltar la sintaxis en colores permite editar archivos fuente y es maacutes amigable al inicio
El IDLE tiene dos ambientes el shell interactivo con tiacutetulo Python Shell en su ventana muestra el prompt gtgtgt y espera un comando y uno o maacutes editores que se abren con el menuacute File --gt New Window Cada editor empieza con el tiacutetulo Untitled en su ventana el cual cambia hasta que se salva a un archivo con File --gt Save As (y subsecuentemente File --gt Save) Cada editor nos permite ejecutar el coacutedigo Python que contiene
Se recomienda crear una carpeta para realizar y guardar los ejemplos Para correr idle cambiar primero a esa carpeta y entonces correr idle En MS- Windows
Cejemplosgt Cpython22idleidle
En Linux
[usuariopc ejemplos]$ idle amp La primera vez que hacemos un ejemplo hemos de intentar hacerlo paso a paso en forma interactiva en el shell tecleando cada comando Es la forma en que aprendemos maacutes que si simplemente copiamos y pegamos Una vez que tecleamos y funcionan las cosas podemos copiar del shell interactivo y pegamos a una ventana de editor y salvamos en un archivo con terminacioacuten py para que conservemos lo que hicimos para siempre
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
20
Imagen del Shell interactivo de IDLE
Acceso a nueva ventana dentro del Shell interactivo de IDLE
Nueva ventana del editor de IDLE Una vez que partiendo de una ventana vacia tenemos nuestro coacutedigo hemos de seleccionar FileSave As para guardar el archivo y tenerlo disponible
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
21
Ventana del editor de IDLE con coacutedigo preparado para guardar
Una vez que nos hemos asegurado de que tenemos el coacutedigo guardado iquestcoacutemo hacemos para ejecutar el programa La respuesta es seleccionando Run Module En caso de seleccionar Run Module antes de guardar el coacutedigo Python nos pide que lo guardemos anteshellip Al seleccionar Run Module Python iraacute interpretando liacutenea por liacutenea y mostrando los resultados a traveacutes del Inteacuterprete Si existiese alguacuten error de sintaxis se avisa del tipo de error y doacutende se produce Una vez corregido el problema se vuelve a intentar el Run Module
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
22
El tener un inteacuterprete permite ir probando partes de programas sobre las que no se estaacute seguro y ver coacutemo reaccionan para poder decidir si se incluyen o no y coacutemo se pueden adaptar Asiacute se estaacute continuamente alternando entre el inteacuterprete y el programa Maacutes informacioacuten en httpdocspythonorglibraryidlehtml
3112 Moacutedulos
Si salimos del inteacuterprete de Python y vuelves a entrar las definiciones que se hayan hecho (funciones y variables) se pierden Por ello si se quiere escribir un programa algo maacutes largo seraacute mejor que se utilice un editor de texto para preparar la entrada del inteacuterprete y ejecutarlo con ese fichero como entrada Esto se llama crear un guioacuten Seguacuten vayan creciendo los programas puede que quieras dividirlos en varios ficheros para facilitar el mantenimiento Puede que tambieacuten quieras utilizar una funcioacuten que has escrito en varios programas sin tener que copiar su definicioacuten en cada programa Para lograr esto Python tiene un modo de poner definiciones en un fichero y utilizarlas en un guioacuten o en una instancia interactiva del inteacuterprete Tal fichero se llama moacutedulo las definiciones de un moacutedulo se pueden importar a otros moacutedulos o al moacutedulo principal (la coleccioacuten de variables accesible desde un guioacuten ejecutado desde el nivel superior y en el modo de calculadora) Un moacutedulo es un fichero que contiene definiciones y sentencias de Python El nombre del fichero es el nombre del moacutedulo con el sufijo ldquopyrdquo Dentro de un moacutedulo el nombre del moacutedulo (como cadena) es accesible mediante la variable global __name__ Un moacutedulo puede contener sentencias ejecutables ademaacutes de definiciones de funciones Estas sentencias sirven para inicializar el moacutedulo Soacutelo se ejecutan la primera vez que se importa el moacutedulo en alguna parte1 Cada moacutedulo tiene su propia tabla de siacutembolos que utilizan todas las funciones definidas por el moacutedulo como tabla de siacutembolos global Por ello el autor de un moacutedulo puede utilizar variables globales dentro del moacutedulo sin preocuparse por conflictos con las variables globales de un usuario del moacutedulo Por otra parte si sabes lo que haces puedes tocar las variables globales de un moacutedulo con la misma notacioacuten utilizada para referirse a sus funciones nombreModnombreElem Los moacutedulos pueden importar otros moacutedulos Es una costumbre no obligatoria colocar todas las sentencias ldquoimportrdquo al principio del moacutedulo (o guioacuten) Los nombres del moacutedulo importado se colocan en la tabla de siacutembolos global del moacutedulo (o guioacuten) que lo importa Existe una variacioacuten de la sentencia import que importa los nombres de un moacutedulo directamente a la tabla de siacutembolos del moacutedulo que lo importa Por ejemplo
gtgtgt from fibo import fib fib2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
23
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto no introduce el nombre del moacutedulo del que se toman los elementos importados en la tabla de siacutembolos local (por lo que en el ejemplo no estaacute definido fibo) Ademaacutes existe una variacioacuten que importa todos los nombres que define un moacutedulo gtgtgt from fibo import
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto importa todos los nombres excepto los que empiezan por un guioacuten bajo (_)
3113 El camino de buacutesqueda de moacutedulos
Cuando se importa un moacutedulo denominado fiambre el inteacuterprete busca un fichero denominado bdquofiambrepy‟ en el directorio actual y luego en la lista de directorios especificada por la variable de entorno PYTHONPATH Tiene la misma sintaxis que la variable de liacutenea de oacuterdenes PATH de UNIX que es una lista de nombres de directorios Cuando PYTHONPATH no tiene ninguacuten valor o no se encuentra el fichero se continuacutea la buacutesqueda en un camino dependiente de la instalacioacuten En UNIX normalmente es bdquousrlocallibpython‟ En realidad se buscan los moacutedulos en la lista de directorios dada por la variable syspath que se inicializa desde el directorio que contiene el guioacuten de entrada (o el directorio actual) PYTHONPATH y el valor por omisioacuten dependiente de la instalacioacuten Esto permite que los programas que saben lo que hacen modifiquen o reemplacen el camino de buacutesqueda de moacutedulos Obseacutervese que como el directorio que contiene el guioacuten bajo ejecucioacuten estaacute en el camino de buacutesqueda de moacutedulos es importante que el moacutedulo no tenga el mismo nombre que un moacutedulo estaacutendar o Python lo intentaraacute cargar el guioacuten como moacutedulo cuando se importe el moacutedulo Normalmente esto provocaraacute errores
3114 Ficheros Python ldquoCompiladosrdquo
Como mejora considerable del tiempo de arranque de programas cortos que utilizan muchos moacutedulos estaacutendar si existe un fichero llamado bdquofiambrepyc‟ en el directorio donde se encuentra bdquofiambrepy‟ se supone que contiene una versioacuten previamente ldquocompilada a byterdquo del moacutedulo fiambre La fecha y hora de la versioacuten de bdquofiambrepy‟
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
24
utilizada para generar bdquofiambrepyc‟ se graba en bdquofiambrepyc‟ y no se considera el fichero bdquopyc‟ si no concuerdan Normalmente no hay que hacer nada para generar el fichero bdquofiambrepyc‟ Siempre que bdquofiambrepy‟ se compile sin errores se hace un intento de escribir la versioacuten compilada a bdquofiambrepyc‟ No se provoca un error si falla el intento Si por cualquier motivo no se escribe completamente el fichero el fichero bdquofiambrepyc‟ resultante seraacute reconocido como no vaacutelido y posteriormente ignorado El contenido del fichero bdquofiambrepyc‟ es independiente de la plataforma por lo que se puede compartir un directorio de moacutedulos entre maacutequinas de diferentes arquitecturas
3115 Moacutedulos estandar
Python viene con una biblioteca de moacutedulos estaacutendar descrita en un documento aparte la Referencia de las bibliotecas Algunos moacutedulos son internos al inteacuterprete y proporcionan acceso a las operaciones que no son parte del nuacutecleo del lenguaje pero se han incluido por eficiencia o para proporcionar acceso a primitivas del sistema operativo como las llamadas al sistema El conjunto de dichos moacutedulos es una opcioacuten de configuracioacuten que tambieacuten depende de la plataforma subyacente Por ejemplo el moacutedulo amoeba soacutelo se proporciona en sistemas que de alguacuten modo tienen acceso a primitivas Amoeba Hay un moacutedulo en particular que merece una especial atencioacuten el moacutedulo sys que es siempre interno en cualquier inteacuterprete de Python Estas variables soacutelo estaacuten definidas si el inteacuterprete estaacute en modo interactivo La variable syspath es una lista de cadenas que determina el camino de buacutesqueda de moacutedulos del inteacuterprete Se inicializa a un valor por omisioacuten tomado de la variable de entorno PYTHONPATH o de un valor por omisioacuten interno si PYTHONPATH no tiene valor Se puede modificar mediante operaciones de lista estaacutendar por ejemplo gtgtgt import sys gtgtgt syspathappend(‟ufsguidolibpython‟)
3116 Paquetes
Los paquetes son un meacutetodo de estructurar el espacio nominal de moacutedulos de Python mediante el uso de ldquonombres de moacutedulos con puntordquo Por ejemplo el nombre de moacutedulo AB hace referencia a un submoacutedulo denominado ldquoBrdquo de un paquete denominado ldquoArdquo Del mismo modo que el uso de moacutedulos evita que los autores de diferentes moacutedulos tengan que preocuparse de los nombres de variables globales de los otros la utilizacioacuten de nombres de moacutedulo con puntos evita que los autores de paquetes multi-moacutedulo como Numpy o Pil (Biblioteca de tratamiento de imagen de
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
25
python) tengan que preocuparse de los nombres de los moacutedulos ajenos Supoacuten que deseas disentildear una coleccioacuten de moacutedulos (un paquete) para tratar de manera uniforme ficheros de sonido y datos de sonido Existen muchos formatos de fichero de sonido (que se suelen distinguir por la extensioacuten como bdquowav‟ bdquoaiff‟ o bdquoau‟) por lo que podriacuteas necesitar crear y mantener una coleccioacuten creciente de moacutedulos de conversioacuten entre los diferentes formatos Tambieacuten existen muchas operaciones posibles sobre los datos de sonido (tales como mezclar antildeadir eco ecualizar o generar un efecto artificial de estereofoniacutea) por lo que ademaacutes estariacuteas escribiendo una serie de moacutedulos interminable para realizar estas operaciones He aquiacute una posible estructura de tu paquete (expresado en teacuterminos de sistema de ficheros jeraacuterquico)
Sonido Paquete de nivel superior __init__py Inicializa el paquete de sonido
Formatos Subpaquete de conversiones de formato de ficheros __init__py leerwavpy escriwavpy leeraiffpy escriaiffpy leeraupy escriaupy Efectos Subpaquete de efectos de sonido __init__py ecopy surroundpy inversopy Filtros Subpaquete de filtros __init__py ecualizadorpy vocoderpy karaokepy
Modelo de estructura paquetemoacutedulo Al importar el paquete Python rastrea los directorios de syspath buscando por el subdirectorio de paquetes Los ficheros bdquo__init__py‟ son necesarios para que Python trate los directorios como contenedores de paquetes Se hace asiacute para evitar que los directorios con nombres
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
26
comunes como bdquotest‟ oculten accidentalmente moacutedulos vaacutelidos que aparezcan maacutes tarde dentro del camino de buacutesqueda En el caso maacutes sencillo bdquo__init__py‟ puede ser un fichero vaciacuteo pero tambieacuten puede ejecutar coacutedigo de inicializacioacuten del paquete o actualizar la variable __all__ descrita posteriormente Los usuarios del paquete pueden importar moacutedulos individuales del paquete por ejemplo import SonidoEfectoseco
De este modo se carga el submoacutedulo SonidoEfectoseco Hay que hacer referencia a eacutel por su nombre completo SonidoEfectosecofiltroeco(entrada salida retardo=07
aten=4)
Un modo alternativo de importar el submoacutedulo es from SonidoEfectos import eco
Asiacute tambieacuten se carga el submoacutedulo eco y se hace disponible sin su prefijo de paquete por lo que se puede utilizar del siguiente modo ecofiltroeco(entrada salida retardo=07 aten=4)
Y otra variacioacuten es importar la funcioacuten o variable deseada directamente from SonidoEfectoseco import filtroeco
De nuevo se carga el submoacutedulo eco pero se hace la funcioacuten filtroeco disponible directamente filtroeco(entrada salida retardo=07 aten=4)
Observa que al utilizar from paquete import elemento el elemento puede ser tanto un submoacutedulo (o subpaquete) del paquete como cualquier otro nombre definido por el paquete como una funcioacuten clase o variable La sentencia import comprueba primero si el elemento estaacute definido en el paquete Si no asume que es un moacutedulo e intenta cargarlo Si no lo consigue se provoca una excepcioacuten ImportError Sin embargo cuando se utiliza la sintaxis
importelementosubelementosubsubelemento cada elemento menos el
uacuteltimo debe ser un paquete El uacuteltimo elemento puede ser un moacutedulo o un paquete
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
27
pero no una clase funcioacuten o variable definida en el nivel superior
3117 Importar de un paquete
Y iquestqueacute ocurre cuando el usuario escribe from SonidoEfectos import En teoriacutea deberiacutea rastrearse el sistema para encontrar queacute submoacutedulos existen en el paquete e importarlos todos Por desgracia esta operacioacuten no funciona muy bien en las plataformas Windows y Mac en las que el sistema de ficheros no tiene una idea muy precisa de las mayuacutesculas de un fichero En estas plataformas no hay un modo garantizado de conocer si un fichero bdquoECOPY‟ deberiacutea ser importado como eco Eco o ECO (por ejemplo Windows 95 tiene la molesta costumbre de mostrar todos los nombres de fichero con la primera letra en mayuacutescula) La restriccioacuten de nombres de fichero DOS (8+3) antildeade otro problema para los nombres de moacutedulo largos La uacutenica solucioacuten es que el autor del paquete proporcione un iacutendice expliacutecito del paquete La sentencia import utiliza la siguiente convencioacuten Si el coacutedigo del bdquo__init__py‟ de un paquete define una lista llamada __all__ se considera que es la lista de nombres de moacutedulos que se deben importar cuando se encuentre from paquete import Depende del autor del paquete mantener la lista actualizada cuando se libere una nueva versioacuten del paquete Los autores del paquete pueden decidir no mantenerlo si no es uacutetil importar del paquete Por ejemplo el fichero bdquoSonidoEfectos__init__py‟ podriacutea contener el siguiente coacutedigo __all__ = [eco surround inverso] Esto significariacutea que from SonidoEfectos import importariacutea los tres submoacutedulos mencionados del paquete Sonido Si __all__ no estaacute definido la sentencia from SonidoEfectos import no importa todos los moacutedulos del subpaquete SonidoEfectos al espacio nominal actual Soacutelo se asegura de que el paquete SonidoEfectos ha sido importado (ejecutando posiblemente el coacutedigo de inicializacioacuten de bdquo__init__py‟) y luego importa cualesquiera nombres definidos en el paquete Esto incluye cualquier nombre definido (y submoacutedulos cargados expliacutecitamente) por bdquo__init__py‟ Tambieacuten incluye cualquier submoacutedulo del paquete expliacutecitamente importado por sentencias import anteriores Mira este coacutedigo import SonidoEfectoseco import SonidoEfectossurround from SonidoEfectos import En este ejemplo los moacutedulos eco y surround se importan al espacio nominal vigente porque estaacuten definidos en el paquete SonidoEfectos cuando se ejecuta la sentencia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
28
fromimport (esto tambieacuten funciona si estaacute definido __all__)
Observa que en general se debe evitar importar de un moacutedulo o paquete ya que suele dar como resultado coacutedigo poco legible Sin embargo se puede usar para evitar teclear en exceso en sesiones interactivas y cuando ciertos moacutedulos esteacuten disentildeados para exportar soacutelo nombres que cumplan ciertas reglas
Recuerda no hay nada incorrecto en utilizar from Paquete import
submoacutedulo_concreto De hecho es la notacioacuten recomendada salvo que el moacutedulo
que importa necesite usar submoacutedulos del mismo nombre de diferentes paquetes
3118 Referencias internas al paquete
Es comuacuten que los submoacutedulos necesiten hacerse referencias cruzadas Por ejemplo el moacutedulo surround podriacutea utilizar el moacutedulo eco De hecho tales referencias son tan comunes que la sentencia import busca antes en el paquete contenedor que en el camino de buacutesqueda de moacutedulos estaacutendar Por ello basta con que el moacutedulo surround use import eco o from eco import filtroeco Si el moacutedulo importado no se encuentra en el paquete actual (el paquete del que el moacutedulo actual es submoacutedulo) la sentencia import busca un moacutedulo de nivel superior con el nombre dado Cuando se estructuran los paquetes en subpaquetes (como el paquete Sonido del ejemplo) no hay un atajo para referirse a los submoacutedulos de los paquetes hermanos y se ha de utilizar el nombre completo del subpaquete Por ejemplo si el moacutedulo SonidoFiltrosvocoder necesita utilizar el moacutedulo eco del paquete SonidoEfectos debe utilizar from SonidoEfectos import eco
32 FUNCIONES INCLUIDAS EN NUMPY POR CATEGORIacuteAS (ARRAY CREATION)
A modo indicativo e introductorio se incluyen las funciones incluidas en la libreriacutea Numpy por categoriacuteas Ver maacutes informacioacuten en httpdocsscipyorgdocnumpy Numerical
arange() arrayrange()
linspace() logspace()
Ones and zeros
empty() empty_like()
eye() identity()
ones() ones_like()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
29
tri() tril() triu()
zeros() zeros_like()
From existing data
array() recarray()
asarray() asanyarray() asmatrix()
copy()
fromarrays() frombuffer() fromfile() fromfunction()
fromiter() loadtxt()
Building matrices
bmat()
diag() diagflat()
mat() matrix()
vander()
Reinterpreting arrays
view()
Types
astype()
cast[]()
int8() int16() int32() int64() int128()
uint8() uint16() uint32() uint64() uint128()
float16() float32() float64() float96() float128()
float256()
complex32() complex64() complex128() complex192()
complex256() complex512()
bool_()
object_()
void() str_() unicode_()
byte() ubyte()
short() ushort()
intc() uintc()
intp() uintp()
int_() uint()
longlong() ulonglong()
single() csingle()
float_() complex_()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
30
longfloat() clongfloat()
Kinds of array
asarray()
asanyarray()
asmatrix()
Changing the number of dimensions
atleast_1d() atleast_2d() atleast_3d()
broadcast()
expand_dims()
squeeze()
Transpose-like operations
rollaxis()
swapaxes()
T transpose()
Reshaping arrays
flat flatten()
ravel()
reshape() shape
Array modification
Joining arrays
append()
column_stack()
concatenate()
dstack() hstack() vstack()
Splitting arrays
array_split()
dsplit() hsplit() split() vsplit()
Enlarging arrays
tile()
repeat()
Adding and removing elements
delete()
insert()
resize()
trim_zeros()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
31
unique()
Rearranging elements
fliplr() flipud()
reshape()
roll()
rot90()
Indexing
[]
take()
put()
putmask()
Indexing syntax
slice()
newaxis
index_exp[]
Generating arrays suitable for indexing
c_[]
r_[]
s_[]
nonzero()
where()
indices()
ix_()
mgrid[]
ogrid()
Indexing-like operations
choose()
where()
compress()
diag() diagonal()
select()
Iterating
flat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
32
ndenumerate()
ndindex()
Logic
[]
all() any()
allclose()
alltrue()
nonzero()
piecewise()
sometrue()
Finding things
argmax() argmin()
searchsorted()
Array statistics
average() mean()
bincount() histogram()
corrcoef()
cov()
max() min() ptp()
median()
std() var()
ufuncs
abs() absolute()
add() multiply()
angle()
arccos() arcsin() arctan()
arccosh() arcsinh() arctanh()
arctan2()
bitwise_and() bitwise_or() bitwise_xor()
ceil() floor() round()
conj() conjugate()
cos() sin() tan()
cosh() sinh() tanh()
fix()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
33
hypot()
logical_and() logical_not() logical_or() logical_xor()
maximum() minimum()
ufunc methods
accumulate()
outer()
reduce()
Functional constructs
apply_along_axis()
apply_over_axis()
vectorize()
Random numbers
beta() binomial() gumbel() poisson() standard_normal()
uniform() vonmises() weibull()
bytes()
permutation()
rand() randint() randn()
random_integers()
random_sample()
ranf()
sample()
seed()
shuffle()
Array math
clip()
cross()
cumprod() cumsum()
diff()
digitize()
dot()
inner()
outer()
inv() pinv()
poly1d()
polyfit()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
34
prod() sum()
tensordot()
vdot()
FFT
fft()
fftfreq()
fftshift()
ifft()
Linear algebra
inv()
lstsq()
solve()
svd()
trace()
Array output
savetxt()
set_printoptions()
tofile()
tolist()
Other
sort() argsort()
binary_repr()
dtype()
fill()
finfo()
generic
imag real
inf nan
item()
lexsort()
ndim
shape
typeDict()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
35
Numpy Functions by Category (uacuteltima edicioacuten 2008-06-13 122659
efectuada por jh)
MoinMoin Powered
Pyt
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
36
4 METODOLOGIacuteA En este apartado se proporciona una descripcioacuten detallada de la metodologiacutea utilizada para el desarrollo e implementacioacuten de la biblioteca Utilizando un paradigma Estructurado de la programacioacuten que considera que la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Esto nos permite reutilizar coacutedigo programado y nos proporciona una mejor comprensioacuten de la programacioacuten En el uacuteltimo paquete de la libreriacutea tambieacuten se ha realizado una incursioacuten a la programacioacuten orientada a objetos con la declaracioacuten de algunas clases
41 ESTRUCTURA DE LA LIBRERIacuteA GEOTOPO En nuestro caso hemos partido del concepto de creacioacuten de una libreriacutea de funciones del aacutembito de la Topografiacutea y Geodesia Esta libreriacutea de Python se estructura como un paquete con el nombre de la libreriacutea ldquogeotopordquo que a su vez contiene 6 paquetes maacutes seguacuten tipologiacutea Asiacute tenemos
Imagen de los paquetes incluidos dentro del paquete (libreriacutea) geotopo
Por orden intuitivo desde el punto de vista de aplicacioacuten de las herramientas tenemos los siguientes paquetes
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
37
general que contiene funciones de tipo general y transversal al resto de herramientas
Moacutedulos implementados dentro de general
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
38
topografia que contiene aplicacioacuten topograacuteficas
Moacutedulos implementados dentro de topografia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
39
geodesia Aplicaciones geodeacutesicas
Moacutedulos implementados dentro de geodesia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
40
proy_cartograficas Herramientas de caacutelculos en diferentes proyeccionesetc
Moacutedulos implementados dentro de proy_cartograficas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
41
transformacioacuten Aplicaciones con modelo de rejilla del IGN y EGM08REDNAP
Moacutedulos implementados dentro de transformacioacuten
aplicaciones Distintos ejemplos de aplicabilidad de las funciones y clases implementadas en los moacutedulos de la libreriacutea
Cada uno de estos paquetes (carpetas) como se ha podido ver contiene a su vez varios moacutedulos y en cada uno de ellos y con su mismo nombre se define una uacutenica funcioacuten por moacutedulo salvo en la carpeta de transformcioacuten donde como se ha comentado antes nos adentramos dentro de la programacioacuten orientada a objetos y en algunos moacutedulos se implementan clases y dentro de estas funciones etc De esta manera al importar una funcioacuten la tenemos que importar desde el modulo que la contenga Dentro de cada carpeta se aprecia la existencia de un fichero llamado __init__py que convierte dicha carpeta en un paquete de Python Se advierte que desde el cierre de esta memoria versioacuten en papel a la entrega total de documentacioacuten puede haberse ampliado el nuacutemero de moacutedulos de la libreriacutea ldquogeotoprdquo que siacute se incluiriacutea en el CD con la implementacioacuten de coacutedigos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
42
42 DOCUMENTADO DE FUNCIONES Se puede documentar una funcioacuten en Python proporcionando una cadena de documentacioacuten (comentarios)
Las comillas triples implican una cadena multiliacutenea Todo lo que haya entre el principio y el final de las comillas es parte de una sola cadena incluyendo los retornos de carro y otras comillas Pueden usarse para definir cualquier cadena pero donde suelen estar maacutes presentes es haciendo de cadena de documentacioacuten Todo lo que hay entre las comillas triples es la cadena de documentacioacuten de la funcioacuten y se usa para explicar lo que hace la funcioacuten En caso de que exista una cadena de documentacioacuten debe ser la primera cosa definida en una funcioacuten (esto es lo primero tras los dos puntos) Teacutecnicamente no es necesario dotar a una funcioacuten de una cadena de documentacioacuten pero debemos de hacerlo siempre En Python esto tiene un incentivo antildeadido la cadena de documentacioacuten estaacute disponible en tiempo de ejecucioacuten como atributo de la funcioacuten
Lecturas complementarias sobre las funciones de documentacioacuten
PEP 257 define las convenciones al respecto de las cadenas de documentacioacuten La Guiacutea de estilo de Python indica la manera de escribir una buena cadena de
documentacioacuten El Tutorial de Python expone convenciones para el espaciado dentro de las
cadenas de documentacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
43
Ejemplo de documentado de funciones con cadena de documentacioacuten
Toda la informacioacuten incluida dentro de una cadena de documentacioacuten de triple comillas estaacute accesible en tiempo de ejecucioacuten Asiacute si pedimos ayuda de una funcioacuten nos aparece toda la informacioacuten incluida en dicha cadena de documentacioacuten
Ejemplo de consulta de la ayuda de las funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
44
En la siguiente web podemos encontrar maacutes informacioacuten sobre el documentado de funciones en Python httpcoderwarcom201106hola-python-la-utilidad-de-los-comentarios Ademaacutes de los comentarios de las funciones en Python como en otros lenguajes de programacioacuten podemos incluir liacuteneas o simples palabras de comentarios En Python se usa el siacutembolo para preceder los comentarios Podemos comentar las liacuteneas de nuestro trabajo
Comentar un grupo de liacuteneas
Determinar el tipo de codificacioacuten Esto es importante para poder usar caracteres especiales como la tilde o la ntilde Generalmente se coloca en la primera liacutenea del programa Existen muchas codificaciones
Poner cabecera a nuestro programa De esta forma identificaremos el nombre del programador la fecha en que se realizoacute y demaacutes datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
45
En el caso que nos atantildee de la libreriacutea geotopo hemos considerado introducir unos comentarios descriptivos de los moacutedulos mediante el caraacutecter y tras la definicioacuten de las funciones se incluyen unas cadenas de documentacioacuten
Ejemplo de la documentacioacuten de moacutedulos y funcioneshellip
Para evitar problemas de codificacioacuten como ha ocurrido durante la implementacioacuten del coacutedigo se han incluido al inicio del mismo dos liacuteneas para solucionar el problema Estas liacuteneas son
Comentarios de los moacutedulos
Cadena de documentacioacuten de funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
46
-- coding iso 8859-1 -
ISO 8859-1 es una norma de la ISO que define la codificacioacuten del alfabeto latino incluyendo diacriacuteticos como letras aceacutentuadas ntilde) y letras especiales necesarios para la escritura de las siguientes lenguas originarias de Europa occidental alemaacuten aragoneacutes asturiano castellano catalaacuten daneacutes escoceacutes espantildeol feroeacutes fineacutes franceacutes gaeacutelico gallego ingleacutes islandeacutes italiano neerlandeacutes noruego portugueacutes sueco y Euskera Tambieacuten conocida como Alfabeto Latino nordm 1 o ISO Latiacuten 1 Esta norma pertenece al grupo de juegos de caracteres de la ISO conocidos como ISOIEC 8859 que se caracterizan por poseer la codificacioacuten ASCII en su rango inicial (128 caracteres) y otros 128 caracteres para cada codificacioacuten con lo que en total utilizan 8 bits -- coding cp1252 -
Si trabajamos con IDLE con el uso de los acentos (en general con los caracteres no ASCII) nos daraacute error Si en el coacutedigo de un programa escribimos una cadena que contenga caracteres no ASCII(acentos ntildeiquestiexcl) al guardar el archivo por primera vez IDLE nos muestra el siguiente mensaje de aviso
Si pulsamos el botoacuten ldquoEdit my filerdquo Al principio del programa se insertaraacute la liacutenea siguiente
-- coding cp1252 --
Que indica el juego de caracteres utilizado en el archivo (cp1252 es el juego de caracteres de Windows para Europa occidental) A partir de entonces podemos guardar el archivo sin problemas Python no tiene una primera o uacuteltima linea exigida pero siacute que es habitual dar la localizacioacuten de Python como primera liacutenea en forma de comentario usrbinpython
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
47
43 FUNCIONES IMPLEMENTADAS A continuacioacuten se incluye una relacioacuten de las funciones implementadas por paquetes Ademaacutes de su nombre y un pequentildeo resumen de su aplicacioacuten se han incluido 3 apartados maacutes En verde Datos de entrada Indica los datos que necesita la funcioacuten Datos de salida Nos muestra si el resultado es uacutenico o una coleccioacuten de resultados (siempre en forma vector en el orden indicado) En rojo Llamadas o ldquoimportacioacutenrdquo de moacutedulos predefinidos del sistema ossys Llamadas a funciones de predefinidas del moacutedulo numpy En morado Llamadas a funciones definidas en esta libreriacutea (geotopo) bien incluidas en el mismo subpaquete que la propia funcioacuten definida o incluida en otro subpaquete De esta manera podemos tener una idea de las funciones implementadas los datos de partida necesarios y los resultados a obtener asiacute como la interrelacioacuten de cada funcioacuten con el resto de funciones de la libreriacutea geotopo Para el caso de cambio de proyeccioacuten o de Sistema de Referencia Coordenado se ha tomado la nomenclatura ldquodesderdquo ldquoardquo ldquoahorardquo Para sentildealar el ldquoardquo se ha elegido el nuacutemero 2 por su pronunciacioacuten to (a) Asiacute por ejemplo para el paso de latitud geodeacutesica a creciente en nombre de la funcioacuten seraacute lat2cre
431 Libreriacutea en Python ldquogeotopogeneralrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 areacor - Caacutelculo de la superficie interior de un poligono sobre el plano
entrada=(matriz) 2columnas xy salida=superficie
import ossys from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
48
busca2col - Localiza la primera fila con los valores recibidos en las dos columnas indicadas
Recibe Valor en la primera y segunda columnas posiciones de las columnas y matriz de busqueda
Devuelve Primera fila que cumple comenzando en 0 entrada=(valorcol1poscol1valorcol2poscol2matriz)
salida=orden de la primera fila que cumple comenzando en 0(oacute -1 si no existe) import ossys
from numpy import shape
busca - Localiza la primera ocurrencia de un nuacutemero en la primera columna de una matriz
entrada=(valormatriz)
salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscacol - Localiza la primera ocurrencia de un nuacutemero en la fila indicada de una matriz
entrada=(valormatriznfil) salida=posicioacuten nuacutemero de columna comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscafil - Localiza la primera ocurrencia de un nuacutemero en la columna indicada de una matriz
entrada=(valormatrizncol) salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
ordena - Ordena las filas de una matriz de menor a mayor seguacuten el contenido de la columna indicada
entrada=(colummatriz) salida=matriz de entrada ordenada
import ossys
from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
49
p_entera - Da la parte entera de un nuacutemero entrada=(nuacutemero) salida=parte entera del nuacutemero
import ossys from numpy import floor
perimetro - Calculo del perimetro de un poliacutegono sobre el plano a partir de las coord de sus veacutertices
entrada=(matriz ) 2columnas xy salida=periacutemetro
import ossys
from numpy import sqrtshape
psdo2rad - Cambio de formato de aacutengulos Pasa del conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex ) a radianes
entrada=(pseudesexa)
salida=radianes
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
rad2psdo - Cambio de formato de aacutengulos Pasa un angulo de radianes al conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex )
entrada=( radianes) salida= pseudesexa
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
50
432 Libreriacutea en Python ldquogeotopotopografiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 acimut - Caacutelculo del acimut entre dos puntos
entrada=(xiyixjyj)
salida=acimut en radianes
import ossys from numpy import arctan2pi
distancia ndash Caacutelculo de la distancia entre dos puntos del mismo
entrada=(xiyixjyj) salida=distancia (misma unidad que coordenadas de entrada
import ossys
from numpy import sqrt
edgcla ndash Caacutelculo del error de una distancia geomeacutetrica utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dgInstrnialtnl)
Dg=distancia geometrica Instr=Matriz de instrumentos
Ni=Altura de instrumento Altp=Altura de prisma
Nl=Nuacutemero de veces de medida de distancia
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edgclaprn ndash Calculo del error de una distancia geometrica utilizando la formulacion claacutesica de teoriacutea de errores Impresioacuten de resultados
entrada=(dgInstrnialtnlfsalida)
dg=distancia geometrica instr=Matriz de instrumentos
ni=Altura de instrumento altp=Altura de prisma
nl=Nuacutemero de veces de medida de distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
51
fsalida=Fichero de salidade datos
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edireh ndash Caacutelculo del error de la lectura horizontal realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(Instrnidisaltpnl)
salida=error de lectura horizontal en radianes
import ossys from numpy import sqrtpi
edirev ndash Caacutelculo del error de la lectura vertical realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(instrni nl) salida=error de lectura cenital en radianes en radianes
import ossys from numpy import sqrtpi
eincz ndash Caacutelculo del error de un desnivel trigonomeacutetrico utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dglvapedgelvInstrni) salida=xpypeplanisolzesolz
import ossys
from numpy import pisqrtcostan
intinv2 ndash Caacutelculo de la interseccioacuten inversa simple en el plano
entrada=(datosinstru)
salida= xpypangmin import ossys
from numpy import sincostanarctan2pizeros
from geotopogeneralordena import ordena
intinv2e ndash Caacutelculo de la interseccioacuten inversa simple en el plano Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru) salida= xpypeplani
import ossys from numpy import shapepisincostanarctan2dottransposezerossqrt
from geotopotopografiaedireh import edireh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
52
intinv3e ndash Caacutelculo de la interseccioacuten inversa 3D simple Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru)
salida= xpypeplanivzpvezp
import ossys from numpy import zerosshapesincos
from geotopotopografiaintinv2e import intinv2e from geotopotopografiadistancia import distancia
from geotopotopografiaedirev import edirev
from geotopotopografiaedgcla import edgcla from geotopotopografiaeincz import eincz
433 Libreriacutea en Python ldquogeotopogeodesiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 aut2lat - paso de latitud autaacutelica a geodeacutesica
entrada=(autnelipsoide) salida=lat
import ossys from numpy import sinarcsin
from geotopogeneralpsdo2rad import psdo2rad from geotopogeneralpsdo2rad import psdo2rad
calcpolo - caacutelculo del polo de la esfera a partir de tres puntos no alineados de la misma de forma que pasen a estar en un mismo paralelo tras realizarse el cambio de polo
entrada(lat1lon1lat2lon2lat3lon3) salida=[latnplonnpcolat]
import ossys from numpy import pisincosarccosarctanarctan2zeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
53
cla2enu - paso de un vector geodeacutesico expresado en componentes polares (observables claacutesicos) a componentes ENU entrada(azvdg)
salida=[ieiniu]
import ossys from numpy import sincoszeros
clhapv - lectura horizontal corregida por altitud del punto visado entrada=(lhzazlat1lat2h2nelipsoide) salida=lhz12c
import ossys
from numpy import sincospi from elipsoide import elipsoide
from radioem import radioem
clhsnlg - lectura horizontal corregida por paso de la seccioacuten normal a la liacutenea geodeacutesica entrada=(lhzs12az12lat1lat2nelipsoide)
salida=lhz12c import ossys
from numpy import sincospi
from elipsoide import elipsoide from radioem import radioem
cre2lat - paso de latitud creciente a geodeacutesica entrada=(crenelipsoide) salida=lat
import ossys
from numpy import sincostanarctanexppi from geotopogeneralpsdo2rad import psdo2rad
from elipsoide import elipsoide
efleutm - paso de la elipse de error de un punto del plano tangente al elipsoide al plano de la proyeccioacuten UTM
entrada=(latlonsemiaesemibeaziaenelipsoidehuso) salida=[semiasimibazia] import ossys from numpy import zerospi from geotopoproy_cartograficaskputm import kputm from geotopoproy_cartograficaskputmh import kputmh from geotopoproy_cartograficasconvutm import convutm from geotopoproy_cartograficasconvutmh import convutmh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
54
elip2esf - determinacioacuten de la esfera tangente al elipsoide en un paralelo indicado entrada=(nelipsoidelat)
salida=[afbe1e2]esfera
import ossys from numpy import zeros
from elipsoide import elipsoide from radiopv import radiopv
elipsoide - calculo los 5 paraacutemetros (afbe1 y 22) de los elipsoides ED50 GRS80 y WGS84 en funcioacuten de un coacutedigo 123 respectivamente entrada=(nelipsoide) 1 2 oacute 3 seguacuten ED50GRS80 oacute WGS84 respectivamente salida=[afbe1e2]
import ossys from numpy import sqrt zeros
enu2cla - paso de un vector geodeacutesico expresado en componentes ENU a componentes polares (observables claacutesicos) entrada=ieiniu salida=[azdgv]
import ossys
from numpy import zerosarcsenarctan2pisqrt
enu2xyz - paso de un vector geodeacutesico expresado en componentes ENU a componentes cartesianas tridimensionales entrada=(latlonieiniu)
salida=[ixiyiz] import ossys
from numpy import sincoszeros
eta_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del primer vertical entrada=(latlon)
salida= eta_ed50
import ossys from numpy import pisqrtcossintan
from elipsoide import elipsoide from radiopv import radiopv
from radioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
55
geo2tri - paso de coordenadas geodeacutesicas a cartesianas tridimensionales para un punto y elipsoide determinados entrada=(latlonhnelipsoide
salida=[XYZ]
import ossys from numpy import cossinzeros
from elipsoide import elipsoide from radiopv import radiopv
lam2lat - caacutelculo de la latitud geodeacutesica que le corresponde a una determinada longitud de arco de meridiano en el elipsoide indicado entrada=(lamnelipsoide salida=lat
import ossys from numpy import cossin
from elipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
lam - caacutelculo de la longitud de arco de meridiano a partir de la latitud geodeacutesica y del elipsoide entrada=(lamnelipsoide
salida=lam import ossys
from numpy import sin cos from elipsoide import elipsoide
lat2aut - paso de latitud geodeacutesica a autaacutelica entrada=(latnelipsoide)
salida=aut import ossys
from numpy import sinlog from elipsoide import elipsoide
lat2cre - paso de latitud geodeacutesica a creciente entrada=(latnelipsoide)
salide=cre import ossys
from numpy import sintanpilog
ond_ed50 - caacutelculo de la ondulacioacuten del geoide de un punto en Ed50 entrada =(latlon) salida=ondulacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
56
import ossys
from numpy import pisqrtcossintan
pdesfcr - problema directo en la esfera con el meacutetodo de cambio de base entrada=(lat1lon1saziresfera) salida=[latlon]
import ossys from numpy import cossintanarcsinarcosarctan2pizerostransposedot
pdg_dif1 - problema directo de la geodesia con la primera derivada entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2azi21] import ossys
from numpy import zerossincostanpi from radiopv import radiopv
from radioem import radioem
pdg_dif2 - problema directo de la geodesia con la primera y segunda derivada entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdg_dif3 - problema directo de la geodesia con la primera segunda y tercera derivada
entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdgrk4o - problema directo de la geodesia seguacuten meacutetodo de integracioacuten numeacuterica de Runge-Kutta de cuarto orden entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2
import ossys from numpy import zerossincostanpisqrt
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
57
from radioem import radioem
piesfcr - problema inverso en la esfera con el meacutetodo de cambio de base entrada=( lat1lon1lat2lon2resfera)
salida=[s12a12] import ossys
from numpy import cossintanarcsenarccosarctan2dotzerospi
pigbsl - problema inverso de la geodesia seguacuten el meacutetodo de Bessel entrada=( lat1lon1lat2lon2nelipsoide)
salida=[ s12a12a21]
import ossys from numpy import zerossincostanarcsinarctanarctan2arccossqrtpi
pigbslm - problema inverso de la geodesia seguacuten el meacutetodo de Bessel modificado por D David Henaacutendez Loacutepez
entrada=( lat1lon1lat2lon2nelipsoide) salida=[ s12a12a21]
import ossys from numpy import cossintanarcsinarcosarctanarctan2zerossqrtpi
from elipsoide import elipsoide
from radiopv import radiopv from piesfcr import piesfcr
from pdesfcr import pdesfcr
piloxo - problema inverso para la curva loxodroacutemica entrada=(lat1lon1lat2lon2nelipsoide)
salida=[dla12]
import ossys from numpy import arctan2coszerospi
from elipsoide import elipsoide from lat2cre import lat2cre
from radiopv import radiopv
from lam import lam
psi_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del meridiano entrada=(latlon) salida=psi_ed50
import ossys
from numpy import pisqrtcossintan from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
58
radioem - radio de curvatura de la elipse meridiana en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radioem
import ossys from numpy import sin
from elipsoide import elipsoide
radioeul - radio de la seccioacuten normal de un determinado acimut a partir del teorema de Euler entrada=(lataznelipsoide)
salida=radieul import ossys
from numpy import sincos from radioem import radioem
from radiopv import radiopv
radiopv - radio de curvatura del primer vertical en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radiopv
import ossys from numpy impor sqrtsin
from elipsoide import elipsoide
rdcae - reduccioacuten de la distancia de la cuerda al arco elipsoide entrada=( dcazlat1nelipsoide) salida=recae
impor ossys from numpy import sincosarcsen
from radioem import radioem from radiopv import radiopv
rdtce - reduccioacuten de la distancia del terreno a la cuerda elipsoide entrada=(dgazlat1h1h2nelipsoide)
salida=rdtce import ossys
from numpy import sincossqrt from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
59
tri2geo - paso de coordenadas cartesianas tridimensionales a geodeacutesicas en un punto y elipsoide determinados entrada=(XYZnelipsoide)
salida=[latlonh]
import ossys from numpy import cossintanarctanarctan2sqrtzeros
from elipsoide import elipsoide from radiopv import radiopv
xyz2clae - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a observables claacutesicos sobre el elipsoide y desnivel elipsoidal entrada=( X1Y1Z1DXDYDZnelipsoide) salida=[s12az12h12]
import ossys from numpy import zeros
from tri2geo import tri2geo
from pigbslm import pigbslm
xyz2clat - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes polares en el terreno entrada=( lat1lon1ixiyiz)
salida=[ dgaz12lv] import ossys
from numpy import zeros from xyz2enu import xyz2enu
from enu2cla import enu2cla
xyz2enu - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes ENU entrada=(latlonIXIYIZ)
salida=[ieiniu]
import ossys from numpy import sincoszeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
60
434 Libreriacutea en Python ldquogeotopoproy_cartograficasrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 calhuso - caacutelculo del huso correspondiente a un punto en la proyeccioacuten UTM a partir de su longitud geodeacutesica entrada=(lon)
salida=huso
import ossys from numpy import
cdel2geo - paso de un punto de la proyeccioacuten ciliacutendrica directa equivalente de Lambert al elipsoide
entrada=(XYLon0TXTYnelipsoide) salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaaut2lat import aut2lat
convestp - caacutelculo de la convergencia de meridianos de un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lonlon0)
salida=convest import ossys
convgk - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0nelipsoide)
salida=convgk
import ossys from numpy import sincostan
from geotopogeodesiaelipsoide import elipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
61
convlamb - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(lonlat0lon0)
salida=convlamb
import ossys from numpy import sin
convutm - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=convutm import ossys
from numpy import tancossinpi
from cahuso import calhuso from geotopogeodesiaelipsoide import elipsoide
convutmh - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso indicado entrada=(latlonnelipsoide)
salida=convutmh
import ossys from numpy import tancossinpi
from geotopogeodesiaelipsoide import elipsoide
dcdgputm - paso de la distancia cuerda en la proyeccioacuten UTM entre dos puntos a la correspondiente a la proyeccioacuten UTM de la liacutenea geoacutedesica que los une en el elipsoide entrada=(lat1lon1lat2lon2nelipsoide
salida=correccioacuten en metros import ossys
from numpy import cos from utm2geo import utm2geo
from geo2utmh import geo2utmh
from calhuso import calhuso from getopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
62
dcesfera - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general conforme en una esfera entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida=dc (reduccioacuten angular de la cuerda en radianes import ossys
from numpy import sincos from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
dcestp - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en la esfera al pasar a la proyeccioacuten estereograacutefica polar entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=dc(reduccioacuten angular de la cuerda en radianes)
import ossys from numpy import cossin
from kplamb import kplamb
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
from geotopogeodesiaradiopv import radiopv
dcgk - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general de Gauss-Kruumlger entrada=(lat1lon1lat2lon2lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos from geo2gk import geo2gk
from gk2geo import gk2geo
from geotopogeodesiaradioem import radioem from geotopogeodesiaradiopv import radiopv
from getopogeodesiaelipsoide import elipsoide
dclamb - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert entrada=(lat1lon1lat2lon2lat0pelipsoide
salida= dc(reduccioacuten angular de la cuerda en radianes)
import ossys
from numpy import sintancosexpzeros from geo2lamb import geo2lamb
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
63
from kdlamb import kdlamb
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
from geotopogeodesiaradiopv import radiopv
dclambf - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert con maacutes precisioacuten que la funcioacuten anterior entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos sin
from kplamb import kplamb from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o from geotopogeodesiaradiopv import radiopv
dcutm - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=( lat1lon1lat2lon2nelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaradioem import radioem
dcutmh - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso indicado entrada=( lat1lon1lat2lon2husonelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh
from utm2geo import utm2geo from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
64
dgpdcutm - paso de la distancia geodeacutesica proyectada en el plano UTM a la distancia correspondiente a la cuerda en esta proyeccioacuten para una geodeacutesica del elipsoide entrada=( lat1lon1lat2lon2snelipsoide)
salida=correccioacuten import ossys
from numpy import cos from geo2utmh import geo2utmh
from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut
esf2esfg - paso de un punto de una esfera a la esfera con cambio de polo Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo
entrada=(latlonlatplonp)
salida=[latlong]
import ossys from numpy import cossintanarcsenarctandotzerospi
from geotopogeodesiapiesfcr import piesfcr
esf2estp - paso de un punto de la esfera a las planas de la proyeccioacuten estereograacutefica polar entrada=(latlonlon0radiotxty)
salida=[xy] estp import ossys
from numpy import zerossincos
esfg2esf - paso de un punto de la esfera con cambio de polo a la esfera original Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo entrada=(latnlonnlatplonp
salida=[lat0lon0giro import ossys
from numpy import cossintanarcsenarctan2dotzerospitranspose from geotopogeodesiapiesfcr import piesfcr
esfc2lat - paso de latitud sobre la esfera a la correspondiente sobre el elipsoide seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
65
salida=lat
import ossys from numpy import sintanarctanpi
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiaelipsoide import elipsoide
estp2esf - paso de un punto de la proyeccioacuten estereograacutefica polar a la esfera entrada=(xylon0radiotxty)
salida=[xy] import ossys
from numpy import zerosarctan2arctansinpi
geo2cdel - paso de un punto del elipsoide a la proyeccioacuten ciliacutendrica directa equivalente de Lambert entrada=( latlonlon0txtynelipsoide)
salida=[XY] import ossys
from numpy import zeros
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialat2aut import lat2aut
geo2esto - paso de una nube de puntos del elipsoide a la proyeccioacuten estereograacutefica oblicua oacuteptima entrada=(latlonlat0lon0txtynelipsoide)
salida=[XY]
import ossys from numpy import
from lat2esc import lat2esc
from esf2esfg import esf2esfg from esf2estp import esf2estp
from geotopogeodesiaradiopv import radiopv
geo2gk - paso de un punto del elipsoide a la proyeccioacuten general de Gauss-Kruumlger entrada=( latlonlon0ptxtynelipsoide)
salida= [xy]gk import ossys
from numpy import costanpizeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesialam import lam
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
66
geo2lamb - paso de un punto del elipsoide a la proyeccioacuten general coacutenica conforme de Lambert entrada=( latlonlat0lon0ptxtynelipsoide)
salida=[xy]lambert
import ossys from numpy import sintancosexpzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
geo2merc - paso de un punto del elipsoide a la proyeccioacuten de Mercator entrada=( latlonlon0txtynelipsoide)
salida= [xy]mercator import ossys
from numpy import zeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialat2cre import lat2cre
geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
import ossys from numpy import zerostancospi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
geo2utmh - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=[XY] UTM
import ossys
from numpy import zerostancospi from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
gk2geo - paso de un punto de la proyeccioacuten general de Gauss-Kruumlger al elipsoide entrada=(XYlon0ptxtynelipsoide)
salida=[latlon]
import ossys
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
67
from numpy import zerostancospi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
kdesfera - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general conforme sobre una esfera Utiliza la integracioacuten numeacuterica de Simpson entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida= kdesfera import ossys
from kpesfera import kpesfera from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o
kdestp - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica de la esfera al proyectarla en la proyeccioacuten estereograacutefica polar Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0radiotxty)
salida=kdestp import ossys
from kpestp import kpestp from esf2estp import esf2estp
from estp2esf import estp2esf
kdgk - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general de Gauss-Kruumlger Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0pnelipsoide)
salida=kdgk import ossys
from geo2gk import geo2gk from gk2geo import gk2geo
from kpgk import kpgk
kdlamb - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica el elipsoide al proyectarla en la proyeccioacuten general coacutenica conforme de Lambert Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=kdlamb import ossys
from geolamb import geolamb from lamb2geo import lamb2geo
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
68
kdutm - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso del primer punto Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2nelipsoide)
salida=kdutm import ossys
from calhuso import calhuso from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kdutmh - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso indicado Utiliza la integracioacuten numeacuterica de Simpson
entrada= lat1lon1lat2lon2husohelipsoide) salida=kdutmh
import ossys from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kpesfera - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general conforme sobre una esfera entrada=( latlat0nelipsoide)
salida=kpesfera import ossys
from numpy import cossintanexp from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaelipsoide import elipsoide
kpestp - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lat)
salida=kpestp import ossys
from numpy import sin
kpgk - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0pnelipsoide)
salida=kpgk
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
69
import ossys
from numpy import sincostan from clahuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
kplamb - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(latlat0pnelipsoide)
salida=kplamb
import ossys from numpy import cossintanexp
from geotopogeodesialat2cre import lat2cre from geotopogeodesiaradiopv import radiopv
kputm - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=kputm
import ossys from numpy import tancossinpi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
kputmh - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=kputmh
import ossys
from numpy import sincostanpi from geotopogeodesiaelipsoide import elipsoide
lamb2geo - paso de un punto de la proyeccioacuten general coacutenica conforme de Lambert al elipsoide entrada=( xylat0lon0ptxtynelipsoide)
salida=[latlon] import ossys
from numpy import sintanarctanpilogsqrtzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
from geotopogeodesiacre2lat import cre2lat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
70
lat2esc - paso de la latitud geodeacutesica sobre el elipsoide a la correspondiente sobre la esfera seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide)
salida=latesfc
import ossys from numpy import sintanarctanpi
from geotopogeodesiaelipsoide import elipsoide
merc2geo - paso de un punto de la proyeccioacuten de Mercator al elipsoide entrada= (xylon0txtynelipsoide)
salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesiacre2lat import cre2lat
utm2geo - paso de un punto de la proyeccioacuten UTM al elipsoide entrada=(XYhusonelipsoide)
salida=[latlon] import ossys
from numpy import sqrtpitancossinzeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
435 Libreriacutea en Python ldquogeotopotransformacionrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 egm08rednap ndash fichero que almacena la clase Egm08rednap para el manejo de geoides en formato egm08rednap Define la funcioacuten getOndulation(selflatitudlongitud) Llama al fichero geoide que a su vez llama a los ficheros EGM08_REDNAP
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
71
entrada=(latitudlongitud)
salida=ondulacioacuten import ossys
from numpy import fromfile reshape from geoide import Geoide
geoide ndash fichero que almacena la clase Geoide para el manejo de geoides en formato egm08rednap La clase Geoide almacena ldquollamardquo a los geoides EGM08_REDNAP de la Peniacutensula o Baleares seguacuten corresponda Define las funciones getNoOndulacioacuten y getOndulacioacuten en funcioacuten de que encuentre las coordenadas de entrada dentro de los ficheros
entrada=(latitudlongitud) salida=ondulacioacuten
import ossys from numpy import fromfile reshapepifloorndarray
ntv2 ndash fichero que almacena la funcioacuten ntv2Espana Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(longitudlatitud) en deg en ED50 salida=(longitud latitud) en deg en ETRS89
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
ntv2_2 ndash fichero que almacena la funcioacuten ntv2Espana Adaptacioacuten del fichero anterior Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz) En la adatacioacuten realizada obtenemos soacutelo los diferenciales de caacutelculo de paso de ED50 a ETRS89 para tomarlo en el caacutelculo de la aproximacioacuten del sentido inverso entre ETRS89 a ED50 El paso de nodos del fichero utilizado es cada 200‟ lo que equivaldriacutea a 6000 m aproximadamente por lo que la aproximacioacuten seriacutea vaacutelida
entrada=(longitudlatitud) en deg en ETRS89 salida=(diflongitud diflatitud) en deg en ED50
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
72
sped2etpy ndash fichero rejilla del IGN Para transformacioacuten de coordenadas en los Sistemas de Referencia ED50 a ETRS89 Adaptado a Python y descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(fichero contenedor de informacioacuten) No entramos con ninguacuten valor
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
73
5 APLICABILIDAD DE LA LIBRERIacuteA Y CONCLUSIONES FINALES Finalmente hemos implementado los 5 subpaquetes de moacutedulos con funciones y clases incluidos en el paquete (libreriacutea) geotopo destinados a caacutelculos topograacuteficos y geodeacutesicos
Estructura final de la libreriacutea geotopo
Como puede verse en el paquete de geotopo se ha incluido un moacutedulo de aplicaciones en las que se han implementado unos ejercicios praacutecticos aplicando las distintas funciones de la libreriacutea Antes de entrar a describir los casos praacutecticos implementados hemos de decir que directamente podemos obtener resultados de cada una de las funiones Asiacute si queremos pasar de coordenadas geograacuteficas a coordenadas utm mirando en la descripcioacuten de las funciones tenemos geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
74
import ossys
from numpy import zerostancospi from calhuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
Pues bien una vez seleccionada la funcioacuten a utilizar abrimos el moacutedulo correspondiente con IDLE
Coacutedigo de la funcioacuten abierto con IDLE
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
75
Imagen de la ejecucioacuten de Run Module
Ejecutando Run Module Python abre el Python Shell En esta pantalla tenemos que introducir el nombre de la funcioacuten a usar geo2utm y entre pareacutentesis los valores que se especifican de entrada en la descripcioacuten de la funcioacuten entrada=(latlonnelipsoide)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
76
Llamada a la ejecucioacuten de la funcioacuten desde Python Shell
Como hemos indicado antes y por su relevancia y empleabilidad en otras funciones con ldquonelipsoiderdquo se entiende un coacutedigo del 1 al 3 que representa cada uno un elipsoides de referencia seguacuten los Sistemas de Referencia Coordenados en este caso 1=ED50 elipsoide Internacional Hayford 1924 2=ETRS89 elipsoide GRS80 y 3=WGS84
Al introducir los datos ejecutamos con Intro Obtenemos 2 valores en forma de vector que respresentan seguacuten la descripcioacuten de la funcioacuten salida=[XY] UTM
Podemos volver a caacutelcular las coordenadas UTM en el SCR ETRS89 (en caso de que lalitud y longitud vinieran dadas en el mismohellip) simplemente copiando la liacutenea de entrada pegaacutendola abajo y cambiando 1 por 2 como iacutendice del elipsoide y volviendo a ejecutar con enter
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
77
Dentro de Python Shell se puede copiar coacutedigo de liacuteneas anteriores y
pegar abajo Para caacutelculos maacutes complejos de mayor nuacutemero de puntos etc a modo de praacutectica se ha implementado el coacutedigo de distintos tipos de caacutelculo de ejemplo Distribuidos en 2 tipologiacuteas diferentes ldquotopografiardquo y ldquogeodesiardquo se han incluido coacutedigos para la resolucioacuten e impresioacuten de distintos tipos de problemas realizando ldquoimportrdquo de funciones declaradas en los moacutedulos de los distintos subpaquetes de geotopo
51 CASOS PRAacuteCTICOS TOPOGRAFIacuteA En total se han realizada 4 casos praacutecticos dentro del apartado de topografiacutea Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica topo_practica1 Del resto soacutelo se ha incluido la salida de datos
511 Implementacioacuten del coacutedigo topo_praacutectica1
usrbinpython
-- coding iso-8859-1 --
-- coding cp1252 --
Praacutectica 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
Datos Coordenadas del punto de estacioacuten
Sistema de referencia local
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmesn)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
78
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
En esta versioacuten de la praacutectica utilizando la libreriacutea geotopo en el caacutelculo de azimutes
periacutemetro y superficie
import ossys
from numpy import matrixarrayshapepizerosconcatenatemeansincossqrt
from geotopotopografiaacimut import acimut
from geotopogeneralperimetro import perimetro
from geotopogeneralareacor import areacor
Radio medio terrestre en metros
rt=63700000
Informacioacuten del punto de estacioacuten El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto de estacioacuten
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Altitud del punto en metros
- Quinta columna- Altura de instrumento en metros
pe=array([[100030242663090376657208150]])
Informacioacuten de las referencias
- Cada fila es un punto de referencia
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Lectura azimutal en grados centesimales
ref=array([[200127863973359492354821][2002322174932757501335646][20033289406282
69902313540][2004261222126827453319067]])
Informacioacuten de los puntos radiados
- Cada fila es una observacioacuten claacutesica a un punto radiado
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Lectura azimutal en grados centesimales
- Tercera columna- Lectura cenital en grados centesimales
- Cuarta columna- Distancia geomeacutetrica en metros
- Quinta columna- Altura de instrumento en metros
rad=array([[30013387131001173422431180][300211877101000083399617200][3003240
5756999039440097150][300433037831000468414996150]])
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos de referencia
Caacutelculo de las dimensiones de la matriz de puntos de referencia
- mref seraacute el nuacutemero de filas el nuacutemero de puntos
- nref seraacute el nuacutemero de columnas 4
[mrefnref]=refshape
Se extrae la informacioacuten del punto de estacioacuten
num_pe=pe[00]
x_pe=pe[01]
y_pe=pe[02]
z_pe=pe[03]
alti_pe=pe[04]
Caacutelculo de azitutes del punto de estacioacuten a cada uno de los puntos radiados
La funcioacuten azimut de la libreriacutea Geotop devuelve el valor en radianes
acimutes=zeros((mref1))
for i in range (1mref+1)
Se leen la identificacioacuten y las coordenadas del punto radiado y se almacenan en variables
temporales
num_pref=ref[i-10]
x_pref=ref[i-11]
y_pref=ref[i-12]
azi_pe_pref=acimut(x_pey_pex_prefy_pref)
acimutes[i-10]=azi_pe_pref2000pi
ref=concatenate((refacimutes)axis=1)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
79
Caacutelculo de la desorientacioacuten de cada direccioacutenccedil
desor=zeros((mref1))
for i in range(1mref+1)
Se leen los valores angulares y se transforman a radianes almacenaacutendose en variables
temporales
lhz_pe_pref=ref[i-13]pi2000
azi_pe_pref=ref[i-14]pi2000
des_pe_pref=azi_pe_pref-lhz_pe_pref
if des_pe_preflt0
des_pe_pref=des_pe_pref+20pi
desor[i-10]=des_pe_pref200pi
ref=concatenate((refdesor)axis=1)
Caacutelculo de la desorientacioacuten media con la funcioacuten de python
des_mean=mean(ref[5])pi200
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos radiados
[mradnrad]=radshape
Caacutelculo de coordenadas polares que se almacenan en la matriz coor_polares
- Primera columna- Nuacutemero entero identificador del punto radiado
- Segunda columna- Azimut en grados centesimales
- Tercera columna- Distancia reducida en metros
Caacutelculo de coordenadas cartesianas que se almacenan en la matriz coor_cart
- Primera columna- Nuacutemero entero identificador del punto del punto radiado
- Segunda columna- Coordenada X
- Tercera columna- Coordenada Y
- Cuarta columna- Altitud
antes se almacenan las coordenadas polares en la matriz coord_polares (numero de
puntoacimutdistancia reducida)
coord_polares=zeros((mrad3))
coord_cart=zeros((mrad4))
for i in range(1mrad+1)
num_prad=rad[i-10]
lhz_pe_prad=rad[i-11]pi2000
lv_pe_prad=rad[i-12]pi2000
dg_pe_prad=rad[i-13]
altp_pe_prad=rad[i-14]
coord_polares[i-10]=num_prad
azi_pe_prad=lhz_pe_prad+des_mean
if azi_pe_pradgt(20pi)
azi_pe_prad=azi_pe_prad-20pi
coord_polares[i-11]=azi_pe_prad2000pi
dr_pe_prad=dg_pe_pradsin(lv_pe_prad)
coord_polares[i-12]=dr_pe_prad
coord_cart[i-10]=num_prad
coord_cart[i-11]= x_pe+dr_pe_pradsin(azi_pe_prad)
coord_cart[i-12]= y_pe+dr_pe_pradcos(azi_pe_prad)
coord_cart[i-13]= z_pe+alti_pe+dg_pe_pradcos(lv_pe_prad)-
altp_pe_prad+042dr_pe_prad2rt
Caacutelculo del periacutemetro de la parcela utilizando la funcioacuten periacutemetro de Geotopo
coord=zeros((mrad2))
for i in range (1mrad+1)
coord[i-10]=coord_cart[i-11]
coord[i-11]=coord_cart[i-12]
perim=perimetro(coord)
Caacutelculo de la superficie de la parcela utilizando la funcioacuten areacor de Geotopo
superficie=areacor(coord)
superficie_error=areacore(coord)
Impresioacuten de resultados
fsalida=open(topopractica1salw)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
80
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
fsalidawrite(TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(nPRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALESn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimaln)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia Localn)
Impresioacuten del paso 1 Paso de coordenadas cartesianas a polares Azimutes
fsalidawrite(n1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada
visualn)
fsalidawrite( Punto Inicial Punto Final Acimut Desorientacioacutenn)
for i in range(1mref+1)
num_pref=ref[i-10]
azi=ref[i-14]
des=ref[i-15]
fsalidawrite(100fnum_pe)
fsalidawrite(150fnum_pref)
fsalidawrite(184fazi)
fsalidawrite(184fndes)
Impresioacuten del paso 2 Caacutelculo de la desorientacioacuten media
fsalidawrite(n2 Caacutelculo de la desorientacioacuten median)
fsalidawrite( Desorientacioacuten media154fn(des_mean200pi))
Impresioacuten del paso 3 Caacutelculo de la coordenadas polares
fsalidawrite(n3 Caacutelculo de las coordenadas polaresn)
fsalidawrite( Punto Acimut Distancian)
for i in range (1mrad+1)
num_prad=coord_polares[i-10]
azi=coord_polares[i-11]
dist=coord_polares[i-12]
fsalidawrite(100fnum_prad)
fsalidawrite(184fazi)
fsalidawrite(184fndist)
Impresioacuten del paso 4 Caacutelculo de la coordenadas cartesianas
fsalidawrite(n4 Caacutelculo de las coordenadas cartesianasn)
fsalidawrite( Punto X Y Zn)
for i in range (1mrad+1)
num_prad=coord_cart[i-10]
x=coord_cart[i-11]
y=coord_cart[i-12]
z=coord_cart[i-13]
fsalidawrite(100fnum_prad)
fsalidawrite(154fx)
fsalidawrite(154fy)
fsalidawrite(154fnz)
Impresioacuten del paso 5 valor del periacutemetro
fsalidawrite(n5 Caacutelculo del periacutemetro de la parcelan)
fsalidawrite( Periacutemetro153f mnperim)
Impresioacuten del paso 6 valor de la superficie de la parcela
fsalidawrite(n6 Caacutelculo de la superficie de la parcelan)
fsalidawrite( Superficie153f m2nsuperficie)
fsalidaclose()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
81
512 Impresioacuten del fichero de salida de resultados topo_praacutectica1
Ejecuando el programa anterior obtenemos un fichero con los resultados y la presentacioacuten mejorada que hemos implementado SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada visual
Punto Inicial Punto Final Acimut Desorientacioacuten
1000 2001 3539187 3184366
1000 2002 520128 3184482
1000 2003 1497887 3184347
1000 2004 2503428 3184361
2 Caacutelculo de la desorientacioacuten media
Desorientacioacuten media 3184389
3 Caacutelculo de las coordenadas polares
Punto Acimut Distancia
3001 3523102 4224303
3002 372099 3996170
3003 1590145 4400965
3004 2488172 4149959
4 Caacutelculo de las coordenadas cartesianas
Punto X Y Z
3001 27365966 33997199 6561414
3002 32447650 34236535 6566664
3003 32884285 27383773 6578851
3004 27363219 27915286 6569143
5 Caacutelculo del periacutemetro de la parcela
Periacutemetro 2358248 m
6 Caacutelculo de la superficie de la parcela
Superficie 342540930 m2
513 Salida de resultados topo_praacutectica2
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN DIRECTA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3264596 m
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
82
Y= 4065437 m
Previsioacuten de error planimeacutetrico= 0035 m
Vector con soluciones en z y su error
Z=725931 m Previsioacuten de error altimeacutetrico 0023 m
Z=725926 m Previsioacuten de error altimeacutetrico 0024 m
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN INVERSA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3010146 m
Y= 3411841 m
Previsioacuten de error planimeacutetrico= 0022 m
Vector con soluciones en z y su error
Z=515695 m Previsioacuten de error altimeacutetrico 0021 m
Z=515703 m Previsioacuten de error altimeacutetrico 0024 m
Z=515698 m Previsioacuten de error altimeacutetrico 0022 m
514 Salida de resultados topo_praacutectica3
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 3 CALCULO DE DATOS DE REPLANTEO PARA ESTACION TOTAL EN UN SISTEMA DE REFERENCIA
LOCAL
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
ResultadosDatos de replanteo
Base Punto Azimut Distancia CotaProyecto CotaTerreno CotaRoja
1 1 3856489 75460 96930 96539 0391
1 2 2667262 77786 96903 98259 -1356
1 3 1219144 40883 95329 94688 0641
1 4 279600 67437 95045 95587 -0542
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
83
515 Salida de resultados topo_praacutectica4
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 4 TRANSFORMACIOacuteN ENTRE SISTEMAS DE REFERENCIA LOCALES HELMERT 2D
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
Planteamiento del sistema de ecuaciones que define la transformacioacuten planimeacutetrica
Matriz A
1000 0000 3258686 -2709414
0000 1000 2709414 3258686
1000 0000 2075590 -2105320
0000 1000 2105320 2075590
Vector teacuterminos independientes
4554780
228501
3244004
443737
1 Resultados de los paraacutemetros de la transformacioacuten
- Planimetriacutea
- Traslacioacuten en coordenada x del sistema S1 al sistema S2 324401 m
- Traslacioacuten en coordenada y del sistema S1 al sistema S2 -20424 m
- Valor para el paraacutemetro a (a=landacos_giro) 0805119725
adimensional
- Valor para el paraacutemetro b (b=landasin_giro) -0593023724
adimensional
- Valor para el factor de escala (landa=sqrt(a2+b2)) 0999947
tanto por uno
- Valor para el giro (giro=arctan2(ba) -404157
grados centesimales
- Altimetriacutea
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 1 6056 m
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 2 6083 m
- Traslacioacuten media en coordenada z del sistema S1 al sistema S2 6070 m
2 Resultado de la transformacioacuten del punto 3 al sistema de referencia local S2
- Coordenada x de 3 en el sistema de referencia local S2 4072286 m
- Coordenada y de 3 en el sistema de referencia local S2 45170 m
- Coordenada z de 3 en el sistema de referencia local S2 104748 m
52 CASOS PRAacuteCTICOS GEODESIA En total se han realizada 5 casos praacutecticos dentro del apartado de geodesia Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica geo_practica1 Del resto soacutelo se ha incluido la salida de datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
84
521 Implementacioacuten del coacutedigo geo_praacutectica1
Semana Geomaacutetica 2011 Bogotaacute DC Colombia
IGAC-Instituto Agustiacuten Codazzi
Taller Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea GeoTop
Impartido por Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
Dr David Hernaacutendez Loacutepez davidhernandezulcmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
Praacutectica 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
Datos Coordenadas de la Red ERGNSS - Red de Estaciones Permanentes GNSS - Instituto
Geograacutefico Nacional Espantildea
Sistema de referencia ETRS89 (Elipsoide GRS80)
Coacutedigo EPSG para coordenadas geodeacutesicas sobre el elipsoide 4258
En esta versioacuten de la praacutectica se utiliza la libreriacutea GeoTop
Otra variante con respecto a la versioacuten anterior de la praacutectica es que se parte de coordenadas
geodeacutesicas en seudo decimal sexagesimal
Documentacioacuten La formulacioacuten empleada figura en el apartado 13 Parametrizacioacuten del
elipsoide del documento
OctaveTallerGeodesiaDocumentacionApuntes_DHL_2010GeodesiaElipsoidalpdf
Matriz de coordenadas
- Cada fila es un punto una estacioacuten de referencia GNSS
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada geodeacutesica longitud en suedo decimal sexagesimal
- Tercera columna- Coordenada geodeacutesica latitud en suedo decimal sexagesimal
- Cuarta columna- Altitud elipsoidal en metros
from numpy import zerosarraygenfromtxt
from geotopogeodesiaelipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiatri2geo import tri2geo
from geotopogeodesiageo2tri import geo2tri
c4258h=[ 1 432151770811 -82356167472 66917
2 382020103584 -02852437048 60356
3 385840494457 -15123054192 751736
4 365109112636 -22734018800 127517
5 392843898433 -62030426066 436527
6 432819118007 -34753038539 99287
7 355331090227 -51823016758 52475
8 375456176191 -44315999947 202082
9 371159923466 -65513077151 81860
10 402645009016 -34234283233 766920
11 423518259367 -53903511817 970254
12 364334003748 -42336718238 119848
13 393309445258 23728383134 62063
14 422728617761 -23007691629 503204
15 405642292231 -52945108842 854969
16 394031263811 -35750290360 808968
17 402101790155 -10727483699 956188
18 392850970441 -02015543423 77592
19 421102318373 -84847057525 87790
20 403129631681 -30519065001 972777
21 413800221985 -05255792567 296111
22 281829034024 -162958855078 2417483
23 282837857413 -161428164273 51787
24 282505711067 -163302841359 54475
25 280249784309 -164306688806 58543
26 284549932439 -175337787438 2199221]
Los datos los guardamos en un txt en la misma carpeta del trabajo e importamos
c4258h=genfromtxt(CPython27geotopoaplicacionestalleresgeo_practica1dattxt)
Caacutelculo de las dimensiones de la matriz de coordenadas
- m seraacute el nuacutemero de filas el nuacutemero de puntos
- n seraacute el nuacutemero de columnas 4
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
85
[mn]=c4258hshape
grs80=elipsoide(2)
Recibe Codigo del elipsoide (nelipsoide)
1 - Ed50 Devuelve el elipsoide Internacional 1924
2 - Etrs89 Devuelve el elipsoide GRS80
3 - Wgs84 Devuelve el elipsoide Wgs84
Definicioacuten del elipsoide
fsalida=open(geo_practica1salw)
fsalidawrite(SEMANA GEOMAacuteTICA - 2011n)
fsalidawrite(TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software
libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE
COORDENADAS GEODEacuteSICAS Y ECEFn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal
ggmmssfsn)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia ETRS89n)
fsalidawrite(- Paraacutemetros del elipsoide GRS80n)
fsalidawrite( - Semieje mayor 103f mngrs80[0])
fsalidawrite( - Inverso del aplanamiento 109f adimngrs80[1])
fsalidawrite( - Semieje menor 103f mngrs80[2])
fsalidawrite( - Primera excentricidad al cuadrado 109f adimngrs80[3]2)
fsalidawrite( - Segunda excentricidad al cuadrado 109f adimngrs80[4]2)
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(1 Paso de coordenadas geodeacutesicas a ECEFn)
fsalidawrite(NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF
CoorZECEFn)
c4258XYZ=zeros((m4))
for i in range (1m+1)
np=c4258h[i-10]
longitudRad=psdo2rad(c4258h[i-12])
latitudRad=psdo2rad(c4258h[i-11])
hElip=c4258h[i-13]
[xecefyecefzecef]=geo2tri(latitudRadlongitudRadhElip2)
fsalidawrite(80fnp)
fsalidawrite(159fc4258h[i-11])
fsalidawrite(159fc4258h[i-12])
fsalidawrite(123fhElip)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(n)
c4258XYZ[i-10]=np
c4258XYZ[i-11]=xecef
c4258XYZ[i-12]=yecef
c4258XYZ[i-13]=zecef
Caacutelculo e impresioacuten del paso 2 de coordenadas ECEF a geodeacutesicas
fsalidawrite(2 Paso de coordenadas ECEF a geodeacutesicasn)
fsalidawrite( NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud
AltElipn)
for i in range(1m+1)
np=c4258XYZ[i-10]
xecef=c4258XYZ[i-11]
yecef=c4258XYZ[i-12]
zecef=c4258XYZ[i-13]
[latitudlongitudhElip]=tri2geo(xecefyecefzecef2)
fsalidawrite(80fnp)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(159frad2psdo(latitud))
fsalidawrite(159frad2psdo(longitud))
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
86
fsalidawrite(153fnhElip)
fsalidaclose()
522 Impresioacuten del fichero de salida de resultados geo_praacutectica1
SEMANA GEOMAacuteTICA - 2011
TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea
GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal ggmmssfs
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia ETRS89
- Paraacutemetros del elipsoide GRS80
- Semieje mayor 6378137000 m
- Inverso del aplanamiento 0003352811 adim
- Semieje menor 6356752314 m
- Primera excentricidad al cuadrado 0006694380 adim
- Segunda excentricidad al cuadrado 0006739497 adim
1 Paso de coordenadas geodeacutesicas a ECEF
NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF CoorZECEF
1 43215177081 -8235616747 66917 4594489890 -678368010 4357065904
2 38202010358 -0285243705 60356 5009051399 -42072472 3935057504
3 38584049446 -1512305419 751736 4962848206 -160854365 3990884209
4 36510911264 -2273401880 127517 5105220295 -219278803 3804386889
5 39284389843 -6203042607 436527 4899866820 -544567584 4033769790
6 43281911801 -3475303854 99287 4625924690 -307096765 4365771175
7 35533109023 -5182301676 52475 5150908012 -478415023 3718518240
8 37545617619 -4431599995 202082 5021256063 -414685080 3898182184
9 37115992347 -6551307715 81860 5049613168 -612885631 3835143860
10 40264500902 -3423428323 766920 4851137670 -314518688 4116282036
11 42351825937 -5390351182 970254 4680871385 -463168384 4294606572
12 36433400375 -4233671824 119848 5103282414 -392096752 3793146894
13 39330944526 2372838313 62063 4919369704 225499577 4039849606
14 42272861776 -2300769163 503204 4708688612 -205761707 4283609369
15 40564229223 -5294510884 854969 4803054799 -462131609 4158378661
16 39403126381 -3575029036 808968 4904660519 -339868032 4050823512
17 40210179016 -1072748370 956188 4867391684 -95523894 4108341277
18 39285097044 -0201554342 77592 4929534046 -29050676 4033709925
19 42110231837 -8484705753 87790 4677481077 -725205068 4260827192
20 40312963168 -3051906500 972777 4848724914 -261632472 4123093922
21 41380022199 -0525579257 296111 4773803543 -73506519 4215453698
22 28182903402 -16295885508 2417483 5390243531 -1596630330 3007752593
23 28283785741 -16142816427 51787 5386836438 -1569217617 3023118925
24 28250571107 -16330284136 54475 5381262061 -1599192518 3017377791
25 28024978431 -16430668881 58543 5395193089 -1620537044 2981146536
26 28454993244 -17533778744 2199221 5326646317 -1719826438 3052043561
2 Paso de coordenadas ECEF a geodeacutesicas
NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud AltElip
1 4594489890 -678368010 4357065904 43215177081 -8235616747 66917
2 5009051399 -42072472 3935057504 38202010358 -0285243705 60356
3 4962848206 -160854365 3990884209 38584049446 -1512305419 751736
4 5105220295 -219278803 3804386889 36510911264 -2273401880 127517
5 4899866820 -544567584 4033769790 39284389843 -6203042607 436527
6 4625924690 -307096765 4365771175 43281911801 -3475303854 99287
7 5150908012 -478415023 3718518240 35533109023 -5182301676 52475
8 5021256063 -414685080 3898182184 37545617619 -4431599995 202082
9 5049613168 -612885631 3835143860 37115992347 -6551307715 81860
10 4851137670 -314518688 4116282036 40264500902 -3423428323 766920
11 4680871385 -463168384 4294606572 42351825937 -5390351182 970254
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
87
12 5103282414 -392096752 3793146894 36433400375 -4233671824 119848
13 4919369704 225499577 4039849606 39330944526 2372838313 62063
14 4708688612 -205761707 4283609369 42272861776 -2300769163 503204
15 4803054799 -462131609 4158378661 40564229223 -5294510884 854969
16 4904660519 -339868032 4050823512 39403126381 -3575029036 808968
17 4867391684 -95523894 4108341277 40210179016 -1072748370 956188
18 4929534046 -29050676 4033709925 39285097044 -0201554342 77592
19 4677481077 -725205068 4260827192 42110231837 -8484705753 87790
20 4848724914 -261632472 4123093922 40312963168 -3051906500 972777
21 4773803543 -73506519 4215453698 41380022199 -0525579257 296111
22 5390243531 -1596630330 3007752593 28182903402 -16295885508 2417483
23 5386836438 -1569217617 3023118925 28283785741 -16142816427 51787
24 5381262061 -1599192518 3017377791 28250571107 -16330284136 54475
25 5395193089 -1620537044 2981146536 28024978431 -16430668881 58543
26 5326646317 -1719826438 3052043561 28454993244 -17533778744 2199221
523 Salida de resultados geo_praacutectica2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
88
524 Salida de resultados geo_praacutectica3
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
89
525 Salida de resultados geo_praacutectica4
helliphellip
helliphellip
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
90
526 Salida de resultados geo_praacutectica5
Con la implementacioacuten y caacutelculo de los 9 casos praacutecticos realizados e incluidos en este Proyecto Final de Maacutester se puede obtener una idea de la aplicabilidad de esta libreriacutea en aplicaciones de caacutelculos topograacuteficos y geodeacutesicos Igualmente y como uno de los puntos de partida de este Proyecto obtenemos una libreriacutea muy potente para el uso en aacutembitos universitarios facilitando al profesorado el planteamiento y resolucioacuten de los distintos casos praacutecticos de las asignaturas y al tratarse de coacutedigo abierto se facilita que los alumnos implementen nuevas utilidades formatos de salida etc Convirtiendo geotopo en una herramienta de trabajo diario
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
91
6 CONCLUSIONES FINALES Como conclusiones finales podemos enumerar
Se ha corroborado lo que dicen los impulsores de Python se trata de un lenguaje limpio sencillo y claro muy proacuteximo a pseudocoacutedigo
Resulta interesante la utilizacioacuten de software libre para caacutelculos geodeacutesicos y topografiacuteacos Al tratarse de software libre es accesible a cualquier tipo de usuario
Al partir de la consideracioacuten de un paradigma estructurado de programacioacuten hemos conseguido implementar gran nuacutemero de funciones en ficheros (moacutedulos) de pequentildeo tamantildeo facilitando la programacioacuten Tambieacuten se ha iniciado en la programacioacuten orientada a objetos con la declaracioacuten de alguna clase
La importacioacuten de moacutedulos facilita a la implementacioacuten de coacutedigo sin necesitar volver a escribir el coacutedigo importado y ante cualquier modificacioacuten del mismo automaacuteticamente se actualiza en todos los programas o moacutedulos donde se importe dicho moacutedulo
Con las funciones definidas dentro de Numpy hemos realizado la mayor parte de los caacutelculos necesarios en nuestra biblioteca
Se ha de realizar la importacioacuten expresa de gran nuacutemero de operaciones matemaacuteticas Salvo + - y casi todos los demaacutes operadores se han de importar desde Numpy por ejemplo pi sqrt sin cos etc A veces puede resultar un poco complicado hacer la importacioacuten de estos operadores pero cuando se avanza en la programacioacuten hasta parece maacutes didactico reflejar todas las funciones importadas de otros moacutedulos
Se ha apreciado que en algunos casos las mismas funciones estaacuten incluidas en distintos moacutedulos y ademaacutes con nombres diferentes Asiacute en Numpy tenemos arcsin arccos arctan etc y en SciPy asin acos atan cuando se refieren a las mismas funciones arcoseno arcocoseno y arcotangente
Se ha creado una libreriacutea abierta accesible y editable para moder modificar
coacutedigo y tambieacuten poder ampliar con el implementado de nuevas funciones que aumenten el potencial de la misma Esto tambieacuten se incluye dentro de las liacuteneas futuras de actuacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
92
7 LIacuteNEAS FUTURAS DE ACTUACIOacuteN
De forma general se establecen las siguientes liacuteneas futuras de actuacioacuten e investigacioacuten
Avance en el desarrollo a aplicaciones informaacuteticas mediante el uso de software libre y en especial de Python
Estudio de la aplicabilidad de Python en el caacutelculo minimo-cuadraacutetico de sistemas de ecuaciones aplicables en topografiacutea y geodesia Para ello se ha de profundizar en el estudio de las diferencias entre los tipos array que contiene numpy y los tipos matrix par el caacutelculo avanzado de sistemas de ecuaciones
Aplicacioacuten de Python para el caacutelculo y ajuste de Redes Geodeacutesicas mediante la utilizacioacuten de miacutenimos cuadrados Con este fin estariacuteamos evitando el tener que recurrir a los softwares de caacutelculo de las casas comerciales ahorrando asiacute un coste importante y el poder realizar los ajustes y presentaciones de resultados adapatados a nuestras necesidades
Inclusioacuten de una interfaz graacutefica a los caacutelculos realizados para poder tener visualmente el resultado de los mismos
Aplicabilidad de python en el procesado de imaacutegenes Utilizacioacuten de la libreriacutea PIL (Python Imaging Library) que agrega capacidades de procesamiento de imaacutegenes al interprete Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
93
8 ANEJO
81 EQUIVALENCIAS ENTRE FUNCIONES EN MATLAB Y PYTHON Al partir de la libreiacutea Geotop en Octave hemos de tener en cuenta la equivanlencia entre algunas funciones de MatlabOctave con Python Asiacute tenemos MATLAB numpyarray numpymatrix Notes
ndims(a) ndim(a) or andim get the number of dimensions of a (tensor rank)
size(a) shape(a) or ashape get the size of the matrix
size(an) ashape[n-1]
get the number of elements of the nth dimension of array a (Note that MATLABreg uses 1 based indexing while Python uses 0 based indexing See note INDEXING)
MATLAB numpyarray numpymatrix Notes
[ 1 2 3 4 5 6 ] array([[123] [456]])
mat([[123] [456]]) or mat(1 2 3 4 5 6)
2x3 matrix literal
[ a b c d ] vstack([hstack([ab]) hstack([cd])])
bmat(a b c d) construct a matrix from blocks abc and d
a(end) a[-1] a[-1][00] access last element in the 1xn matrix a
a(25) a[14] access element in second row fifth column
a(2) a[1] or a[1] entire second row of a
a(15) a[05] or a[5] or a[05] the first five rows of a
a(end-4end) a[-5] the last five rows of a
a(1359) a[03][49] rows one to three and columns five to nine of a This gives read-only access
a([245][13]) a[ix_([134][02])] rows 24 and 5 and columns 1 and 3 This allows the matrix to be modified and doesnt require a regular slice
a(3221) a[ 2212] every other row of a starting with the third and going to the twenty-first
a(12end) a[ 2] every other row of a starting with the first
a(end-11) or flipud(a) a[ -1] a with rows in reverse order
a([1end 1]) a[r_[len(a)0]] a with copy of the first row appended to the end
a atranspose() or aT transpose of a
a aconj()transpose() or aconj()T
aH conjugate transpose of a
a b dot(ab) a b matrix multiply
a b a b multiply(ab) element-wise multiply
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
94
MATLAB numpyarray numpymatrix Notes
ab ab element-wise divide
a^3 a3 power(a3) element-wise exponentiation
(agt05) (agt05) matrix whose ijth element is (a_ij gt 05)
find(agt05) nonzero(agt05) find the indices where (a gt 05)
a(find(vgt05)) a[nonzero(vgt05)[0]] a[nonzero(vAgt05)[0]] extract the columms of a where vector v gt 05
a(find(vgt05)) a[vTgt05] a[vTgt05)] extract the columms of a where column vector v gt 05
a(alt05)=0 a[alt05]=0 a with elements less than 05 zeroed out
a (agt05) a (agt05) mat(aA (agt05)A) a with elements less than 05 zeroed out
a() = 3 a[] = 3 set all values to the same scalar value
y=x y = xcopy() numpy assigns by reference
y=x(2) y = x[1]copy() numpy slices are by reference
y=x() y = xflatten(1) turn array into vector (note that this forces a copy)
110 arange(111) or r_[111] or r_[11010j]
mat(arange(111)) or r_[111r]
create an increasing vector see note RANGES
09 arange(10) or r_[10] or r_[910j]
mat(arange(10)) or r_[10r]
create an increasing vector see note RANGES
[110] arange(111)[ newaxis] r_[111c] create a column vector
zeros(34) zeros((34)) mat() 3x4 rank-2 array full of 64-bit floating point zeros
zeros(345) zeros((345)) mat() 3x4x5 rank-3 array full of 64-bit floating point zeros
ones(34) ones((34)) mat() 3x4 rank-2 array full of 64-bit floating point ones
eye(3) eye(3) mat() 3x3 identity matrix
diag(a) diag(a) mat() vector of diagonal elements of a
diag(a0) diag(a0) mat() square diagonal matrix whose nonzero values are the elements of a
rand(34) randomrand(34) mat() random 3x4 matrix
linspace(134) linspace(134) mat() 4 equally spaced samples between 1 and 3 inclusive
[xy]=meshgrid(0805) mgrid[0906] or meshgrid(r_[09]r_[06]
mat() two 2D arrays one of x values the other of y values
ogrid[0906] or ix_(r_[09]r_[06]
mat() the best way to eval functions on a grid
[xy]=meshgrid([124][245]) meshgrid([124][245]) mat()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
95
ix_([124][245]) mat() the best way to eval functions on a grid
MATLAB numpyarray numpymatrix Notes
repmat(a m n) tile(a (m n)) mat() create m by n copies of a
[a b]
concatenate((ab)1) or hstack((ab)) or column_stack((ab)) or c_[ab]
concatenate((ab)1) concatenate columns of a and b
[a b] concatenate((ab)) or vstack((ab)) or r_[ab]
concatenate((ab)) concatenate rows of a and b
max(max(a)) amax() maximum element of a (with ndims(a)lt=2 for matlab)
max(a) amax(0) maximum element of each column of matrix a
max(a[]2) amax(1) maximum element of each row of matrix a
max(ab) maximum(a b) compares a and b element-wise and returns the maximum value from each pair
norm(v) sqrt(dot(vv)) or Scilinalgnorm(v) or linalgnorm(v)
sqrt(dot(vAvA)) or Scilinalgnorm(v) or linalgnorm(v)
L2 norm of vector v
a amp b logical_and(ab) element-by-element AND operator (Numpy ufunc) see note LOGICOPS
a | b logical_or(ab) element-by-element OR operator (Numpy ufunc) see note LOGICOPS
bitand(ab) a amp b bitwise AND operator (Python native and Numpy ufunc)
bitor(ab) a | b bitwise OR operator (Python native and Numpy ufunc)
inv(a) linalginv(a) inverse of square matrix a
pinv(a) linalgpinv(a) pseudo-inverse of matrix a
rank(a) linalgmatrix_rank(a) rank of a matrix a
ab linalgsolve(ab) if a is square
linalglstsq(ab) otherwise solution of a x = b for x
ba Solve aT xT = bT instead solution of x a = b for x
[USV]=svd(a) U S Vh = linalgsvd(a) V = VhT singular value decomposition of a
chol(a) linalgcholesky(a)T
cholesky factorization of a matrix (chol(a) in matlab returns an upper triangular matrix but linalgcholesky(a) returns a lower triangular matrix)
[VD]=eig(a) DV = linalgeig(a) eigenvalues and eigenvectors of a
[VD]=eig(ab) VD = Scilinalgeig(ab) eigenvalues and eigenvectors of ab
[VD]=eigs(ak) find the k largest eigenvalues and eigenvectors of a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
96
MATLAB numpyarray numpymatrix notes
[QRP]=qr(a0) QR = Scilinalgqr(a) mat() QR decomposition
[LUP]=lu(a) LU = Scilinalglu(a) or LUP=Scilinalglu_factor(a)
mat() LU decomposition
conjgrad Scilinalgcg mat() Conjugate gradients solver
fft(a) fft(a) mat() Fourier transform of a
ifft(a) ifft(a) mat() inverse Fourier transform of a
sort(a) sort(a) or asort() mat() sort the matrix
[bI] = sortrows(ai) I = argsort(a[i]) b=a[I] sort the rows of the matrix
regress(yX) linalglstsq(Xy) multilinear regression
decimate(x q) Scisignalresample(x len(x)q) downsample with low-pass filtering
unique(a) unique(a)
squeeze(a) asqueeze()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
97
9 BIBLIOGRAFIacuteA
DOWNEY A ELKNER J MEYERS C Aprenda a Pensar Como un Programador con Python GARCIacuteA-ASENJO VILLAMAYOR L HERNAacuteNDEZ LOacutePEZ D Geodesia Febrero 2005 GONZAacuteLEZ DUQUE R Python PARA TODOS Edicioacuten Internet bajo licencia Creative Commons Reconocimiento 25 Espantildea Descargable en httpmundogeeknettutorial-python MARZAL A GRACIA I Introduccioacuten a la programacioacuten con Python Departamento de Lenguajes y Sistemas Informaacuteticos Universitat Jaume I 2003 Edicioacuten Internet NUMPY COMMUNITY NumPy Reference Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg NUMPY COMMUNITY NumPy User Guide Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg VAN ROSSUM G Guiacutea de aprendizaje de PythonRelease 241ordf0 Edicioacuten Intenet Septiembre 2005 Descargable en httpwwwscipyorg VAN ROSSUM G El tutorial de Python Edicioacuten Intenet Descargable en httppythonorgarpyarTutorial
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
98
10 PAacuteGINAS WEB CONSULTADAS httpenfoquevirtualwordpresscomcategorytutorial httpgeektheplanetnet1347how-to-instalar-pydev-en-aptanaxhtml httpmundogeeknetarchivos20080328python-modulos-y-paquetes httpwwwthebitsourcecomprogramming-software-developmentpythonpython-application-development-aptana-pydev httpwwwyoutubecomwatchv=XtnfY2cBbMA youtube interesante trabajo con pydev y modulos httpcodingderkeilercomArchivePythoncomplangpython2005-08msg03511html paacutegina que explica coacutemo solucionar los problemas de Non-ASCII character httpeswikibooksorgwikiInmersiC3B3n_en_PythonSu_primer_programa_en_PythonDocumentado_de_funciones paacutegina que explica la cadena de documentacioacuten despueacutes de definir una funcioacuten con ldquordquordquo___rdquordquordquo (triples comillas) httpwwwpythonorgdevpepspep-0008 style guide for python code httpmundogeeknetarchivos20080707documentacion-en-python habla de la forma de documentar en python httpwwwpythonorgdevpepspep-0257 documentacioacuten y comentarios httpprogramandoideascomcomentarios-en-python documentacioacuten y comentarios httpwwwyoutubecomwatchv=v0sqRYuL5e8 tutorial de python con aptana httpwwwyoutubecomwatchv=29mq1Bn52GYampfeature=related youtube tutorial httpprojectsscipyorgnumpybrowsertrunknumpymatlibpyrev=8567 paacutegina que habla un poco de matrices
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
99
httpwwwgfceduco~arsranguias42p8guia42html cosas interesantes de matrices httpdocencia-euptunizaresctmedrascipy_tutorialscipy_tutorialhtml varios sobre python httpdocspythonorgtutorialmoduleshtml muy buena de paquetes etc httpwwwlinux-ittcom200804python-mdulos-y-paqueteshtml maacutes sobre paquetes httpwwwmclibreorgconsultarpythonotrosin03_idlehtmlccedil coding cp1252 httpwwwmclibreorgconsultarpython tutorial de python en la web Idle httpbioinfcomavupvescourseslinuxpythonmoduloshtml csv listasetc httpwwwdavidricardocommxp=1173 ok muy bueno importacioacuten csv como matriz httpwwwaprenderpythonorg httpwwwscipyorgNumpy_Example_List_With_Doc paacutegina muy importante de scipy httpjsbsanblogspotcom201101calculo-de-un-area-de-un-poligonohtml video sobre caacutelculo de areas de poliacutegonos irregulares httpmathesaurussourceforgenetmatlab-numpyhtml viprelacioacuten entre operaciones con octave y con python httpwwwscipyorgTentative_NumPy_Tutorial pagina importante de scipy httptecnologicumwordpresscomastronomiavideo-tutoriales-de-python todos los videotutoriales de python httpwwwyoutubecomwatchv=Oj3MZXWXGiUampfeature=related csv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
100
httptranslategoogleestranslatehl=esamplangpair=en7Cesampu=httpwwwscipyorgNumPy_for_Matlab_Users interesante sobre numpyhellip httpwikipythonorgmoinHowToSorting interesante de sort httpwikipythonorgmoinHowToSortingOperator_Module_Functions sort itemgetteretc httpcodeactivestatecomrecipes304440-sorting-dictionaries-by-value-in-python-24 operator itemgetter httpmundogeeknetarchivos20080402python-entrada-salida-ficheros entrada salida de archivos httpwwwgulicorgalmacenhttlaclwpchap11htm formato de escritura textos nuacutemeros y decimales httpwwwprogramacioncomarticuloguia_de_aprendizaje_de_python_657 formatos de salida httpnumpysourceforgenetnumdocHTMLnumdochtmpgfId-57315 muy importante sobre arraysetc httpwwwhjcbnlpythonArrayshtml muy importante sobre arraysetc httpwwwalecjacobsoncomweblogp=1570 cargar un txt como una matriz en python httpdocsscipyorgdocnumpyreferencegeneratednumpygenfromtxthtml getfromtxt de numpy httpwwwalegsaonlinecomart13php httpwwwumesdocenciabarzanaIAGPIagp3html httpwebusales~dhernandsoftwarehtmGeotop httpmailpythonorgpipermailtutor2008-March060886html From future import division
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
101
httpwwwyoutubecomwatchv=I6GMIQBD6EU youtube diccionarios httpmundogeeknetarchivos20080121python-tipos-basicos-ii-colecciones diccionarios httpstaffnotiaces~rcardeneshgdiveintopython3-esnative-datatypeshtml diccionarios httpwwwestrellateyardeorgdiscovermanual-python-lo-mas-basico diccionarios httpeswikibooksorgwikiInmersiC3B3n_en_PythonTipos_de_datos_nativosPresentaciC3B3n_de_los_diccionarios diccionarios httpdocspythonorgartutorialdatastructureshtmldiccionarios python estructura de diccionarios httpwwwwikilearningcomtutorialintroduccion_informal_a_matlab_y_octave-matrices_y_algebra_lineal_i19256-8 concatenar matrices httpwwwslidesharenetsantiagosilascomputao-cientfica-com-numpy-e-scipy-7797060 detalles de numpy vectores matricesetc httpwwwscipyorgNumPy_for_Matlab_Usershead-e9a492daa18afcd86e84e07cd2824a9b1b651935 muy importante de scipy arrays y matriceshellip httpdocsscipyorgdocnumpyreferencegeneratednumpyconcatenatehtml muy importante de scipy arrays y matriceshellip httppyspanishdocsourceforgenettut traduccioacuten del tutorial de Guido httpwwwscipyorgNumpy_Example_List_With_Dochead-5202db3259f69441c695ab0efc0cdf45341829fc httppyspanishdocsourceforgenetlibmodule-picklehtml funcioacuten pickle
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
102
httpnicocesarcomq=node23 carga de ficheros binarios httpstaffnotiaces~rcardeneshgdiveintopython3-esfileshtml apertura cierre carga de ficheros etc httppythonr2wordpresscom20080829leer-archivos-binarios-en-python lectura de ficheros binarios httpwwwignesignlayoutInherramientasdo descarga de ficheros regilla del IGN httpterrasitgvaeseskbtransformacion-coordenadas-utm-ed50-utm-etrs89-utilizando-libreria-proj4 paacutegina de la gva sobre cambio de sistema y fichero rejilla httpdocspythonorglibrarystructhtml moacutedulo struct de python para lectura de ficheros binarios httpwwwslidesharenetjpadillaaprogramacion-orientada-a-objetos-en-python programacioacuten orientada a objetos con python httppyspanishdocsourceforgenettutnode7html recorrer diccionarios httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 interesante aplicacioacuten fichero rejilla ntv2 en python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
4
2 CONTEXTO DEL PROYECTO Dentro de los objetivos de este proyecto se encuentra el aprendizaje y desarrollo de herramientas con software libre y tambieacuten la eleccioacuten de Python al tratarse de un lenguaje de programacioacuten que aunque parece novedoso esta encontrando gran aceptacioacuten en entornos docentes y tambieacuten en el desarrollo de programacioacuten en la empresa privada
21 iquestPOR QUEacute SOFTWARE LIBRE Muchiacutesimos gobiernos de todo el mundo estaacuten empezando a ver al software libre como una poderosa herramienta para disminuir sus costos de administracioacuten reducir la dependencia tecnoloacutegica y fomentar sus industrias locales de software Las razones principales que impulsan la migracioacuten de los sistemas de informacioacuten de las administraciones puacuteblicas al software libre son
Ahorro econoacutemico El bajo o nulo coste de los productos libres permiten a las PYMES servicios y ampliar sus infraestructuras sin que se vean mermados sus intentos de crecimiento por no poder hacer frente al pago de cantidades en licencias
Independencia tecnoloacutegica mayor transparencia aumento de la interoperabilidad permite auditar el coacutedigo fuente etc El secretismo tenoloacutegico es uno de los grandes frenos y desequilibrios existentes para el desarrollo en el modelo de propiedad intelectual
Fomenta el desarrollo local y la industria nacional de software La praacutectica totalidad de los concursos para desarrollo de software para la administracioacuten puacuteblica pasan por compatibilizar con productos de la factoriacutea de Microsoft por lo que garantiza la perpetuacioacuten e ingresos hacia Microsoft y no favorece a las empresas locales que pudieran ofrecer productos equivalentes Ademaacutes de la reduccioacuten de costes por uso de software libre iquestqueacute podriacutean aportar esas inversiones si los beneficiados fuesen empresas del propio estado en lugar de mandar a una compantildeiacutea extranjera esas enormes cantidades de dinero
Facilita la adaptacioacuten a las necesidades concretas de las administraciones en materia linguumliacutestica legislativa de accesibilidad e imagen
El conocimiento generado es puacuteblico Fomento de la libre competencia al basarse en servicios y no licencias
Uno de los modelos de negocio que genera el software libre es la contratacioacuten de servicios de atencioacuten al cliente Este sistema permite que las compantildeiacuteas que den el servicio compitan en igualdad de condiciones a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
5
no poseer la propiedad del producto del cual dan el servicio
Tratamiento seguro de los datos y la informacioacuten Formatos estaacutendar Los formatos estaacutendar permiten una
interoperatividad maacutes alta entre sistemas evitando incompatibilidades Los estaacutendares de facto son vaacutelidos en ocasiones para lograr una alta interoperatividad si se omite el hecho que estos exigen el pago de royalities a terceros y por razones de mercado no interesa que se perpetuacuteen mucho tiempo
Sistemas sin puertas traseras y maacutes seguros El acceso al coacutedigo fuente permite que tanto hackers como empresas de seguridad de todo el mundo puedan auditar los programas por lo que la existencia de puertas traseras es iloacutegica ya que se pondriacutea en evidencia y contraviene el intereacutes de la comunidad que es la que lo genera
Correccioacuten maacutes raacutepida y eficiente de fallos El funcionamiento e intereacutes conjunto de la comunidad ha demostrado solucionar maacutes raacutepidamente los fallos de seguridad en el software libre algo que desgraciadamente en el software propietario es maacutes difiacutecil y costoso
Meacutetodos simples y unificados de gestioacuten de software Actualmente la mayoriacutea de distribuciones de linux incorporan alguno de los sistemas que unifican el meacutetodo de instalacioacuten de programas libreriacuteas etc Por parte de los usuarios Asiacute se permite el acceso a las miles de aplicaciones existentes de forma segura y gratuita a la par que evitan tener que recurrir a paacuteginas web de dudosa eacutetica desde las que los usuarios instalan sin saberlo spyware o virus informaacuteticos en sus sistemas Este sistema de acceso y gestioacuten del software se hace praacutecticamente utoacutepico si se extrapola al mercado propietario
Sistema en expansioacuten El software libre ya no es una promesa es una realidad y se utiliza en sitemas de produccioacuten por algunas de las empresas tecnoloacutegicas maacutes importantes como IBM Sun Microsystems Google Hewlett-Packard etc Paradoacutejicamente incluso Microsoft que posee sus propias herramientas emplea GNU Linux en muchos de sus servidores
Entre los paiacuteses maacutes adeptos al software libre sus desarrollos y alcance de sus
proyectos de migracioacuten se encuentran de la siguiente manera ALEMANIA Alemania es el paiacutes con mayor uso del software libre del mundo No
soacutelo estaacute presente en todas sus dependencias gubernamentales y universidades sino que tiene programas multimillonarios para el desarrollo de aplicaciones libres En 2009 destinoacute maacutes de 500 millones de Euros al proyecto ldquoOpen Source and Green ITrdquo El software libre es tan importante para los alemanes que incluso el 59 de sus empresas lo utiliza el argumento maacutes utilizado no es la reduccioacuten de costos sino la posibilidad de poder modificar el coacutedigo fuente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
6
BRASIL Fue el primer paiacutes en migrar masivamente sus sistemas de informacioacuten a alternativas open source Se llevoacute a cabo en primera instancia en el estado de Riacuteo Grande luego se realizoacute a escala nacional
ARGENTINA Existen varias iniciativas estatales que apuntan a fomentar el desarrollo de software libre Actualmente el software libre estaacute implementado en algunas provincias siendo Santa Fe el maacuteximo exponente de utilizacioacuten doacutende todo el software ha sido liberado bajo licencia GPL
FRANCIA La Asamblea Nacional utiliza software libre en todos sus sistemas y terminales de trabajo Francia viene tomando impulso en el desarrollo de software open source existen iniciativas para que el 20 del software contratado por la Administracioacuten Puacuteblica sea libre para el 2012 tambieacuten ofrece beneficios fiscales para las agrupaciones de usuarios y desarrolladores de SL
ESPANtildeA Espantildea se ha apostado como uno de los mayores impulsores mundiales del uso de software libre Actualmente existen 200 empresas proveedoras de soluciones 100 comunidades de usuarios y 180 centros educativos donde el software de coacutedigo abierto es una realidad cotidiana Muchos ayuntamientos y universidades ya se pasaron a sistemas open source
A principios de 2010 se presentoacute un proyecto liderado por la Plataforma Tecnoloacutegica Espantildeola de Software y Servicios con el apoyo del Plan Avanza Dicho plan pretende colocar a Espantildea a la par del resto de Europa en el disentildeo y uso de software libre de confianza y calidad similares a los comerciales Este proyecto llamado Vulcano trata de unificar el trabajo de distintas universidades centros tecnoloacutegicos y empresas que hasta el momento habiacutean dedicado sus esfuerzos al aacutembito de la educacioacuten
En un entrevista ofrecida por David Saacutenchez Director de Comunicacioacuten y Relaciones Instituciones en CENATIC que es el Centro Nacional de Referencia de Aplicacioacuten de las Tecnologiacuteas de la informacioacuten y la Comunicacioacuten basadas en Fuentes Abiertas podemos encontrar httpwwwmuylinuxcom20110407entrevistamos-a-david-sanchez-de-cenatic
CENATIC es una Fundacioacuten Puacuteblica Estatal del gobierno de Espantildea promovida por el Ministerio de Industria Turismo y Comercio y la Junta de Extremadura que ademaacutes cuenta en su patronato con las comunidades autoacutenomas de Andaluciacutea Aragoacuten Asturias Cantabria Cataluntildea Islas Balares Paiacutes Vasco y Galicia asiacute como las empresas Atos Origin Telefoacutenica y Grupo Aacutepex
Su trabajo es promover el conocimiento y uso del software libre en todos los aacutembitos de la sociedad con especial atencioacuten en las administraciones puacuteblicas las empresas el sector tecnoloacutegico proveedor o usuario de tecnologiacuteas libres y las comunidades de desarrollo a traveacutes de proyectos especiacuteficos para cada uno de estos sectores
ldquo La apuesta a del Administracioacuten del Estado por el software libre se inicioacute ya en los 90 cuando el entonces ministerio para las Administraciones Puacuteblicas llevoacute a cabo la primera gran migracioacuten a software libre de 1375 servidores Llegaron tambieacuten proyectos como el del Principado de Asturias para generar de forma colaborativa un
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
7
marco basado en software libre que permitioacute crear cluacutester de empresas locales capaces de aportar servicios de eAdministracion que de otra manera tendriacutean que haber contratado fuera de su comunidadrdquo
ldquo O el proyecto de gvSIG de la Conselleriacutea d‟Infrestructures i Transport de la Generalitat Valenciana un sistema de informacioacuten geograacutefico que cuenta con un tejido empresarial local alrededor del proyecto y estaacuten haciendo de la Comunidad Valenciana el nuacutecleo maacutes activo a nivel mundial de desarrollo GIS en entornos libres Tambieacuten es muy conocido el proyecto de Red Tecnoloacutegica Educativa de la Junta de Extremadura con Linex como primera distribucioacuten regional y concepto pionero adoptado ya por 7 comunidades autoacutenomasrdquo ldquoFinalmente a nivel de administracioacuten local hasta el 80 de los grandes ayuntamientos cuentan hoy en diacutea con proyectos de software libre siendo quizaacute el maacutes destacado el del Ayuntamiento de Zaragozardquo
22 LENGUAJES DE PROGRAMACIOacuteN Un lenguaje de programacioacuten es un lenguaje artificial que puede ser usado para controlar el comportamiento de una maacutequina especialmente una computadora Estos se componen de un conjunto de reglas sintaacutecticas y semaacutenticas que permiten expresar instrucciones que luego seraacuten interpretadas Debe distinguirse de ldquolenguaje informaacuteticordquo que es una definicioacuten maacutes amplia puesto que estos incluyen otros lenguajes como son el HTML o PDF que dan formato a un texto y no es programacioacuten en siacute misma El programador es el encargado de utilizar un lenguaje de programacioacuten para crear un conjunto de instrucciones que al final constituiraacute un programa o subprograma informaacutetico En su uso un lenguaje de programacioacuten puede acercarse a la forma humana de expresarse y por eso este tipo de lenguajes es llamado de alto nivel Esto significa que utilizan palabras y formas en sus estructuras que se asemejan al lenguaje natural (especialmente al ingleacutes) En cambio aquellos lenguajes que se aproximan maacutes a la forma en la cual la computadora se maneja son llamados lenguajes de bajo nivel Esto significa que lo que el programador deba escribir se acercaraacute al lenguaje maacutequina que es en definitiva lo que las computadoras pueden interpretar De todas maneras un lenguaje de programacioacuten difiere en muchos aspectos de un lenguaje humano Un coacutedigo escrito en un lenguaje de programacioacuten especiacutefico siempre se interpreta de la misma manera (no como los idiomas humanos ambiguos) los errores son mucho maacutes significativos (a tal punto de que un coacutedigo puede volverse ininterpretable por la computadora) etc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
8
El coacutedigo fuente es el conjunto de instrucciones que conforman un programa (o subprograma o moacutedulo) El coacutedigo fuente debe ser compilado para poder ser interpretado y ejecutado por la computadora La compilacioacuten traduce el coacutedigo fuente (que depende del lenguaje de programacioacuten) a un lenguaje maacutequina (que depende del sistema de la maacutequina) Existen lenguajes del tipo script que son directamente ejecutados por un inteacuterprete y no necesitan compilacioacuten Los lenguajes de programacioacuten pueden clasificarse empleando distintos meacutetodos y puntos de vista Esta clasificacioacuten se basa en el paradigma que utilizan Se debe aclarar que existen muchos maacutes paradigmas y subparadigmas de programacioacuten no incluidos dentro de los mencionados Ademaacutes todaviacutea hay conflictos en las definiciones y alcances de ciertos paradigmas
23 PARADIGMAS DE PROGRAMACIOacuteN Un paradigma de programacioacuten provee (y determina) la visioacuten y meacutetodos de un programador en la construccioacuten de un programa o subprograma Diferentes paradigmas resultan en diferentes estilos de programacioacuten y en diferentes formas de pensar la solucioacuten de problemas (con la solucioacuten de muacuteltiples ldquoproblemasrdquo se construye una aplicacioacuten) Los lenguajes de programacioacuten son basados en uno o maacutes paradigmas (Veacutease Programacioacuten en muacuteltiples paradigmas) Por ejemplo Smalltalk y Java son lenguajes basados en el paradigma orientado a objetos El lenguaje de programacioacuten Scheme en cambio soporta soacutelo programacioacuten funcional En cambio Python soporta muacuteltiples paradigmas Clasificacioacuten por paradigmas de programacioacuten Paradigma Imperativo describe la programacioacuten como una secuencia instrucciones o comandos que cambian el estado de un programa El coacutedigo maacutequina en general estaacute basado en el paradigma imperativo Su contrario es el paradigma declarativo En este paradigma se incluye el paradigma procedimental (procedural) entre otros Paradigma Declarativo No se basa en el coacutemo se hace algo (coacutemo se logra un objetivo paso a paso) sino que describe (declara) coacutemo es algo En otras palabras se enfoca en describir las propiedades de la solucioacuten buscada dejando indeterminado el algoritmo (conjunto de instrucciones) usado para encontrar esa solucioacuten Es maacutes complicado de implementar que el paradigma imperativo tiene desventajas en la eficiencia pero ventajas en la solucioacuten de determinados problemas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
9
Paradigma Estructurado la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Ademaacutes la programacioacuten se controla con secuencia seleccioacuten e iteracioacuten Permite reutilizar coacutedigo programado y otorga una mejor compresioacuten de la programacioacuten Es contrario al paradigma inestructurado de poco uso que no tiene ninguna estructura es simplemente un ldquobloquerdquo como por ejemplo los archivos batch (bat) Paradigma Orientado a Objetos estaacute basado en la idea de encapsular estado y operaciones en objetos En general la programacioacuten se resuelve comunicando dichos objetos a traveacutes de mensajes (programacioacuten orientada a mensajes) Se puede incluir -aunque no formalmente- dentro de este paradigma el paradigma basado en objetos que ademaacutes posee herencia y subtipos entre objetos Ej Simula Smalltalk C++ Java Visual Basic NET etc Su principal ventaja es la reutilizacioacuten de coacutedigos y su facilidad para pensar soluciones a determinados problemas Paradigma Funcional este paradigma concibe a la computacioacuten como la evaluacioacuten de funciones matemaacuteticas y evita declarar y cambiar datos En otras palabras hace hincapieacute en la aplicacioacuten de las funciones y composicioacuten entre ellas maacutes que en los cambios de estados y la ejecucioacuten secuencial de comandos (como lo hace el paradigma procedimental) Permite resolver ciertos problemas de forma elegante y los lenguajes puramente funcionales evitan los efectos secundarios comunes en otro tipo de programaciones Paradigma loacutegico se basa en la definicioacuten de reglas loacutegicas para luego a traveacutes de un motor de inferencias loacutegicas responder preguntas planteadas al sistema y asiacute resolver los problemas Ej prolog Otros paradigmas y subparadigmas son paradigma orientado al sujeto paradigma heuriacutestico paradigma reflectante programacioacuten basada en reglas paradigma basado en restricciones programacioacuten basada en prototipos etc
24 iquestPOR QUEacute PYTHON
241 Caracteriacutesticas de Python
Python es un lenguaje de programacioacuten de tipo script creado por Guido van Rossum a principios de los antildeos 90 cuyo nombre proviene del grupo ldquoMonty Pythonrdquo El objetivo es un lenguaje con una sintaxis muy limpia y con un coacutedigo legible Python es un lenguaje de programacioacuten multiparadigma Esto significa que maacutes que forzar a los programadores a adoptar un estilo particular de programacioacuten permite varios estilos programacioacuten orientada a objetos programacioacuten imperativa funcional estructurada
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
10
etc Otros paradigmas estaacuten soportados mediante el uso de extensiones Los lenguajes de script (lenguajes interpretados de muy alto nivel como Perl y Python) gozan de creciente importancia e implantacioacuten en el mundo del software libre Python es un lenguaje de programacioacuten faacutecil de aprender y potente Dispone de eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos simple pero eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de las plataformas En Python no hay terminadores de sentencia (como el punto y como de CC++Java) ni marcas de iniciofin de bloque (como las llaves de esos mismos lenguajes) La indentacioacuten como forma de marcar bloques elimina errores propios de los lenguajes citados y que son frecuentes en los estudiantes y tambieacuten en los programadores profesionales sentencias condicionales sin accioacuten por antildeadir un punto y coma incorrectos bucles con una sola sentencia cuando parece que hay dos o maacutes (por omisioacuten de llaves con un sangrado inadecuado del programa) sentencias con semaacutentica ldquoalteradardquo por usar una coma cuando corresponde un punto y coma o por omitir un punto y coma al declarar un registro antes de una funcioacuten etc La indentacioacuten soacutelo resulta molesta cuando el tamantildeo de un bloque de cierta profundidad excede del tamantildeo de la ventana del editor Python es un lenguaje interpretado Los lenguajes interpretados permiten ciclos de desarrollo breves (edicioacuten y ejecucioacuten) que animan a los estudiantes a experimentar Python dispone de un entorno de ejecucioacuten que ayuda a detectar los errores (incluyendo aquellos que soacutelo se manifiestan en ejecucioacuten) sentildealaacutendolos con mensajes muy informativos Python ofrece ademaacutes un entorno interactivo con el que es posible efectuar pequentildeas pruebas o disentildear incrementalmente las soluciones a los problemas La contrapartida de que se trate de un lenguaje interpretado es obviamente la menor velocidad de ejecucioacuten Python puede considerarse pseudocoacutedigo ejecutable Es muy expresivo y su sintaxis sencilla interfiere poco en la implementacioacuten de algoritmos asiacute que resulta un buen sustituto del pseudocoacutedigo con la ventaja de que los algoritmos codificados en Python siacute son ejecutables Python ofrece un rico conjunto de estructuras de datos flexibles El tipo lista de python (un vector dinaacutemico heterogeacuteneo) permite introducir con naturalidad el concepto de secuencia y presentar los algoritmos baacutesicos de manejo de secuencias Que la indexacioacuten empiece siempre en 0 ayuda a dar el salto a C C++ o Java El entorno de ejecucioacuten proporciona comprobacioacuten de validez de los iacutendices eliminando asiacute una de las principales fuentes de problemas de C y C++ El hecho de que las listas sean
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
11
redimensionables elimina al programador la necesidad de tomar decisiones acerca de la longitud maacutexima de los vectores demasiado pronto Por otra parte Python es un lenguaje muy ortogonal una vez se ha aprendido a manejar listas por ejemplo se sabe manejar cadenas ya que ambos tipos son secuenciales y presentan conjuntos de operadores con igual nombre y semaacutentica Ademaacutes de listas y cadenas Python ofrece tuplas (listas inmutables) y diccionarios (vectores asociativos) Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc No es que haya que presentar todos los moacutedulos pero sirve para ayudar a consultar la documentacioacuten de las bibliotecas disponibles favorece la programacioacuten eficiente
Python es orientado a objetos A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulos en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar al de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
El inteacuterprete de Python y su extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables para las plataformas maacutes importantes en la sede web de Python httppythonorg y se pueden distribuir libremente La misma sede contiene tambieacuten distribuciones y direcciones de muchos moacutedulos programas y herramientas Python de terceras partes ademaacutes de documentacioacuten adicional Es faacutecil ampliar el inteacuterprete de Python con nuevas funciones y tipos de datos implementados en C o C++ (u otros lenguajes a los que se pueda acceder desde C) Python es tambieacuten adecuado como lenguaje de extensioacuten para aplicaciones adaptables al usuario Algunas de las empresas que usan Python son Google Yahoo Industrial Light amp Magic Walt Disney NASA SGI Inc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
12
3 INSTRUMENTACIOacuteN Y SOFTWARE EMPLEADOS PHYTON
31 INTRODUCCIOacuteN A PYTHON Como se comentoacute en el punto anterior Python
es orientado a objetos (realmente es multiparadigma aceptando distintos tipos de paradigmas) A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulo en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar a l de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc
Entre estas bibliotecas cabe mencionar Numpy Numpy es un moacutedulo de Python escrito en C que define los vectores numeacutericos las matrices y las operaciones entre ellos Ademaacutes de las funciones sobre vectores y matrices tambieacuten incluye funciones trigonomeacutetricas del tipo sin cos tan etc Numpy es el paquete fundamental necesario para programacioacuten cientiacutefica con Python Contiene entre otras cosa
Un poderoso N-dimensional objeto vector Sofisticadas funciones Herramientas para integracioacuten con coacutedigo de C C++ y Fortram Uacutetiles de algebra lineal Transformada de Fourier y capacidades de
nuacutemeros aleatorios Ademaacutes de sus usos cientiacuteficos obvios NumPy tambieacuten se puede utilizar como un eficiente multi-dimensional contenedor de datos geneacutericos Pueden ser definidos tipos arbitrarios de datos Esto permite integrar a la perfeccioacuten y raacutepidamente con una amplia variedad de bases de datos El objeto principal de Numpy es el vector homogeacuteneo multidimensional Eacuteste es una tabla de elementos (generalmente nuacutemeros) todos del mismo tipo indexados por una tupla de enteros positivos Por ldquomultidimensionalrdquo entendemos que los vectores pueden tener varias dimensiones de ejes El nuacutemero de ejes se llamaraacuten a menudo ldquorangordquo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
13
Por ejemplo las coordenadas de un punto en el espacio 3D seriacutea [1 2 1] que
representariacutea un vector de rango 1 de longitud 3 Otro ejemplo seriacutea
[[ 1 0 0]
[ 0 1 2]]
que representa un array de rango 2 (2 dimensiones) Para maacutes informacioacuten mirar
Numpy Glossary
Otras libreriacuteas importantes en Python son Scipy es otra libreriacutea que usa Numpy El desarrollo de Scipy comenzoacute en el antildeo 2001 Sus oriacutegenes se remontan al paquete con extensiones numeacutericas para Python denominado Numeric Posteriormente aparecioacute Numarray con la intencioacuten de construir un paquete maacutes flexible y de limpiar el coacutedigo aunque resultoacute ser maacutes lengo para caacutelculos matriciales en pocas dimensiones En el antildeo 2005 el principal impulsor de Scipy Travis Oliphant reunificoacute ambos en un uacutenico paquete que integrse las ventajas de ambos y se denominoacute Numpy considerado el nuacutecleo de Scipy Scipy en siacute mismo se concibe actualmente como una extensioacuten de las funcionalidades de Numpy
Scipy posee moacutedulos para optimizacioacuten de funciones integracioacuten funciones especiales resolucioacuten de ecuaciones diferenciales ordinarias y otros muchos aspectos
Puede ser usado con Linux Windows y ha sido tambieacuten compilado para Sun y Mac
Scipy es un proyecto de software libre que ha sido patrocinado por una compantildeiacutea Enthought inc
Su organizacioacuten se estructura en subpaquetes que se pueden considerar especializados en dominios cientiacuteficos determinados Podemos encontrar estos paquetes seguacuten la ayuda de scipy (v046)
stats -- Statistical Functions sparse -- Sparse matrix lib -- Python wrappers to external libraries linalg -- Linear algebra routines signal -- Signal Processing Tools misc -- Various utilities that dont have another home interpolate -- Interpolation Tools [] optimize -- Optimization Tools [] cluster -- Vector Quantization Kmeans [] fftpack -- Discrete Fourier Transform algorithms []
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
14
io -- Data input and output [] maxentropy -- Routines for fitting maximum entropy models [] integrate -- Integration routines [] liblapack -- Wrappers to LAPACK library [] special -- Special Functions [] libblas -- Wrappers to BLAS library []
Matplotlib es una libreriacutea de Python que facilita la publicacioacuten de calidad de la publicacioacuten interactiva Permite obtener graacuteficas de calidad para publicaciones Su principal submoacutedulo para dibujar es pyplot Mayavi Ipython PIL (Python Imaging Library) Pythonxy EPD (Enthought python distribution $$) hellip Este texto como Memoria de un Proyecto Final de Maacutester no pretende ser ni mucho menos un manual de Python pero siacute son necesarios unos conocimientos previos primero para comprender la filosofiacutea del programador y posteriormente saber las utilidades que podemos obtener al trabajar con Python Para ello vamos a incluir algunos detalles incluidos entro de la Guiacutea de aprendizaje de Python por Guido Van Rossum v24 creador de Python Para la realizacioacuten de este documento se ha consultado como aparece en Bibliografiacutea y Referencias en la Web numerosa documentacioacuten pero como punto de partida parece loacutegico recoger la documentacioacuten de la Guiacutea de aprendizaje del propio creador de Python Python contiene una serie de palabras clave dependientes de la versioacuten de instalacioacuten para asegurarnos de las palabras clave de la versioacuten descargada podemos introducir el siguiente coacutedigo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
15
Palabras clave de Python De la misma manera Python trae consigo ciertas funciones que vienen de serie esto es no es necesario cargarlas desde ninguacuten moacutedulo Dichas funciones dependen de la versioacuten de Python instalada En la paacutegina httpdocspythonorglibraryfunctionshtml Nos encontramos con dicha relacioacuten A modo de resumen eacutestas son (ver paacutegina siguiente)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
16
Funciones internas de Python
311 Guiacutea de aprendizaje de Python por Guido Van Rossum v24
Extractos del documento Si en alguna ocasioacuten hemos escrito un guioacuten para un inteacuterprete de oacuterdenes (o shell script) de UNIX largo puede que hayamos sentido que nos encantariacutea antildeadir una caracteriacutestica maacutes pero ya es tan lento tan grande tan complicadohellip O la caracteriacutestica involucra una llamada al sistema u otra funcioacuten accesible soacutelo desde C El problema en siacute no suele ser tan complejo como para transformar el guioacuten en un programa en C Igual el programa requiere cadenas de longitud variable u otros tipos de datos (como listas ordenadas de nombres de fichero) faacuteciles en sh pero tediosas en C o quizaacute no tengamos tanta soltura con C Otra situacioacuten Quizaacute tengas que trabajar con bibliotecas de C diversas y el ciclo normal en C de escribir-compilar-probar-recompilar es demasiado lento Necesitas desarrollar software con maacutes velocidad Posiblemente has escrito un programa al que vendriacutea bien un lenguaje de extensioacuten y no quieres disentildear un lenguaje escribir y depurar el inteacuterprete y adosarlo a la aplicacioacuten En tales casos Python puede ser el lenguaje que necesitas Python es simple pero es un lenguaje de programacioacuten real Ofrece maacutes apoyo e infraestructura para programas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
17
grandes que el inteacuterprete de oacuterdenes Por otra parte tambieacuten ofrece mucho maacutes comprobacioacuten de errores que C y al ser un lenguaje de muy alto nivel tiene incluidos tipos de datos de alto nivel como matrices flexibles y diccionarios que llevariacutean diacuteas de programacioacuten en C Dados sus tipos de datos maacutes generales se puede aplicar a un rango de problemas maacutes amplio que Awk o incluso Perl pero muchas cosas son al menos igual de faacuteciles en Python que en esos lenguajes Python te permite dividir su programa en moacutedulos reutilizables desde otros programas en Python Viene con una gran coleccioacuten de moacutedulos estaacutendar que puedes utilizar como base de tus programas (o como ejemplos para empezar a aprender Python) Tambieacuten hay moacutedulos incluidos que proporcionan ES de ficheros llamadas al sistema ldquosocketsrdquo y hasta interfaces graacuteficas con el usuario como Tk Python es un lenguaje interpretado lo que ahorra un tiempo considerable en el desarrollo del programa pues no es necesario compilar ni enlazar El inteacuterprete se puede utilizar de modo interacivo lo que facilita experimentar con caracteriacutesticas del lenguaje escribir programas desechables o probar funciones durante el desarrrollo del prgram de la base hacia arriba Tambieacuten es una calculadora muy uacutetil Python permite escribir programas muy compactos y legibles Los programas escritos en Python son normalmente mucho maacutes cortos que sus equivalentes en C o C++ por varios motivos
Los tipos de datos de alto nivel permiten expresar operaciones complejas en una sola sentencia
El agrupamiento de sentencias se realiza mediante sangrado (indentacioacuten) en lugar de beginend o llaves
No es necesario declarar los argumentos ni las variables
Python es ampliable si ya sabes programar en C es faacutecil antildeadir una nueva funcioacuten o moacutedulo al inteacuterprete para realizar operaciones criacuteticas a la maacutexima velocidad o para enlazar programas en Python con bibliotecas que soacutelo estaacuten disponibles en forma binaria (como bibliotecas de graacuteficos especiacuteficas del fabricante) Una vez enganchado puedes enlazar el inteacuterprete de Python a una aplicacioacuten escrita en C y utilizarlo como lenguaje de macros para dicha aplicacioacuten
3111 Llamar al inteacuterprete
En UNIX el inteacuterprete de Python se suele instalar como bdquousrlocalbinpython‟ en aquellas maacutequinas donde esteacute disponible En Windows se instala en el directorio bdquoArchivos de programa‟ o en cualquier otro directorio seleccionado Poner este directorio en la ruta de ejecutables hace posible arrancarlo tecleando en el inteacuterprete de oacuterdenes la orden
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
18
Python
Como la eleccioacuten del directorio donde reside el inteacuterprete es una opcioacuten de instalacioacuten es posible que se halle en otros lugares Consulta con tu guru de Python local o tu administrador de sistemas (por ejemplo bdquousrlocalpython‟ es una alternativa recuente) Teclear un caraacutecter fin de fichero (Control-D en UNIX Control-Z en DOS o Windows) en el inteacuterprete causa la salida del inteacuterprete con un estado cero Si eso no funciona se puede salir del inteacuterprete tecleando las siguientes oacuterdenes bdquoimport sys sysexit()‟ Las opciones de edicioacuten de la liacutenea de oacuterdenes no son muy destacables En UNIX es posible que quien instalara el inteacuterprete en su sistema incluyera soporte para la biblioteca de GNU bdquoreadline‟ que permite una edicioacuten de liacutenea maacutes elaborada y la recuperacioacuten de oacuterdenes anteriores El modo maacutes raacutepido de ver si hay soporte de edicioacuten de liacuteneas es teclear Control-P en cuanto aparece el inteacuterprete Si pita la edicioacuten de liacuteneas estaacute disponible Si no sale nada o sale ^P no estaacute disponible la edicioacuten de liacuteneas y soacutelo se puede utilizar la tecla de borrado para borrar el uacuteltimo caraacutecter tecleado El inteacuterprete funciona como el inteacuterprete de oacuterdenes de UNIX cuando se lo llama con la entrada estaacutendar conectada a un dispositivo tty lee y ejecuta las oacuterdenes interactivamente cuando se le da un nombre de fichero como argumento o se le da un fichero como entrada estaacutendar lee y ejecuta un guion desde ese fichero Otro modo de arrancar el inteacuterprete es bdquopython -c orden [argumento] ‟ que ejecuta las sentencias de orden de forma anaacuteloga a la opcioacuten -c de la liacutenea de oacuterdenes Como las sentencias de Python suelen contener espacios u otros caracteres que la liacutenea de oacuterdenes considera especiales lo mejor es encerrar orden entre dobles comillas por completo
Imagen de la pantalla al abrir Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
19
Hay moacutedulos de Python que son uacutetiles como programas independientes Se los puede llamar mediante ldquopython-m moacutedulo[arg] helliprdquo que ejecuta el fichero de coacutedigo fuente de module como si se hubiera dado el nombre completo en la liacutenea de oacuterdenes Cuando se leen oacuterdenes desde una tty se dice que el inteacuterprete estaacute en modo interacitov En este modo espera a la siguiente orden con el indicador principal que suele ser tras signos ldquomayorrdquo (ldquogtgtgtrdquo) Para las liacuteneas adicionales se utiliza el indicador secundario por omisioacuten tres puntos (ldquohelliprdquo)
Programar en Python puede hacerse de varias maneras seguacuten la necesidad o el gusto de cada persona Para los neoacutefitos mi recomendacioacuten es que utilicen el ambiente graacutefico interactivo llamado IDLE Esta herramienta viene incluiacuteda con el moacutedulo tkinter Ademaacutes de resaltar la sintaxis en colores permite editar archivos fuente y es maacutes amigable al inicio
El IDLE tiene dos ambientes el shell interactivo con tiacutetulo Python Shell en su ventana muestra el prompt gtgtgt y espera un comando y uno o maacutes editores que se abren con el menuacute File --gt New Window Cada editor empieza con el tiacutetulo Untitled en su ventana el cual cambia hasta que se salva a un archivo con File --gt Save As (y subsecuentemente File --gt Save) Cada editor nos permite ejecutar el coacutedigo Python que contiene
Se recomienda crear una carpeta para realizar y guardar los ejemplos Para correr idle cambiar primero a esa carpeta y entonces correr idle En MS- Windows
Cejemplosgt Cpython22idleidle
En Linux
[usuariopc ejemplos]$ idle amp La primera vez que hacemos un ejemplo hemos de intentar hacerlo paso a paso en forma interactiva en el shell tecleando cada comando Es la forma en que aprendemos maacutes que si simplemente copiamos y pegamos Una vez que tecleamos y funcionan las cosas podemos copiar del shell interactivo y pegamos a una ventana de editor y salvamos en un archivo con terminacioacuten py para que conservemos lo que hicimos para siempre
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
20
Imagen del Shell interactivo de IDLE
Acceso a nueva ventana dentro del Shell interactivo de IDLE
Nueva ventana del editor de IDLE Una vez que partiendo de una ventana vacia tenemos nuestro coacutedigo hemos de seleccionar FileSave As para guardar el archivo y tenerlo disponible
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
21
Ventana del editor de IDLE con coacutedigo preparado para guardar
Una vez que nos hemos asegurado de que tenemos el coacutedigo guardado iquestcoacutemo hacemos para ejecutar el programa La respuesta es seleccionando Run Module En caso de seleccionar Run Module antes de guardar el coacutedigo Python nos pide que lo guardemos anteshellip Al seleccionar Run Module Python iraacute interpretando liacutenea por liacutenea y mostrando los resultados a traveacutes del Inteacuterprete Si existiese alguacuten error de sintaxis se avisa del tipo de error y doacutende se produce Una vez corregido el problema se vuelve a intentar el Run Module
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
22
El tener un inteacuterprete permite ir probando partes de programas sobre las que no se estaacute seguro y ver coacutemo reaccionan para poder decidir si se incluyen o no y coacutemo se pueden adaptar Asiacute se estaacute continuamente alternando entre el inteacuterprete y el programa Maacutes informacioacuten en httpdocspythonorglibraryidlehtml
3112 Moacutedulos
Si salimos del inteacuterprete de Python y vuelves a entrar las definiciones que se hayan hecho (funciones y variables) se pierden Por ello si se quiere escribir un programa algo maacutes largo seraacute mejor que se utilice un editor de texto para preparar la entrada del inteacuterprete y ejecutarlo con ese fichero como entrada Esto se llama crear un guioacuten Seguacuten vayan creciendo los programas puede que quieras dividirlos en varios ficheros para facilitar el mantenimiento Puede que tambieacuten quieras utilizar una funcioacuten que has escrito en varios programas sin tener que copiar su definicioacuten en cada programa Para lograr esto Python tiene un modo de poner definiciones en un fichero y utilizarlas en un guioacuten o en una instancia interactiva del inteacuterprete Tal fichero se llama moacutedulo las definiciones de un moacutedulo se pueden importar a otros moacutedulos o al moacutedulo principal (la coleccioacuten de variables accesible desde un guioacuten ejecutado desde el nivel superior y en el modo de calculadora) Un moacutedulo es un fichero que contiene definiciones y sentencias de Python El nombre del fichero es el nombre del moacutedulo con el sufijo ldquopyrdquo Dentro de un moacutedulo el nombre del moacutedulo (como cadena) es accesible mediante la variable global __name__ Un moacutedulo puede contener sentencias ejecutables ademaacutes de definiciones de funciones Estas sentencias sirven para inicializar el moacutedulo Soacutelo se ejecutan la primera vez que se importa el moacutedulo en alguna parte1 Cada moacutedulo tiene su propia tabla de siacutembolos que utilizan todas las funciones definidas por el moacutedulo como tabla de siacutembolos global Por ello el autor de un moacutedulo puede utilizar variables globales dentro del moacutedulo sin preocuparse por conflictos con las variables globales de un usuario del moacutedulo Por otra parte si sabes lo que haces puedes tocar las variables globales de un moacutedulo con la misma notacioacuten utilizada para referirse a sus funciones nombreModnombreElem Los moacutedulos pueden importar otros moacutedulos Es una costumbre no obligatoria colocar todas las sentencias ldquoimportrdquo al principio del moacutedulo (o guioacuten) Los nombres del moacutedulo importado se colocan en la tabla de siacutembolos global del moacutedulo (o guioacuten) que lo importa Existe una variacioacuten de la sentencia import que importa los nombres de un moacutedulo directamente a la tabla de siacutembolos del moacutedulo que lo importa Por ejemplo
gtgtgt from fibo import fib fib2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
23
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto no introduce el nombre del moacutedulo del que se toman los elementos importados en la tabla de siacutembolos local (por lo que en el ejemplo no estaacute definido fibo) Ademaacutes existe una variacioacuten que importa todos los nombres que define un moacutedulo gtgtgt from fibo import
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto importa todos los nombres excepto los que empiezan por un guioacuten bajo (_)
3113 El camino de buacutesqueda de moacutedulos
Cuando se importa un moacutedulo denominado fiambre el inteacuterprete busca un fichero denominado bdquofiambrepy‟ en el directorio actual y luego en la lista de directorios especificada por la variable de entorno PYTHONPATH Tiene la misma sintaxis que la variable de liacutenea de oacuterdenes PATH de UNIX que es una lista de nombres de directorios Cuando PYTHONPATH no tiene ninguacuten valor o no se encuentra el fichero se continuacutea la buacutesqueda en un camino dependiente de la instalacioacuten En UNIX normalmente es bdquousrlocallibpython‟ En realidad se buscan los moacutedulos en la lista de directorios dada por la variable syspath que se inicializa desde el directorio que contiene el guioacuten de entrada (o el directorio actual) PYTHONPATH y el valor por omisioacuten dependiente de la instalacioacuten Esto permite que los programas que saben lo que hacen modifiquen o reemplacen el camino de buacutesqueda de moacutedulos Obseacutervese que como el directorio que contiene el guioacuten bajo ejecucioacuten estaacute en el camino de buacutesqueda de moacutedulos es importante que el moacutedulo no tenga el mismo nombre que un moacutedulo estaacutendar o Python lo intentaraacute cargar el guioacuten como moacutedulo cuando se importe el moacutedulo Normalmente esto provocaraacute errores
3114 Ficheros Python ldquoCompiladosrdquo
Como mejora considerable del tiempo de arranque de programas cortos que utilizan muchos moacutedulos estaacutendar si existe un fichero llamado bdquofiambrepyc‟ en el directorio donde se encuentra bdquofiambrepy‟ se supone que contiene una versioacuten previamente ldquocompilada a byterdquo del moacutedulo fiambre La fecha y hora de la versioacuten de bdquofiambrepy‟
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
24
utilizada para generar bdquofiambrepyc‟ se graba en bdquofiambrepyc‟ y no se considera el fichero bdquopyc‟ si no concuerdan Normalmente no hay que hacer nada para generar el fichero bdquofiambrepyc‟ Siempre que bdquofiambrepy‟ se compile sin errores se hace un intento de escribir la versioacuten compilada a bdquofiambrepyc‟ No se provoca un error si falla el intento Si por cualquier motivo no se escribe completamente el fichero el fichero bdquofiambrepyc‟ resultante seraacute reconocido como no vaacutelido y posteriormente ignorado El contenido del fichero bdquofiambrepyc‟ es independiente de la plataforma por lo que se puede compartir un directorio de moacutedulos entre maacutequinas de diferentes arquitecturas
3115 Moacutedulos estandar
Python viene con una biblioteca de moacutedulos estaacutendar descrita en un documento aparte la Referencia de las bibliotecas Algunos moacutedulos son internos al inteacuterprete y proporcionan acceso a las operaciones que no son parte del nuacutecleo del lenguaje pero se han incluido por eficiencia o para proporcionar acceso a primitivas del sistema operativo como las llamadas al sistema El conjunto de dichos moacutedulos es una opcioacuten de configuracioacuten que tambieacuten depende de la plataforma subyacente Por ejemplo el moacutedulo amoeba soacutelo se proporciona en sistemas que de alguacuten modo tienen acceso a primitivas Amoeba Hay un moacutedulo en particular que merece una especial atencioacuten el moacutedulo sys que es siempre interno en cualquier inteacuterprete de Python Estas variables soacutelo estaacuten definidas si el inteacuterprete estaacute en modo interactivo La variable syspath es una lista de cadenas que determina el camino de buacutesqueda de moacutedulos del inteacuterprete Se inicializa a un valor por omisioacuten tomado de la variable de entorno PYTHONPATH o de un valor por omisioacuten interno si PYTHONPATH no tiene valor Se puede modificar mediante operaciones de lista estaacutendar por ejemplo gtgtgt import sys gtgtgt syspathappend(‟ufsguidolibpython‟)
3116 Paquetes
Los paquetes son un meacutetodo de estructurar el espacio nominal de moacutedulos de Python mediante el uso de ldquonombres de moacutedulos con puntordquo Por ejemplo el nombre de moacutedulo AB hace referencia a un submoacutedulo denominado ldquoBrdquo de un paquete denominado ldquoArdquo Del mismo modo que el uso de moacutedulos evita que los autores de diferentes moacutedulos tengan que preocuparse de los nombres de variables globales de los otros la utilizacioacuten de nombres de moacutedulo con puntos evita que los autores de paquetes multi-moacutedulo como Numpy o Pil (Biblioteca de tratamiento de imagen de
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
25
python) tengan que preocuparse de los nombres de los moacutedulos ajenos Supoacuten que deseas disentildear una coleccioacuten de moacutedulos (un paquete) para tratar de manera uniforme ficheros de sonido y datos de sonido Existen muchos formatos de fichero de sonido (que se suelen distinguir por la extensioacuten como bdquowav‟ bdquoaiff‟ o bdquoau‟) por lo que podriacuteas necesitar crear y mantener una coleccioacuten creciente de moacutedulos de conversioacuten entre los diferentes formatos Tambieacuten existen muchas operaciones posibles sobre los datos de sonido (tales como mezclar antildeadir eco ecualizar o generar un efecto artificial de estereofoniacutea) por lo que ademaacutes estariacuteas escribiendo una serie de moacutedulos interminable para realizar estas operaciones He aquiacute una posible estructura de tu paquete (expresado en teacuterminos de sistema de ficheros jeraacuterquico)
Sonido Paquete de nivel superior __init__py Inicializa el paquete de sonido
Formatos Subpaquete de conversiones de formato de ficheros __init__py leerwavpy escriwavpy leeraiffpy escriaiffpy leeraupy escriaupy Efectos Subpaquete de efectos de sonido __init__py ecopy surroundpy inversopy Filtros Subpaquete de filtros __init__py ecualizadorpy vocoderpy karaokepy
Modelo de estructura paquetemoacutedulo Al importar el paquete Python rastrea los directorios de syspath buscando por el subdirectorio de paquetes Los ficheros bdquo__init__py‟ son necesarios para que Python trate los directorios como contenedores de paquetes Se hace asiacute para evitar que los directorios con nombres
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
26
comunes como bdquotest‟ oculten accidentalmente moacutedulos vaacutelidos que aparezcan maacutes tarde dentro del camino de buacutesqueda En el caso maacutes sencillo bdquo__init__py‟ puede ser un fichero vaciacuteo pero tambieacuten puede ejecutar coacutedigo de inicializacioacuten del paquete o actualizar la variable __all__ descrita posteriormente Los usuarios del paquete pueden importar moacutedulos individuales del paquete por ejemplo import SonidoEfectoseco
De este modo se carga el submoacutedulo SonidoEfectoseco Hay que hacer referencia a eacutel por su nombre completo SonidoEfectosecofiltroeco(entrada salida retardo=07
aten=4)
Un modo alternativo de importar el submoacutedulo es from SonidoEfectos import eco
Asiacute tambieacuten se carga el submoacutedulo eco y se hace disponible sin su prefijo de paquete por lo que se puede utilizar del siguiente modo ecofiltroeco(entrada salida retardo=07 aten=4)
Y otra variacioacuten es importar la funcioacuten o variable deseada directamente from SonidoEfectoseco import filtroeco
De nuevo se carga el submoacutedulo eco pero se hace la funcioacuten filtroeco disponible directamente filtroeco(entrada salida retardo=07 aten=4)
Observa que al utilizar from paquete import elemento el elemento puede ser tanto un submoacutedulo (o subpaquete) del paquete como cualquier otro nombre definido por el paquete como una funcioacuten clase o variable La sentencia import comprueba primero si el elemento estaacute definido en el paquete Si no asume que es un moacutedulo e intenta cargarlo Si no lo consigue se provoca una excepcioacuten ImportError Sin embargo cuando se utiliza la sintaxis
importelementosubelementosubsubelemento cada elemento menos el
uacuteltimo debe ser un paquete El uacuteltimo elemento puede ser un moacutedulo o un paquete
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
27
pero no una clase funcioacuten o variable definida en el nivel superior
3117 Importar de un paquete
Y iquestqueacute ocurre cuando el usuario escribe from SonidoEfectos import En teoriacutea deberiacutea rastrearse el sistema para encontrar queacute submoacutedulos existen en el paquete e importarlos todos Por desgracia esta operacioacuten no funciona muy bien en las plataformas Windows y Mac en las que el sistema de ficheros no tiene una idea muy precisa de las mayuacutesculas de un fichero En estas plataformas no hay un modo garantizado de conocer si un fichero bdquoECOPY‟ deberiacutea ser importado como eco Eco o ECO (por ejemplo Windows 95 tiene la molesta costumbre de mostrar todos los nombres de fichero con la primera letra en mayuacutescula) La restriccioacuten de nombres de fichero DOS (8+3) antildeade otro problema para los nombres de moacutedulo largos La uacutenica solucioacuten es que el autor del paquete proporcione un iacutendice expliacutecito del paquete La sentencia import utiliza la siguiente convencioacuten Si el coacutedigo del bdquo__init__py‟ de un paquete define una lista llamada __all__ se considera que es la lista de nombres de moacutedulos que se deben importar cuando se encuentre from paquete import Depende del autor del paquete mantener la lista actualizada cuando se libere una nueva versioacuten del paquete Los autores del paquete pueden decidir no mantenerlo si no es uacutetil importar del paquete Por ejemplo el fichero bdquoSonidoEfectos__init__py‟ podriacutea contener el siguiente coacutedigo __all__ = [eco surround inverso] Esto significariacutea que from SonidoEfectos import importariacutea los tres submoacutedulos mencionados del paquete Sonido Si __all__ no estaacute definido la sentencia from SonidoEfectos import no importa todos los moacutedulos del subpaquete SonidoEfectos al espacio nominal actual Soacutelo se asegura de que el paquete SonidoEfectos ha sido importado (ejecutando posiblemente el coacutedigo de inicializacioacuten de bdquo__init__py‟) y luego importa cualesquiera nombres definidos en el paquete Esto incluye cualquier nombre definido (y submoacutedulos cargados expliacutecitamente) por bdquo__init__py‟ Tambieacuten incluye cualquier submoacutedulo del paquete expliacutecitamente importado por sentencias import anteriores Mira este coacutedigo import SonidoEfectoseco import SonidoEfectossurround from SonidoEfectos import En este ejemplo los moacutedulos eco y surround se importan al espacio nominal vigente porque estaacuten definidos en el paquete SonidoEfectos cuando se ejecuta la sentencia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
28
fromimport (esto tambieacuten funciona si estaacute definido __all__)
Observa que en general se debe evitar importar de un moacutedulo o paquete ya que suele dar como resultado coacutedigo poco legible Sin embargo se puede usar para evitar teclear en exceso en sesiones interactivas y cuando ciertos moacutedulos esteacuten disentildeados para exportar soacutelo nombres que cumplan ciertas reglas
Recuerda no hay nada incorrecto en utilizar from Paquete import
submoacutedulo_concreto De hecho es la notacioacuten recomendada salvo que el moacutedulo
que importa necesite usar submoacutedulos del mismo nombre de diferentes paquetes
3118 Referencias internas al paquete
Es comuacuten que los submoacutedulos necesiten hacerse referencias cruzadas Por ejemplo el moacutedulo surround podriacutea utilizar el moacutedulo eco De hecho tales referencias son tan comunes que la sentencia import busca antes en el paquete contenedor que en el camino de buacutesqueda de moacutedulos estaacutendar Por ello basta con que el moacutedulo surround use import eco o from eco import filtroeco Si el moacutedulo importado no se encuentra en el paquete actual (el paquete del que el moacutedulo actual es submoacutedulo) la sentencia import busca un moacutedulo de nivel superior con el nombre dado Cuando se estructuran los paquetes en subpaquetes (como el paquete Sonido del ejemplo) no hay un atajo para referirse a los submoacutedulos de los paquetes hermanos y se ha de utilizar el nombre completo del subpaquete Por ejemplo si el moacutedulo SonidoFiltrosvocoder necesita utilizar el moacutedulo eco del paquete SonidoEfectos debe utilizar from SonidoEfectos import eco
32 FUNCIONES INCLUIDAS EN NUMPY POR CATEGORIacuteAS (ARRAY CREATION)
A modo indicativo e introductorio se incluyen las funciones incluidas en la libreriacutea Numpy por categoriacuteas Ver maacutes informacioacuten en httpdocsscipyorgdocnumpy Numerical
arange() arrayrange()
linspace() logspace()
Ones and zeros
empty() empty_like()
eye() identity()
ones() ones_like()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
29
tri() tril() triu()
zeros() zeros_like()
From existing data
array() recarray()
asarray() asanyarray() asmatrix()
copy()
fromarrays() frombuffer() fromfile() fromfunction()
fromiter() loadtxt()
Building matrices
bmat()
diag() diagflat()
mat() matrix()
vander()
Reinterpreting arrays
view()
Types
astype()
cast[]()
int8() int16() int32() int64() int128()
uint8() uint16() uint32() uint64() uint128()
float16() float32() float64() float96() float128()
float256()
complex32() complex64() complex128() complex192()
complex256() complex512()
bool_()
object_()
void() str_() unicode_()
byte() ubyte()
short() ushort()
intc() uintc()
intp() uintp()
int_() uint()
longlong() ulonglong()
single() csingle()
float_() complex_()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
30
longfloat() clongfloat()
Kinds of array
asarray()
asanyarray()
asmatrix()
Changing the number of dimensions
atleast_1d() atleast_2d() atleast_3d()
broadcast()
expand_dims()
squeeze()
Transpose-like operations
rollaxis()
swapaxes()
T transpose()
Reshaping arrays
flat flatten()
ravel()
reshape() shape
Array modification
Joining arrays
append()
column_stack()
concatenate()
dstack() hstack() vstack()
Splitting arrays
array_split()
dsplit() hsplit() split() vsplit()
Enlarging arrays
tile()
repeat()
Adding and removing elements
delete()
insert()
resize()
trim_zeros()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
31
unique()
Rearranging elements
fliplr() flipud()
reshape()
roll()
rot90()
Indexing
[]
take()
put()
putmask()
Indexing syntax
slice()
newaxis
index_exp[]
Generating arrays suitable for indexing
c_[]
r_[]
s_[]
nonzero()
where()
indices()
ix_()
mgrid[]
ogrid()
Indexing-like operations
choose()
where()
compress()
diag() diagonal()
select()
Iterating
flat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
32
ndenumerate()
ndindex()
Logic
[]
all() any()
allclose()
alltrue()
nonzero()
piecewise()
sometrue()
Finding things
argmax() argmin()
searchsorted()
Array statistics
average() mean()
bincount() histogram()
corrcoef()
cov()
max() min() ptp()
median()
std() var()
ufuncs
abs() absolute()
add() multiply()
angle()
arccos() arcsin() arctan()
arccosh() arcsinh() arctanh()
arctan2()
bitwise_and() bitwise_or() bitwise_xor()
ceil() floor() round()
conj() conjugate()
cos() sin() tan()
cosh() sinh() tanh()
fix()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
33
hypot()
logical_and() logical_not() logical_or() logical_xor()
maximum() minimum()
ufunc methods
accumulate()
outer()
reduce()
Functional constructs
apply_along_axis()
apply_over_axis()
vectorize()
Random numbers
beta() binomial() gumbel() poisson() standard_normal()
uniform() vonmises() weibull()
bytes()
permutation()
rand() randint() randn()
random_integers()
random_sample()
ranf()
sample()
seed()
shuffle()
Array math
clip()
cross()
cumprod() cumsum()
diff()
digitize()
dot()
inner()
outer()
inv() pinv()
poly1d()
polyfit()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
34
prod() sum()
tensordot()
vdot()
FFT
fft()
fftfreq()
fftshift()
ifft()
Linear algebra
inv()
lstsq()
solve()
svd()
trace()
Array output
savetxt()
set_printoptions()
tofile()
tolist()
Other
sort() argsort()
binary_repr()
dtype()
fill()
finfo()
generic
imag real
inf nan
item()
lexsort()
ndim
shape
typeDict()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
35
Numpy Functions by Category (uacuteltima edicioacuten 2008-06-13 122659
efectuada por jh)
MoinMoin Powered
Pyt
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
36
4 METODOLOGIacuteA En este apartado se proporciona una descripcioacuten detallada de la metodologiacutea utilizada para el desarrollo e implementacioacuten de la biblioteca Utilizando un paradigma Estructurado de la programacioacuten que considera que la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Esto nos permite reutilizar coacutedigo programado y nos proporciona una mejor comprensioacuten de la programacioacuten En el uacuteltimo paquete de la libreriacutea tambieacuten se ha realizado una incursioacuten a la programacioacuten orientada a objetos con la declaracioacuten de algunas clases
41 ESTRUCTURA DE LA LIBRERIacuteA GEOTOPO En nuestro caso hemos partido del concepto de creacioacuten de una libreriacutea de funciones del aacutembito de la Topografiacutea y Geodesia Esta libreriacutea de Python se estructura como un paquete con el nombre de la libreriacutea ldquogeotopordquo que a su vez contiene 6 paquetes maacutes seguacuten tipologiacutea Asiacute tenemos
Imagen de los paquetes incluidos dentro del paquete (libreriacutea) geotopo
Por orden intuitivo desde el punto de vista de aplicacioacuten de las herramientas tenemos los siguientes paquetes
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
37
general que contiene funciones de tipo general y transversal al resto de herramientas
Moacutedulos implementados dentro de general
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
38
topografia que contiene aplicacioacuten topograacuteficas
Moacutedulos implementados dentro de topografia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
39
geodesia Aplicaciones geodeacutesicas
Moacutedulos implementados dentro de geodesia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
40
proy_cartograficas Herramientas de caacutelculos en diferentes proyeccionesetc
Moacutedulos implementados dentro de proy_cartograficas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
41
transformacioacuten Aplicaciones con modelo de rejilla del IGN y EGM08REDNAP
Moacutedulos implementados dentro de transformacioacuten
aplicaciones Distintos ejemplos de aplicabilidad de las funciones y clases implementadas en los moacutedulos de la libreriacutea
Cada uno de estos paquetes (carpetas) como se ha podido ver contiene a su vez varios moacutedulos y en cada uno de ellos y con su mismo nombre se define una uacutenica funcioacuten por moacutedulo salvo en la carpeta de transformcioacuten donde como se ha comentado antes nos adentramos dentro de la programacioacuten orientada a objetos y en algunos moacutedulos se implementan clases y dentro de estas funciones etc De esta manera al importar una funcioacuten la tenemos que importar desde el modulo que la contenga Dentro de cada carpeta se aprecia la existencia de un fichero llamado __init__py que convierte dicha carpeta en un paquete de Python Se advierte que desde el cierre de esta memoria versioacuten en papel a la entrega total de documentacioacuten puede haberse ampliado el nuacutemero de moacutedulos de la libreriacutea ldquogeotoprdquo que siacute se incluiriacutea en el CD con la implementacioacuten de coacutedigos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
42
42 DOCUMENTADO DE FUNCIONES Se puede documentar una funcioacuten en Python proporcionando una cadena de documentacioacuten (comentarios)
Las comillas triples implican una cadena multiliacutenea Todo lo que haya entre el principio y el final de las comillas es parte de una sola cadena incluyendo los retornos de carro y otras comillas Pueden usarse para definir cualquier cadena pero donde suelen estar maacutes presentes es haciendo de cadena de documentacioacuten Todo lo que hay entre las comillas triples es la cadena de documentacioacuten de la funcioacuten y se usa para explicar lo que hace la funcioacuten En caso de que exista una cadena de documentacioacuten debe ser la primera cosa definida en una funcioacuten (esto es lo primero tras los dos puntos) Teacutecnicamente no es necesario dotar a una funcioacuten de una cadena de documentacioacuten pero debemos de hacerlo siempre En Python esto tiene un incentivo antildeadido la cadena de documentacioacuten estaacute disponible en tiempo de ejecucioacuten como atributo de la funcioacuten
Lecturas complementarias sobre las funciones de documentacioacuten
PEP 257 define las convenciones al respecto de las cadenas de documentacioacuten La Guiacutea de estilo de Python indica la manera de escribir una buena cadena de
documentacioacuten El Tutorial de Python expone convenciones para el espaciado dentro de las
cadenas de documentacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
43
Ejemplo de documentado de funciones con cadena de documentacioacuten
Toda la informacioacuten incluida dentro de una cadena de documentacioacuten de triple comillas estaacute accesible en tiempo de ejecucioacuten Asiacute si pedimos ayuda de una funcioacuten nos aparece toda la informacioacuten incluida en dicha cadena de documentacioacuten
Ejemplo de consulta de la ayuda de las funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
44
En la siguiente web podemos encontrar maacutes informacioacuten sobre el documentado de funciones en Python httpcoderwarcom201106hola-python-la-utilidad-de-los-comentarios Ademaacutes de los comentarios de las funciones en Python como en otros lenguajes de programacioacuten podemos incluir liacuteneas o simples palabras de comentarios En Python se usa el siacutembolo para preceder los comentarios Podemos comentar las liacuteneas de nuestro trabajo
Comentar un grupo de liacuteneas
Determinar el tipo de codificacioacuten Esto es importante para poder usar caracteres especiales como la tilde o la ntilde Generalmente se coloca en la primera liacutenea del programa Existen muchas codificaciones
Poner cabecera a nuestro programa De esta forma identificaremos el nombre del programador la fecha en que se realizoacute y demaacutes datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
45
En el caso que nos atantildee de la libreriacutea geotopo hemos considerado introducir unos comentarios descriptivos de los moacutedulos mediante el caraacutecter y tras la definicioacuten de las funciones se incluyen unas cadenas de documentacioacuten
Ejemplo de la documentacioacuten de moacutedulos y funcioneshellip
Para evitar problemas de codificacioacuten como ha ocurrido durante la implementacioacuten del coacutedigo se han incluido al inicio del mismo dos liacuteneas para solucionar el problema Estas liacuteneas son
Comentarios de los moacutedulos
Cadena de documentacioacuten de funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
46
-- coding iso 8859-1 -
ISO 8859-1 es una norma de la ISO que define la codificacioacuten del alfabeto latino incluyendo diacriacuteticos como letras aceacutentuadas ntilde) y letras especiales necesarios para la escritura de las siguientes lenguas originarias de Europa occidental alemaacuten aragoneacutes asturiano castellano catalaacuten daneacutes escoceacutes espantildeol feroeacutes fineacutes franceacutes gaeacutelico gallego ingleacutes islandeacutes italiano neerlandeacutes noruego portugueacutes sueco y Euskera Tambieacuten conocida como Alfabeto Latino nordm 1 o ISO Latiacuten 1 Esta norma pertenece al grupo de juegos de caracteres de la ISO conocidos como ISOIEC 8859 que se caracterizan por poseer la codificacioacuten ASCII en su rango inicial (128 caracteres) y otros 128 caracteres para cada codificacioacuten con lo que en total utilizan 8 bits -- coding cp1252 -
Si trabajamos con IDLE con el uso de los acentos (en general con los caracteres no ASCII) nos daraacute error Si en el coacutedigo de un programa escribimos una cadena que contenga caracteres no ASCII(acentos ntildeiquestiexcl) al guardar el archivo por primera vez IDLE nos muestra el siguiente mensaje de aviso
Si pulsamos el botoacuten ldquoEdit my filerdquo Al principio del programa se insertaraacute la liacutenea siguiente
-- coding cp1252 --
Que indica el juego de caracteres utilizado en el archivo (cp1252 es el juego de caracteres de Windows para Europa occidental) A partir de entonces podemos guardar el archivo sin problemas Python no tiene una primera o uacuteltima linea exigida pero siacute que es habitual dar la localizacioacuten de Python como primera liacutenea en forma de comentario usrbinpython
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
47
43 FUNCIONES IMPLEMENTADAS A continuacioacuten se incluye una relacioacuten de las funciones implementadas por paquetes Ademaacutes de su nombre y un pequentildeo resumen de su aplicacioacuten se han incluido 3 apartados maacutes En verde Datos de entrada Indica los datos que necesita la funcioacuten Datos de salida Nos muestra si el resultado es uacutenico o una coleccioacuten de resultados (siempre en forma vector en el orden indicado) En rojo Llamadas o ldquoimportacioacutenrdquo de moacutedulos predefinidos del sistema ossys Llamadas a funciones de predefinidas del moacutedulo numpy En morado Llamadas a funciones definidas en esta libreriacutea (geotopo) bien incluidas en el mismo subpaquete que la propia funcioacuten definida o incluida en otro subpaquete De esta manera podemos tener una idea de las funciones implementadas los datos de partida necesarios y los resultados a obtener asiacute como la interrelacioacuten de cada funcioacuten con el resto de funciones de la libreriacutea geotopo Para el caso de cambio de proyeccioacuten o de Sistema de Referencia Coordenado se ha tomado la nomenclatura ldquodesderdquo ldquoardquo ldquoahorardquo Para sentildealar el ldquoardquo se ha elegido el nuacutemero 2 por su pronunciacioacuten to (a) Asiacute por ejemplo para el paso de latitud geodeacutesica a creciente en nombre de la funcioacuten seraacute lat2cre
431 Libreriacutea en Python ldquogeotopogeneralrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 areacor - Caacutelculo de la superficie interior de un poligono sobre el plano
entrada=(matriz) 2columnas xy salida=superficie
import ossys from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
48
busca2col - Localiza la primera fila con los valores recibidos en las dos columnas indicadas
Recibe Valor en la primera y segunda columnas posiciones de las columnas y matriz de busqueda
Devuelve Primera fila que cumple comenzando en 0 entrada=(valorcol1poscol1valorcol2poscol2matriz)
salida=orden de la primera fila que cumple comenzando en 0(oacute -1 si no existe) import ossys
from numpy import shape
busca - Localiza la primera ocurrencia de un nuacutemero en la primera columna de una matriz
entrada=(valormatriz)
salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscacol - Localiza la primera ocurrencia de un nuacutemero en la fila indicada de una matriz
entrada=(valormatriznfil) salida=posicioacuten nuacutemero de columna comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscafil - Localiza la primera ocurrencia de un nuacutemero en la columna indicada de una matriz
entrada=(valormatrizncol) salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
ordena - Ordena las filas de una matriz de menor a mayor seguacuten el contenido de la columna indicada
entrada=(colummatriz) salida=matriz de entrada ordenada
import ossys
from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
49
p_entera - Da la parte entera de un nuacutemero entrada=(nuacutemero) salida=parte entera del nuacutemero
import ossys from numpy import floor
perimetro - Calculo del perimetro de un poliacutegono sobre el plano a partir de las coord de sus veacutertices
entrada=(matriz ) 2columnas xy salida=periacutemetro
import ossys
from numpy import sqrtshape
psdo2rad - Cambio de formato de aacutengulos Pasa del conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex ) a radianes
entrada=(pseudesexa)
salida=radianes
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
rad2psdo - Cambio de formato de aacutengulos Pasa un angulo de radianes al conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex )
entrada=( radianes) salida= pseudesexa
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
50
432 Libreriacutea en Python ldquogeotopotopografiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 acimut - Caacutelculo del acimut entre dos puntos
entrada=(xiyixjyj)
salida=acimut en radianes
import ossys from numpy import arctan2pi
distancia ndash Caacutelculo de la distancia entre dos puntos del mismo
entrada=(xiyixjyj) salida=distancia (misma unidad que coordenadas de entrada
import ossys
from numpy import sqrt
edgcla ndash Caacutelculo del error de una distancia geomeacutetrica utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dgInstrnialtnl)
Dg=distancia geometrica Instr=Matriz de instrumentos
Ni=Altura de instrumento Altp=Altura de prisma
Nl=Nuacutemero de veces de medida de distancia
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edgclaprn ndash Calculo del error de una distancia geometrica utilizando la formulacion claacutesica de teoriacutea de errores Impresioacuten de resultados
entrada=(dgInstrnialtnlfsalida)
dg=distancia geometrica instr=Matriz de instrumentos
ni=Altura de instrumento altp=Altura de prisma
nl=Nuacutemero de veces de medida de distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
51
fsalida=Fichero de salidade datos
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edireh ndash Caacutelculo del error de la lectura horizontal realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(Instrnidisaltpnl)
salida=error de lectura horizontal en radianes
import ossys from numpy import sqrtpi
edirev ndash Caacutelculo del error de la lectura vertical realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(instrni nl) salida=error de lectura cenital en radianes en radianes
import ossys from numpy import sqrtpi
eincz ndash Caacutelculo del error de un desnivel trigonomeacutetrico utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dglvapedgelvInstrni) salida=xpypeplanisolzesolz
import ossys
from numpy import pisqrtcostan
intinv2 ndash Caacutelculo de la interseccioacuten inversa simple en el plano
entrada=(datosinstru)
salida= xpypangmin import ossys
from numpy import sincostanarctan2pizeros
from geotopogeneralordena import ordena
intinv2e ndash Caacutelculo de la interseccioacuten inversa simple en el plano Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru) salida= xpypeplani
import ossys from numpy import shapepisincostanarctan2dottransposezerossqrt
from geotopotopografiaedireh import edireh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
52
intinv3e ndash Caacutelculo de la interseccioacuten inversa 3D simple Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru)
salida= xpypeplanivzpvezp
import ossys from numpy import zerosshapesincos
from geotopotopografiaintinv2e import intinv2e from geotopotopografiadistancia import distancia
from geotopotopografiaedirev import edirev
from geotopotopografiaedgcla import edgcla from geotopotopografiaeincz import eincz
433 Libreriacutea en Python ldquogeotopogeodesiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 aut2lat - paso de latitud autaacutelica a geodeacutesica
entrada=(autnelipsoide) salida=lat
import ossys from numpy import sinarcsin
from geotopogeneralpsdo2rad import psdo2rad from geotopogeneralpsdo2rad import psdo2rad
calcpolo - caacutelculo del polo de la esfera a partir de tres puntos no alineados de la misma de forma que pasen a estar en un mismo paralelo tras realizarse el cambio de polo
entrada(lat1lon1lat2lon2lat3lon3) salida=[latnplonnpcolat]
import ossys from numpy import pisincosarccosarctanarctan2zeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
53
cla2enu - paso de un vector geodeacutesico expresado en componentes polares (observables claacutesicos) a componentes ENU entrada(azvdg)
salida=[ieiniu]
import ossys from numpy import sincoszeros
clhapv - lectura horizontal corregida por altitud del punto visado entrada=(lhzazlat1lat2h2nelipsoide) salida=lhz12c
import ossys
from numpy import sincospi from elipsoide import elipsoide
from radioem import radioem
clhsnlg - lectura horizontal corregida por paso de la seccioacuten normal a la liacutenea geodeacutesica entrada=(lhzs12az12lat1lat2nelipsoide)
salida=lhz12c import ossys
from numpy import sincospi
from elipsoide import elipsoide from radioem import radioem
cre2lat - paso de latitud creciente a geodeacutesica entrada=(crenelipsoide) salida=lat
import ossys
from numpy import sincostanarctanexppi from geotopogeneralpsdo2rad import psdo2rad
from elipsoide import elipsoide
efleutm - paso de la elipse de error de un punto del plano tangente al elipsoide al plano de la proyeccioacuten UTM
entrada=(latlonsemiaesemibeaziaenelipsoidehuso) salida=[semiasimibazia] import ossys from numpy import zerospi from geotopoproy_cartograficaskputm import kputm from geotopoproy_cartograficaskputmh import kputmh from geotopoproy_cartograficasconvutm import convutm from geotopoproy_cartograficasconvutmh import convutmh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
54
elip2esf - determinacioacuten de la esfera tangente al elipsoide en un paralelo indicado entrada=(nelipsoidelat)
salida=[afbe1e2]esfera
import ossys from numpy import zeros
from elipsoide import elipsoide from radiopv import radiopv
elipsoide - calculo los 5 paraacutemetros (afbe1 y 22) de los elipsoides ED50 GRS80 y WGS84 en funcioacuten de un coacutedigo 123 respectivamente entrada=(nelipsoide) 1 2 oacute 3 seguacuten ED50GRS80 oacute WGS84 respectivamente salida=[afbe1e2]
import ossys from numpy import sqrt zeros
enu2cla - paso de un vector geodeacutesico expresado en componentes ENU a componentes polares (observables claacutesicos) entrada=ieiniu salida=[azdgv]
import ossys
from numpy import zerosarcsenarctan2pisqrt
enu2xyz - paso de un vector geodeacutesico expresado en componentes ENU a componentes cartesianas tridimensionales entrada=(latlonieiniu)
salida=[ixiyiz] import ossys
from numpy import sincoszeros
eta_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del primer vertical entrada=(latlon)
salida= eta_ed50
import ossys from numpy import pisqrtcossintan
from elipsoide import elipsoide from radiopv import radiopv
from radioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
55
geo2tri - paso de coordenadas geodeacutesicas a cartesianas tridimensionales para un punto y elipsoide determinados entrada=(latlonhnelipsoide
salida=[XYZ]
import ossys from numpy import cossinzeros
from elipsoide import elipsoide from radiopv import radiopv
lam2lat - caacutelculo de la latitud geodeacutesica que le corresponde a una determinada longitud de arco de meridiano en el elipsoide indicado entrada=(lamnelipsoide salida=lat
import ossys from numpy import cossin
from elipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
lam - caacutelculo de la longitud de arco de meridiano a partir de la latitud geodeacutesica y del elipsoide entrada=(lamnelipsoide
salida=lam import ossys
from numpy import sin cos from elipsoide import elipsoide
lat2aut - paso de latitud geodeacutesica a autaacutelica entrada=(latnelipsoide)
salida=aut import ossys
from numpy import sinlog from elipsoide import elipsoide
lat2cre - paso de latitud geodeacutesica a creciente entrada=(latnelipsoide)
salide=cre import ossys
from numpy import sintanpilog
ond_ed50 - caacutelculo de la ondulacioacuten del geoide de un punto en Ed50 entrada =(latlon) salida=ondulacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
56
import ossys
from numpy import pisqrtcossintan
pdesfcr - problema directo en la esfera con el meacutetodo de cambio de base entrada=(lat1lon1saziresfera) salida=[latlon]
import ossys from numpy import cossintanarcsinarcosarctan2pizerostransposedot
pdg_dif1 - problema directo de la geodesia con la primera derivada entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2azi21] import ossys
from numpy import zerossincostanpi from radiopv import radiopv
from radioem import radioem
pdg_dif2 - problema directo de la geodesia con la primera y segunda derivada entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdg_dif3 - problema directo de la geodesia con la primera segunda y tercera derivada
entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdgrk4o - problema directo de la geodesia seguacuten meacutetodo de integracioacuten numeacuterica de Runge-Kutta de cuarto orden entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2
import ossys from numpy import zerossincostanpisqrt
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
57
from radioem import radioem
piesfcr - problema inverso en la esfera con el meacutetodo de cambio de base entrada=( lat1lon1lat2lon2resfera)
salida=[s12a12] import ossys
from numpy import cossintanarcsenarccosarctan2dotzerospi
pigbsl - problema inverso de la geodesia seguacuten el meacutetodo de Bessel entrada=( lat1lon1lat2lon2nelipsoide)
salida=[ s12a12a21]
import ossys from numpy import zerossincostanarcsinarctanarctan2arccossqrtpi
pigbslm - problema inverso de la geodesia seguacuten el meacutetodo de Bessel modificado por D David Henaacutendez Loacutepez
entrada=( lat1lon1lat2lon2nelipsoide) salida=[ s12a12a21]
import ossys from numpy import cossintanarcsinarcosarctanarctan2zerossqrtpi
from elipsoide import elipsoide
from radiopv import radiopv from piesfcr import piesfcr
from pdesfcr import pdesfcr
piloxo - problema inverso para la curva loxodroacutemica entrada=(lat1lon1lat2lon2nelipsoide)
salida=[dla12]
import ossys from numpy import arctan2coszerospi
from elipsoide import elipsoide from lat2cre import lat2cre
from radiopv import radiopv
from lam import lam
psi_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del meridiano entrada=(latlon) salida=psi_ed50
import ossys
from numpy import pisqrtcossintan from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
58
radioem - radio de curvatura de la elipse meridiana en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radioem
import ossys from numpy import sin
from elipsoide import elipsoide
radioeul - radio de la seccioacuten normal de un determinado acimut a partir del teorema de Euler entrada=(lataznelipsoide)
salida=radieul import ossys
from numpy import sincos from radioem import radioem
from radiopv import radiopv
radiopv - radio de curvatura del primer vertical en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radiopv
import ossys from numpy impor sqrtsin
from elipsoide import elipsoide
rdcae - reduccioacuten de la distancia de la cuerda al arco elipsoide entrada=( dcazlat1nelipsoide) salida=recae
impor ossys from numpy import sincosarcsen
from radioem import radioem from radiopv import radiopv
rdtce - reduccioacuten de la distancia del terreno a la cuerda elipsoide entrada=(dgazlat1h1h2nelipsoide)
salida=rdtce import ossys
from numpy import sincossqrt from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
59
tri2geo - paso de coordenadas cartesianas tridimensionales a geodeacutesicas en un punto y elipsoide determinados entrada=(XYZnelipsoide)
salida=[latlonh]
import ossys from numpy import cossintanarctanarctan2sqrtzeros
from elipsoide import elipsoide from radiopv import radiopv
xyz2clae - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a observables claacutesicos sobre el elipsoide y desnivel elipsoidal entrada=( X1Y1Z1DXDYDZnelipsoide) salida=[s12az12h12]
import ossys from numpy import zeros
from tri2geo import tri2geo
from pigbslm import pigbslm
xyz2clat - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes polares en el terreno entrada=( lat1lon1ixiyiz)
salida=[ dgaz12lv] import ossys
from numpy import zeros from xyz2enu import xyz2enu
from enu2cla import enu2cla
xyz2enu - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes ENU entrada=(latlonIXIYIZ)
salida=[ieiniu]
import ossys from numpy import sincoszeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
60
434 Libreriacutea en Python ldquogeotopoproy_cartograficasrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 calhuso - caacutelculo del huso correspondiente a un punto en la proyeccioacuten UTM a partir de su longitud geodeacutesica entrada=(lon)
salida=huso
import ossys from numpy import
cdel2geo - paso de un punto de la proyeccioacuten ciliacutendrica directa equivalente de Lambert al elipsoide
entrada=(XYLon0TXTYnelipsoide) salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaaut2lat import aut2lat
convestp - caacutelculo de la convergencia de meridianos de un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lonlon0)
salida=convest import ossys
convgk - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0nelipsoide)
salida=convgk
import ossys from numpy import sincostan
from geotopogeodesiaelipsoide import elipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
61
convlamb - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(lonlat0lon0)
salida=convlamb
import ossys from numpy import sin
convutm - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=convutm import ossys
from numpy import tancossinpi
from cahuso import calhuso from geotopogeodesiaelipsoide import elipsoide
convutmh - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso indicado entrada=(latlonnelipsoide)
salida=convutmh
import ossys from numpy import tancossinpi
from geotopogeodesiaelipsoide import elipsoide
dcdgputm - paso de la distancia cuerda en la proyeccioacuten UTM entre dos puntos a la correspondiente a la proyeccioacuten UTM de la liacutenea geoacutedesica que los une en el elipsoide entrada=(lat1lon1lat2lon2nelipsoide
salida=correccioacuten en metros import ossys
from numpy import cos from utm2geo import utm2geo
from geo2utmh import geo2utmh
from calhuso import calhuso from getopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
62
dcesfera - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general conforme en una esfera entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida=dc (reduccioacuten angular de la cuerda en radianes import ossys
from numpy import sincos from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
dcestp - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en la esfera al pasar a la proyeccioacuten estereograacutefica polar entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=dc(reduccioacuten angular de la cuerda en radianes)
import ossys from numpy import cossin
from kplamb import kplamb
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
from geotopogeodesiaradiopv import radiopv
dcgk - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general de Gauss-Kruumlger entrada=(lat1lon1lat2lon2lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos from geo2gk import geo2gk
from gk2geo import gk2geo
from geotopogeodesiaradioem import radioem from geotopogeodesiaradiopv import radiopv
from getopogeodesiaelipsoide import elipsoide
dclamb - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert entrada=(lat1lon1lat2lon2lat0pelipsoide
salida= dc(reduccioacuten angular de la cuerda en radianes)
import ossys
from numpy import sintancosexpzeros from geo2lamb import geo2lamb
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
63
from kdlamb import kdlamb
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
from geotopogeodesiaradiopv import radiopv
dclambf - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert con maacutes precisioacuten que la funcioacuten anterior entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos sin
from kplamb import kplamb from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o from geotopogeodesiaradiopv import radiopv
dcutm - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=( lat1lon1lat2lon2nelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaradioem import radioem
dcutmh - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso indicado entrada=( lat1lon1lat2lon2husonelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh
from utm2geo import utm2geo from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
64
dgpdcutm - paso de la distancia geodeacutesica proyectada en el plano UTM a la distancia correspondiente a la cuerda en esta proyeccioacuten para una geodeacutesica del elipsoide entrada=( lat1lon1lat2lon2snelipsoide)
salida=correccioacuten import ossys
from numpy import cos from geo2utmh import geo2utmh
from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut
esf2esfg - paso de un punto de una esfera a la esfera con cambio de polo Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo
entrada=(latlonlatplonp)
salida=[latlong]
import ossys from numpy import cossintanarcsenarctandotzerospi
from geotopogeodesiapiesfcr import piesfcr
esf2estp - paso de un punto de la esfera a las planas de la proyeccioacuten estereograacutefica polar entrada=(latlonlon0radiotxty)
salida=[xy] estp import ossys
from numpy import zerossincos
esfg2esf - paso de un punto de la esfera con cambio de polo a la esfera original Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo entrada=(latnlonnlatplonp
salida=[lat0lon0giro import ossys
from numpy import cossintanarcsenarctan2dotzerospitranspose from geotopogeodesiapiesfcr import piesfcr
esfc2lat - paso de latitud sobre la esfera a la correspondiente sobre el elipsoide seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
65
salida=lat
import ossys from numpy import sintanarctanpi
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiaelipsoide import elipsoide
estp2esf - paso de un punto de la proyeccioacuten estereograacutefica polar a la esfera entrada=(xylon0radiotxty)
salida=[xy] import ossys
from numpy import zerosarctan2arctansinpi
geo2cdel - paso de un punto del elipsoide a la proyeccioacuten ciliacutendrica directa equivalente de Lambert entrada=( latlonlon0txtynelipsoide)
salida=[XY] import ossys
from numpy import zeros
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialat2aut import lat2aut
geo2esto - paso de una nube de puntos del elipsoide a la proyeccioacuten estereograacutefica oblicua oacuteptima entrada=(latlonlat0lon0txtynelipsoide)
salida=[XY]
import ossys from numpy import
from lat2esc import lat2esc
from esf2esfg import esf2esfg from esf2estp import esf2estp
from geotopogeodesiaradiopv import radiopv
geo2gk - paso de un punto del elipsoide a la proyeccioacuten general de Gauss-Kruumlger entrada=( latlonlon0ptxtynelipsoide)
salida= [xy]gk import ossys
from numpy import costanpizeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesialam import lam
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
66
geo2lamb - paso de un punto del elipsoide a la proyeccioacuten general coacutenica conforme de Lambert entrada=( latlonlat0lon0ptxtynelipsoide)
salida=[xy]lambert
import ossys from numpy import sintancosexpzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
geo2merc - paso de un punto del elipsoide a la proyeccioacuten de Mercator entrada=( latlonlon0txtynelipsoide)
salida= [xy]mercator import ossys
from numpy import zeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialat2cre import lat2cre
geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
import ossys from numpy import zerostancospi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
geo2utmh - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=[XY] UTM
import ossys
from numpy import zerostancospi from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
gk2geo - paso de un punto de la proyeccioacuten general de Gauss-Kruumlger al elipsoide entrada=(XYlon0ptxtynelipsoide)
salida=[latlon]
import ossys
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
67
from numpy import zerostancospi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
kdesfera - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general conforme sobre una esfera Utiliza la integracioacuten numeacuterica de Simpson entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida= kdesfera import ossys
from kpesfera import kpesfera from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o
kdestp - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica de la esfera al proyectarla en la proyeccioacuten estereograacutefica polar Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0radiotxty)
salida=kdestp import ossys
from kpestp import kpestp from esf2estp import esf2estp
from estp2esf import estp2esf
kdgk - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general de Gauss-Kruumlger Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0pnelipsoide)
salida=kdgk import ossys
from geo2gk import geo2gk from gk2geo import gk2geo
from kpgk import kpgk
kdlamb - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica el elipsoide al proyectarla en la proyeccioacuten general coacutenica conforme de Lambert Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=kdlamb import ossys
from geolamb import geolamb from lamb2geo import lamb2geo
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
68
kdutm - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso del primer punto Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2nelipsoide)
salida=kdutm import ossys
from calhuso import calhuso from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kdutmh - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso indicado Utiliza la integracioacuten numeacuterica de Simpson
entrada= lat1lon1lat2lon2husohelipsoide) salida=kdutmh
import ossys from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kpesfera - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general conforme sobre una esfera entrada=( latlat0nelipsoide)
salida=kpesfera import ossys
from numpy import cossintanexp from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaelipsoide import elipsoide
kpestp - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lat)
salida=kpestp import ossys
from numpy import sin
kpgk - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0pnelipsoide)
salida=kpgk
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
69
import ossys
from numpy import sincostan from clahuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
kplamb - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(latlat0pnelipsoide)
salida=kplamb
import ossys from numpy import cossintanexp
from geotopogeodesialat2cre import lat2cre from geotopogeodesiaradiopv import radiopv
kputm - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=kputm
import ossys from numpy import tancossinpi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
kputmh - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=kputmh
import ossys
from numpy import sincostanpi from geotopogeodesiaelipsoide import elipsoide
lamb2geo - paso de un punto de la proyeccioacuten general coacutenica conforme de Lambert al elipsoide entrada=( xylat0lon0ptxtynelipsoide)
salida=[latlon] import ossys
from numpy import sintanarctanpilogsqrtzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
from geotopogeodesiacre2lat import cre2lat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
70
lat2esc - paso de la latitud geodeacutesica sobre el elipsoide a la correspondiente sobre la esfera seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide)
salida=latesfc
import ossys from numpy import sintanarctanpi
from geotopogeodesiaelipsoide import elipsoide
merc2geo - paso de un punto de la proyeccioacuten de Mercator al elipsoide entrada= (xylon0txtynelipsoide)
salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesiacre2lat import cre2lat
utm2geo - paso de un punto de la proyeccioacuten UTM al elipsoide entrada=(XYhusonelipsoide)
salida=[latlon] import ossys
from numpy import sqrtpitancossinzeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
435 Libreriacutea en Python ldquogeotopotransformacionrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 egm08rednap ndash fichero que almacena la clase Egm08rednap para el manejo de geoides en formato egm08rednap Define la funcioacuten getOndulation(selflatitudlongitud) Llama al fichero geoide que a su vez llama a los ficheros EGM08_REDNAP
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
71
entrada=(latitudlongitud)
salida=ondulacioacuten import ossys
from numpy import fromfile reshape from geoide import Geoide
geoide ndash fichero que almacena la clase Geoide para el manejo de geoides en formato egm08rednap La clase Geoide almacena ldquollamardquo a los geoides EGM08_REDNAP de la Peniacutensula o Baleares seguacuten corresponda Define las funciones getNoOndulacioacuten y getOndulacioacuten en funcioacuten de que encuentre las coordenadas de entrada dentro de los ficheros
entrada=(latitudlongitud) salida=ondulacioacuten
import ossys from numpy import fromfile reshapepifloorndarray
ntv2 ndash fichero que almacena la funcioacuten ntv2Espana Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(longitudlatitud) en deg en ED50 salida=(longitud latitud) en deg en ETRS89
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
ntv2_2 ndash fichero que almacena la funcioacuten ntv2Espana Adaptacioacuten del fichero anterior Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz) En la adatacioacuten realizada obtenemos soacutelo los diferenciales de caacutelculo de paso de ED50 a ETRS89 para tomarlo en el caacutelculo de la aproximacioacuten del sentido inverso entre ETRS89 a ED50 El paso de nodos del fichero utilizado es cada 200‟ lo que equivaldriacutea a 6000 m aproximadamente por lo que la aproximacioacuten seriacutea vaacutelida
entrada=(longitudlatitud) en deg en ETRS89 salida=(diflongitud diflatitud) en deg en ED50
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
72
sped2etpy ndash fichero rejilla del IGN Para transformacioacuten de coordenadas en los Sistemas de Referencia ED50 a ETRS89 Adaptado a Python y descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(fichero contenedor de informacioacuten) No entramos con ninguacuten valor
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
73
5 APLICABILIDAD DE LA LIBRERIacuteA Y CONCLUSIONES FINALES Finalmente hemos implementado los 5 subpaquetes de moacutedulos con funciones y clases incluidos en el paquete (libreriacutea) geotopo destinados a caacutelculos topograacuteficos y geodeacutesicos
Estructura final de la libreriacutea geotopo
Como puede verse en el paquete de geotopo se ha incluido un moacutedulo de aplicaciones en las que se han implementado unos ejercicios praacutecticos aplicando las distintas funciones de la libreriacutea Antes de entrar a describir los casos praacutecticos implementados hemos de decir que directamente podemos obtener resultados de cada una de las funiones Asiacute si queremos pasar de coordenadas geograacuteficas a coordenadas utm mirando en la descripcioacuten de las funciones tenemos geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
74
import ossys
from numpy import zerostancospi from calhuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
Pues bien una vez seleccionada la funcioacuten a utilizar abrimos el moacutedulo correspondiente con IDLE
Coacutedigo de la funcioacuten abierto con IDLE
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
75
Imagen de la ejecucioacuten de Run Module
Ejecutando Run Module Python abre el Python Shell En esta pantalla tenemos que introducir el nombre de la funcioacuten a usar geo2utm y entre pareacutentesis los valores que se especifican de entrada en la descripcioacuten de la funcioacuten entrada=(latlonnelipsoide)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
76
Llamada a la ejecucioacuten de la funcioacuten desde Python Shell
Como hemos indicado antes y por su relevancia y empleabilidad en otras funciones con ldquonelipsoiderdquo se entiende un coacutedigo del 1 al 3 que representa cada uno un elipsoides de referencia seguacuten los Sistemas de Referencia Coordenados en este caso 1=ED50 elipsoide Internacional Hayford 1924 2=ETRS89 elipsoide GRS80 y 3=WGS84
Al introducir los datos ejecutamos con Intro Obtenemos 2 valores en forma de vector que respresentan seguacuten la descripcioacuten de la funcioacuten salida=[XY] UTM
Podemos volver a caacutelcular las coordenadas UTM en el SCR ETRS89 (en caso de que lalitud y longitud vinieran dadas en el mismohellip) simplemente copiando la liacutenea de entrada pegaacutendola abajo y cambiando 1 por 2 como iacutendice del elipsoide y volviendo a ejecutar con enter
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
77
Dentro de Python Shell se puede copiar coacutedigo de liacuteneas anteriores y
pegar abajo Para caacutelculos maacutes complejos de mayor nuacutemero de puntos etc a modo de praacutectica se ha implementado el coacutedigo de distintos tipos de caacutelculo de ejemplo Distribuidos en 2 tipologiacuteas diferentes ldquotopografiardquo y ldquogeodesiardquo se han incluido coacutedigos para la resolucioacuten e impresioacuten de distintos tipos de problemas realizando ldquoimportrdquo de funciones declaradas en los moacutedulos de los distintos subpaquetes de geotopo
51 CASOS PRAacuteCTICOS TOPOGRAFIacuteA En total se han realizada 4 casos praacutecticos dentro del apartado de topografiacutea Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica topo_practica1 Del resto soacutelo se ha incluido la salida de datos
511 Implementacioacuten del coacutedigo topo_praacutectica1
usrbinpython
-- coding iso-8859-1 --
-- coding cp1252 --
Praacutectica 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
Datos Coordenadas del punto de estacioacuten
Sistema de referencia local
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmesn)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
78
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
En esta versioacuten de la praacutectica utilizando la libreriacutea geotopo en el caacutelculo de azimutes
periacutemetro y superficie
import ossys
from numpy import matrixarrayshapepizerosconcatenatemeansincossqrt
from geotopotopografiaacimut import acimut
from geotopogeneralperimetro import perimetro
from geotopogeneralareacor import areacor
Radio medio terrestre en metros
rt=63700000
Informacioacuten del punto de estacioacuten El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto de estacioacuten
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Altitud del punto en metros
- Quinta columna- Altura de instrumento en metros
pe=array([[100030242663090376657208150]])
Informacioacuten de las referencias
- Cada fila es un punto de referencia
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Lectura azimutal en grados centesimales
ref=array([[200127863973359492354821][2002322174932757501335646][20033289406282
69902313540][2004261222126827453319067]])
Informacioacuten de los puntos radiados
- Cada fila es una observacioacuten claacutesica a un punto radiado
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Lectura azimutal en grados centesimales
- Tercera columna- Lectura cenital en grados centesimales
- Cuarta columna- Distancia geomeacutetrica en metros
- Quinta columna- Altura de instrumento en metros
rad=array([[30013387131001173422431180][300211877101000083399617200][3003240
5756999039440097150][300433037831000468414996150]])
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos de referencia
Caacutelculo de las dimensiones de la matriz de puntos de referencia
- mref seraacute el nuacutemero de filas el nuacutemero de puntos
- nref seraacute el nuacutemero de columnas 4
[mrefnref]=refshape
Se extrae la informacioacuten del punto de estacioacuten
num_pe=pe[00]
x_pe=pe[01]
y_pe=pe[02]
z_pe=pe[03]
alti_pe=pe[04]
Caacutelculo de azitutes del punto de estacioacuten a cada uno de los puntos radiados
La funcioacuten azimut de la libreriacutea Geotop devuelve el valor en radianes
acimutes=zeros((mref1))
for i in range (1mref+1)
Se leen la identificacioacuten y las coordenadas del punto radiado y se almacenan en variables
temporales
num_pref=ref[i-10]
x_pref=ref[i-11]
y_pref=ref[i-12]
azi_pe_pref=acimut(x_pey_pex_prefy_pref)
acimutes[i-10]=azi_pe_pref2000pi
ref=concatenate((refacimutes)axis=1)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
79
Caacutelculo de la desorientacioacuten de cada direccioacutenccedil
desor=zeros((mref1))
for i in range(1mref+1)
Se leen los valores angulares y se transforman a radianes almacenaacutendose en variables
temporales
lhz_pe_pref=ref[i-13]pi2000
azi_pe_pref=ref[i-14]pi2000
des_pe_pref=azi_pe_pref-lhz_pe_pref
if des_pe_preflt0
des_pe_pref=des_pe_pref+20pi
desor[i-10]=des_pe_pref200pi
ref=concatenate((refdesor)axis=1)
Caacutelculo de la desorientacioacuten media con la funcioacuten de python
des_mean=mean(ref[5])pi200
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos radiados
[mradnrad]=radshape
Caacutelculo de coordenadas polares que se almacenan en la matriz coor_polares
- Primera columna- Nuacutemero entero identificador del punto radiado
- Segunda columna- Azimut en grados centesimales
- Tercera columna- Distancia reducida en metros
Caacutelculo de coordenadas cartesianas que se almacenan en la matriz coor_cart
- Primera columna- Nuacutemero entero identificador del punto del punto radiado
- Segunda columna- Coordenada X
- Tercera columna- Coordenada Y
- Cuarta columna- Altitud
antes se almacenan las coordenadas polares en la matriz coord_polares (numero de
puntoacimutdistancia reducida)
coord_polares=zeros((mrad3))
coord_cart=zeros((mrad4))
for i in range(1mrad+1)
num_prad=rad[i-10]
lhz_pe_prad=rad[i-11]pi2000
lv_pe_prad=rad[i-12]pi2000
dg_pe_prad=rad[i-13]
altp_pe_prad=rad[i-14]
coord_polares[i-10]=num_prad
azi_pe_prad=lhz_pe_prad+des_mean
if azi_pe_pradgt(20pi)
azi_pe_prad=azi_pe_prad-20pi
coord_polares[i-11]=azi_pe_prad2000pi
dr_pe_prad=dg_pe_pradsin(lv_pe_prad)
coord_polares[i-12]=dr_pe_prad
coord_cart[i-10]=num_prad
coord_cart[i-11]= x_pe+dr_pe_pradsin(azi_pe_prad)
coord_cart[i-12]= y_pe+dr_pe_pradcos(azi_pe_prad)
coord_cart[i-13]= z_pe+alti_pe+dg_pe_pradcos(lv_pe_prad)-
altp_pe_prad+042dr_pe_prad2rt
Caacutelculo del periacutemetro de la parcela utilizando la funcioacuten periacutemetro de Geotopo
coord=zeros((mrad2))
for i in range (1mrad+1)
coord[i-10]=coord_cart[i-11]
coord[i-11]=coord_cart[i-12]
perim=perimetro(coord)
Caacutelculo de la superficie de la parcela utilizando la funcioacuten areacor de Geotopo
superficie=areacor(coord)
superficie_error=areacore(coord)
Impresioacuten de resultados
fsalida=open(topopractica1salw)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
80
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
fsalidawrite(TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(nPRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALESn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimaln)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia Localn)
Impresioacuten del paso 1 Paso de coordenadas cartesianas a polares Azimutes
fsalidawrite(n1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada
visualn)
fsalidawrite( Punto Inicial Punto Final Acimut Desorientacioacutenn)
for i in range(1mref+1)
num_pref=ref[i-10]
azi=ref[i-14]
des=ref[i-15]
fsalidawrite(100fnum_pe)
fsalidawrite(150fnum_pref)
fsalidawrite(184fazi)
fsalidawrite(184fndes)
Impresioacuten del paso 2 Caacutelculo de la desorientacioacuten media
fsalidawrite(n2 Caacutelculo de la desorientacioacuten median)
fsalidawrite( Desorientacioacuten media154fn(des_mean200pi))
Impresioacuten del paso 3 Caacutelculo de la coordenadas polares
fsalidawrite(n3 Caacutelculo de las coordenadas polaresn)
fsalidawrite( Punto Acimut Distancian)
for i in range (1mrad+1)
num_prad=coord_polares[i-10]
azi=coord_polares[i-11]
dist=coord_polares[i-12]
fsalidawrite(100fnum_prad)
fsalidawrite(184fazi)
fsalidawrite(184fndist)
Impresioacuten del paso 4 Caacutelculo de la coordenadas cartesianas
fsalidawrite(n4 Caacutelculo de las coordenadas cartesianasn)
fsalidawrite( Punto X Y Zn)
for i in range (1mrad+1)
num_prad=coord_cart[i-10]
x=coord_cart[i-11]
y=coord_cart[i-12]
z=coord_cart[i-13]
fsalidawrite(100fnum_prad)
fsalidawrite(154fx)
fsalidawrite(154fy)
fsalidawrite(154fnz)
Impresioacuten del paso 5 valor del periacutemetro
fsalidawrite(n5 Caacutelculo del periacutemetro de la parcelan)
fsalidawrite( Periacutemetro153f mnperim)
Impresioacuten del paso 6 valor de la superficie de la parcela
fsalidawrite(n6 Caacutelculo de la superficie de la parcelan)
fsalidawrite( Superficie153f m2nsuperficie)
fsalidaclose()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
81
512 Impresioacuten del fichero de salida de resultados topo_praacutectica1
Ejecuando el programa anterior obtenemos un fichero con los resultados y la presentacioacuten mejorada que hemos implementado SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada visual
Punto Inicial Punto Final Acimut Desorientacioacuten
1000 2001 3539187 3184366
1000 2002 520128 3184482
1000 2003 1497887 3184347
1000 2004 2503428 3184361
2 Caacutelculo de la desorientacioacuten media
Desorientacioacuten media 3184389
3 Caacutelculo de las coordenadas polares
Punto Acimut Distancia
3001 3523102 4224303
3002 372099 3996170
3003 1590145 4400965
3004 2488172 4149959
4 Caacutelculo de las coordenadas cartesianas
Punto X Y Z
3001 27365966 33997199 6561414
3002 32447650 34236535 6566664
3003 32884285 27383773 6578851
3004 27363219 27915286 6569143
5 Caacutelculo del periacutemetro de la parcela
Periacutemetro 2358248 m
6 Caacutelculo de la superficie de la parcela
Superficie 342540930 m2
513 Salida de resultados topo_praacutectica2
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN DIRECTA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3264596 m
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
82
Y= 4065437 m
Previsioacuten de error planimeacutetrico= 0035 m
Vector con soluciones en z y su error
Z=725931 m Previsioacuten de error altimeacutetrico 0023 m
Z=725926 m Previsioacuten de error altimeacutetrico 0024 m
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN INVERSA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3010146 m
Y= 3411841 m
Previsioacuten de error planimeacutetrico= 0022 m
Vector con soluciones en z y su error
Z=515695 m Previsioacuten de error altimeacutetrico 0021 m
Z=515703 m Previsioacuten de error altimeacutetrico 0024 m
Z=515698 m Previsioacuten de error altimeacutetrico 0022 m
514 Salida de resultados topo_praacutectica3
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 3 CALCULO DE DATOS DE REPLANTEO PARA ESTACION TOTAL EN UN SISTEMA DE REFERENCIA
LOCAL
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
ResultadosDatos de replanteo
Base Punto Azimut Distancia CotaProyecto CotaTerreno CotaRoja
1 1 3856489 75460 96930 96539 0391
1 2 2667262 77786 96903 98259 -1356
1 3 1219144 40883 95329 94688 0641
1 4 279600 67437 95045 95587 -0542
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
83
515 Salida de resultados topo_praacutectica4
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 4 TRANSFORMACIOacuteN ENTRE SISTEMAS DE REFERENCIA LOCALES HELMERT 2D
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
Planteamiento del sistema de ecuaciones que define la transformacioacuten planimeacutetrica
Matriz A
1000 0000 3258686 -2709414
0000 1000 2709414 3258686
1000 0000 2075590 -2105320
0000 1000 2105320 2075590
Vector teacuterminos independientes
4554780
228501
3244004
443737
1 Resultados de los paraacutemetros de la transformacioacuten
- Planimetriacutea
- Traslacioacuten en coordenada x del sistema S1 al sistema S2 324401 m
- Traslacioacuten en coordenada y del sistema S1 al sistema S2 -20424 m
- Valor para el paraacutemetro a (a=landacos_giro) 0805119725
adimensional
- Valor para el paraacutemetro b (b=landasin_giro) -0593023724
adimensional
- Valor para el factor de escala (landa=sqrt(a2+b2)) 0999947
tanto por uno
- Valor para el giro (giro=arctan2(ba) -404157
grados centesimales
- Altimetriacutea
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 1 6056 m
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 2 6083 m
- Traslacioacuten media en coordenada z del sistema S1 al sistema S2 6070 m
2 Resultado de la transformacioacuten del punto 3 al sistema de referencia local S2
- Coordenada x de 3 en el sistema de referencia local S2 4072286 m
- Coordenada y de 3 en el sistema de referencia local S2 45170 m
- Coordenada z de 3 en el sistema de referencia local S2 104748 m
52 CASOS PRAacuteCTICOS GEODESIA En total se han realizada 5 casos praacutecticos dentro del apartado de geodesia Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica geo_practica1 Del resto soacutelo se ha incluido la salida de datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
84
521 Implementacioacuten del coacutedigo geo_praacutectica1
Semana Geomaacutetica 2011 Bogotaacute DC Colombia
IGAC-Instituto Agustiacuten Codazzi
Taller Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea GeoTop
Impartido por Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
Dr David Hernaacutendez Loacutepez davidhernandezulcmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
Praacutectica 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
Datos Coordenadas de la Red ERGNSS - Red de Estaciones Permanentes GNSS - Instituto
Geograacutefico Nacional Espantildea
Sistema de referencia ETRS89 (Elipsoide GRS80)
Coacutedigo EPSG para coordenadas geodeacutesicas sobre el elipsoide 4258
En esta versioacuten de la praacutectica se utiliza la libreriacutea GeoTop
Otra variante con respecto a la versioacuten anterior de la praacutectica es que se parte de coordenadas
geodeacutesicas en seudo decimal sexagesimal
Documentacioacuten La formulacioacuten empleada figura en el apartado 13 Parametrizacioacuten del
elipsoide del documento
OctaveTallerGeodesiaDocumentacionApuntes_DHL_2010GeodesiaElipsoidalpdf
Matriz de coordenadas
- Cada fila es un punto una estacioacuten de referencia GNSS
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada geodeacutesica longitud en suedo decimal sexagesimal
- Tercera columna- Coordenada geodeacutesica latitud en suedo decimal sexagesimal
- Cuarta columna- Altitud elipsoidal en metros
from numpy import zerosarraygenfromtxt
from geotopogeodesiaelipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiatri2geo import tri2geo
from geotopogeodesiageo2tri import geo2tri
c4258h=[ 1 432151770811 -82356167472 66917
2 382020103584 -02852437048 60356
3 385840494457 -15123054192 751736
4 365109112636 -22734018800 127517
5 392843898433 -62030426066 436527
6 432819118007 -34753038539 99287
7 355331090227 -51823016758 52475
8 375456176191 -44315999947 202082
9 371159923466 -65513077151 81860
10 402645009016 -34234283233 766920
11 423518259367 -53903511817 970254
12 364334003748 -42336718238 119848
13 393309445258 23728383134 62063
14 422728617761 -23007691629 503204
15 405642292231 -52945108842 854969
16 394031263811 -35750290360 808968
17 402101790155 -10727483699 956188
18 392850970441 -02015543423 77592
19 421102318373 -84847057525 87790
20 403129631681 -30519065001 972777
21 413800221985 -05255792567 296111
22 281829034024 -162958855078 2417483
23 282837857413 -161428164273 51787
24 282505711067 -163302841359 54475
25 280249784309 -164306688806 58543
26 284549932439 -175337787438 2199221]
Los datos los guardamos en un txt en la misma carpeta del trabajo e importamos
c4258h=genfromtxt(CPython27geotopoaplicacionestalleresgeo_practica1dattxt)
Caacutelculo de las dimensiones de la matriz de coordenadas
- m seraacute el nuacutemero de filas el nuacutemero de puntos
- n seraacute el nuacutemero de columnas 4
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
85
[mn]=c4258hshape
grs80=elipsoide(2)
Recibe Codigo del elipsoide (nelipsoide)
1 - Ed50 Devuelve el elipsoide Internacional 1924
2 - Etrs89 Devuelve el elipsoide GRS80
3 - Wgs84 Devuelve el elipsoide Wgs84
Definicioacuten del elipsoide
fsalida=open(geo_practica1salw)
fsalidawrite(SEMANA GEOMAacuteTICA - 2011n)
fsalidawrite(TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software
libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE
COORDENADAS GEODEacuteSICAS Y ECEFn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal
ggmmssfsn)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia ETRS89n)
fsalidawrite(- Paraacutemetros del elipsoide GRS80n)
fsalidawrite( - Semieje mayor 103f mngrs80[0])
fsalidawrite( - Inverso del aplanamiento 109f adimngrs80[1])
fsalidawrite( - Semieje menor 103f mngrs80[2])
fsalidawrite( - Primera excentricidad al cuadrado 109f adimngrs80[3]2)
fsalidawrite( - Segunda excentricidad al cuadrado 109f adimngrs80[4]2)
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(1 Paso de coordenadas geodeacutesicas a ECEFn)
fsalidawrite(NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF
CoorZECEFn)
c4258XYZ=zeros((m4))
for i in range (1m+1)
np=c4258h[i-10]
longitudRad=psdo2rad(c4258h[i-12])
latitudRad=psdo2rad(c4258h[i-11])
hElip=c4258h[i-13]
[xecefyecefzecef]=geo2tri(latitudRadlongitudRadhElip2)
fsalidawrite(80fnp)
fsalidawrite(159fc4258h[i-11])
fsalidawrite(159fc4258h[i-12])
fsalidawrite(123fhElip)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(n)
c4258XYZ[i-10]=np
c4258XYZ[i-11]=xecef
c4258XYZ[i-12]=yecef
c4258XYZ[i-13]=zecef
Caacutelculo e impresioacuten del paso 2 de coordenadas ECEF a geodeacutesicas
fsalidawrite(2 Paso de coordenadas ECEF a geodeacutesicasn)
fsalidawrite( NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud
AltElipn)
for i in range(1m+1)
np=c4258XYZ[i-10]
xecef=c4258XYZ[i-11]
yecef=c4258XYZ[i-12]
zecef=c4258XYZ[i-13]
[latitudlongitudhElip]=tri2geo(xecefyecefzecef2)
fsalidawrite(80fnp)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(159frad2psdo(latitud))
fsalidawrite(159frad2psdo(longitud))
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
86
fsalidawrite(153fnhElip)
fsalidaclose()
522 Impresioacuten del fichero de salida de resultados geo_praacutectica1
SEMANA GEOMAacuteTICA - 2011
TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea
GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal ggmmssfs
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia ETRS89
- Paraacutemetros del elipsoide GRS80
- Semieje mayor 6378137000 m
- Inverso del aplanamiento 0003352811 adim
- Semieje menor 6356752314 m
- Primera excentricidad al cuadrado 0006694380 adim
- Segunda excentricidad al cuadrado 0006739497 adim
1 Paso de coordenadas geodeacutesicas a ECEF
NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF CoorZECEF
1 43215177081 -8235616747 66917 4594489890 -678368010 4357065904
2 38202010358 -0285243705 60356 5009051399 -42072472 3935057504
3 38584049446 -1512305419 751736 4962848206 -160854365 3990884209
4 36510911264 -2273401880 127517 5105220295 -219278803 3804386889
5 39284389843 -6203042607 436527 4899866820 -544567584 4033769790
6 43281911801 -3475303854 99287 4625924690 -307096765 4365771175
7 35533109023 -5182301676 52475 5150908012 -478415023 3718518240
8 37545617619 -4431599995 202082 5021256063 -414685080 3898182184
9 37115992347 -6551307715 81860 5049613168 -612885631 3835143860
10 40264500902 -3423428323 766920 4851137670 -314518688 4116282036
11 42351825937 -5390351182 970254 4680871385 -463168384 4294606572
12 36433400375 -4233671824 119848 5103282414 -392096752 3793146894
13 39330944526 2372838313 62063 4919369704 225499577 4039849606
14 42272861776 -2300769163 503204 4708688612 -205761707 4283609369
15 40564229223 -5294510884 854969 4803054799 -462131609 4158378661
16 39403126381 -3575029036 808968 4904660519 -339868032 4050823512
17 40210179016 -1072748370 956188 4867391684 -95523894 4108341277
18 39285097044 -0201554342 77592 4929534046 -29050676 4033709925
19 42110231837 -8484705753 87790 4677481077 -725205068 4260827192
20 40312963168 -3051906500 972777 4848724914 -261632472 4123093922
21 41380022199 -0525579257 296111 4773803543 -73506519 4215453698
22 28182903402 -16295885508 2417483 5390243531 -1596630330 3007752593
23 28283785741 -16142816427 51787 5386836438 -1569217617 3023118925
24 28250571107 -16330284136 54475 5381262061 -1599192518 3017377791
25 28024978431 -16430668881 58543 5395193089 -1620537044 2981146536
26 28454993244 -17533778744 2199221 5326646317 -1719826438 3052043561
2 Paso de coordenadas ECEF a geodeacutesicas
NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud AltElip
1 4594489890 -678368010 4357065904 43215177081 -8235616747 66917
2 5009051399 -42072472 3935057504 38202010358 -0285243705 60356
3 4962848206 -160854365 3990884209 38584049446 -1512305419 751736
4 5105220295 -219278803 3804386889 36510911264 -2273401880 127517
5 4899866820 -544567584 4033769790 39284389843 -6203042607 436527
6 4625924690 -307096765 4365771175 43281911801 -3475303854 99287
7 5150908012 -478415023 3718518240 35533109023 -5182301676 52475
8 5021256063 -414685080 3898182184 37545617619 -4431599995 202082
9 5049613168 -612885631 3835143860 37115992347 -6551307715 81860
10 4851137670 -314518688 4116282036 40264500902 -3423428323 766920
11 4680871385 -463168384 4294606572 42351825937 -5390351182 970254
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
87
12 5103282414 -392096752 3793146894 36433400375 -4233671824 119848
13 4919369704 225499577 4039849606 39330944526 2372838313 62063
14 4708688612 -205761707 4283609369 42272861776 -2300769163 503204
15 4803054799 -462131609 4158378661 40564229223 -5294510884 854969
16 4904660519 -339868032 4050823512 39403126381 -3575029036 808968
17 4867391684 -95523894 4108341277 40210179016 -1072748370 956188
18 4929534046 -29050676 4033709925 39285097044 -0201554342 77592
19 4677481077 -725205068 4260827192 42110231837 -8484705753 87790
20 4848724914 -261632472 4123093922 40312963168 -3051906500 972777
21 4773803543 -73506519 4215453698 41380022199 -0525579257 296111
22 5390243531 -1596630330 3007752593 28182903402 -16295885508 2417483
23 5386836438 -1569217617 3023118925 28283785741 -16142816427 51787
24 5381262061 -1599192518 3017377791 28250571107 -16330284136 54475
25 5395193089 -1620537044 2981146536 28024978431 -16430668881 58543
26 5326646317 -1719826438 3052043561 28454993244 -17533778744 2199221
523 Salida de resultados geo_praacutectica2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
88
524 Salida de resultados geo_praacutectica3
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
89
525 Salida de resultados geo_praacutectica4
helliphellip
helliphellip
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
90
526 Salida de resultados geo_praacutectica5
Con la implementacioacuten y caacutelculo de los 9 casos praacutecticos realizados e incluidos en este Proyecto Final de Maacutester se puede obtener una idea de la aplicabilidad de esta libreriacutea en aplicaciones de caacutelculos topograacuteficos y geodeacutesicos Igualmente y como uno de los puntos de partida de este Proyecto obtenemos una libreriacutea muy potente para el uso en aacutembitos universitarios facilitando al profesorado el planteamiento y resolucioacuten de los distintos casos praacutecticos de las asignaturas y al tratarse de coacutedigo abierto se facilita que los alumnos implementen nuevas utilidades formatos de salida etc Convirtiendo geotopo en una herramienta de trabajo diario
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
91
6 CONCLUSIONES FINALES Como conclusiones finales podemos enumerar
Se ha corroborado lo que dicen los impulsores de Python se trata de un lenguaje limpio sencillo y claro muy proacuteximo a pseudocoacutedigo
Resulta interesante la utilizacioacuten de software libre para caacutelculos geodeacutesicos y topografiacuteacos Al tratarse de software libre es accesible a cualquier tipo de usuario
Al partir de la consideracioacuten de un paradigma estructurado de programacioacuten hemos conseguido implementar gran nuacutemero de funciones en ficheros (moacutedulos) de pequentildeo tamantildeo facilitando la programacioacuten Tambieacuten se ha iniciado en la programacioacuten orientada a objetos con la declaracioacuten de alguna clase
La importacioacuten de moacutedulos facilita a la implementacioacuten de coacutedigo sin necesitar volver a escribir el coacutedigo importado y ante cualquier modificacioacuten del mismo automaacuteticamente se actualiza en todos los programas o moacutedulos donde se importe dicho moacutedulo
Con las funciones definidas dentro de Numpy hemos realizado la mayor parte de los caacutelculos necesarios en nuestra biblioteca
Se ha de realizar la importacioacuten expresa de gran nuacutemero de operaciones matemaacuteticas Salvo + - y casi todos los demaacutes operadores se han de importar desde Numpy por ejemplo pi sqrt sin cos etc A veces puede resultar un poco complicado hacer la importacioacuten de estos operadores pero cuando se avanza en la programacioacuten hasta parece maacutes didactico reflejar todas las funciones importadas de otros moacutedulos
Se ha apreciado que en algunos casos las mismas funciones estaacuten incluidas en distintos moacutedulos y ademaacutes con nombres diferentes Asiacute en Numpy tenemos arcsin arccos arctan etc y en SciPy asin acos atan cuando se refieren a las mismas funciones arcoseno arcocoseno y arcotangente
Se ha creado una libreriacutea abierta accesible y editable para moder modificar
coacutedigo y tambieacuten poder ampliar con el implementado de nuevas funciones que aumenten el potencial de la misma Esto tambieacuten se incluye dentro de las liacuteneas futuras de actuacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
92
7 LIacuteNEAS FUTURAS DE ACTUACIOacuteN
De forma general se establecen las siguientes liacuteneas futuras de actuacioacuten e investigacioacuten
Avance en el desarrollo a aplicaciones informaacuteticas mediante el uso de software libre y en especial de Python
Estudio de la aplicabilidad de Python en el caacutelculo minimo-cuadraacutetico de sistemas de ecuaciones aplicables en topografiacutea y geodesia Para ello se ha de profundizar en el estudio de las diferencias entre los tipos array que contiene numpy y los tipos matrix par el caacutelculo avanzado de sistemas de ecuaciones
Aplicacioacuten de Python para el caacutelculo y ajuste de Redes Geodeacutesicas mediante la utilizacioacuten de miacutenimos cuadrados Con este fin estariacuteamos evitando el tener que recurrir a los softwares de caacutelculo de las casas comerciales ahorrando asiacute un coste importante y el poder realizar los ajustes y presentaciones de resultados adapatados a nuestras necesidades
Inclusioacuten de una interfaz graacutefica a los caacutelculos realizados para poder tener visualmente el resultado de los mismos
Aplicabilidad de python en el procesado de imaacutegenes Utilizacioacuten de la libreriacutea PIL (Python Imaging Library) que agrega capacidades de procesamiento de imaacutegenes al interprete Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
93
8 ANEJO
81 EQUIVALENCIAS ENTRE FUNCIONES EN MATLAB Y PYTHON Al partir de la libreiacutea Geotop en Octave hemos de tener en cuenta la equivanlencia entre algunas funciones de MatlabOctave con Python Asiacute tenemos MATLAB numpyarray numpymatrix Notes
ndims(a) ndim(a) or andim get the number of dimensions of a (tensor rank)
size(a) shape(a) or ashape get the size of the matrix
size(an) ashape[n-1]
get the number of elements of the nth dimension of array a (Note that MATLABreg uses 1 based indexing while Python uses 0 based indexing See note INDEXING)
MATLAB numpyarray numpymatrix Notes
[ 1 2 3 4 5 6 ] array([[123] [456]])
mat([[123] [456]]) or mat(1 2 3 4 5 6)
2x3 matrix literal
[ a b c d ] vstack([hstack([ab]) hstack([cd])])
bmat(a b c d) construct a matrix from blocks abc and d
a(end) a[-1] a[-1][00] access last element in the 1xn matrix a
a(25) a[14] access element in second row fifth column
a(2) a[1] or a[1] entire second row of a
a(15) a[05] or a[5] or a[05] the first five rows of a
a(end-4end) a[-5] the last five rows of a
a(1359) a[03][49] rows one to three and columns five to nine of a This gives read-only access
a([245][13]) a[ix_([134][02])] rows 24 and 5 and columns 1 and 3 This allows the matrix to be modified and doesnt require a regular slice
a(3221) a[ 2212] every other row of a starting with the third and going to the twenty-first
a(12end) a[ 2] every other row of a starting with the first
a(end-11) or flipud(a) a[ -1] a with rows in reverse order
a([1end 1]) a[r_[len(a)0]] a with copy of the first row appended to the end
a atranspose() or aT transpose of a
a aconj()transpose() or aconj()T
aH conjugate transpose of a
a b dot(ab) a b matrix multiply
a b a b multiply(ab) element-wise multiply
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
94
MATLAB numpyarray numpymatrix Notes
ab ab element-wise divide
a^3 a3 power(a3) element-wise exponentiation
(agt05) (agt05) matrix whose ijth element is (a_ij gt 05)
find(agt05) nonzero(agt05) find the indices where (a gt 05)
a(find(vgt05)) a[nonzero(vgt05)[0]] a[nonzero(vAgt05)[0]] extract the columms of a where vector v gt 05
a(find(vgt05)) a[vTgt05] a[vTgt05)] extract the columms of a where column vector v gt 05
a(alt05)=0 a[alt05]=0 a with elements less than 05 zeroed out
a (agt05) a (agt05) mat(aA (agt05)A) a with elements less than 05 zeroed out
a() = 3 a[] = 3 set all values to the same scalar value
y=x y = xcopy() numpy assigns by reference
y=x(2) y = x[1]copy() numpy slices are by reference
y=x() y = xflatten(1) turn array into vector (note that this forces a copy)
110 arange(111) or r_[111] or r_[11010j]
mat(arange(111)) or r_[111r]
create an increasing vector see note RANGES
09 arange(10) or r_[10] or r_[910j]
mat(arange(10)) or r_[10r]
create an increasing vector see note RANGES
[110] arange(111)[ newaxis] r_[111c] create a column vector
zeros(34) zeros((34)) mat() 3x4 rank-2 array full of 64-bit floating point zeros
zeros(345) zeros((345)) mat() 3x4x5 rank-3 array full of 64-bit floating point zeros
ones(34) ones((34)) mat() 3x4 rank-2 array full of 64-bit floating point ones
eye(3) eye(3) mat() 3x3 identity matrix
diag(a) diag(a) mat() vector of diagonal elements of a
diag(a0) diag(a0) mat() square diagonal matrix whose nonzero values are the elements of a
rand(34) randomrand(34) mat() random 3x4 matrix
linspace(134) linspace(134) mat() 4 equally spaced samples between 1 and 3 inclusive
[xy]=meshgrid(0805) mgrid[0906] or meshgrid(r_[09]r_[06]
mat() two 2D arrays one of x values the other of y values
ogrid[0906] or ix_(r_[09]r_[06]
mat() the best way to eval functions on a grid
[xy]=meshgrid([124][245]) meshgrid([124][245]) mat()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
95
ix_([124][245]) mat() the best way to eval functions on a grid
MATLAB numpyarray numpymatrix Notes
repmat(a m n) tile(a (m n)) mat() create m by n copies of a
[a b]
concatenate((ab)1) or hstack((ab)) or column_stack((ab)) or c_[ab]
concatenate((ab)1) concatenate columns of a and b
[a b] concatenate((ab)) or vstack((ab)) or r_[ab]
concatenate((ab)) concatenate rows of a and b
max(max(a)) amax() maximum element of a (with ndims(a)lt=2 for matlab)
max(a) amax(0) maximum element of each column of matrix a
max(a[]2) amax(1) maximum element of each row of matrix a
max(ab) maximum(a b) compares a and b element-wise and returns the maximum value from each pair
norm(v) sqrt(dot(vv)) or Scilinalgnorm(v) or linalgnorm(v)
sqrt(dot(vAvA)) or Scilinalgnorm(v) or linalgnorm(v)
L2 norm of vector v
a amp b logical_and(ab) element-by-element AND operator (Numpy ufunc) see note LOGICOPS
a | b logical_or(ab) element-by-element OR operator (Numpy ufunc) see note LOGICOPS
bitand(ab) a amp b bitwise AND operator (Python native and Numpy ufunc)
bitor(ab) a | b bitwise OR operator (Python native and Numpy ufunc)
inv(a) linalginv(a) inverse of square matrix a
pinv(a) linalgpinv(a) pseudo-inverse of matrix a
rank(a) linalgmatrix_rank(a) rank of a matrix a
ab linalgsolve(ab) if a is square
linalglstsq(ab) otherwise solution of a x = b for x
ba Solve aT xT = bT instead solution of x a = b for x
[USV]=svd(a) U S Vh = linalgsvd(a) V = VhT singular value decomposition of a
chol(a) linalgcholesky(a)T
cholesky factorization of a matrix (chol(a) in matlab returns an upper triangular matrix but linalgcholesky(a) returns a lower triangular matrix)
[VD]=eig(a) DV = linalgeig(a) eigenvalues and eigenvectors of a
[VD]=eig(ab) VD = Scilinalgeig(ab) eigenvalues and eigenvectors of ab
[VD]=eigs(ak) find the k largest eigenvalues and eigenvectors of a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
96
MATLAB numpyarray numpymatrix notes
[QRP]=qr(a0) QR = Scilinalgqr(a) mat() QR decomposition
[LUP]=lu(a) LU = Scilinalglu(a) or LUP=Scilinalglu_factor(a)
mat() LU decomposition
conjgrad Scilinalgcg mat() Conjugate gradients solver
fft(a) fft(a) mat() Fourier transform of a
ifft(a) ifft(a) mat() inverse Fourier transform of a
sort(a) sort(a) or asort() mat() sort the matrix
[bI] = sortrows(ai) I = argsort(a[i]) b=a[I] sort the rows of the matrix
regress(yX) linalglstsq(Xy) multilinear regression
decimate(x q) Scisignalresample(x len(x)q) downsample with low-pass filtering
unique(a) unique(a)
squeeze(a) asqueeze()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
97
9 BIBLIOGRAFIacuteA
DOWNEY A ELKNER J MEYERS C Aprenda a Pensar Como un Programador con Python GARCIacuteA-ASENJO VILLAMAYOR L HERNAacuteNDEZ LOacutePEZ D Geodesia Febrero 2005 GONZAacuteLEZ DUQUE R Python PARA TODOS Edicioacuten Internet bajo licencia Creative Commons Reconocimiento 25 Espantildea Descargable en httpmundogeeknettutorial-python MARZAL A GRACIA I Introduccioacuten a la programacioacuten con Python Departamento de Lenguajes y Sistemas Informaacuteticos Universitat Jaume I 2003 Edicioacuten Internet NUMPY COMMUNITY NumPy Reference Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg NUMPY COMMUNITY NumPy User Guide Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg VAN ROSSUM G Guiacutea de aprendizaje de PythonRelease 241ordf0 Edicioacuten Intenet Septiembre 2005 Descargable en httpwwwscipyorg VAN ROSSUM G El tutorial de Python Edicioacuten Intenet Descargable en httppythonorgarpyarTutorial
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
98
10 PAacuteGINAS WEB CONSULTADAS httpenfoquevirtualwordpresscomcategorytutorial httpgeektheplanetnet1347how-to-instalar-pydev-en-aptanaxhtml httpmundogeeknetarchivos20080328python-modulos-y-paquetes httpwwwthebitsourcecomprogramming-software-developmentpythonpython-application-development-aptana-pydev httpwwwyoutubecomwatchv=XtnfY2cBbMA youtube interesante trabajo con pydev y modulos httpcodingderkeilercomArchivePythoncomplangpython2005-08msg03511html paacutegina que explica coacutemo solucionar los problemas de Non-ASCII character httpeswikibooksorgwikiInmersiC3B3n_en_PythonSu_primer_programa_en_PythonDocumentado_de_funciones paacutegina que explica la cadena de documentacioacuten despueacutes de definir una funcioacuten con ldquordquordquo___rdquordquordquo (triples comillas) httpwwwpythonorgdevpepspep-0008 style guide for python code httpmundogeeknetarchivos20080707documentacion-en-python habla de la forma de documentar en python httpwwwpythonorgdevpepspep-0257 documentacioacuten y comentarios httpprogramandoideascomcomentarios-en-python documentacioacuten y comentarios httpwwwyoutubecomwatchv=v0sqRYuL5e8 tutorial de python con aptana httpwwwyoutubecomwatchv=29mq1Bn52GYampfeature=related youtube tutorial httpprojectsscipyorgnumpybrowsertrunknumpymatlibpyrev=8567 paacutegina que habla un poco de matrices
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
99
httpwwwgfceduco~arsranguias42p8guia42html cosas interesantes de matrices httpdocencia-euptunizaresctmedrascipy_tutorialscipy_tutorialhtml varios sobre python httpdocspythonorgtutorialmoduleshtml muy buena de paquetes etc httpwwwlinux-ittcom200804python-mdulos-y-paqueteshtml maacutes sobre paquetes httpwwwmclibreorgconsultarpythonotrosin03_idlehtmlccedil coding cp1252 httpwwwmclibreorgconsultarpython tutorial de python en la web Idle httpbioinfcomavupvescourseslinuxpythonmoduloshtml csv listasetc httpwwwdavidricardocommxp=1173 ok muy bueno importacioacuten csv como matriz httpwwwaprenderpythonorg httpwwwscipyorgNumpy_Example_List_With_Doc paacutegina muy importante de scipy httpjsbsanblogspotcom201101calculo-de-un-area-de-un-poligonohtml video sobre caacutelculo de areas de poliacutegonos irregulares httpmathesaurussourceforgenetmatlab-numpyhtml viprelacioacuten entre operaciones con octave y con python httpwwwscipyorgTentative_NumPy_Tutorial pagina importante de scipy httptecnologicumwordpresscomastronomiavideo-tutoriales-de-python todos los videotutoriales de python httpwwwyoutubecomwatchv=Oj3MZXWXGiUampfeature=related csv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
100
httptranslategoogleestranslatehl=esamplangpair=en7Cesampu=httpwwwscipyorgNumPy_for_Matlab_Users interesante sobre numpyhellip httpwikipythonorgmoinHowToSorting interesante de sort httpwikipythonorgmoinHowToSortingOperator_Module_Functions sort itemgetteretc httpcodeactivestatecomrecipes304440-sorting-dictionaries-by-value-in-python-24 operator itemgetter httpmundogeeknetarchivos20080402python-entrada-salida-ficheros entrada salida de archivos httpwwwgulicorgalmacenhttlaclwpchap11htm formato de escritura textos nuacutemeros y decimales httpwwwprogramacioncomarticuloguia_de_aprendizaje_de_python_657 formatos de salida httpnumpysourceforgenetnumdocHTMLnumdochtmpgfId-57315 muy importante sobre arraysetc httpwwwhjcbnlpythonArrayshtml muy importante sobre arraysetc httpwwwalecjacobsoncomweblogp=1570 cargar un txt como una matriz en python httpdocsscipyorgdocnumpyreferencegeneratednumpygenfromtxthtml getfromtxt de numpy httpwwwalegsaonlinecomart13php httpwwwumesdocenciabarzanaIAGPIagp3html httpwebusales~dhernandsoftwarehtmGeotop httpmailpythonorgpipermailtutor2008-March060886html From future import division
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
101
httpwwwyoutubecomwatchv=I6GMIQBD6EU youtube diccionarios httpmundogeeknetarchivos20080121python-tipos-basicos-ii-colecciones diccionarios httpstaffnotiaces~rcardeneshgdiveintopython3-esnative-datatypeshtml diccionarios httpwwwestrellateyardeorgdiscovermanual-python-lo-mas-basico diccionarios httpeswikibooksorgwikiInmersiC3B3n_en_PythonTipos_de_datos_nativosPresentaciC3B3n_de_los_diccionarios diccionarios httpdocspythonorgartutorialdatastructureshtmldiccionarios python estructura de diccionarios httpwwwwikilearningcomtutorialintroduccion_informal_a_matlab_y_octave-matrices_y_algebra_lineal_i19256-8 concatenar matrices httpwwwslidesharenetsantiagosilascomputao-cientfica-com-numpy-e-scipy-7797060 detalles de numpy vectores matricesetc httpwwwscipyorgNumPy_for_Matlab_Usershead-e9a492daa18afcd86e84e07cd2824a9b1b651935 muy importante de scipy arrays y matriceshellip httpdocsscipyorgdocnumpyreferencegeneratednumpyconcatenatehtml muy importante de scipy arrays y matriceshellip httppyspanishdocsourceforgenettut traduccioacuten del tutorial de Guido httpwwwscipyorgNumpy_Example_List_With_Dochead-5202db3259f69441c695ab0efc0cdf45341829fc httppyspanishdocsourceforgenetlibmodule-picklehtml funcioacuten pickle
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
102
httpnicocesarcomq=node23 carga de ficheros binarios httpstaffnotiaces~rcardeneshgdiveintopython3-esfileshtml apertura cierre carga de ficheros etc httppythonr2wordpresscom20080829leer-archivos-binarios-en-python lectura de ficheros binarios httpwwwignesignlayoutInherramientasdo descarga de ficheros regilla del IGN httpterrasitgvaeseskbtransformacion-coordenadas-utm-ed50-utm-etrs89-utilizando-libreria-proj4 paacutegina de la gva sobre cambio de sistema y fichero rejilla httpdocspythonorglibrarystructhtml moacutedulo struct de python para lectura de ficheros binarios httpwwwslidesharenetjpadillaaprogramacion-orientada-a-objetos-en-python programacioacuten orientada a objetos con python httppyspanishdocsourceforgenettutnode7html recorrer diccionarios httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 interesante aplicacioacuten fichero rejilla ntv2 en python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
5
no poseer la propiedad del producto del cual dan el servicio
Tratamiento seguro de los datos y la informacioacuten Formatos estaacutendar Los formatos estaacutendar permiten una
interoperatividad maacutes alta entre sistemas evitando incompatibilidades Los estaacutendares de facto son vaacutelidos en ocasiones para lograr una alta interoperatividad si se omite el hecho que estos exigen el pago de royalities a terceros y por razones de mercado no interesa que se perpetuacuteen mucho tiempo
Sistemas sin puertas traseras y maacutes seguros El acceso al coacutedigo fuente permite que tanto hackers como empresas de seguridad de todo el mundo puedan auditar los programas por lo que la existencia de puertas traseras es iloacutegica ya que se pondriacutea en evidencia y contraviene el intereacutes de la comunidad que es la que lo genera
Correccioacuten maacutes raacutepida y eficiente de fallos El funcionamiento e intereacutes conjunto de la comunidad ha demostrado solucionar maacutes raacutepidamente los fallos de seguridad en el software libre algo que desgraciadamente en el software propietario es maacutes difiacutecil y costoso
Meacutetodos simples y unificados de gestioacuten de software Actualmente la mayoriacutea de distribuciones de linux incorporan alguno de los sistemas que unifican el meacutetodo de instalacioacuten de programas libreriacuteas etc Por parte de los usuarios Asiacute se permite el acceso a las miles de aplicaciones existentes de forma segura y gratuita a la par que evitan tener que recurrir a paacuteginas web de dudosa eacutetica desde las que los usuarios instalan sin saberlo spyware o virus informaacuteticos en sus sistemas Este sistema de acceso y gestioacuten del software se hace praacutecticamente utoacutepico si se extrapola al mercado propietario
Sistema en expansioacuten El software libre ya no es una promesa es una realidad y se utiliza en sitemas de produccioacuten por algunas de las empresas tecnoloacutegicas maacutes importantes como IBM Sun Microsystems Google Hewlett-Packard etc Paradoacutejicamente incluso Microsoft que posee sus propias herramientas emplea GNU Linux en muchos de sus servidores
Entre los paiacuteses maacutes adeptos al software libre sus desarrollos y alcance de sus
proyectos de migracioacuten se encuentran de la siguiente manera ALEMANIA Alemania es el paiacutes con mayor uso del software libre del mundo No
soacutelo estaacute presente en todas sus dependencias gubernamentales y universidades sino que tiene programas multimillonarios para el desarrollo de aplicaciones libres En 2009 destinoacute maacutes de 500 millones de Euros al proyecto ldquoOpen Source and Green ITrdquo El software libre es tan importante para los alemanes que incluso el 59 de sus empresas lo utiliza el argumento maacutes utilizado no es la reduccioacuten de costos sino la posibilidad de poder modificar el coacutedigo fuente
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
6
BRASIL Fue el primer paiacutes en migrar masivamente sus sistemas de informacioacuten a alternativas open source Se llevoacute a cabo en primera instancia en el estado de Riacuteo Grande luego se realizoacute a escala nacional
ARGENTINA Existen varias iniciativas estatales que apuntan a fomentar el desarrollo de software libre Actualmente el software libre estaacute implementado en algunas provincias siendo Santa Fe el maacuteximo exponente de utilizacioacuten doacutende todo el software ha sido liberado bajo licencia GPL
FRANCIA La Asamblea Nacional utiliza software libre en todos sus sistemas y terminales de trabajo Francia viene tomando impulso en el desarrollo de software open source existen iniciativas para que el 20 del software contratado por la Administracioacuten Puacuteblica sea libre para el 2012 tambieacuten ofrece beneficios fiscales para las agrupaciones de usuarios y desarrolladores de SL
ESPANtildeA Espantildea se ha apostado como uno de los mayores impulsores mundiales del uso de software libre Actualmente existen 200 empresas proveedoras de soluciones 100 comunidades de usuarios y 180 centros educativos donde el software de coacutedigo abierto es una realidad cotidiana Muchos ayuntamientos y universidades ya se pasaron a sistemas open source
A principios de 2010 se presentoacute un proyecto liderado por la Plataforma Tecnoloacutegica Espantildeola de Software y Servicios con el apoyo del Plan Avanza Dicho plan pretende colocar a Espantildea a la par del resto de Europa en el disentildeo y uso de software libre de confianza y calidad similares a los comerciales Este proyecto llamado Vulcano trata de unificar el trabajo de distintas universidades centros tecnoloacutegicos y empresas que hasta el momento habiacutean dedicado sus esfuerzos al aacutembito de la educacioacuten
En un entrevista ofrecida por David Saacutenchez Director de Comunicacioacuten y Relaciones Instituciones en CENATIC que es el Centro Nacional de Referencia de Aplicacioacuten de las Tecnologiacuteas de la informacioacuten y la Comunicacioacuten basadas en Fuentes Abiertas podemos encontrar httpwwwmuylinuxcom20110407entrevistamos-a-david-sanchez-de-cenatic
CENATIC es una Fundacioacuten Puacuteblica Estatal del gobierno de Espantildea promovida por el Ministerio de Industria Turismo y Comercio y la Junta de Extremadura que ademaacutes cuenta en su patronato con las comunidades autoacutenomas de Andaluciacutea Aragoacuten Asturias Cantabria Cataluntildea Islas Balares Paiacutes Vasco y Galicia asiacute como las empresas Atos Origin Telefoacutenica y Grupo Aacutepex
Su trabajo es promover el conocimiento y uso del software libre en todos los aacutembitos de la sociedad con especial atencioacuten en las administraciones puacuteblicas las empresas el sector tecnoloacutegico proveedor o usuario de tecnologiacuteas libres y las comunidades de desarrollo a traveacutes de proyectos especiacuteficos para cada uno de estos sectores
ldquo La apuesta a del Administracioacuten del Estado por el software libre se inicioacute ya en los 90 cuando el entonces ministerio para las Administraciones Puacuteblicas llevoacute a cabo la primera gran migracioacuten a software libre de 1375 servidores Llegaron tambieacuten proyectos como el del Principado de Asturias para generar de forma colaborativa un
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
7
marco basado en software libre que permitioacute crear cluacutester de empresas locales capaces de aportar servicios de eAdministracion que de otra manera tendriacutean que haber contratado fuera de su comunidadrdquo
ldquo O el proyecto de gvSIG de la Conselleriacutea d‟Infrestructures i Transport de la Generalitat Valenciana un sistema de informacioacuten geograacutefico que cuenta con un tejido empresarial local alrededor del proyecto y estaacuten haciendo de la Comunidad Valenciana el nuacutecleo maacutes activo a nivel mundial de desarrollo GIS en entornos libres Tambieacuten es muy conocido el proyecto de Red Tecnoloacutegica Educativa de la Junta de Extremadura con Linex como primera distribucioacuten regional y concepto pionero adoptado ya por 7 comunidades autoacutenomasrdquo ldquoFinalmente a nivel de administracioacuten local hasta el 80 de los grandes ayuntamientos cuentan hoy en diacutea con proyectos de software libre siendo quizaacute el maacutes destacado el del Ayuntamiento de Zaragozardquo
22 LENGUAJES DE PROGRAMACIOacuteN Un lenguaje de programacioacuten es un lenguaje artificial que puede ser usado para controlar el comportamiento de una maacutequina especialmente una computadora Estos se componen de un conjunto de reglas sintaacutecticas y semaacutenticas que permiten expresar instrucciones que luego seraacuten interpretadas Debe distinguirse de ldquolenguaje informaacuteticordquo que es una definicioacuten maacutes amplia puesto que estos incluyen otros lenguajes como son el HTML o PDF que dan formato a un texto y no es programacioacuten en siacute misma El programador es el encargado de utilizar un lenguaje de programacioacuten para crear un conjunto de instrucciones que al final constituiraacute un programa o subprograma informaacutetico En su uso un lenguaje de programacioacuten puede acercarse a la forma humana de expresarse y por eso este tipo de lenguajes es llamado de alto nivel Esto significa que utilizan palabras y formas en sus estructuras que se asemejan al lenguaje natural (especialmente al ingleacutes) En cambio aquellos lenguajes que se aproximan maacutes a la forma en la cual la computadora se maneja son llamados lenguajes de bajo nivel Esto significa que lo que el programador deba escribir se acercaraacute al lenguaje maacutequina que es en definitiva lo que las computadoras pueden interpretar De todas maneras un lenguaje de programacioacuten difiere en muchos aspectos de un lenguaje humano Un coacutedigo escrito en un lenguaje de programacioacuten especiacutefico siempre se interpreta de la misma manera (no como los idiomas humanos ambiguos) los errores son mucho maacutes significativos (a tal punto de que un coacutedigo puede volverse ininterpretable por la computadora) etc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
8
El coacutedigo fuente es el conjunto de instrucciones que conforman un programa (o subprograma o moacutedulo) El coacutedigo fuente debe ser compilado para poder ser interpretado y ejecutado por la computadora La compilacioacuten traduce el coacutedigo fuente (que depende del lenguaje de programacioacuten) a un lenguaje maacutequina (que depende del sistema de la maacutequina) Existen lenguajes del tipo script que son directamente ejecutados por un inteacuterprete y no necesitan compilacioacuten Los lenguajes de programacioacuten pueden clasificarse empleando distintos meacutetodos y puntos de vista Esta clasificacioacuten se basa en el paradigma que utilizan Se debe aclarar que existen muchos maacutes paradigmas y subparadigmas de programacioacuten no incluidos dentro de los mencionados Ademaacutes todaviacutea hay conflictos en las definiciones y alcances de ciertos paradigmas
23 PARADIGMAS DE PROGRAMACIOacuteN Un paradigma de programacioacuten provee (y determina) la visioacuten y meacutetodos de un programador en la construccioacuten de un programa o subprograma Diferentes paradigmas resultan en diferentes estilos de programacioacuten y en diferentes formas de pensar la solucioacuten de problemas (con la solucioacuten de muacuteltiples ldquoproblemasrdquo se construye una aplicacioacuten) Los lenguajes de programacioacuten son basados en uno o maacutes paradigmas (Veacutease Programacioacuten en muacuteltiples paradigmas) Por ejemplo Smalltalk y Java son lenguajes basados en el paradigma orientado a objetos El lenguaje de programacioacuten Scheme en cambio soporta soacutelo programacioacuten funcional En cambio Python soporta muacuteltiples paradigmas Clasificacioacuten por paradigmas de programacioacuten Paradigma Imperativo describe la programacioacuten como una secuencia instrucciones o comandos que cambian el estado de un programa El coacutedigo maacutequina en general estaacute basado en el paradigma imperativo Su contrario es el paradigma declarativo En este paradigma se incluye el paradigma procedimental (procedural) entre otros Paradigma Declarativo No se basa en el coacutemo se hace algo (coacutemo se logra un objetivo paso a paso) sino que describe (declara) coacutemo es algo En otras palabras se enfoca en describir las propiedades de la solucioacuten buscada dejando indeterminado el algoritmo (conjunto de instrucciones) usado para encontrar esa solucioacuten Es maacutes complicado de implementar que el paradigma imperativo tiene desventajas en la eficiencia pero ventajas en la solucioacuten de determinados problemas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
9
Paradigma Estructurado la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Ademaacutes la programacioacuten se controla con secuencia seleccioacuten e iteracioacuten Permite reutilizar coacutedigo programado y otorga una mejor compresioacuten de la programacioacuten Es contrario al paradigma inestructurado de poco uso que no tiene ninguna estructura es simplemente un ldquobloquerdquo como por ejemplo los archivos batch (bat) Paradigma Orientado a Objetos estaacute basado en la idea de encapsular estado y operaciones en objetos En general la programacioacuten se resuelve comunicando dichos objetos a traveacutes de mensajes (programacioacuten orientada a mensajes) Se puede incluir -aunque no formalmente- dentro de este paradigma el paradigma basado en objetos que ademaacutes posee herencia y subtipos entre objetos Ej Simula Smalltalk C++ Java Visual Basic NET etc Su principal ventaja es la reutilizacioacuten de coacutedigos y su facilidad para pensar soluciones a determinados problemas Paradigma Funcional este paradigma concibe a la computacioacuten como la evaluacioacuten de funciones matemaacuteticas y evita declarar y cambiar datos En otras palabras hace hincapieacute en la aplicacioacuten de las funciones y composicioacuten entre ellas maacutes que en los cambios de estados y la ejecucioacuten secuencial de comandos (como lo hace el paradigma procedimental) Permite resolver ciertos problemas de forma elegante y los lenguajes puramente funcionales evitan los efectos secundarios comunes en otro tipo de programaciones Paradigma loacutegico se basa en la definicioacuten de reglas loacutegicas para luego a traveacutes de un motor de inferencias loacutegicas responder preguntas planteadas al sistema y asiacute resolver los problemas Ej prolog Otros paradigmas y subparadigmas son paradigma orientado al sujeto paradigma heuriacutestico paradigma reflectante programacioacuten basada en reglas paradigma basado en restricciones programacioacuten basada en prototipos etc
24 iquestPOR QUEacute PYTHON
241 Caracteriacutesticas de Python
Python es un lenguaje de programacioacuten de tipo script creado por Guido van Rossum a principios de los antildeos 90 cuyo nombre proviene del grupo ldquoMonty Pythonrdquo El objetivo es un lenguaje con una sintaxis muy limpia y con un coacutedigo legible Python es un lenguaje de programacioacuten multiparadigma Esto significa que maacutes que forzar a los programadores a adoptar un estilo particular de programacioacuten permite varios estilos programacioacuten orientada a objetos programacioacuten imperativa funcional estructurada
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
10
etc Otros paradigmas estaacuten soportados mediante el uso de extensiones Los lenguajes de script (lenguajes interpretados de muy alto nivel como Perl y Python) gozan de creciente importancia e implantacioacuten en el mundo del software libre Python es un lenguaje de programacioacuten faacutecil de aprender y potente Dispone de eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos simple pero eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de las plataformas En Python no hay terminadores de sentencia (como el punto y como de CC++Java) ni marcas de iniciofin de bloque (como las llaves de esos mismos lenguajes) La indentacioacuten como forma de marcar bloques elimina errores propios de los lenguajes citados y que son frecuentes en los estudiantes y tambieacuten en los programadores profesionales sentencias condicionales sin accioacuten por antildeadir un punto y coma incorrectos bucles con una sola sentencia cuando parece que hay dos o maacutes (por omisioacuten de llaves con un sangrado inadecuado del programa) sentencias con semaacutentica ldquoalteradardquo por usar una coma cuando corresponde un punto y coma o por omitir un punto y coma al declarar un registro antes de una funcioacuten etc La indentacioacuten soacutelo resulta molesta cuando el tamantildeo de un bloque de cierta profundidad excede del tamantildeo de la ventana del editor Python es un lenguaje interpretado Los lenguajes interpretados permiten ciclos de desarrollo breves (edicioacuten y ejecucioacuten) que animan a los estudiantes a experimentar Python dispone de un entorno de ejecucioacuten que ayuda a detectar los errores (incluyendo aquellos que soacutelo se manifiestan en ejecucioacuten) sentildealaacutendolos con mensajes muy informativos Python ofrece ademaacutes un entorno interactivo con el que es posible efectuar pequentildeas pruebas o disentildear incrementalmente las soluciones a los problemas La contrapartida de que se trate de un lenguaje interpretado es obviamente la menor velocidad de ejecucioacuten Python puede considerarse pseudocoacutedigo ejecutable Es muy expresivo y su sintaxis sencilla interfiere poco en la implementacioacuten de algoritmos asiacute que resulta un buen sustituto del pseudocoacutedigo con la ventaja de que los algoritmos codificados en Python siacute son ejecutables Python ofrece un rico conjunto de estructuras de datos flexibles El tipo lista de python (un vector dinaacutemico heterogeacuteneo) permite introducir con naturalidad el concepto de secuencia y presentar los algoritmos baacutesicos de manejo de secuencias Que la indexacioacuten empiece siempre en 0 ayuda a dar el salto a C C++ o Java El entorno de ejecucioacuten proporciona comprobacioacuten de validez de los iacutendices eliminando asiacute una de las principales fuentes de problemas de C y C++ El hecho de que las listas sean
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
11
redimensionables elimina al programador la necesidad de tomar decisiones acerca de la longitud maacutexima de los vectores demasiado pronto Por otra parte Python es un lenguaje muy ortogonal una vez se ha aprendido a manejar listas por ejemplo se sabe manejar cadenas ya que ambos tipos son secuenciales y presentan conjuntos de operadores con igual nombre y semaacutentica Ademaacutes de listas y cadenas Python ofrece tuplas (listas inmutables) y diccionarios (vectores asociativos) Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc No es que haya que presentar todos los moacutedulos pero sirve para ayudar a consultar la documentacioacuten de las bibliotecas disponibles favorece la programacioacuten eficiente
Python es orientado a objetos A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulos en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar al de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
El inteacuterprete de Python y su extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables para las plataformas maacutes importantes en la sede web de Python httppythonorg y se pueden distribuir libremente La misma sede contiene tambieacuten distribuciones y direcciones de muchos moacutedulos programas y herramientas Python de terceras partes ademaacutes de documentacioacuten adicional Es faacutecil ampliar el inteacuterprete de Python con nuevas funciones y tipos de datos implementados en C o C++ (u otros lenguajes a los que se pueda acceder desde C) Python es tambieacuten adecuado como lenguaje de extensioacuten para aplicaciones adaptables al usuario Algunas de las empresas que usan Python son Google Yahoo Industrial Light amp Magic Walt Disney NASA SGI Inc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
12
3 INSTRUMENTACIOacuteN Y SOFTWARE EMPLEADOS PHYTON
31 INTRODUCCIOacuteN A PYTHON Como se comentoacute en el punto anterior Python
es orientado a objetos (realmente es multiparadigma aceptando distintos tipos de paradigmas) A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulo en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar a l de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc
Entre estas bibliotecas cabe mencionar Numpy Numpy es un moacutedulo de Python escrito en C que define los vectores numeacutericos las matrices y las operaciones entre ellos Ademaacutes de las funciones sobre vectores y matrices tambieacuten incluye funciones trigonomeacutetricas del tipo sin cos tan etc Numpy es el paquete fundamental necesario para programacioacuten cientiacutefica con Python Contiene entre otras cosa
Un poderoso N-dimensional objeto vector Sofisticadas funciones Herramientas para integracioacuten con coacutedigo de C C++ y Fortram Uacutetiles de algebra lineal Transformada de Fourier y capacidades de
nuacutemeros aleatorios Ademaacutes de sus usos cientiacuteficos obvios NumPy tambieacuten se puede utilizar como un eficiente multi-dimensional contenedor de datos geneacutericos Pueden ser definidos tipos arbitrarios de datos Esto permite integrar a la perfeccioacuten y raacutepidamente con una amplia variedad de bases de datos El objeto principal de Numpy es el vector homogeacuteneo multidimensional Eacuteste es una tabla de elementos (generalmente nuacutemeros) todos del mismo tipo indexados por una tupla de enteros positivos Por ldquomultidimensionalrdquo entendemos que los vectores pueden tener varias dimensiones de ejes El nuacutemero de ejes se llamaraacuten a menudo ldquorangordquo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
13
Por ejemplo las coordenadas de un punto en el espacio 3D seriacutea [1 2 1] que
representariacutea un vector de rango 1 de longitud 3 Otro ejemplo seriacutea
[[ 1 0 0]
[ 0 1 2]]
que representa un array de rango 2 (2 dimensiones) Para maacutes informacioacuten mirar
Numpy Glossary
Otras libreriacuteas importantes en Python son Scipy es otra libreriacutea que usa Numpy El desarrollo de Scipy comenzoacute en el antildeo 2001 Sus oriacutegenes se remontan al paquete con extensiones numeacutericas para Python denominado Numeric Posteriormente aparecioacute Numarray con la intencioacuten de construir un paquete maacutes flexible y de limpiar el coacutedigo aunque resultoacute ser maacutes lengo para caacutelculos matriciales en pocas dimensiones En el antildeo 2005 el principal impulsor de Scipy Travis Oliphant reunificoacute ambos en un uacutenico paquete que integrse las ventajas de ambos y se denominoacute Numpy considerado el nuacutecleo de Scipy Scipy en siacute mismo se concibe actualmente como una extensioacuten de las funcionalidades de Numpy
Scipy posee moacutedulos para optimizacioacuten de funciones integracioacuten funciones especiales resolucioacuten de ecuaciones diferenciales ordinarias y otros muchos aspectos
Puede ser usado con Linux Windows y ha sido tambieacuten compilado para Sun y Mac
Scipy es un proyecto de software libre que ha sido patrocinado por una compantildeiacutea Enthought inc
Su organizacioacuten se estructura en subpaquetes que se pueden considerar especializados en dominios cientiacuteficos determinados Podemos encontrar estos paquetes seguacuten la ayuda de scipy (v046)
stats -- Statistical Functions sparse -- Sparse matrix lib -- Python wrappers to external libraries linalg -- Linear algebra routines signal -- Signal Processing Tools misc -- Various utilities that dont have another home interpolate -- Interpolation Tools [] optimize -- Optimization Tools [] cluster -- Vector Quantization Kmeans [] fftpack -- Discrete Fourier Transform algorithms []
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
14
io -- Data input and output [] maxentropy -- Routines for fitting maximum entropy models [] integrate -- Integration routines [] liblapack -- Wrappers to LAPACK library [] special -- Special Functions [] libblas -- Wrappers to BLAS library []
Matplotlib es una libreriacutea de Python que facilita la publicacioacuten de calidad de la publicacioacuten interactiva Permite obtener graacuteficas de calidad para publicaciones Su principal submoacutedulo para dibujar es pyplot Mayavi Ipython PIL (Python Imaging Library) Pythonxy EPD (Enthought python distribution $$) hellip Este texto como Memoria de un Proyecto Final de Maacutester no pretende ser ni mucho menos un manual de Python pero siacute son necesarios unos conocimientos previos primero para comprender la filosofiacutea del programador y posteriormente saber las utilidades que podemos obtener al trabajar con Python Para ello vamos a incluir algunos detalles incluidos entro de la Guiacutea de aprendizaje de Python por Guido Van Rossum v24 creador de Python Para la realizacioacuten de este documento se ha consultado como aparece en Bibliografiacutea y Referencias en la Web numerosa documentacioacuten pero como punto de partida parece loacutegico recoger la documentacioacuten de la Guiacutea de aprendizaje del propio creador de Python Python contiene una serie de palabras clave dependientes de la versioacuten de instalacioacuten para asegurarnos de las palabras clave de la versioacuten descargada podemos introducir el siguiente coacutedigo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
15
Palabras clave de Python De la misma manera Python trae consigo ciertas funciones que vienen de serie esto es no es necesario cargarlas desde ninguacuten moacutedulo Dichas funciones dependen de la versioacuten de Python instalada En la paacutegina httpdocspythonorglibraryfunctionshtml Nos encontramos con dicha relacioacuten A modo de resumen eacutestas son (ver paacutegina siguiente)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
16
Funciones internas de Python
311 Guiacutea de aprendizaje de Python por Guido Van Rossum v24
Extractos del documento Si en alguna ocasioacuten hemos escrito un guioacuten para un inteacuterprete de oacuterdenes (o shell script) de UNIX largo puede que hayamos sentido que nos encantariacutea antildeadir una caracteriacutestica maacutes pero ya es tan lento tan grande tan complicadohellip O la caracteriacutestica involucra una llamada al sistema u otra funcioacuten accesible soacutelo desde C El problema en siacute no suele ser tan complejo como para transformar el guioacuten en un programa en C Igual el programa requiere cadenas de longitud variable u otros tipos de datos (como listas ordenadas de nombres de fichero) faacuteciles en sh pero tediosas en C o quizaacute no tengamos tanta soltura con C Otra situacioacuten Quizaacute tengas que trabajar con bibliotecas de C diversas y el ciclo normal en C de escribir-compilar-probar-recompilar es demasiado lento Necesitas desarrollar software con maacutes velocidad Posiblemente has escrito un programa al que vendriacutea bien un lenguaje de extensioacuten y no quieres disentildear un lenguaje escribir y depurar el inteacuterprete y adosarlo a la aplicacioacuten En tales casos Python puede ser el lenguaje que necesitas Python es simple pero es un lenguaje de programacioacuten real Ofrece maacutes apoyo e infraestructura para programas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
17
grandes que el inteacuterprete de oacuterdenes Por otra parte tambieacuten ofrece mucho maacutes comprobacioacuten de errores que C y al ser un lenguaje de muy alto nivel tiene incluidos tipos de datos de alto nivel como matrices flexibles y diccionarios que llevariacutean diacuteas de programacioacuten en C Dados sus tipos de datos maacutes generales se puede aplicar a un rango de problemas maacutes amplio que Awk o incluso Perl pero muchas cosas son al menos igual de faacuteciles en Python que en esos lenguajes Python te permite dividir su programa en moacutedulos reutilizables desde otros programas en Python Viene con una gran coleccioacuten de moacutedulos estaacutendar que puedes utilizar como base de tus programas (o como ejemplos para empezar a aprender Python) Tambieacuten hay moacutedulos incluidos que proporcionan ES de ficheros llamadas al sistema ldquosocketsrdquo y hasta interfaces graacuteficas con el usuario como Tk Python es un lenguaje interpretado lo que ahorra un tiempo considerable en el desarrollo del programa pues no es necesario compilar ni enlazar El inteacuterprete se puede utilizar de modo interacivo lo que facilita experimentar con caracteriacutesticas del lenguaje escribir programas desechables o probar funciones durante el desarrrollo del prgram de la base hacia arriba Tambieacuten es una calculadora muy uacutetil Python permite escribir programas muy compactos y legibles Los programas escritos en Python son normalmente mucho maacutes cortos que sus equivalentes en C o C++ por varios motivos
Los tipos de datos de alto nivel permiten expresar operaciones complejas en una sola sentencia
El agrupamiento de sentencias se realiza mediante sangrado (indentacioacuten) en lugar de beginend o llaves
No es necesario declarar los argumentos ni las variables
Python es ampliable si ya sabes programar en C es faacutecil antildeadir una nueva funcioacuten o moacutedulo al inteacuterprete para realizar operaciones criacuteticas a la maacutexima velocidad o para enlazar programas en Python con bibliotecas que soacutelo estaacuten disponibles en forma binaria (como bibliotecas de graacuteficos especiacuteficas del fabricante) Una vez enganchado puedes enlazar el inteacuterprete de Python a una aplicacioacuten escrita en C y utilizarlo como lenguaje de macros para dicha aplicacioacuten
3111 Llamar al inteacuterprete
En UNIX el inteacuterprete de Python se suele instalar como bdquousrlocalbinpython‟ en aquellas maacutequinas donde esteacute disponible En Windows se instala en el directorio bdquoArchivos de programa‟ o en cualquier otro directorio seleccionado Poner este directorio en la ruta de ejecutables hace posible arrancarlo tecleando en el inteacuterprete de oacuterdenes la orden
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
18
Python
Como la eleccioacuten del directorio donde reside el inteacuterprete es una opcioacuten de instalacioacuten es posible que se halle en otros lugares Consulta con tu guru de Python local o tu administrador de sistemas (por ejemplo bdquousrlocalpython‟ es una alternativa recuente) Teclear un caraacutecter fin de fichero (Control-D en UNIX Control-Z en DOS o Windows) en el inteacuterprete causa la salida del inteacuterprete con un estado cero Si eso no funciona se puede salir del inteacuterprete tecleando las siguientes oacuterdenes bdquoimport sys sysexit()‟ Las opciones de edicioacuten de la liacutenea de oacuterdenes no son muy destacables En UNIX es posible que quien instalara el inteacuterprete en su sistema incluyera soporte para la biblioteca de GNU bdquoreadline‟ que permite una edicioacuten de liacutenea maacutes elaborada y la recuperacioacuten de oacuterdenes anteriores El modo maacutes raacutepido de ver si hay soporte de edicioacuten de liacuteneas es teclear Control-P en cuanto aparece el inteacuterprete Si pita la edicioacuten de liacuteneas estaacute disponible Si no sale nada o sale ^P no estaacute disponible la edicioacuten de liacuteneas y soacutelo se puede utilizar la tecla de borrado para borrar el uacuteltimo caraacutecter tecleado El inteacuterprete funciona como el inteacuterprete de oacuterdenes de UNIX cuando se lo llama con la entrada estaacutendar conectada a un dispositivo tty lee y ejecuta las oacuterdenes interactivamente cuando se le da un nombre de fichero como argumento o se le da un fichero como entrada estaacutendar lee y ejecuta un guion desde ese fichero Otro modo de arrancar el inteacuterprete es bdquopython -c orden [argumento] ‟ que ejecuta las sentencias de orden de forma anaacuteloga a la opcioacuten -c de la liacutenea de oacuterdenes Como las sentencias de Python suelen contener espacios u otros caracteres que la liacutenea de oacuterdenes considera especiales lo mejor es encerrar orden entre dobles comillas por completo
Imagen de la pantalla al abrir Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
19
Hay moacutedulos de Python que son uacutetiles como programas independientes Se los puede llamar mediante ldquopython-m moacutedulo[arg] helliprdquo que ejecuta el fichero de coacutedigo fuente de module como si se hubiera dado el nombre completo en la liacutenea de oacuterdenes Cuando se leen oacuterdenes desde una tty se dice que el inteacuterprete estaacute en modo interacitov En este modo espera a la siguiente orden con el indicador principal que suele ser tras signos ldquomayorrdquo (ldquogtgtgtrdquo) Para las liacuteneas adicionales se utiliza el indicador secundario por omisioacuten tres puntos (ldquohelliprdquo)
Programar en Python puede hacerse de varias maneras seguacuten la necesidad o el gusto de cada persona Para los neoacutefitos mi recomendacioacuten es que utilicen el ambiente graacutefico interactivo llamado IDLE Esta herramienta viene incluiacuteda con el moacutedulo tkinter Ademaacutes de resaltar la sintaxis en colores permite editar archivos fuente y es maacutes amigable al inicio
El IDLE tiene dos ambientes el shell interactivo con tiacutetulo Python Shell en su ventana muestra el prompt gtgtgt y espera un comando y uno o maacutes editores que se abren con el menuacute File --gt New Window Cada editor empieza con el tiacutetulo Untitled en su ventana el cual cambia hasta que se salva a un archivo con File --gt Save As (y subsecuentemente File --gt Save) Cada editor nos permite ejecutar el coacutedigo Python que contiene
Se recomienda crear una carpeta para realizar y guardar los ejemplos Para correr idle cambiar primero a esa carpeta y entonces correr idle En MS- Windows
Cejemplosgt Cpython22idleidle
En Linux
[usuariopc ejemplos]$ idle amp La primera vez que hacemos un ejemplo hemos de intentar hacerlo paso a paso en forma interactiva en el shell tecleando cada comando Es la forma en que aprendemos maacutes que si simplemente copiamos y pegamos Una vez que tecleamos y funcionan las cosas podemos copiar del shell interactivo y pegamos a una ventana de editor y salvamos en un archivo con terminacioacuten py para que conservemos lo que hicimos para siempre
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
20
Imagen del Shell interactivo de IDLE
Acceso a nueva ventana dentro del Shell interactivo de IDLE
Nueva ventana del editor de IDLE Una vez que partiendo de una ventana vacia tenemos nuestro coacutedigo hemos de seleccionar FileSave As para guardar el archivo y tenerlo disponible
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
21
Ventana del editor de IDLE con coacutedigo preparado para guardar
Una vez que nos hemos asegurado de que tenemos el coacutedigo guardado iquestcoacutemo hacemos para ejecutar el programa La respuesta es seleccionando Run Module En caso de seleccionar Run Module antes de guardar el coacutedigo Python nos pide que lo guardemos anteshellip Al seleccionar Run Module Python iraacute interpretando liacutenea por liacutenea y mostrando los resultados a traveacutes del Inteacuterprete Si existiese alguacuten error de sintaxis se avisa del tipo de error y doacutende se produce Una vez corregido el problema se vuelve a intentar el Run Module
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
22
El tener un inteacuterprete permite ir probando partes de programas sobre las que no se estaacute seguro y ver coacutemo reaccionan para poder decidir si se incluyen o no y coacutemo se pueden adaptar Asiacute se estaacute continuamente alternando entre el inteacuterprete y el programa Maacutes informacioacuten en httpdocspythonorglibraryidlehtml
3112 Moacutedulos
Si salimos del inteacuterprete de Python y vuelves a entrar las definiciones que se hayan hecho (funciones y variables) se pierden Por ello si se quiere escribir un programa algo maacutes largo seraacute mejor que se utilice un editor de texto para preparar la entrada del inteacuterprete y ejecutarlo con ese fichero como entrada Esto se llama crear un guioacuten Seguacuten vayan creciendo los programas puede que quieras dividirlos en varios ficheros para facilitar el mantenimiento Puede que tambieacuten quieras utilizar una funcioacuten que has escrito en varios programas sin tener que copiar su definicioacuten en cada programa Para lograr esto Python tiene un modo de poner definiciones en un fichero y utilizarlas en un guioacuten o en una instancia interactiva del inteacuterprete Tal fichero se llama moacutedulo las definiciones de un moacutedulo se pueden importar a otros moacutedulos o al moacutedulo principal (la coleccioacuten de variables accesible desde un guioacuten ejecutado desde el nivel superior y en el modo de calculadora) Un moacutedulo es un fichero que contiene definiciones y sentencias de Python El nombre del fichero es el nombre del moacutedulo con el sufijo ldquopyrdquo Dentro de un moacutedulo el nombre del moacutedulo (como cadena) es accesible mediante la variable global __name__ Un moacutedulo puede contener sentencias ejecutables ademaacutes de definiciones de funciones Estas sentencias sirven para inicializar el moacutedulo Soacutelo se ejecutan la primera vez que se importa el moacutedulo en alguna parte1 Cada moacutedulo tiene su propia tabla de siacutembolos que utilizan todas las funciones definidas por el moacutedulo como tabla de siacutembolos global Por ello el autor de un moacutedulo puede utilizar variables globales dentro del moacutedulo sin preocuparse por conflictos con las variables globales de un usuario del moacutedulo Por otra parte si sabes lo que haces puedes tocar las variables globales de un moacutedulo con la misma notacioacuten utilizada para referirse a sus funciones nombreModnombreElem Los moacutedulos pueden importar otros moacutedulos Es una costumbre no obligatoria colocar todas las sentencias ldquoimportrdquo al principio del moacutedulo (o guioacuten) Los nombres del moacutedulo importado se colocan en la tabla de siacutembolos global del moacutedulo (o guioacuten) que lo importa Existe una variacioacuten de la sentencia import que importa los nombres de un moacutedulo directamente a la tabla de siacutembolos del moacutedulo que lo importa Por ejemplo
gtgtgt from fibo import fib fib2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
23
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto no introduce el nombre del moacutedulo del que se toman los elementos importados en la tabla de siacutembolos local (por lo que en el ejemplo no estaacute definido fibo) Ademaacutes existe una variacioacuten que importa todos los nombres que define un moacutedulo gtgtgt from fibo import
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto importa todos los nombres excepto los que empiezan por un guioacuten bajo (_)
3113 El camino de buacutesqueda de moacutedulos
Cuando se importa un moacutedulo denominado fiambre el inteacuterprete busca un fichero denominado bdquofiambrepy‟ en el directorio actual y luego en la lista de directorios especificada por la variable de entorno PYTHONPATH Tiene la misma sintaxis que la variable de liacutenea de oacuterdenes PATH de UNIX que es una lista de nombres de directorios Cuando PYTHONPATH no tiene ninguacuten valor o no se encuentra el fichero se continuacutea la buacutesqueda en un camino dependiente de la instalacioacuten En UNIX normalmente es bdquousrlocallibpython‟ En realidad se buscan los moacutedulos en la lista de directorios dada por la variable syspath que se inicializa desde el directorio que contiene el guioacuten de entrada (o el directorio actual) PYTHONPATH y el valor por omisioacuten dependiente de la instalacioacuten Esto permite que los programas que saben lo que hacen modifiquen o reemplacen el camino de buacutesqueda de moacutedulos Obseacutervese que como el directorio que contiene el guioacuten bajo ejecucioacuten estaacute en el camino de buacutesqueda de moacutedulos es importante que el moacutedulo no tenga el mismo nombre que un moacutedulo estaacutendar o Python lo intentaraacute cargar el guioacuten como moacutedulo cuando se importe el moacutedulo Normalmente esto provocaraacute errores
3114 Ficheros Python ldquoCompiladosrdquo
Como mejora considerable del tiempo de arranque de programas cortos que utilizan muchos moacutedulos estaacutendar si existe un fichero llamado bdquofiambrepyc‟ en el directorio donde se encuentra bdquofiambrepy‟ se supone que contiene una versioacuten previamente ldquocompilada a byterdquo del moacutedulo fiambre La fecha y hora de la versioacuten de bdquofiambrepy‟
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
24
utilizada para generar bdquofiambrepyc‟ se graba en bdquofiambrepyc‟ y no se considera el fichero bdquopyc‟ si no concuerdan Normalmente no hay que hacer nada para generar el fichero bdquofiambrepyc‟ Siempre que bdquofiambrepy‟ se compile sin errores se hace un intento de escribir la versioacuten compilada a bdquofiambrepyc‟ No se provoca un error si falla el intento Si por cualquier motivo no se escribe completamente el fichero el fichero bdquofiambrepyc‟ resultante seraacute reconocido como no vaacutelido y posteriormente ignorado El contenido del fichero bdquofiambrepyc‟ es independiente de la plataforma por lo que se puede compartir un directorio de moacutedulos entre maacutequinas de diferentes arquitecturas
3115 Moacutedulos estandar
Python viene con una biblioteca de moacutedulos estaacutendar descrita en un documento aparte la Referencia de las bibliotecas Algunos moacutedulos son internos al inteacuterprete y proporcionan acceso a las operaciones que no son parte del nuacutecleo del lenguaje pero se han incluido por eficiencia o para proporcionar acceso a primitivas del sistema operativo como las llamadas al sistema El conjunto de dichos moacutedulos es una opcioacuten de configuracioacuten que tambieacuten depende de la plataforma subyacente Por ejemplo el moacutedulo amoeba soacutelo se proporciona en sistemas que de alguacuten modo tienen acceso a primitivas Amoeba Hay un moacutedulo en particular que merece una especial atencioacuten el moacutedulo sys que es siempre interno en cualquier inteacuterprete de Python Estas variables soacutelo estaacuten definidas si el inteacuterprete estaacute en modo interactivo La variable syspath es una lista de cadenas que determina el camino de buacutesqueda de moacutedulos del inteacuterprete Se inicializa a un valor por omisioacuten tomado de la variable de entorno PYTHONPATH o de un valor por omisioacuten interno si PYTHONPATH no tiene valor Se puede modificar mediante operaciones de lista estaacutendar por ejemplo gtgtgt import sys gtgtgt syspathappend(‟ufsguidolibpython‟)
3116 Paquetes
Los paquetes son un meacutetodo de estructurar el espacio nominal de moacutedulos de Python mediante el uso de ldquonombres de moacutedulos con puntordquo Por ejemplo el nombre de moacutedulo AB hace referencia a un submoacutedulo denominado ldquoBrdquo de un paquete denominado ldquoArdquo Del mismo modo que el uso de moacutedulos evita que los autores de diferentes moacutedulos tengan que preocuparse de los nombres de variables globales de los otros la utilizacioacuten de nombres de moacutedulo con puntos evita que los autores de paquetes multi-moacutedulo como Numpy o Pil (Biblioteca de tratamiento de imagen de
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
25
python) tengan que preocuparse de los nombres de los moacutedulos ajenos Supoacuten que deseas disentildear una coleccioacuten de moacutedulos (un paquete) para tratar de manera uniforme ficheros de sonido y datos de sonido Existen muchos formatos de fichero de sonido (que se suelen distinguir por la extensioacuten como bdquowav‟ bdquoaiff‟ o bdquoau‟) por lo que podriacuteas necesitar crear y mantener una coleccioacuten creciente de moacutedulos de conversioacuten entre los diferentes formatos Tambieacuten existen muchas operaciones posibles sobre los datos de sonido (tales como mezclar antildeadir eco ecualizar o generar un efecto artificial de estereofoniacutea) por lo que ademaacutes estariacuteas escribiendo una serie de moacutedulos interminable para realizar estas operaciones He aquiacute una posible estructura de tu paquete (expresado en teacuterminos de sistema de ficheros jeraacuterquico)
Sonido Paquete de nivel superior __init__py Inicializa el paquete de sonido
Formatos Subpaquete de conversiones de formato de ficheros __init__py leerwavpy escriwavpy leeraiffpy escriaiffpy leeraupy escriaupy Efectos Subpaquete de efectos de sonido __init__py ecopy surroundpy inversopy Filtros Subpaquete de filtros __init__py ecualizadorpy vocoderpy karaokepy
Modelo de estructura paquetemoacutedulo Al importar el paquete Python rastrea los directorios de syspath buscando por el subdirectorio de paquetes Los ficheros bdquo__init__py‟ son necesarios para que Python trate los directorios como contenedores de paquetes Se hace asiacute para evitar que los directorios con nombres
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
26
comunes como bdquotest‟ oculten accidentalmente moacutedulos vaacutelidos que aparezcan maacutes tarde dentro del camino de buacutesqueda En el caso maacutes sencillo bdquo__init__py‟ puede ser un fichero vaciacuteo pero tambieacuten puede ejecutar coacutedigo de inicializacioacuten del paquete o actualizar la variable __all__ descrita posteriormente Los usuarios del paquete pueden importar moacutedulos individuales del paquete por ejemplo import SonidoEfectoseco
De este modo se carga el submoacutedulo SonidoEfectoseco Hay que hacer referencia a eacutel por su nombre completo SonidoEfectosecofiltroeco(entrada salida retardo=07
aten=4)
Un modo alternativo de importar el submoacutedulo es from SonidoEfectos import eco
Asiacute tambieacuten se carga el submoacutedulo eco y se hace disponible sin su prefijo de paquete por lo que se puede utilizar del siguiente modo ecofiltroeco(entrada salida retardo=07 aten=4)
Y otra variacioacuten es importar la funcioacuten o variable deseada directamente from SonidoEfectoseco import filtroeco
De nuevo se carga el submoacutedulo eco pero se hace la funcioacuten filtroeco disponible directamente filtroeco(entrada salida retardo=07 aten=4)
Observa que al utilizar from paquete import elemento el elemento puede ser tanto un submoacutedulo (o subpaquete) del paquete como cualquier otro nombre definido por el paquete como una funcioacuten clase o variable La sentencia import comprueba primero si el elemento estaacute definido en el paquete Si no asume que es un moacutedulo e intenta cargarlo Si no lo consigue se provoca una excepcioacuten ImportError Sin embargo cuando se utiliza la sintaxis
importelementosubelementosubsubelemento cada elemento menos el
uacuteltimo debe ser un paquete El uacuteltimo elemento puede ser un moacutedulo o un paquete
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
27
pero no una clase funcioacuten o variable definida en el nivel superior
3117 Importar de un paquete
Y iquestqueacute ocurre cuando el usuario escribe from SonidoEfectos import En teoriacutea deberiacutea rastrearse el sistema para encontrar queacute submoacutedulos existen en el paquete e importarlos todos Por desgracia esta operacioacuten no funciona muy bien en las plataformas Windows y Mac en las que el sistema de ficheros no tiene una idea muy precisa de las mayuacutesculas de un fichero En estas plataformas no hay un modo garantizado de conocer si un fichero bdquoECOPY‟ deberiacutea ser importado como eco Eco o ECO (por ejemplo Windows 95 tiene la molesta costumbre de mostrar todos los nombres de fichero con la primera letra en mayuacutescula) La restriccioacuten de nombres de fichero DOS (8+3) antildeade otro problema para los nombres de moacutedulo largos La uacutenica solucioacuten es que el autor del paquete proporcione un iacutendice expliacutecito del paquete La sentencia import utiliza la siguiente convencioacuten Si el coacutedigo del bdquo__init__py‟ de un paquete define una lista llamada __all__ se considera que es la lista de nombres de moacutedulos que se deben importar cuando se encuentre from paquete import Depende del autor del paquete mantener la lista actualizada cuando se libere una nueva versioacuten del paquete Los autores del paquete pueden decidir no mantenerlo si no es uacutetil importar del paquete Por ejemplo el fichero bdquoSonidoEfectos__init__py‟ podriacutea contener el siguiente coacutedigo __all__ = [eco surround inverso] Esto significariacutea que from SonidoEfectos import importariacutea los tres submoacutedulos mencionados del paquete Sonido Si __all__ no estaacute definido la sentencia from SonidoEfectos import no importa todos los moacutedulos del subpaquete SonidoEfectos al espacio nominal actual Soacutelo se asegura de que el paquete SonidoEfectos ha sido importado (ejecutando posiblemente el coacutedigo de inicializacioacuten de bdquo__init__py‟) y luego importa cualesquiera nombres definidos en el paquete Esto incluye cualquier nombre definido (y submoacutedulos cargados expliacutecitamente) por bdquo__init__py‟ Tambieacuten incluye cualquier submoacutedulo del paquete expliacutecitamente importado por sentencias import anteriores Mira este coacutedigo import SonidoEfectoseco import SonidoEfectossurround from SonidoEfectos import En este ejemplo los moacutedulos eco y surround se importan al espacio nominal vigente porque estaacuten definidos en el paquete SonidoEfectos cuando se ejecuta la sentencia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
28
fromimport (esto tambieacuten funciona si estaacute definido __all__)
Observa que en general se debe evitar importar de un moacutedulo o paquete ya que suele dar como resultado coacutedigo poco legible Sin embargo se puede usar para evitar teclear en exceso en sesiones interactivas y cuando ciertos moacutedulos esteacuten disentildeados para exportar soacutelo nombres que cumplan ciertas reglas
Recuerda no hay nada incorrecto en utilizar from Paquete import
submoacutedulo_concreto De hecho es la notacioacuten recomendada salvo que el moacutedulo
que importa necesite usar submoacutedulos del mismo nombre de diferentes paquetes
3118 Referencias internas al paquete
Es comuacuten que los submoacutedulos necesiten hacerse referencias cruzadas Por ejemplo el moacutedulo surround podriacutea utilizar el moacutedulo eco De hecho tales referencias son tan comunes que la sentencia import busca antes en el paquete contenedor que en el camino de buacutesqueda de moacutedulos estaacutendar Por ello basta con que el moacutedulo surround use import eco o from eco import filtroeco Si el moacutedulo importado no se encuentra en el paquete actual (el paquete del que el moacutedulo actual es submoacutedulo) la sentencia import busca un moacutedulo de nivel superior con el nombre dado Cuando se estructuran los paquetes en subpaquetes (como el paquete Sonido del ejemplo) no hay un atajo para referirse a los submoacutedulos de los paquetes hermanos y se ha de utilizar el nombre completo del subpaquete Por ejemplo si el moacutedulo SonidoFiltrosvocoder necesita utilizar el moacutedulo eco del paquete SonidoEfectos debe utilizar from SonidoEfectos import eco
32 FUNCIONES INCLUIDAS EN NUMPY POR CATEGORIacuteAS (ARRAY CREATION)
A modo indicativo e introductorio se incluyen las funciones incluidas en la libreriacutea Numpy por categoriacuteas Ver maacutes informacioacuten en httpdocsscipyorgdocnumpy Numerical
arange() arrayrange()
linspace() logspace()
Ones and zeros
empty() empty_like()
eye() identity()
ones() ones_like()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
29
tri() tril() triu()
zeros() zeros_like()
From existing data
array() recarray()
asarray() asanyarray() asmatrix()
copy()
fromarrays() frombuffer() fromfile() fromfunction()
fromiter() loadtxt()
Building matrices
bmat()
diag() diagflat()
mat() matrix()
vander()
Reinterpreting arrays
view()
Types
astype()
cast[]()
int8() int16() int32() int64() int128()
uint8() uint16() uint32() uint64() uint128()
float16() float32() float64() float96() float128()
float256()
complex32() complex64() complex128() complex192()
complex256() complex512()
bool_()
object_()
void() str_() unicode_()
byte() ubyte()
short() ushort()
intc() uintc()
intp() uintp()
int_() uint()
longlong() ulonglong()
single() csingle()
float_() complex_()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
30
longfloat() clongfloat()
Kinds of array
asarray()
asanyarray()
asmatrix()
Changing the number of dimensions
atleast_1d() atleast_2d() atleast_3d()
broadcast()
expand_dims()
squeeze()
Transpose-like operations
rollaxis()
swapaxes()
T transpose()
Reshaping arrays
flat flatten()
ravel()
reshape() shape
Array modification
Joining arrays
append()
column_stack()
concatenate()
dstack() hstack() vstack()
Splitting arrays
array_split()
dsplit() hsplit() split() vsplit()
Enlarging arrays
tile()
repeat()
Adding and removing elements
delete()
insert()
resize()
trim_zeros()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
31
unique()
Rearranging elements
fliplr() flipud()
reshape()
roll()
rot90()
Indexing
[]
take()
put()
putmask()
Indexing syntax
slice()
newaxis
index_exp[]
Generating arrays suitable for indexing
c_[]
r_[]
s_[]
nonzero()
where()
indices()
ix_()
mgrid[]
ogrid()
Indexing-like operations
choose()
where()
compress()
diag() diagonal()
select()
Iterating
flat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
32
ndenumerate()
ndindex()
Logic
[]
all() any()
allclose()
alltrue()
nonzero()
piecewise()
sometrue()
Finding things
argmax() argmin()
searchsorted()
Array statistics
average() mean()
bincount() histogram()
corrcoef()
cov()
max() min() ptp()
median()
std() var()
ufuncs
abs() absolute()
add() multiply()
angle()
arccos() arcsin() arctan()
arccosh() arcsinh() arctanh()
arctan2()
bitwise_and() bitwise_or() bitwise_xor()
ceil() floor() round()
conj() conjugate()
cos() sin() tan()
cosh() sinh() tanh()
fix()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
33
hypot()
logical_and() logical_not() logical_or() logical_xor()
maximum() minimum()
ufunc methods
accumulate()
outer()
reduce()
Functional constructs
apply_along_axis()
apply_over_axis()
vectorize()
Random numbers
beta() binomial() gumbel() poisson() standard_normal()
uniform() vonmises() weibull()
bytes()
permutation()
rand() randint() randn()
random_integers()
random_sample()
ranf()
sample()
seed()
shuffle()
Array math
clip()
cross()
cumprod() cumsum()
diff()
digitize()
dot()
inner()
outer()
inv() pinv()
poly1d()
polyfit()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
34
prod() sum()
tensordot()
vdot()
FFT
fft()
fftfreq()
fftshift()
ifft()
Linear algebra
inv()
lstsq()
solve()
svd()
trace()
Array output
savetxt()
set_printoptions()
tofile()
tolist()
Other
sort() argsort()
binary_repr()
dtype()
fill()
finfo()
generic
imag real
inf nan
item()
lexsort()
ndim
shape
typeDict()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
35
Numpy Functions by Category (uacuteltima edicioacuten 2008-06-13 122659
efectuada por jh)
MoinMoin Powered
Pyt
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
36
4 METODOLOGIacuteA En este apartado se proporciona una descripcioacuten detallada de la metodologiacutea utilizada para el desarrollo e implementacioacuten de la biblioteca Utilizando un paradigma Estructurado de la programacioacuten que considera que la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Esto nos permite reutilizar coacutedigo programado y nos proporciona una mejor comprensioacuten de la programacioacuten En el uacuteltimo paquete de la libreriacutea tambieacuten se ha realizado una incursioacuten a la programacioacuten orientada a objetos con la declaracioacuten de algunas clases
41 ESTRUCTURA DE LA LIBRERIacuteA GEOTOPO En nuestro caso hemos partido del concepto de creacioacuten de una libreriacutea de funciones del aacutembito de la Topografiacutea y Geodesia Esta libreriacutea de Python se estructura como un paquete con el nombre de la libreriacutea ldquogeotopordquo que a su vez contiene 6 paquetes maacutes seguacuten tipologiacutea Asiacute tenemos
Imagen de los paquetes incluidos dentro del paquete (libreriacutea) geotopo
Por orden intuitivo desde el punto de vista de aplicacioacuten de las herramientas tenemos los siguientes paquetes
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
37
general que contiene funciones de tipo general y transversal al resto de herramientas
Moacutedulos implementados dentro de general
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
38
topografia que contiene aplicacioacuten topograacuteficas
Moacutedulos implementados dentro de topografia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
39
geodesia Aplicaciones geodeacutesicas
Moacutedulos implementados dentro de geodesia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
40
proy_cartograficas Herramientas de caacutelculos en diferentes proyeccionesetc
Moacutedulos implementados dentro de proy_cartograficas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
41
transformacioacuten Aplicaciones con modelo de rejilla del IGN y EGM08REDNAP
Moacutedulos implementados dentro de transformacioacuten
aplicaciones Distintos ejemplos de aplicabilidad de las funciones y clases implementadas en los moacutedulos de la libreriacutea
Cada uno de estos paquetes (carpetas) como se ha podido ver contiene a su vez varios moacutedulos y en cada uno de ellos y con su mismo nombre se define una uacutenica funcioacuten por moacutedulo salvo en la carpeta de transformcioacuten donde como se ha comentado antes nos adentramos dentro de la programacioacuten orientada a objetos y en algunos moacutedulos se implementan clases y dentro de estas funciones etc De esta manera al importar una funcioacuten la tenemos que importar desde el modulo que la contenga Dentro de cada carpeta se aprecia la existencia de un fichero llamado __init__py que convierte dicha carpeta en un paquete de Python Se advierte que desde el cierre de esta memoria versioacuten en papel a la entrega total de documentacioacuten puede haberse ampliado el nuacutemero de moacutedulos de la libreriacutea ldquogeotoprdquo que siacute se incluiriacutea en el CD con la implementacioacuten de coacutedigos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
42
42 DOCUMENTADO DE FUNCIONES Se puede documentar una funcioacuten en Python proporcionando una cadena de documentacioacuten (comentarios)
Las comillas triples implican una cadena multiliacutenea Todo lo que haya entre el principio y el final de las comillas es parte de una sola cadena incluyendo los retornos de carro y otras comillas Pueden usarse para definir cualquier cadena pero donde suelen estar maacutes presentes es haciendo de cadena de documentacioacuten Todo lo que hay entre las comillas triples es la cadena de documentacioacuten de la funcioacuten y se usa para explicar lo que hace la funcioacuten En caso de que exista una cadena de documentacioacuten debe ser la primera cosa definida en una funcioacuten (esto es lo primero tras los dos puntos) Teacutecnicamente no es necesario dotar a una funcioacuten de una cadena de documentacioacuten pero debemos de hacerlo siempre En Python esto tiene un incentivo antildeadido la cadena de documentacioacuten estaacute disponible en tiempo de ejecucioacuten como atributo de la funcioacuten
Lecturas complementarias sobre las funciones de documentacioacuten
PEP 257 define las convenciones al respecto de las cadenas de documentacioacuten La Guiacutea de estilo de Python indica la manera de escribir una buena cadena de
documentacioacuten El Tutorial de Python expone convenciones para el espaciado dentro de las
cadenas de documentacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
43
Ejemplo de documentado de funciones con cadena de documentacioacuten
Toda la informacioacuten incluida dentro de una cadena de documentacioacuten de triple comillas estaacute accesible en tiempo de ejecucioacuten Asiacute si pedimos ayuda de una funcioacuten nos aparece toda la informacioacuten incluida en dicha cadena de documentacioacuten
Ejemplo de consulta de la ayuda de las funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
44
En la siguiente web podemos encontrar maacutes informacioacuten sobre el documentado de funciones en Python httpcoderwarcom201106hola-python-la-utilidad-de-los-comentarios Ademaacutes de los comentarios de las funciones en Python como en otros lenguajes de programacioacuten podemos incluir liacuteneas o simples palabras de comentarios En Python se usa el siacutembolo para preceder los comentarios Podemos comentar las liacuteneas de nuestro trabajo
Comentar un grupo de liacuteneas
Determinar el tipo de codificacioacuten Esto es importante para poder usar caracteres especiales como la tilde o la ntilde Generalmente se coloca en la primera liacutenea del programa Existen muchas codificaciones
Poner cabecera a nuestro programa De esta forma identificaremos el nombre del programador la fecha en que se realizoacute y demaacutes datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
45
En el caso que nos atantildee de la libreriacutea geotopo hemos considerado introducir unos comentarios descriptivos de los moacutedulos mediante el caraacutecter y tras la definicioacuten de las funciones se incluyen unas cadenas de documentacioacuten
Ejemplo de la documentacioacuten de moacutedulos y funcioneshellip
Para evitar problemas de codificacioacuten como ha ocurrido durante la implementacioacuten del coacutedigo se han incluido al inicio del mismo dos liacuteneas para solucionar el problema Estas liacuteneas son
Comentarios de los moacutedulos
Cadena de documentacioacuten de funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
46
-- coding iso 8859-1 -
ISO 8859-1 es una norma de la ISO que define la codificacioacuten del alfabeto latino incluyendo diacriacuteticos como letras aceacutentuadas ntilde) y letras especiales necesarios para la escritura de las siguientes lenguas originarias de Europa occidental alemaacuten aragoneacutes asturiano castellano catalaacuten daneacutes escoceacutes espantildeol feroeacutes fineacutes franceacutes gaeacutelico gallego ingleacutes islandeacutes italiano neerlandeacutes noruego portugueacutes sueco y Euskera Tambieacuten conocida como Alfabeto Latino nordm 1 o ISO Latiacuten 1 Esta norma pertenece al grupo de juegos de caracteres de la ISO conocidos como ISOIEC 8859 que se caracterizan por poseer la codificacioacuten ASCII en su rango inicial (128 caracteres) y otros 128 caracteres para cada codificacioacuten con lo que en total utilizan 8 bits -- coding cp1252 -
Si trabajamos con IDLE con el uso de los acentos (en general con los caracteres no ASCII) nos daraacute error Si en el coacutedigo de un programa escribimos una cadena que contenga caracteres no ASCII(acentos ntildeiquestiexcl) al guardar el archivo por primera vez IDLE nos muestra el siguiente mensaje de aviso
Si pulsamos el botoacuten ldquoEdit my filerdquo Al principio del programa se insertaraacute la liacutenea siguiente
-- coding cp1252 --
Que indica el juego de caracteres utilizado en el archivo (cp1252 es el juego de caracteres de Windows para Europa occidental) A partir de entonces podemos guardar el archivo sin problemas Python no tiene una primera o uacuteltima linea exigida pero siacute que es habitual dar la localizacioacuten de Python como primera liacutenea en forma de comentario usrbinpython
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
47
43 FUNCIONES IMPLEMENTADAS A continuacioacuten se incluye una relacioacuten de las funciones implementadas por paquetes Ademaacutes de su nombre y un pequentildeo resumen de su aplicacioacuten se han incluido 3 apartados maacutes En verde Datos de entrada Indica los datos que necesita la funcioacuten Datos de salida Nos muestra si el resultado es uacutenico o una coleccioacuten de resultados (siempre en forma vector en el orden indicado) En rojo Llamadas o ldquoimportacioacutenrdquo de moacutedulos predefinidos del sistema ossys Llamadas a funciones de predefinidas del moacutedulo numpy En morado Llamadas a funciones definidas en esta libreriacutea (geotopo) bien incluidas en el mismo subpaquete que la propia funcioacuten definida o incluida en otro subpaquete De esta manera podemos tener una idea de las funciones implementadas los datos de partida necesarios y los resultados a obtener asiacute como la interrelacioacuten de cada funcioacuten con el resto de funciones de la libreriacutea geotopo Para el caso de cambio de proyeccioacuten o de Sistema de Referencia Coordenado se ha tomado la nomenclatura ldquodesderdquo ldquoardquo ldquoahorardquo Para sentildealar el ldquoardquo se ha elegido el nuacutemero 2 por su pronunciacioacuten to (a) Asiacute por ejemplo para el paso de latitud geodeacutesica a creciente en nombre de la funcioacuten seraacute lat2cre
431 Libreriacutea en Python ldquogeotopogeneralrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 areacor - Caacutelculo de la superficie interior de un poligono sobre el plano
entrada=(matriz) 2columnas xy salida=superficie
import ossys from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
48
busca2col - Localiza la primera fila con los valores recibidos en las dos columnas indicadas
Recibe Valor en la primera y segunda columnas posiciones de las columnas y matriz de busqueda
Devuelve Primera fila que cumple comenzando en 0 entrada=(valorcol1poscol1valorcol2poscol2matriz)
salida=orden de la primera fila que cumple comenzando en 0(oacute -1 si no existe) import ossys
from numpy import shape
busca - Localiza la primera ocurrencia de un nuacutemero en la primera columna de una matriz
entrada=(valormatriz)
salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscacol - Localiza la primera ocurrencia de un nuacutemero en la fila indicada de una matriz
entrada=(valormatriznfil) salida=posicioacuten nuacutemero de columna comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscafil - Localiza la primera ocurrencia de un nuacutemero en la columna indicada de una matriz
entrada=(valormatrizncol) salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
ordena - Ordena las filas de una matriz de menor a mayor seguacuten el contenido de la columna indicada
entrada=(colummatriz) salida=matriz de entrada ordenada
import ossys
from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
49
p_entera - Da la parte entera de un nuacutemero entrada=(nuacutemero) salida=parte entera del nuacutemero
import ossys from numpy import floor
perimetro - Calculo del perimetro de un poliacutegono sobre el plano a partir de las coord de sus veacutertices
entrada=(matriz ) 2columnas xy salida=periacutemetro
import ossys
from numpy import sqrtshape
psdo2rad - Cambio de formato de aacutengulos Pasa del conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex ) a radianes
entrada=(pseudesexa)
salida=radianes
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
rad2psdo - Cambio de formato de aacutengulos Pasa un angulo de radianes al conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex )
entrada=( radianes) salida= pseudesexa
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
50
432 Libreriacutea en Python ldquogeotopotopografiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 acimut - Caacutelculo del acimut entre dos puntos
entrada=(xiyixjyj)
salida=acimut en radianes
import ossys from numpy import arctan2pi
distancia ndash Caacutelculo de la distancia entre dos puntos del mismo
entrada=(xiyixjyj) salida=distancia (misma unidad que coordenadas de entrada
import ossys
from numpy import sqrt
edgcla ndash Caacutelculo del error de una distancia geomeacutetrica utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dgInstrnialtnl)
Dg=distancia geometrica Instr=Matriz de instrumentos
Ni=Altura de instrumento Altp=Altura de prisma
Nl=Nuacutemero de veces de medida de distancia
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edgclaprn ndash Calculo del error de una distancia geometrica utilizando la formulacion claacutesica de teoriacutea de errores Impresioacuten de resultados
entrada=(dgInstrnialtnlfsalida)
dg=distancia geometrica instr=Matriz de instrumentos
ni=Altura de instrumento altp=Altura de prisma
nl=Nuacutemero de veces de medida de distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
51
fsalida=Fichero de salidade datos
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edireh ndash Caacutelculo del error de la lectura horizontal realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(Instrnidisaltpnl)
salida=error de lectura horizontal en radianes
import ossys from numpy import sqrtpi
edirev ndash Caacutelculo del error de la lectura vertical realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(instrni nl) salida=error de lectura cenital en radianes en radianes
import ossys from numpy import sqrtpi
eincz ndash Caacutelculo del error de un desnivel trigonomeacutetrico utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dglvapedgelvInstrni) salida=xpypeplanisolzesolz
import ossys
from numpy import pisqrtcostan
intinv2 ndash Caacutelculo de la interseccioacuten inversa simple en el plano
entrada=(datosinstru)
salida= xpypangmin import ossys
from numpy import sincostanarctan2pizeros
from geotopogeneralordena import ordena
intinv2e ndash Caacutelculo de la interseccioacuten inversa simple en el plano Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru) salida= xpypeplani
import ossys from numpy import shapepisincostanarctan2dottransposezerossqrt
from geotopotopografiaedireh import edireh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
52
intinv3e ndash Caacutelculo de la interseccioacuten inversa 3D simple Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru)
salida= xpypeplanivzpvezp
import ossys from numpy import zerosshapesincos
from geotopotopografiaintinv2e import intinv2e from geotopotopografiadistancia import distancia
from geotopotopografiaedirev import edirev
from geotopotopografiaedgcla import edgcla from geotopotopografiaeincz import eincz
433 Libreriacutea en Python ldquogeotopogeodesiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 aut2lat - paso de latitud autaacutelica a geodeacutesica
entrada=(autnelipsoide) salida=lat
import ossys from numpy import sinarcsin
from geotopogeneralpsdo2rad import psdo2rad from geotopogeneralpsdo2rad import psdo2rad
calcpolo - caacutelculo del polo de la esfera a partir de tres puntos no alineados de la misma de forma que pasen a estar en un mismo paralelo tras realizarse el cambio de polo
entrada(lat1lon1lat2lon2lat3lon3) salida=[latnplonnpcolat]
import ossys from numpy import pisincosarccosarctanarctan2zeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
53
cla2enu - paso de un vector geodeacutesico expresado en componentes polares (observables claacutesicos) a componentes ENU entrada(azvdg)
salida=[ieiniu]
import ossys from numpy import sincoszeros
clhapv - lectura horizontal corregida por altitud del punto visado entrada=(lhzazlat1lat2h2nelipsoide) salida=lhz12c
import ossys
from numpy import sincospi from elipsoide import elipsoide
from radioem import radioem
clhsnlg - lectura horizontal corregida por paso de la seccioacuten normal a la liacutenea geodeacutesica entrada=(lhzs12az12lat1lat2nelipsoide)
salida=lhz12c import ossys
from numpy import sincospi
from elipsoide import elipsoide from radioem import radioem
cre2lat - paso de latitud creciente a geodeacutesica entrada=(crenelipsoide) salida=lat
import ossys
from numpy import sincostanarctanexppi from geotopogeneralpsdo2rad import psdo2rad
from elipsoide import elipsoide
efleutm - paso de la elipse de error de un punto del plano tangente al elipsoide al plano de la proyeccioacuten UTM
entrada=(latlonsemiaesemibeaziaenelipsoidehuso) salida=[semiasimibazia] import ossys from numpy import zerospi from geotopoproy_cartograficaskputm import kputm from geotopoproy_cartograficaskputmh import kputmh from geotopoproy_cartograficasconvutm import convutm from geotopoproy_cartograficasconvutmh import convutmh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
54
elip2esf - determinacioacuten de la esfera tangente al elipsoide en un paralelo indicado entrada=(nelipsoidelat)
salida=[afbe1e2]esfera
import ossys from numpy import zeros
from elipsoide import elipsoide from radiopv import radiopv
elipsoide - calculo los 5 paraacutemetros (afbe1 y 22) de los elipsoides ED50 GRS80 y WGS84 en funcioacuten de un coacutedigo 123 respectivamente entrada=(nelipsoide) 1 2 oacute 3 seguacuten ED50GRS80 oacute WGS84 respectivamente salida=[afbe1e2]
import ossys from numpy import sqrt zeros
enu2cla - paso de un vector geodeacutesico expresado en componentes ENU a componentes polares (observables claacutesicos) entrada=ieiniu salida=[azdgv]
import ossys
from numpy import zerosarcsenarctan2pisqrt
enu2xyz - paso de un vector geodeacutesico expresado en componentes ENU a componentes cartesianas tridimensionales entrada=(latlonieiniu)
salida=[ixiyiz] import ossys
from numpy import sincoszeros
eta_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del primer vertical entrada=(latlon)
salida= eta_ed50
import ossys from numpy import pisqrtcossintan
from elipsoide import elipsoide from radiopv import radiopv
from radioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
55
geo2tri - paso de coordenadas geodeacutesicas a cartesianas tridimensionales para un punto y elipsoide determinados entrada=(latlonhnelipsoide
salida=[XYZ]
import ossys from numpy import cossinzeros
from elipsoide import elipsoide from radiopv import radiopv
lam2lat - caacutelculo de la latitud geodeacutesica que le corresponde a una determinada longitud de arco de meridiano en el elipsoide indicado entrada=(lamnelipsoide salida=lat
import ossys from numpy import cossin
from elipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
lam - caacutelculo de la longitud de arco de meridiano a partir de la latitud geodeacutesica y del elipsoide entrada=(lamnelipsoide
salida=lam import ossys
from numpy import sin cos from elipsoide import elipsoide
lat2aut - paso de latitud geodeacutesica a autaacutelica entrada=(latnelipsoide)
salida=aut import ossys
from numpy import sinlog from elipsoide import elipsoide
lat2cre - paso de latitud geodeacutesica a creciente entrada=(latnelipsoide)
salide=cre import ossys
from numpy import sintanpilog
ond_ed50 - caacutelculo de la ondulacioacuten del geoide de un punto en Ed50 entrada =(latlon) salida=ondulacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
56
import ossys
from numpy import pisqrtcossintan
pdesfcr - problema directo en la esfera con el meacutetodo de cambio de base entrada=(lat1lon1saziresfera) salida=[latlon]
import ossys from numpy import cossintanarcsinarcosarctan2pizerostransposedot
pdg_dif1 - problema directo de la geodesia con la primera derivada entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2azi21] import ossys
from numpy import zerossincostanpi from radiopv import radiopv
from radioem import radioem
pdg_dif2 - problema directo de la geodesia con la primera y segunda derivada entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdg_dif3 - problema directo de la geodesia con la primera segunda y tercera derivada
entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdgrk4o - problema directo de la geodesia seguacuten meacutetodo de integracioacuten numeacuterica de Runge-Kutta de cuarto orden entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2
import ossys from numpy import zerossincostanpisqrt
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
57
from radioem import radioem
piesfcr - problema inverso en la esfera con el meacutetodo de cambio de base entrada=( lat1lon1lat2lon2resfera)
salida=[s12a12] import ossys
from numpy import cossintanarcsenarccosarctan2dotzerospi
pigbsl - problema inverso de la geodesia seguacuten el meacutetodo de Bessel entrada=( lat1lon1lat2lon2nelipsoide)
salida=[ s12a12a21]
import ossys from numpy import zerossincostanarcsinarctanarctan2arccossqrtpi
pigbslm - problema inverso de la geodesia seguacuten el meacutetodo de Bessel modificado por D David Henaacutendez Loacutepez
entrada=( lat1lon1lat2lon2nelipsoide) salida=[ s12a12a21]
import ossys from numpy import cossintanarcsinarcosarctanarctan2zerossqrtpi
from elipsoide import elipsoide
from radiopv import radiopv from piesfcr import piesfcr
from pdesfcr import pdesfcr
piloxo - problema inverso para la curva loxodroacutemica entrada=(lat1lon1lat2lon2nelipsoide)
salida=[dla12]
import ossys from numpy import arctan2coszerospi
from elipsoide import elipsoide from lat2cre import lat2cre
from radiopv import radiopv
from lam import lam
psi_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del meridiano entrada=(latlon) salida=psi_ed50
import ossys
from numpy import pisqrtcossintan from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
58
radioem - radio de curvatura de la elipse meridiana en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radioem
import ossys from numpy import sin
from elipsoide import elipsoide
radioeul - radio de la seccioacuten normal de un determinado acimut a partir del teorema de Euler entrada=(lataznelipsoide)
salida=radieul import ossys
from numpy import sincos from radioem import radioem
from radiopv import radiopv
radiopv - radio de curvatura del primer vertical en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radiopv
import ossys from numpy impor sqrtsin
from elipsoide import elipsoide
rdcae - reduccioacuten de la distancia de la cuerda al arco elipsoide entrada=( dcazlat1nelipsoide) salida=recae
impor ossys from numpy import sincosarcsen
from radioem import radioem from radiopv import radiopv
rdtce - reduccioacuten de la distancia del terreno a la cuerda elipsoide entrada=(dgazlat1h1h2nelipsoide)
salida=rdtce import ossys
from numpy import sincossqrt from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
59
tri2geo - paso de coordenadas cartesianas tridimensionales a geodeacutesicas en un punto y elipsoide determinados entrada=(XYZnelipsoide)
salida=[latlonh]
import ossys from numpy import cossintanarctanarctan2sqrtzeros
from elipsoide import elipsoide from radiopv import radiopv
xyz2clae - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a observables claacutesicos sobre el elipsoide y desnivel elipsoidal entrada=( X1Y1Z1DXDYDZnelipsoide) salida=[s12az12h12]
import ossys from numpy import zeros
from tri2geo import tri2geo
from pigbslm import pigbslm
xyz2clat - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes polares en el terreno entrada=( lat1lon1ixiyiz)
salida=[ dgaz12lv] import ossys
from numpy import zeros from xyz2enu import xyz2enu
from enu2cla import enu2cla
xyz2enu - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes ENU entrada=(latlonIXIYIZ)
salida=[ieiniu]
import ossys from numpy import sincoszeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
60
434 Libreriacutea en Python ldquogeotopoproy_cartograficasrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 calhuso - caacutelculo del huso correspondiente a un punto en la proyeccioacuten UTM a partir de su longitud geodeacutesica entrada=(lon)
salida=huso
import ossys from numpy import
cdel2geo - paso de un punto de la proyeccioacuten ciliacutendrica directa equivalente de Lambert al elipsoide
entrada=(XYLon0TXTYnelipsoide) salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaaut2lat import aut2lat
convestp - caacutelculo de la convergencia de meridianos de un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lonlon0)
salida=convest import ossys
convgk - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0nelipsoide)
salida=convgk
import ossys from numpy import sincostan
from geotopogeodesiaelipsoide import elipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
61
convlamb - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(lonlat0lon0)
salida=convlamb
import ossys from numpy import sin
convutm - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=convutm import ossys
from numpy import tancossinpi
from cahuso import calhuso from geotopogeodesiaelipsoide import elipsoide
convutmh - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso indicado entrada=(latlonnelipsoide)
salida=convutmh
import ossys from numpy import tancossinpi
from geotopogeodesiaelipsoide import elipsoide
dcdgputm - paso de la distancia cuerda en la proyeccioacuten UTM entre dos puntos a la correspondiente a la proyeccioacuten UTM de la liacutenea geoacutedesica que los une en el elipsoide entrada=(lat1lon1lat2lon2nelipsoide
salida=correccioacuten en metros import ossys
from numpy import cos from utm2geo import utm2geo
from geo2utmh import geo2utmh
from calhuso import calhuso from getopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
62
dcesfera - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general conforme en una esfera entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida=dc (reduccioacuten angular de la cuerda en radianes import ossys
from numpy import sincos from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
dcestp - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en la esfera al pasar a la proyeccioacuten estereograacutefica polar entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=dc(reduccioacuten angular de la cuerda en radianes)
import ossys from numpy import cossin
from kplamb import kplamb
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
from geotopogeodesiaradiopv import radiopv
dcgk - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general de Gauss-Kruumlger entrada=(lat1lon1lat2lon2lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos from geo2gk import geo2gk
from gk2geo import gk2geo
from geotopogeodesiaradioem import radioem from geotopogeodesiaradiopv import radiopv
from getopogeodesiaelipsoide import elipsoide
dclamb - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert entrada=(lat1lon1lat2lon2lat0pelipsoide
salida= dc(reduccioacuten angular de la cuerda en radianes)
import ossys
from numpy import sintancosexpzeros from geo2lamb import geo2lamb
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
63
from kdlamb import kdlamb
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
from geotopogeodesiaradiopv import radiopv
dclambf - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert con maacutes precisioacuten que la funcioacuten anterior entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos sin
from kplamb import kplamb from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o from geotopogeodesiaradiopv import radiopv
dcutm - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=( lat1lon1lat2lon2nelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaradioem import radioem
dcutmh - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso indicado entrada=( lat1lon1lat2lon2husonelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh
from utm2geo import utm2geo from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
64
dgpdcutm - paso de la distancia geodeacutesica proyectada en el plano UTM a la distancia correspondiente a la cuerda en esta proyeccioacuten para una geodeacutesica del elipsoide entrada=( lat1lon1lat2lon2snelipsoide)
salida=correccioacuten import ossys
from numpy import cos from geo2utmh import geo2utmh
from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut
esf2esfg - paso de un punto de una esfera a la esfera con cambio de polo Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo
entrada=(latlonlatplonp)
salida=[latlong]
import ossys from numpy import cossintanarcsenarctandotzerospi
from geotopogeodesiapiesfcr import piesfcr
esf2estp - paso de un punto de la esfera a las planas de la proyeccioacuten estereograacutefica polar entrada=(latlonlon0radiotxty)
salida=[xy] estp import ossys
from numpy import zerossincos
esfg2esf - paso de un punto de la esfera con cambio de polo a la esfera original Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo entrada=(latnlonnlatplonp
salida=[lat0lon0giro import ossys
from numpy import cossintanarcsenarctan2dotzerospitranspose from geotopogeodesiapiesfcr import piesfcr
esfc2lat - paso de latitud sobre la esfera a la correspondiente sobre el elipsoide seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
65
salida=lat
import ossys from numpy import sintanarctanpi
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiaelipsoide import elipsoide
estp2esf - paso de un punto de la proyeccioacuten estereograacutefica polar a la esfera entrada=(xylon0radiotxty)
salida=[xy] import ossys
from numpy import zerosarctan2arctansinpi
geo2cdel - paso de un punto del elipsoide a la proyeccioacuten ciliacutendrica directa equivalente de Lambert entrada=( latlonlon0txtynelipsoide)
salida=[XY] import ossys
from numpy import zeros
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialat2aut import lat2aut
geo2esto - paso de una nube de puntos del elipsoide a la proyeccioacuten estereograacutefica oblicua oacuteptima entrada=(latlonlat0lon0txtynelipsoide)
salida=[XY]
import ossys from numpy import
from lat2esc import lat2esc
from esf2esfg import esf2esfg from esf2estp import esf2estp
from geotopogeodesiaradiopv import radiopv
geo2gk - paso de un punto del elipsoide a la proyeccioacuten general de Gauss-Kruumlger entrada=( latlonlon0ptxtynelipsoide)
salida= [xy]gk import ossys
from numpy import costanpizeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesialam import lam
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
66
geo2lamb - paso de un punto del elipsoide a la proyeccioacuten general coacutenica conforme de Lambert entrada=( latlonlat0lon0ptxtynelipsoide)
salida=[xy]lambert
import ossys from numpy import sintancosexpzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
geo2merc - paso de un punto del elipsoide a la proyeccioacuten de Mercator entrada=( latlonlon0txtynelipsoide)
salida= [xy]mercator import ossys
from numpy import zeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialat2cre import lat2cre
geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
import ossys from numpy import zerostancospi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
geo2utmh - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=[XY] UTM
import ossys
from numpy import zerostancospi from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
gk2geo - paso de un punto de la proyeccioacuten general de Gauss-Kruumlger al elipsoide entrada=(XYlon0ptxtynelipsoide)
salida=[latlon]
import ossys
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
67
from numpy import zerostancospi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
kdesfera - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general conforme sobre una esfera Utiliza la integracioacuten numeacuterica de Simpson entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida= kdesfera import ossys
from kpesfera import kpesfera from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o
kdestp - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica de la esfera al proyectarla en la proyeccioacuten estereograacutefica polar Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0radiotxty)
salida=kdestp import ossys
from kpestp import kpestp from esf2estp import esf2estp
from estp2esf import estp2esf
kdgk - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general de Gauss-Kruumlger Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0pnelipsoide)
salida=kdgk import ossys
from geo2gk import geo2gk from gk2geo import gk2geo
from kpgk import kpgk
kdlamb - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica el elipsoide al proyectarla en la proyeccioacuten general coacutenica conforme de Lambert Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=kdlamb import ossys
from geolamb import geolamb from lamb2geo import lamb2geo
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
68
kdutm - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso del primer punto Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2nelipsoide)
salida=kdutm import ossys
from calhuso import calhuso from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kdutmh - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso indicado Utiliza la integracioacuten numeacuterica de Simpson
entrada= lat1lon1lat2lon2husohelipsoide) salida=kdutmh
import ossys from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kpesfera - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general conforme sobre una esfera entrada=( latlat0nelipsoide)
salida=kpesfera import ossys
from numpy import cossintanexp from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaelipsoide import elipsoide
kpestp - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lat)
salida=kpestp import ossys
from numpy import sin
kpgk - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0pnelipsoide)
salida=kpgk
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
69
import ossys
from numpy import sincostan from clahuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
kplamb - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(latlat0pnelipsoide)
salida=kplamb
import ossys from numpy import cossintanexp
from geotopogeodesialat2cre import lat2cre from geotopogeodesiaradiopv import radiopv
kputm - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=kputm
import ossys from numpy import tancossinpi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
kputmh - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=kputmh
import ossys
from numpy import sincostanpi from geotopogeodesiaelipsoide import elipsoide
lamb2geo - paso de un punto de la proyeccioacuten general coacutenica conforme de Lambert al elipsoide entrada=( xylat0lon0ptxtynelipsoide)
salida=[latlon] import ossys
from numpy import sintanarctanpilogsqrtzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
from geotopogeodesiacre2lat import cre2lat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
70
lat2esc - paso de la latitud geodeacutesica sobre el elipsoide a la correspondiente sobre la esfera seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide)
salida=latesfc
import ossys from numpy import sintanarctanpi
from geotopogeodesiaelipsoide import elipsoide
merc2geo - paso de un punto de la proyeccioacuten de Mercator al elipsoide entrada= (xylon0txtynelipsoide)
salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesiacre2lat import cre2lat
utm2geo - paso de un punto de la proyeccioacuten UTM al elipsoide entrada=(XYhusonelipsoide)
salida=[latlon] import ossys
from numpy import sqrtpitancossinzeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
435 Libreriacutea en Python ldquogeotopotransformacionrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 egm08rednap ndash fichero que almacena la clase Egm08rednap para el manejo de geoides en formato egm08rednap Define la funcioacuten getOndulation(selflatitudlongitud) Llama al fichero geoide que a su vez llama a los ficheros EGM08_REDNAP
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
71
entrada=(latitudlongitud)
salida=ondulacioacuten import ossys
from numpy import fromfile reshape from geoide import Geoide
geoide ndash fichero que almacena la clase Geoide para el manejo de geoides en formato egm08rednap La clase Geoide almacena ldquollamardquo a los geoides EGM08_REDNAP de la Peniacutensula o Baleares seguacuten corresponda Define las funciones getNoOndulacioacuten y getOndulacioacuten en funcioacuten de que encuentre las coordenadas de entrada dentro de los ficheros
entrada=(latitudlongitud) salida=ondulacioacuten
import ossys from numpy import fromfile reshapepifloorndarray
ntv2 ndash fichero que almacena la funcioacuten ntv2Espana Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(longitudlatitud) en deg en ED50 salida=(longitud latitud) en deg en ETRS89
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
ntv2_2 ndash fichero que almacena la funcioacuten ntv2Espana Adaptacioacuten del fichero anterior Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz) En la adatacioacuten realizada obtenemos soacutelo los diferenciales de caacutelculo de paso de ED50 a ETRS89 para tomarlo en el caacutelculo de la aproximacioacuten del sentido inverso entre ETRS89 a ED50 El paso de nodos del fichero utilizado es cada 200‟ lo que equivaldriacutea a 6000 m aproximadamente por lo que la aproximacioacuten seriacutea vaacutelida
entrada=(longitudlatitud) en deg en ETRS89 salida=(diflongitud diflatitud) en deg en ED50
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
72
sped2etpy ndash fichero rejilla del IGN Para transformacioacuten de coordenadas en los Sistemas de Referencia ED50 a ETRS89 Adaptado a Python y descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(fichero contenedor de informacioacuten) No entramos con ninguacuten valor
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
73
5 APLICABILIDAD DE LA LIBRERIacuteA Y CONCLUSIONES FINALES Finalmente hemos implementado los 5 subpaquetes de moacutedulos con funciones y clases incluidos en el paquete (libreriacutea) geotopo destinados a caacutelculos topograacuteficos y geodeacutesicos
Estructura final de la libreriacutea geotopo
Como puede verse en el paquete de geotopo se ha incluido un moacutedulo de aplicaciones en las que se han implementado unos ejercicios praacutecticos aplicando las distintas funciones de la libreriacutea Antes de entrar a describir los casos praacutecticos implementados hemos de decir que directamente podemos obtener resultados de cada una de las funiones Asiacute si queremos pasar de coordenadas geograacuteficas a coordenadas utm mirando en la descripcioacuten de las funciones tenemos geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
74
import ossys
from numpy import zerostancospi from calhuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
Pues bien una vez seleccionada la funcioacuten a utilizar abrimos el moacutedulo correspondiente con IDLE
Coacutedigo de la funcioacuten abierto con IDLE
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
75
Imagen de la ejecucioacuten de Run Module
Ejecutando Run Module Python abre el Python Shell En esta pantalla tenemos que introducir el nombre de la funcioacuten a usar geo2utm y entre pareacutentesis los valores que se especifican de entrada en la descripcioacuten de la funcioacuten entrada=(latlonnelipsoide)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
76
Llamada a la ejecucioacuten de la funcioacuten desde Python Shell
Como hemos indicado antes y por su relevancia y empleabilidad en otras funciones con ldquonelipsoiderdquo se entiende un coacutedigo del 1 al 3 que representa cada uno un elipsoides de referencia seguacuten los Sistemas de Referencia Coordenados en este caso 1=ED50 elipsoide Internacional Hayford 1924 2=ETRS89 elipsoide GRS80 y 3=WGS84
Al introducir los datos ejecutamos con Intro Obtenemos 2 valores en forma de vector que respresentan seguacuten la descripcioacuten de la funcioacuten salida=[XY] UTM
Podemos volver a caacutelcular las coordenadas UTM en el SCR ETRS89 (en caso de que lalitud y longitud vinieran dadas en el mismohellip) simplemente copiando la liacutenea de entrada pegaacutendola abajo y cambiando 1 por 2 como iacutendice del elipsoide y volviendo a ejecutar con enter
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
77
Dentro de Python Shell se puede copiar coacutedigo de liacuteneas anteriores y
pegar abajo Para caacutelculos maacutes complejos de mayor nuacutemero de puntos etc a modo de praacutectica se ha implementado el coacutedigo de distintos tipos de caacutelculo de ejemplo Distribuidos en 2 tipologiacuteas diferentes ldquotopografiardquo y ldquogeodesiardquo se han incluido coacutedigos para la resolucioacuten e impresioacuten de distintos tipos de problemas realizando ldquoimportrdquo de funciones declaradas en los moacutedulos de los distintos subpaquetes de geotopo
51 CASOS PRAacuteCTICOS TOPOGRAFIacuteA En total se han realizada 4 casos praacutecticos dentro del apartado de topografiacutea Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica topo_practica1 Del resto soacutelo se ha incluido la salida de datos
511 Implementacioacuten del coacutedigo topo_praacutectica1
usrbinpython
-- coding iso-8859-1 --
-- coding cp1252 --
Praacutectica 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
Datos Coordenadas del punto de estacioacuten
Sistema de referencia local
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmesn)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
78
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
En esta versioacuten de la praacutectica utilizando la libreriacutea geotopo en el caacutelculo de azimutes
periacutemetro y superficie
import ossys
from numpy import matrixarrayshapepizerosconcatenatemeansincossqrt
from geotopotopografiaacimut import acimut
from geotopogeneralperimetro import perimetro
from geotopogeneralareacor import areacor
Radio medio terrestre en metros
rt=63700000
Informacioacuten del punto de estacioacuten El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto de estacioacuten
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Altitud del punto en metros
- Quinta columna- Altura de instrumento en metros
pe=array([[100030242663090376657208150]])
Informacioacuten de las referencias
- Cada fila es un punto de referencia
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Lectura azimutal en grados centesimales
ref=array([[200127863973359492354821][2002322174932757501335646][20033289406282
69902313540][2004261222126827453319067]])
Informacioacuten de los puntos radiados
- Cada fila es una observacioacuten claacutesica a un punto radiado
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Lectura azimutal en grados centesimales
- Tercera columna- Lectura cenital en grados centesimales
- Cuarta columna- Distancia geomeacutetrica en metros
- Quinta columna- Altura de instrumento en metros
rad=array([[30013387131001173422431180][300211877101000083399617200][3003240
5756999039440097150][300433037831000468414996150]])
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos de referencia
Caacutelculo de las dimensiones de la matriz de puntos de referencia
- mref seraacute el nuacutemero de filas el nuacutemero de puntos
- nref seraacute el nuacutemero de columnas 4
[mrefnref]=refshape
Se extrae la informacioacuten del punto de estacioacuten
num_pe=pe[00]
x_pe=pe[01]
y_pe=pe[02]
z_pe=pe[03]
alti_pe=pe[04]
Caacutelculo de azitutes del punto de estacioacuten a cada uno de los puntos radiados
La funcioacuten azimut de la libreriacutea Geotop devuelve el valor en radianes
acimutes=zeros((mref1))
for i in range (1mref+1)
Se leen la identificacioacuten y las coordenadas del punto radiado y se almacenan en variables
temporales
num_pref=ref[i-10]
x_pref=ref[i-11]
y_pref=ref[i-12]
azi_pe_pref=acimut(x_pey_pex_prefy_pref)
acimutes[i-10]=azi_pe_pref2000pi
ref=concatenate((refacimutes)axis=1)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
79
Caacutelculo de la desorientacioacuten de cada direccioacutenccedil
desor=zeros((mref1))
for i in range(1mref+1)
Se leen los valores angulares y se transforman a radianes almacenaacutendose en variables
temporales
lhz_pe_pref=ref[i-13]pi2000
azi_pe_pref=ref[i-14]pi2000
des_pe_pref=azi_pe_pref-lhz_pe_pref
if des_pe_preflt0
des_pe_pref=des_pe_pref+20pi
desor[i-10]=des_pe_pref200pi
ref=concatenate((refdesor)axis=1)
Caacutelculo de la desorientacioacuten media con la funcioacuten de python
des_mean=mean(ref[5])pi200
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos radiados
[mradnrad]=radshape
Caacutelculo de coordenadas polares que se almacenan en la matriz coor_polares
- Primera columna- Nuacutemero entero identificador del punto radiado
- Segunda columna- Azimut en grados centesimales
- Tercera columna- Distancia reducida en metros
Caacutelculo de coordenadas cartesianas que se almacenan en la matriz coor_cart
- Primera columna- Nuacutemero entero identificador del punto del punto radiado
- Segunda columna- Coordenada X
- Tercera columna- Coordenada Y
- Cuarta columna- Altitud
antes se almacenan las coordenadas polares en la matriz coord_polares (numero de
puntoacimutdistancia reducida)
coord_polares=zeros((mrad3))
coord_cart=zeros((mrad4))
for i in range(1mrad+1)
num_prad=rad[i-10]
lhz_pe_prad=rad[i-11]pi2000
lv_pe_prad=rad[i-12]pi2000
dg_pe_prad=rad[i-13]
altp_pe_prad=rad[i-14]
coord_polares[i-10]=num_prad
azi_pe_prad=lhz_pe_prad+des_mean
if azi_pe_pradgt(20pi)
azi_pe_prad=azi_pe_prad-20pi
coord_polares[i-11]=azi_pe_prad2000pi
dr_pe_prad=dg_pe_pradsin(lv_pe_prad)
coord_polares[i-12]=dr_pe_prad
coord_cart[i-10]=num_prad
coord_cart[i-11]= x_pe+dr_pe_pradsin(azi_pe_prad)
coord_cart[i-12]= y_pe+dr_pe_pradcos(azi_pe_prad)
coord_cart[i-13]= z_pe+alti_pe+dg_pe_pradcos(lv_pe_prad)-
altp_pe_prad+042dr_pe_prad2rt
Caacutelculo del periacutemetro de la parcela utilizando la funcioacuten periacutemetro de Geotopo
coord=zeros((mrad2))
for i in range (1mrad+1)
coord[i-10]=coord_cart[i-11]
coord[i-11]=coord_cart[i-12]
perim=perimetro(coord)
Caacutelculo de la superficie de la parcela utilizando la funcioacuten areacor de Geotopo
superficie=areacor(coord)
superficie_error=areacore(coord)
Impresioacuten de resultados
fsalida=open(topopractica1salw)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
80
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
fsalidawrite(TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(nPRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALESn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimaln)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia Localn)
Impresioacuten del paso 1 Paso de coordenadas cartesianas a polares Azimutes
fsalidawrite(n1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada
visualn)
fsalidawrite( Punto Inicial Punto Final Acimut Desorientacioacutenn)
for i in range(1mref+1)
num_pref=ref[i-10]
azi=ref[i-14]
des=ref[i-15]
fsalidawrite(100fnum_pe)
fsalidawrite(150fnum_pref)
fsalidawrite(184fazi)
fsalidawrite(184fndes)
Impresioacuten del paso 2 Caacutelculo de la desorientacioacuten media
fsalidawrite(n2 Caacutelculo de la desorientacioacuten median)
fsalidawrite( Desorientacioacuten media154fn(des_mean200pi))
Impresioacuten del paso 3 Caacutelculo de la coordenadas polares
fsalidawrite(n3 Caacutelculo de las coordenadas polaresn)
fsalidawrite( Punto Acimut Distancian)
for i in range (1mrad+1)
num_prad=coord_polares[i-10]
azi=coord_polares[i-11]
dist=coord_polares[i-12]
fsalidawrite(100fnum_prad)
fsalidawrite(184fazi)
fsalidawrite(184fndist)
Impresioacuten del paso 4 Caacutelculo de la coordenadas cartesianas
fsalidawrite(n4 Caacutelculo de las coordenadas cartesianasn)
fsalidawrite( Punto X Y Zn)
for i in range (1mrad+1)
num_prad=coord_cart[i-10]
x=coord_cart[i-11]
y=coord_cart[i-12]
z=coord_cart[i-13]
fsalidawrite(100fnum_prad)
fsalidawrite(154fx)
fsalidawrite(154fy)
fsalidawrite(154fnz)
Impresioacuten del paso 5 valor del periacutemetro
fsalidawrite(n5 Caacutelculo del periacutemetro de la parcelan)
fsalidawrite( Periacutemetro153f mnperim)
Impresioacuten del paso 6 valor de la superficie de la parcela
fsalidawrite(n6 Caacutelculo de la superficie de la parcelan)
fsalidawrite( Superficie153f m2nsuperficie)
fsalidaclose()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
81
512 Impresioacuten del fichero de salida de resultados topo_praacutectica1
Ejecuando el programa anterior obtenemos un fichero con los resultados y la presentacioacuten mejorada que hemos implementado SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada visual
Punto Inicial Punto Final Acimut Desorientacioacuten
1000 2001 3539187 3184366
1000 2002 520128 3184482
1000 2003 1497887 3184347
1000 2004 2503428 3184361
2 Caacutelculo de la desorientacioacuten media
Desorientacioacuten media 3184389
3 Caacutelculo de las coordenadas polares
Punto Acimut Distancia
3001 3523102 4224303
3002 372099 3996170
3003 1590145 4400965
3004 2488172 4149959
4 Caacutelculo de las coordenadas cartesianas
Punto X Y Z
3001 27365966 33997199 6561414
3002 32447650 34236535 6566664
3003 32884285 27383773 6578851
3004 27363219 27915286 6569143
5 Caacutelculo del periacutemetro de la parcela
Periacutemetro 2358248 m
6 Caacutelculo de la superficie de la parcela
Superficie 342540930 m2
513 Salida de resultados topo_praacutectica2
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN DIRECTA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3264596 m
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
82
Y= 4065437 m
Previsioacuten de error planimeacutetrico= 0035 m
Vector con soluciones en z y su error
Z=725931 m Previsioacuten de error altimeacutetrico 0023 m
Z=725926 m Previsioacuten de error altimeacutetrico 0024 m
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN INVERSA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3010146 m
Y= 3411841 m
Previsioacuten de error planimeacutetrico= 0022 m
Vector con soluciones en z y su error
Z=515695 m Previsioacuten de error altimeacutetrico 0021 m
Z=515703 m Previsioacuten de error altimeacutetrico 0024 m
Z=515698 m Previsioacuten de error altimeacutetrico 0022 m
514 Salida de resultados topo_praacutectica3
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 3 CALCULO DE DATOS DE REPLANTEO PARA ESTACION TOTAL EN UN SISTEMA DE REFERENCIA
LOCAL
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
ResultadosDatos de replanteo
Base Punto Azimut Distancia CotaProyecto CotaTerreno CotaRoja
1 1 3856489 75460 96930 96539 0391
1 2 2667262 77786 96903 98259 -1356
1 3 1219144 40883 95329 94688 0641
1 4 279600 67437 95045 95587 -0542
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
83
515 Salida de resultados topo_praacutectica4
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 4 TRANSFORMACIOacuteN ENTRE SISTEMAS DE REFERENCIA LOCALES HELMERT 2D
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
Planteamiento del sistema de ecuaciones que define la transformacioacuten planimeacutetrica
Matriz A
1000 0000 3258686 -2709414
0000 1000 2709414 3258686
1000 0000 2075590 -2105320
0000 1000 2105320 2075590
Vector teacuterminos independientes
4554780
228501
3244004
443737
1 Resultados de los paraacutemetros de la transformacioacuten
- Planimetriacutea
- Traslacioacuten en coordenada x del sistema S1 al sistema S2 324401 m
- Traslacioacuten en coordenada y del sistema S1 al sistema S2 -20424 m
- Valor para el paraacutemetro a (a=landacos_giro) 0805119725
adimensional
- Valor para el paraacutemetro b (b=landasin_giro) -0593023724
adimensional
- Valor para el factor de escala (landa=sqrt(a2+b2)) 0999947
tanto por uno
- Valor para el giro (giro=arctan2(ba) -404157
grados centesimales
- Altimetriacutea
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 1 6056 m
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 2 6083 m
- Traslacioacuten media en coordenada z del sistema S1 al sistema S2 6070 m
2 Resultado de la transformacioacuten del punto 3 al sistema de referencia local S2
- Coordenada x de 3 en el sistema de referencia local S2 4072286 m
- Coordenada y de 3 en el sistema de referencia local S2 45170 m
- Coordenada z de 3 en el sistema de referencia local S2 104748 m
52 CASOS PRAacuteCTICOS GEODESIA En total se han realizada 5 casos praacutecticos dentro del apartado de geodesia Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica geo_practica1 Del resto soacutelo se ha incluido la salida de datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
84
521 Implementacioacuten del coacutedigo geo_praacutectica1
Semana Geomaacutetica 2011 Bogotaacute DC Colombia
IGAC-Instituto Agustiacuten Codazzi
Taller Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea GeoTop
Impartido por Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
Dr David Hernaacutendez Loacutepez davidhernandezulcmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
Praacutectica 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
Datos Coordenadas de la Red ERGNSS - Red de Estaciones Permanentes GNSS - Instituto
Geograacutefico Nacional Espantildea
Sistema de referencia ETRS89 (Elipsoide GRS80)
Coacutedigo EPSG para coordenadas geodeacutesicas sobre el elipsoide 4258
En esta versioacuten de la praacutectica se utiliza la libreriacutea GeoTop
Otra variante con respecto a la versioacuten anterior de la praacutectica es que se parte de coordenadas
geodeacutesicas en seudo decimal sexagesimal
Documentacioacuten La formulacioacuten empleada figura en el apartado 13 Parametrizacioacuten del
elipsoide del documento
OctaveTallerGeodesiaDocumentacionApuntes_DHL_2010GeodesiaElipsoidalpdf
Matriz de coordenadas
- Cada fila es un punto una estacioacuten de referencia GNSS
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada geodeacutesica longitud en suedo decimal sexagesimal
- Tercera columna- Coordenada geodeacutesica latitud en suedo decimal sexagesimal
- Cuarta columna- Altitud elipsoidal en metros
from numpy import zerosarraygenfromtxt
from geotopogeodesiaelipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiatri2geo import tri2geo
from geotopogeodesiageo2tri import geo2tri
c4258h=[ 1 432151770811 -82356167472 66917
2 382020103584 -02852437048 60356
3 385840494457 -15123054192 751736
4 365109112636 -22734018800 127517
5 392843898433 -62030426066 436527
6 432819118007 -34753038539 99287
7 355331090227 -51823016758 52475
8 375456176191 -44315999947 202082
9 371159923466 -65513077151 81860
10 402645009016 -34234283233 766920
11 423518259367 -53903511817 970254
12 364334003748 -42336718238 119848
13 393309445258 23728383134 62063
14 422728617761 -23007691629 503204
15 405642292231 -52945108842 854969
16 394031263811 -35750290360 808968
17 402101790155 -10727483699 956188
18 392850970441 -02015543423 77592
19 421102318373 -84847057525 87790
20 403129631681 -30519065001 972777
21 413800221985 -05255792567 296111
22 281829034024 -162958855078 2417483
23 282837857413 -161428164273 51787
24 282505711067 -163302841359 54475
25 280249784309 -164306688806 58543
26 284549932439 -175337787438 2199221]
Los datos los guardamos en un txt en la misma carpeta del trabajo e importamos
c4258h=genfromtxt(CPython27geotopoaplicacionestalleresgeo_practica1dattxt)
Caacutelculo de las dimensiones de la matriz de coordenadas
- m seraacute el nuacutemero de filas el nuacutemero de puntos
- n seraacute el nuacutemero de columnas 4
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
85
[mn]=c4258hshape
grs80=elipsoide(2)
Recibe Codigo del elipsoide (nelipsoide)
1 - Ed50 Devuelve el elipsoide Internacional 1924
2 - Etrs89 Devuelve el elipsoide GRS80
3 - Wgs84 Devuelve el elipsoide Wgs84
Definicioacuten del elipsoide
fsalida=open(geo_practica1salw)
fsalidawrite(SEMANA GEOMAacuteTICA - 2011n)
fsalidawrite(TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software
libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE
COORDENADAS GEODEacuteSICAS Y ECEFn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal
ggmmssfsn)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia ETRS89n)
fsalidawrite(- Paraacutemetros del elipsoide GRS80n)
fsalidawrite( - Semieje mayor 103f mngrs80[0])
fsalidawrite( - Inverso del aplanamiento 109f adimngrs80[1])
fsalidawrite( - Semieje menor 103f mngrs80[2])
fsalidawrite( - Primera excentricidad al cuadrado 109f adimngrs80[3]2)
fsalidawrite( - Segunda excentricidad al cuadrado 109f adimngrs80[4]2)
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(1 Paso de coordenadas geodeacutesicas a ECEFn)
fsalidawrite(NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF
CoorZECEFn)
c4258XYZ=zeros((m4))
for i in range (1m+1)
np=c4258h[i-10]
longitudRad=psdo2rad(c4258h[i-12])
latitudRad=psdo2rad(c4258h[i-11])
hElip=c4258h[i-13]
[xecefyecefzecef]=geo2tri(latitudRadlongitudRadhElip2)
fsalidawrite(80fnp)
fsalidawrite(159fc4258h[i-11])
fsalidawrite(159fc4258h[i-12])
fsalidawrite(123fhElip)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(n)
c4258XYZ[i-10]=np
c4258XYZ[i-11]=xecef
c4258XYZ[i-12]=yecef
c4258XYZ[i-13]=zecef
Caacutelculo e impresioacuten del paso 2 de coordenadas ECEF a geodeacutesicas
fsalidawrite(2 Paso de coordenadas ECEF a geodeacutesicasn)
fsalidawrite( NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud
AltElipn)
for i in range(1m+1)
np=c4258XYZ[i-10]
xecef=c4258XYZ[i-11]
yecef=c4258XYZ[i-12]
zecef=c4258XYZ[i-13]
[latitudlongitudhElip]=tri2geo(xecefyecefzecef2)
fsalidawrite(80fnp)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(159frad2psdo(latitud))
fsalidawrite(159frad2psdo(longitud))
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
86
fsalidawrite(153fnhElip)
fsalidaclose()
522 Impresioacuten del fichero de salida de resultados geo_praacutectica1
SEMANA GEOMAacuteTICA - 2011
TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea
GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal ggmmssfs
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia ETRS89
- Paraacutemetros del elipsoide GRS80
- Semieje mayor 6378137000 m
- Inverso del aplanamiento 0003352811 adim
- Semieje menor 6356752314 m
- Primera excentricidad al cuadrado 0006694380 adim
- Segunda excentricidad al cuadrado 0006739497 adim
1 Paso de coordenadas geodeacutesicas a ECEF
NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF CoorZECEF
1 43215177081 -8235616747 66917 4594489890 -678368010 4357065904
2 38202010358 -0285243705 60356 5009051399 -42072472 3935057504
3 38584049446 -1512305419 751736 4962848206 -160854365 3990884209
4 36510911264 -2273401880 127517 5105220295 -219278803 3804386889
5 39284389843 -6203042607 436527 4899866820 -544567584 4033769790
6 43281911801 -3475303854 99287 4625924690 -307096765 4365771175
7 35533109023 -5182301676 52475 5150908012 -478415023 3718518240
8 37545617619 -4431599995 202082 5021256063 -414685080 3898182184
9 37115992347 -6551307715 81860 5049613168 -612885631 3835143860
10 40264500902 -3423428323 766920 4851137670 -314518688 4116282036
11 42351825937 -5390351182 970254 4680871385 -463168384 4294606572
12 36433400375 -4233671824 119848 5103282414 -392096752 3793146894
13 39330944526 2372838313 62063 4919369704 225499577 4039849606
14 42272861776 -2300769163 503204 4708688612 -205761707 4283609369
15 40564229223 -5294510884 854969 4803054799 -462131609 4158378661
16 39403126381 -3575029036 808968 4904660519 -339868032 4050823512
17 40210179016 -1072748370 956188 4867391684 -95523894 4108341277
18 39285097044 -0201554342 77592 4929534046 -29050676 4033709925
19 42110231837 -8484705753 87790 4677481077 -725205068 4260827192
20 40312963168 -3051906500 972777 4848724914 -261632472 4123093922
21 41380022199 -0525579257 296111 4773803543 -73506519 4215453698
22 28182903402 -16295885508 2417483 5390243531 -1596630330 3007752593
23 28283785741 -16142816427 51787 5386836438 -1569217617 3023118925
24 28250571107 -16330284136 54475 5381262061 -1599192518 3017377791
25 28024978431 -16430668881 58543 5395193089 -1620537044 2981146536
26 28454993244 -17533778744 2199221 5326646317 -1719826438 3052043561
2 Paso de coordenadas ECEF a geodeacutesicas
NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud AltElip
1 4594489890 -678368010 4357065904 43215177081 -8235616747 66917
2 5009051399 -42072472 3935057504 38202010358 -0285243705 60356
3 4962848206 -160854365 3990884209 38584049446 -1512305419 751736
4 5105220295 -219278803 3804386889 36510911264 -2273401880 127517
5 4899866820 -544567584 4033769790 39284389843 -6203042607 436527
6 4625924690 -307096765 4365771175 43281911801 -3475303854 99287
7 5150908012 -478415023 3718518240 35533109023 -5182301676 52475
8 5021256063 -414685080 3898182184 37545617619 -4431599995 202082
9 5049613168 -612885631 3835143860 37115992347 -6551307715 81860
10 4851137670 -314518688 4116282036 40264500902 -3423428323 766920
11 4680871385 -463168384 4294606572 42351825937 -5390351182 970254
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
87
12 5103282414 -392096752 3793146894 36433400375 -4233671824 119848
13 4919369704 225499577 4039849606 39330944526 2372838313 62063
14 4708688612 -205761707 4283609369 42272861776 -2300769163 503204
15 4803054799 -462131609 4158378661 40564229223 -5294510884 854969
16 4904660519 -339868032 4050823512 39403126381 -3575029036 808968
17 4867391684 -95523894 4108341277 40210179016 -1072748370 956188
18 4929534046 -29050676 4033709925 39285097044 -0201554342 77592
19 4677481077 -725205068 4260827192 42110231837 -8484705753 87790
20 4848724914 -261632472 4123093922 40312963168 -3051906500 972777
21 4773803543 -73506519 4215453698 41380022199 -0525579257 296111
22 5390243531 -1596630330 3007752593 28182903402 -16295885508 2417483
23 5386836438 -1569217617 3023118925 28283785741 -16142816427 51787
24 5381262061 -1599192518 3017377791 28250571107 -16330284136 54475
25 5395193089 -1620537044 2981146536 28024978431 -16430668881 58543
26 5326646317 -1719826438 3052043561 28454993244 -17533778744 2199221
523 Salida de resultados geo_praacutectica2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
88
524 Salida de resultados geo_praacutectica3
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
89
525 Salida de resultados geo_praacutectica4
helliphellip
helliphellip
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
90
526 Salida de resultados geo_praacutectica5
Con la implementacioacuten y caacutelculo de los 9 casos praacutecticos realizados e incluidos en este Proyecto Final de Maacutester se puede obtener una idea de la aplicabilidad de esta libreriacutea en aplicaciones de caacutelculos topograacuteficos y geodeacutesicos Igualmente y como uno de los puntos de partida de este Proyecto obtenemos una libreriacutea muy potente para el uso en aacutembitos universitarios facilitando al profesorado el planteamiento y resolucioacuten de los distintos casos praacutecticos de las asignaturas y al tratarse de coacutedigo abierto se facilita que los alumnos implementen nuevas utilidades formatos de salida etc Convirtiendo geotopo en una herramienta de trabajo diario
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
91
6 CONCLUSIONES FINALES Como conclusiones finales podemos enumerar
Se ha corroborado lo que dicen los impulsores de Python se trata de un lenguaje limpio sencillo y claro muy proacuteximo a pseudocoacutedigo
Resulta interesante la utilizacioacuten de software libre para caacutelculos geodeacutesicos y topografiacuteacos Al tratarse de software libre es accesible a cualquier tipo de usuario
Al partir de la consideracioacuten de un paradigma estructurado de programacioacuten hemos conseguido implementar gran nuacutemero de funciones en ficheros (moacutedulos) de pequentildeo tamantildeo facilitando la programacioacuten Tambieacuten se ha iniciado en la programacioacuten orientada a objetos con la declaracioacuten de alguna clase
La importacioacuten de moacutedulos facilita a la implementacioacuten de coacutedigo sin necesitar volver a escribir el coacutedigo importado y ante cualquier modificacioacuten del mismo automaacuteticamente se actualiza en todos los programas o moacutedulos donde se importe dicho moacutedulo
Con las funciones definidas dentro de Numpy hemos realizado la mayor parte de los caacutelculos necesarios en nuestra biblioteca
Se ha de realizar la importacioacuten expresa de gran nuacutemero de operaciones matemaacuteticas Salvo + - y casi todos los demaacutes operadores se han de importar desde Numpy por ejemplo pi sqrt sin cos etc A veces puede resultar un poco complicado hacer la importacioacuten de estos operadores pero cuando se avanza en la programacioacuten hasta parece maacutes didactico reflejar todas las funciones importadas de otros moacutedulos
Se ha apreciado que en algunos casos las mismas funciones estaacuten incluidas en distintos moacutedulos y ademaacutes con nombres diferentes Asiacute en Numpy tenemos arcsin arccos arctan etc y en SciPy asin acos atan cuando se refieren a las mismas funciones arcoseno arcocoseno y arcotangente
Se ha creado una libreriacutea abierta accesible y editable para moder modificar
coacutedigo y tambieacuten poder ampliar con el implementado de nuevas funciones que aumenten el potencial de la misma Esto tambieacuten se incluye dentro de las liacuteneas futuras de actuacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
92
7 LIacuteNEAS FUTURAS DE ACTUACIOacuteN
De forma general se establecen las siguientes liacuteneas futuras de actuacioacuten e investigacioacuten
Avance en el desarrollo a aplicaciones informaacuteticas mediante el uso de software libre y en especial de Python
Estudio de la aplicabilidad de Python en el caacutelculo minimo-cuadraacutetico de sistemas de ecuaciones aplicables en topografiacutea y geodesia Para ello se ha de profundizar en el estudio de las diferencias entre los tipos array que contiene numpy y los tipos matrix par el caacutelculo avanzado de sistemas de ecuaciones
Aplicacioacuten de Python para el caacutelculo y ajuste de Redes Geodeacutesicas mediante la utilizacioacuten de miacutenimos cuadrados Con este fin estariacuteamos evitando el tener que recurrir a los softwares de caacutelculo de las casas comerciales ahorrando asiacute un coste importante y el poder realizar los ajustes y presentaciones de resultados adapatados a nuestras necesidades
Inclusioacuten de una interfaz graacutefica a los caacutelculos realizados para poder tener visualmente el resultado de los mismos
Aplicabilidad de python en el procesado de imaacutegenes Utilizacioacuten de la libreriacutea PIL (Python Imaging Library) que agrega capacidades de procesamiento de imaacutegenes al interprete Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
93
8 ANEJO
81 EQUIVALENCIAS ENTRE FUNCIONES EN MATLAB Y PYTHON Al partir de la libreiacutea Geotop en Octave hemos de tener en cuenta la equivanlencia entre algunas funciones de MatlabOctave con Python Asiacute tenemos MATLAB numpyarray numpymatrix Notes
ndims(a) ndim(a) or andim get the number of dimensions of a (tensor rank)
size(a) shape(a) or ashape get the size of the matrix
size(an) ashape[n-1]
get the number of elements of the nth dimension of array a (Note that MATLABreg uses 1 based indexing while Python uses 0 based indexing See note INDEXING)
MATLAB numpyarray numpymatrix Notes
[ 1 2 3 4 5 6 ] array([[123] [456]])
mat([[123] [456]]) or mat(1 2 3 4 5 6)
2x3 matrix literal
[ a b c d ] vstack([hstack([ab]) hstack([cd])])
bmat(a b c d) construct a matrix from blocks abc and d
a(end) a[-1] a[-1][00] access last element in the 1xn matrix a
a(25) a[14] access element in second row fifth column
a(2) a[1] or a[1] entire second row of a
a(15) a[05] or a[5] or a[05] the first five rows of a
a(end-4end) a[-5] the last five rows of a
a(1359) a[03][49] rows one to three and columns five to nine of a This gives read-only access
a([245][13]) a[ix_([134][02])] rows 24 and 5 and columns 1 and 3 This allows the matrix to be modified and doesnt require a regular slice
a(3221) a[ 2212] every other row of a starting with the third and going to the twenty-first
a(12end) a[ 2] every other row of a starting with the first
a(end-11) or flipud(a) a[ -1] a with rows in reverse order
a([1end 1]) a[r_[len(a)0]] a with copy of the first row appended to the end
a atranspose() or aT transpose of a
a aconj()transpose() or aconj()T
aH conjugate transpose of a
a b dot(ab) a b matrix multiply
a b a b multiply(ab) element-wise multiply
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
94
MATLAB numpyarray numpymatrix Notes
ab ab element-wise divide
a^3 a3 power(a3) element-wise exponentiation
(agt05) (agt05) matrix whose ijth element is (a_ij gt 05)
find(agt05) nonzero(agt05) find the indices where (a gt 05)
a(find(vgt05)) a[nonzero(vgt05)[0]] a[nonzero(vAgt05)[0]] extract the columms of a where vector v gt 05
a(find(vgt05)) a[vTgt05] a[vTgt05)] extract the columms of a where column vector v gt 05
a(alt05)=0 a[alt05]=0 a with elements less than 05 zeroed out
a (agt05) a (agt05) mat(aA (agt05)A) a with elements less than 05 zeroed out
a() = 3 a[] = 3 set all values to the same scalar value
y=x y = xcopy() numpy assigns by reference
y=x(2) y = x[1]copy() numpy slices are by reference
y=x() y = xflatten(1) turn array into vector (note that this forces a copy)
110 arange(111) or r_[111] or r_[11010j]
mat(arange(111)) or r_[111r]
create an increasing vector see note RANGES
09 arange(10) or r_[10] or r_[910j]
mat(arange(10)) or r_[10r]
create an increasing vector see note RANGES
[110] arange(111)[ newaxis] r_[111c] create a column vector
zeros(34) zeros((34)) mat() 3x4 rank-2 array full of 64-bit floating point zeros
zeros(345) zeros((345)) mat() 3x4x5 rank-3 array full of 64-bit floating point zeros
ones(34) ones((34)) mat() 3x4 rank-2 array full of 64-bit floating point ones
eye(3) eye(3) mat() 3x3 identity matrix
diag(a) diag(a) mat() vector of diagonal elements of a
diag(a0) diag(a0) mat() square diagonal matrix whose nonzero values are the elements of a
rand(34) randomrand(34) mat() random 3x4 matrix
linspace(134) linspace(134) mat() 4 equally spaced samples between 1 and 3 inclusive
[xy]=meshgrid(0805) mgrid[0906] or meshgrid(r_[09]r_[06]
mat() two 2D arrays one of x values the other of y values
ogrid[0906] or ix_(r_[09]r_[06]
mat() the best way to eval functions on a grid
[xy]=meshgrid([124][245]) meshgrid([124][245]) mat()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
95
ix_([124][245]) mat() the best way to eval functions on a grid
MATLAB numpyarray numpymatrix Notes
repmat(a m n) tile(a (m n)) mat() create m by n copies of a
[a b]
concatenate((ab)1) or hstack((ab)) or column_stack((ab)) or c_[ab]
concatenate((ab)1) concatenate columns of a and b
[a b] concatenate((ab)) or vstack((ab)) or r_[ab]
concatenate((ab)) concatenate rows of a and b
max(max(a)) amax() maximum element of a (with ndims(a)lt=2 for matlab)
max(a) amax(0) maximum element of each column of matrix a
max(a[]2) amax(1) maximum element of each row of matrix a
max(ab) maximum(a b) compares a and b element-wise and returns the maximum value from each pair
norm(v) sqrt(dot(vv)) or Scilinalgnorm(v) or linalgnorm(v)
sqrt(dot(vAvA)) or Scilinalgnorm(v) or linalgnorm(v)
L2 norm of vector v
a amp b logical_and(ab) element-by-element AND operator (Numpy ufunc) see note LOGICOPS
a | b logical_or(ab) element-by-element OR operator (Numpy ufunc) see note LOGICOPS
bitand(ab) a amp b bitwise AND operator (Python native and Numpy ufunc)
bitor(ab) a | b bitwise OR operator (Python native and Numpy ufunc)
inv(a) linalginv(a) inverse of square matrix a
pinv(a) linalgpinv(a) pseudo-inverse of matrix a
rank(a) linalgmatrix_rank(a) rank of a matrix a
ab linalgsolve(ab) if a is square
linalglstsq(ab) otherwise solution of a x = b for x
ba Solve aT xT = bT instead solution of x a = b for x
[USV]=svd(a) U S Vh = linalgsvd(a) V = VhT singular value decomposition of a
chol(a) linalgcholesky(a)T
cholesky factorization of a matrix (chol(a) in matlab returns an upper triangular matrix but linalgcholesky(a) returns a lower triangular matrix)
[VD]=eig(a) DV = linalgeig(a) eigenvalues and eigenvectors of a
[VD]=eig(ab) VD = Scilinalgeig(ab) eigenvalues and eigenvectors of ab
[VD]=eigs(ak) find the k largest eigenvalues and eigenvectors of a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
96
MATLAB numpyarray numpymatrix notes
[QRP]=qr(a0) QR = Scilinalgqr(a) mat() QR decomposition
[LUP]=lu(a) LU = Scilinalglu(a) or LUP=Scilinalglu_factor(a)
mat() LU decomposition
conjgrad Scilinalgcg mat() Conjugate gradients solver
fft(a) fft(a) mat() Fourier transform of a
ifft(a) ifft(a) mat() inverse Fourier transform of a
sort(a) sort(a) or asort() mat() sort the matrix
[bI] = sortrows(ai) I = argsort(a[i]) b=a[I] sort the rows of the matrix
regress(yX) linalglstsq(Xy) multilinear regression
decimate(x q) Scisignalresample(x len(x)q) downsample with low-pass filtering
unique(a) unique(a)
squeeze(a) asqueeze()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
97
9 BIBLIOGRAFIacuteA
DOWNEY A ELKNER J MEYERS C Aprenda a Pensar Como un Programador con Python GARCIacuteA-ASENJO VILLAMAYOR L HERNAacuteNDEZ LOacutePEZ D Geodesia Febrero 2005 GONZAacuteLEZ DUQUE R Python PARA TODOS Edicioacuten Internet bajo licencia Creative Commons Reconocimiento 25 Espantildea Descargable en httpmundogeeknettutorial-python MARZAL A GRACIA I Introduccioacuten a la programacioacuten con Python Departamento de Lenguajes y Sistemas Informaacuteticos Universitat Jaume I 2003 Edicioacuten Internet NUMPY COMMUNITY NumPy Reference Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg NUMPY COMMUNITY NumPy User Guide Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg VAN ROSSUM G Guiacutea de aprendizaje de PythonRelease 241ordf0 Edicioacuten Intenet Septiembre 2005 Descargable en httpwwwscipyorg VAN ROSSUM G El tutorial de Python Edicioacuten Intenet Descargable en httppythonorgarpyarTutorial
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
98
10 PAacuteGINAS WEB CONSULTADAS httpenfoquevirtualwordpresscomcategorytutorial httpgeektheplanetnet1347how-to-instalar-pydev-en-aptanaxhtml httpmundogeeknetarchivos20080328python-modulos-y-paquetes httpwwwthebitsourcecomprogramming-software-developmentpythonpython-application-development-aptana-pydev httpwwwyoutubecomwatchv=XtnfY2cBbMA youtube interesante trabajo con pydev y modulos httpcodingderkeilercomArchivePythoncomplangpython2005-08msg03511html paacutegina que explica coacutemo solucionar los problemas de Non-ASCII character httpeswikibooksorgwikiInmersiC3B3n_en_PythonSu_primer_programa_en_PythonDocumentado_de_funciones paacutegina que explica la cadena de documentacioacuten despueacutes de definir una funcioacuten con ldquordquordquo___rdquordquordquo (triples comillas) httpwwwpythonorgdevpepspep-0008 style guide for python code httpmundogeeknetarchivos20080707documentacion-en-python habla de la forma de documentar en python httpwwwpythonorgdevpepspep-0257 documentacioacuten y comentarios httpprogramandoideascomcomentarios-en-python documentacioacuten y comentarios httpwwwyoutubecomwatchv=v0sqRYuL5e8 tutorial de python con aptana httpwwwyoutubecomwatchv=29mq1Bn52GYampfeature=related youtube tutorial httpprojectsscipyorgnumpybrowsertrunknumpymatlibpyrev=8567 paacutegina que habla un poco de matrices
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
99
httpwwwgfceduco~arsranguias42p8guia42html cosas interesantes de matrices httpdocencia-euptunizaresctmedrascipy_tutorialscipy_tutorialhtml varios sobre python httpdocspythonorgtutorialmoduleshtml muy buena de paquetes etc httpwwwlinux-ittcom200804python-mdulos-y-paqueteshtml maacutes sobre paquetes httpwwwmclibreorgconsultarpythonotrosin03_idlehtmlccedil coding cp1252 httpwwwmclibreorgconsultarpython tutorial de python en la web Idle httpbioinfcomavupvescourseslinuxpythonmoduloshtml csv listasetc httpwwwdavidricardocommxp=1173 ok muy bueno importacioacuten csv como matriz httpwwwaprenderpythonorg httpwwwscipyorgNumpy_Example_List_With_Doc paacutegina muy importante de scipy httpjsbsanblogspotcom201101calculo-de-un-area-de-un-poligonohtml video sobre caacutelculo de areas de poliacutegonos irregulares httpmathesaurussourceforgenetmatlab-numpyhtml viprelacioacuten entre operaciones con octave y con python httpwwwscipyorgTentative_NumPy_Tutorial pagina importante de scipy httptecnologicumwordpresscomastronomiavideo-tutoriales-de-python todos los videotutoriales de python httpwwwyoutubecomwatchv=Oj3MZXWXGiUampfeature=related csv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
100
httptranslategoogleestranslatehl=esamplangpair=en7Cesampu=httpwwwscipyorgNumPy_for_Matlab_Users interesante sobre numpyhellip httpwikipythonorgmoinHowToSorting interesante de sort httpwikipythonorgmoinHowToSortingOperator_Module_Functions sort itemgetteretc httpcodeactivestatecomrecipes304440-sorting-dictionaries-by-value-in-python-24 operator itemgetter httpmundogeeknetarchivos20080402python-entrada-salida-ficheros entrada salida de archivos httpwwwgulicorgalmacenhttlaclwpchap11htm formato de escritura textos nuacutemeros y decimales httpwwwprogramacioncomarticuloguia_de_aprendizaje_de_python_657 formatos de salida httpnumpysourceforgenetnumdocHTMLnumdochtmpgfId-57315 muy importante sobre arraysetc httpwwwhjcbnlpythonArrayshtml muy importante sobre arraysetc httpwwwalecjacobsoncomweblogp=1570 cargar un txt como una matriz en python httpdocsscipyorgdocnumpyreferencegeneratednumpygenfromtxthtml getfromtxt de numpy httpwwwalegsaonlinecomart13php httpwwwumesdocenciabarzanaIAGPIagp3html httpwebusales~dhernandsoftwarehtmGeotop httpmailpythonorgpipermailtutor2008-March060886html From future import division
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
101
httpwwwyoutubecomwatchv=I6GMIQBD6EU youtube diccionarios httpmundogeeknetarchivos20080121python-tipos-basicos-ii-colecciones diccionarios httpstaffnotiaces~rcardeneshgdiveintopython3-esnative-datatypeshtml diccionarios httpwwwestrellateyardeorgdiscovermanual-python-lo-mas-basico diccionarios httpeswikibooksorgwikiInmersiC3B3n_en_PythonTipos_de_datos_nativosPresentaciC3B3n_de_los_diccionarios diccionarios httpdocspythonorgartutorialdatastructureshtmldiccionarios python estructura de diccionarios httpwwwwikilearningcomtutorialintroduccion_informal_a_matlab_y_octave-matrices_y_algebra_lineal_i19256-8 concatenar matrices httpwwwslidesharenetsantiagosilascomputao-cientfica-com-numpy-e-scipy-7797060 detalles de numpy vectores matricesetc httpwwwscipyorgNumPy_for_Matlab_Usershead-e9a492daa18afcd86e84e07cd2824a9b1b651935 muy importante de scipy arrays y matriceshellip httpdocsscipyorgdocnumpyreferencegeneratednumpyconcatenatehtml muy importante de scipy arrays y matriceshellip httppyspanishdocsourceforgenettut traduccioacuten del tutorial de Guido httpwwwscipyorgNumpy_Example_List_With_Dochead-5202db3259f69441c695ab0efc0cdf45341829fc httppyspanishdocsourceforgenetlibmodule-picklehtml funcioacuten pickle
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
102
httpnicocesarcomq=node23 carga de ficheros binarios httpstaffnotiaces~rcardeneshgdiveintopython3-esfileshtml apertura cierre carga de ficheros etc httppythonr2wordpresscom20080829leer-archivos-binarios-en-python lectura de ficheros binarios httpwwwignesignlayoutInherramientasdo descarga de ficheros regilla del IGN httpterrasitgvaeseskbtransformacion-coordenadas-utm-ed50-utm-etrs89-utilizando-libreria-proj4 paacutegina de la gva sobre cambio de sistema y fichero rejilla httpdocspythonorglibrarystructhtml moacutedulo struct de python para lectura de ficheros binarios httpwwwslidesharenetjpadillaaprogramacion-orientada-a-objetos-en-python programacioacuten orientada a objetos con python httppyspanishdocsourceforgenettutnode7html recorrer diccionarios httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 interesante aplicacioacuten fichero rejilla ntv2 en python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
6
BRASIL Fue el primer paiacutes en migrar masivamente sus sistemas de informacioacuten a alternativas open source Se llevoacute a cabo en primera instancia en el estado de Riacuteo Grande luego se realizoacute a escala nacional
ARGENTINA Existen varias iniciativas estatales que apuntan a fomentar el desarrollo de software libre Actualmente el software libre estaacute implementado en algunas provincias siendo Santa Fe el maacuteximo exponente de utilizacioacuten doacutende todo el software ha sido liberado bajo licencia GPL
FRANCIA La Asamblea Nacional utiliza software libre en todos sus sistemas y terminales de trabajo Francia viene tomando impulso en el desarrollo de software open source existen iniciativas para que el 20 del software contratado por la Administracioacuten Puacuteblica sea libre para el 2012 tambieacuten ofrece beneficios fiscales para las agrupaciones de usuarios y desarrolladores de SL
ESPANtildeA Espantildea se ha apostado como uno de los mayores impulsores mundiales del uso de software libre Actualmente existen 200 empresas proveedoras de soluciones 100 comunidades de usuarios y 180 centros educativos donde el software de coacutedigo abierto es una realidad cotidiana Muchos ayuntamientos y universidades ya se pasaron a sistemas open source
A principios de 2010 se presentoacute un proyecto liderado por la Plataforma Tecnoloacutegica Espantildeola de Software y Servicios con el apoyo del Plan Avanza Dicho plan pretende colocar a Espantildea a la par del resto de Europa en el disentildeo y uso de software libre de confianza y calidad similares a los comerciales Este proyecto llamado Vulcano trata de unificar el trabajo de distintas universidades centros tecnoloacutegicos y empresas que hasta el momento habiacutean dedicado sus esfuerzos al aacutembito de la educacioacuten
En un entrevista ofrecida por David Saacutenchez Director de Comunicacioacuten y Relaciones Instituciones en CENATIC que es el Centro Nacional de Referencia de Aplicacioacuten de las Tecnologiacuteas de la informacioacuten y la Comunicacioacuten basadas en Fuentes Abiertas podemos encontrar httpwwwmuylinuxcom20110407entrevistamos-a-david-sanchez-de-cenatic
CENATIC es una Fundacioacuten Puacuteblica Estatal del gobierno de Espantildea promovida por el Ministerio de Industria Turismo y Comercio y la Junta de Extremadura que ademaacutes cuenta en su patronato con las comunidades autoacutenomas de Andaluciacutea Aragoacuten Asturias Cantabria Cataluntildea Islas Balares Paiacutes Vasco y Galicia asiacute como las empresas Atos Origin Telefoacutenica y Grupo Aacutepex
Su trabajo es promover el conocimiento y uso del software libre en todos los aacutembitos de la sociedad con especial atencioacuten en las administraciones puacuteblicas las empresas el sector tecnoloacutegico proveedor o usuario de tecnologiacuteas libres y las comunidades de desarrollo a traveacutes de proyectos especiacuteficos para cada uno de estos sectores
ldquo La apuesta a del Administracioacuten del Estado por el software libre se inicioacute ya en los 90 cuando el entonces ministerio para las Administraciones Puacuteblicas llevoacute a cabo la primera gran migracioacuten a software libre de 1375 servidores Llegaron tambieacuten proyectos como el del Principado de Asturias para generar de forma colaborativa un
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
7
marco basado en software libre que permitioacute crear cluacutester de empresas locales capaces de aportar servicios de eAdministracion que de otra manera tendriacutean que haber contratado fuera de su comunidadrdquo
ldquo O el proyecto de gvSIG de la Conselleriacutea d‟Infrestructures i Transport de la Generalitat Valenciana un sistema de informacioacuten geograacutefico que cuenta con un tejido empresarial local alrededor del proyecto y estaacuten haciendo de la Comunidad Valenciana el nuacutecleo maacutes activo a nivel mundial de desarrollo GIS en entornos libres Tambieacuten es muy conocido el proyecto de Red Tecnoloacutegica Educativa de la Junta de Extremadura con Linex como primera distribucioacuten regional y concepto pionero adoptado ya por 7 comunidades autoacutenomasrdquo ldquoFinalmente a nivel de administracioacuten local hasta el 80 de los grandes ayuntamientos cuentan hoy en diacutea con proyectos de software libre siendo quizaacute el maacutes destacado el del Ayuntamiento de Zaragozardquo
22 LENGUAJES DE PROGRAMACIOacuteN Un lenguaje de programacioacuten es un lenguaje artificial que puede ser usado para controlar el comportamiento de una maacutequina especialmente una computadora Estos se componen de un conjunto de reglas sintaacutecticas y semaacutenticas que permiten expresar instrucciones que luego seraacuten interpretadas Debe distinguirse de ldquolenguaje informaacuteticordquo que es una definicioacuten maacutes amplia puesto que estos incluyen otros lenguajes como son el HTML o PDF que dan formato a un texto y no es programacioacuten en siacute misma El programador es el encargado de utilizar un lenguaje de programacioacuten para crear un conjunto de instrucciones que al final constituiraacute un programa o subprograma informaacutetico En su uso un lenguaje de programacioacuten puede acercarse a la forma humana de expresarse y por eso este tipo de lenguajes es llamado de alto nivel Esto significa que utilizan palabras y formas en sus estructuras que se asemejan al lenguaje natural (especialmente al ingleacutes) En cambio aquellos lenguajes que se aproximan maacutes a la forma en la cual la computadora se maneja son llamados lenguajes de bajo nivel Esto significa que lo que el programador deba escribir se acercaraacute al lenguaje maacutequina que es en definitiva lo que las computadoras pueden interpretar De todas maneras un lenguaje de programacioacuten difiere en muchos aspectos de un lenguaje humano Un coacutedigo escrito en un lenguaje de programacioacuten especiacutefico siempre se interpreta de la misma manera (no como los idiomas humanos ambiguos) los errores son mucho maacutes significativos (a tal punto de que un coacutedigo puede volverse ininterpretable por la computadora) etc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
8
El coacutedigo fuente es el conjunto de instrucciones que conforman un programa (o subprograma o moacutedulo) El coacutedigo fuente debe ser compilado para poder ser interpretado y ejecutado por la computadora La compilacioacuten traduce el coacutedigo fuente (que depende del lenguaje de programacioacuten) a un lenguaje maacutequina (que depende del sistema de la maacutequina) Existen lenguajes del tipo script que son directamente ejecutados por un inteacuterprete y no necesitan compilacioacuten Los lenguajes de programacioacuten pueden clasificarse empleando distintos meacutetodos y puntos de vista Esta clasificacioacuten se basa en el paradigma que utilizan Se debe aclarar que existen muchos maacutes paradigmas y subparadigmas de programacioacuten no incluidos dentro de los mencionados Ademaacutes todaviacutea hay conflictos en las definiciones y alcances de ciertos paradigmas
23 PARADIGMAS DE PROGRAMACIOacuteN Un paradigma de programacioacuten provee (y determina) la visioacuten y meacutetodos de un programador en la construccioacuten de un programa o subprograma Diferentes paradigmas resultan en diferentes estilos de programacioacuten y en diferentes formas de pensar la solucioacuten de problemas (con la solucioacuten de muacuteltiples ldquoproblemasrdquo se construye una aplicacioacuten) Los lenguajes de programacioacuten son basados en uno o maacutes paradigmas (Veacutease Programacioacuten en muacuteltiples paradigmas) Por ejemplo Smalltalk y Java son lenguajes basados en el paradigma orientado a objetos El lenguaje de programacioacuten Scheme en cambio soporta soacutelo programacioacuten funcional En cambio Python soporta muacuteltiples paradigmas Clasificacioacuten por paradigmas de programacioacuten Paradigma Imperativo describe la programacioacuten como una secuencia instrucciones o comandos que cambian el estado de un programa El coacutedigo maacutequina en general estaacute basado en el paradigma imperativo Su contrario es el paradigma declarativo En este paradigma se incluye el paradigma procedimental (procedural) entre otros Paradigma Declarativo No se basa en el coacutemo se hace algo (coacutemo se logra un objetivo paso a paso) sino que describe (declara) coacutemo es algo En otras palabras se enfoca en describir las propiedades de la solucioacuten buscada dejando indeterminado el algoritmo (conjunto de instrucciones) usado para encontrar esa solucioacuten Es maacutes complicado de implementar que el paradigma imperativo tiene desventajas en la eficiencia pero ventajas en la solucioacuten de determinados problemas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
9
Paradigma Estructurado la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Ademaacutes la programacioacuten se controla con secuencia seleccioacuten e iteracioacuten Permite reutilizar coacutedigo programado y otorga una mejor compresioacuten de la programacioacuten Es contrario al paradigma inestructurado de poco uso que no tiene ninguna estructura es simplemente un ldquobloquerdquo como por ejemplo los archivos batch (bat) Paradigma Orientado a Objetos estaacute basado en la idea de encapsular estado y operaciones en objetos En general la programacioacuten se resuelve comunicando dichos objetos a traveacutes de mensajes (programacioacuten orientada a mensajes) Se puede incluir -aunque no formalmente- dentro de este paradigma el paradigma basado en objetos que ademaacutes posee herencia y subtipos entre objetos Ej Simula Smalltalk C++ Java Visual Basic NET etc Su principal ventaja es la reutilizacioacuten de coacutedigos y su facilidad para pensar soluciones a determinados problemas Paradigma Funcional este paradigma concibe a la computacioacuten como la evaluacioacuten de funciones matemaacuteticas y evita declarar y cambiar datos En otras palabras hace hincapieacute en la aplicacioacuten de las funciones y composicioacuten entre ellas maacutes que en los cambios de estados y la ejecucioacuten secuencial de comandos (como lo hace el paradigma procedimental) Permite resolver ciertos problemas de forma elegante y los lenguajes puramente funcionales evitan los efectos secundarios comunes en otro tipo de programaciones Paradigma loacutegico se basa en la definicioacuten de reglas loacutegicas para luego a traveacutes de un motor de inferencias loacutegicas responder preguntas planteadas al sistema y asiacute resolver los problemas Ej prolog Otros paradigmas y subparadigmas son paradigma orientado al sujeto paradigma heuriacutestico paradigma reflectante programacioacuten basada en reglas paradigma basado en restricciones programacioacuten basada en prototipos etc
24 iquestPOR QUEacute PYTHON
241 Caracteriacutesticas de Python
Python es un lenguaje de programacioacuten de tipo script creado por Guido van Rossum a principios de los antildeos 90 cuyo nombre proviene del grupo ldquoMonty Pythonrdquo El objetivo es un lenguaje con una sintaxis muy limpia y con un coacutedigo legible Python es un lenguaje de programacioacuten multiparadigma Esto significa que maacutes que forzar a los programadores a adoptar un estilo particular de programacioacuten permite varios estilos programacioacuten orientada a objetos programacioacuten imperativa funcional estructurada
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
10
etc Otros paradigmas estaacuten soportados mediante el uso de extensiones Los lenguajes de script (lenguajes interpretados de muy alto nivel como Perl y Python) gozan de creciente importancia e implantacioacuten en el mundo del software libre Python es un lenguaje de programacioacuten faacutecil de aprender y potente Dispone de eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos simple pero eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de las plataformas En Python no hay terminadores de sentencia (como el punto y como de CC++Java) ni marcas de iniciofin de bloque (como las llaves de esos mismos lenguajes) La indentacioacuten como forma de marcar bloques elimina errores propios de los lenguajes citados y que son frecuentes en los estudiantes y tambieacuten en los programadores profesionales sentencias condicionales sin accioacuten por antildeadir un punto y coma incorrectos bucles con una sola sentencia cuando parece que hay dos o maacutes (por omisioacuten de llaves con un sangrado inadecuado del programa) sentencias con semaacutentica ldquoalteradardquo por usar una coma cuando corresponde un punto y coma o por omitir un punto y coma al declarar un registro antes de una funcioacuten etc La indentacioacuten soacutelo resulta molesta cuando el tamantildeo de un bloque de cierta profundidad excede del tamantildeo de la ventana del editor Python es un lenguaje interpretado Los lenguajes interpretados permiten ciclos de desarrollo breves (edicioacuten y ejecucioacuten) que animan a los estudiantes a experimentar Python dispone de un entorno de ejecucioacuten que ayuda a detectar los errores (incluyendo aquellos que soacutelo se manifiestan en ejecucioacuten) sentildealaacutendolos con mensajes muy informativos Python ofrece ademaacutes un entorno interactivo con el que es posible efectuar pequentildeas pruebas o disentildear incrementalmente las soluciones a los problemas La contrapartida de que se trate de un lenguaje interpretado es obviamente la menor velocidad de ejecucioacuten Python puede considerarse pseudocoacutedigo ejecutable Es muy expresivo y su sintaxis sencilla interfiere poco en la implementacioacuten de algoritmos asiacute que resulta un buen sustituto del pseudocoacutedigo con la ventaja de que los algoritmos codificados en Python siacute son ejecutables Python ofrece un rico conjunto de estructuras de datos flexibles El tipo lista de python (un vector dinaacutemico heterogeacuteneo) permite introducir con naturalidad el concepto de secuencia y presentar los algoritmos baacutesicos de manejo de secuencias Que la indexacioacuten empiece siempre en 0 ayuda a dar el salto a C C++ o Java El entorno de ejecucioacuten proporciona comprobacioacuten de validez de los iacutendices eliminando asiacute una de las principales fuentes de problemas de C y C++ El hecho de que las listas sean
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
11
redimensionables elimina al programador la necesidad de tomar decisiones acerca de la longitud maacutexima de los vectores demasiado pronto Por otra parte Python es un lenguaje muy ortogonal una vez se ha aprendido a manejar listas por ejemplo se sabe manejar cadenas ya que ambos tipos son secuenciales y presentan conjuntos de operadores con igual nombre y semaacutentica Ademaacutes de listas y cadenas Python ofrece tuplas (listas inmutables) y diccionarios (vectores asociativos) Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc No es que haya que presentar todos los moacutedulos pero sirve para ayudar a consultar la documentacioacuten de las bibliotecas disponibles favorece la programacioacuten eficiente
Python es orientado a objetos A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulos en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar al de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
El inteacuterprete de Python y su extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables para las plataformas maacutes importantes en la sede web de Python httppythonorg y se pueden distribuir libremente La misma sede contiene tambieacuten distribuciones y direcciones de muchos moacutedulos programas y herramientas Python de terceras partes ademaacutes de documentacioacuten adicional Es faacutecil ampliar el inteacuterprete de Python con nuevas funciones y tipos de datos implementados en C o C++ (u otros lenguajes a los que se pueda acceder desde C) Python es tambieacuten adecuado como lenguaje de extensioacuten para aplicaciones adaptables al usuario Algunas de las empresas que usan Python son Google Yahoo Industrial Light amp Magic Walt Disney NASA SGI Inc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
12
3 INSTRUMENTACIOacuteN Y SOFTWARE EMPLEADOS PHYTON
31 INTRODUCCIOacuteN A PYTHON Como se comentoacute en el punto anterior Python
es orientado a objetos (realmente es multiparadigma aceptando distintos tipos de paradigmas) A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulo en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar a l de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc
Entre estas bibliotecas cabe mencionar Numpy Numpy es un moacutedulo de Python escrito en C que define los vectores numeacutericos las matrices y las operaciones entre ellos Ademaacutes de las funciones sobre vectores y matrices tambieacuten incluye funciones trigonomeacutetricas del tipo sin cos tan etc Numpy es el paquete fundamental necesario para programacioacuten cientiacutefica con Python Contiene entre otras cosa
Un poderoso N-dimensional objeto vector Sofisticadas funciones Herramientas para integracioacuten con coacutedigo de C C++ y Fortram Uacutetiles de algebra lineal Transformada de Fourier y capacidades de
nuacutemeros aleatorios Ademaacutes de sus usos cientiacuteficos obvios NumPy tambieacuten se puede utilizar como un eficiente multi-dimensional contenedor de datos geneacutericos Pueden ser definidos tipos arbitrarios de datos Esto permite integrar a la perfeccioacuten y raacutepidamente con una amplia variedad de bases de datos El objeto principal de Numpy es el vector homogeacuteneo multidimensional Eacuteste es una tabla de elementos (generalmente nuacutemeros) todos del mismo tipo indexados por una tupla de enteros positivos Por ldquomultidimensionalrdquo entendemos que los vectores pueden tener varias dimensiones de ejes El nuacutemero de ejes se llamaraacuten a menudo ldquorangordquo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
13
Por ejemplo las coordenadas de un punto en el espacio 3D seriacutea [1 2 1] que
representariacutea un vector de rango 1 de longitud 3 Otro ejemplo seriacutea
[[ 1 0 0]
[ 0 1 2]]
que representa un array de rango 2 (2 dimensiones) Para maacutes informacioacuten mirar
Numpy Glossary
Otras libreriacuteas importantes en Python son Scipy es otra libreriacutea que usa Numpy El desarrollo de Scipy comenzoacute en el antildeo 2001 Sus oriacutegenes se remontan al paquete con extensiones numeacutericas para Python denominado Numeric Posteriormente aparecioacute Numarray con la intencioacuten de construir un paquete maacutes flexible y de limpiar el coacutedigo aunque resultoacute ser maacutes lengo para caacutelculos matriciales en pocas dimensiones En el antildeo 2005 el principal impulsor de Scipy Travis Oliphant reunificoacute ambos en un uacutenico paquete que integrse las ventajas de ambos y se denominoacute Numpy considerado el nuacutecleo de Scipy Scipy en siacute mismo se concibe actualmente como una extensioacuten de las funcionalidades de Numpy
Scipy posee moacutedulos para optimizacioacuten de funciones integracioacuten funciones especiales resolucioacuten de ecuaciones diferenciales ordinarias y otros muchos aspectos
Puede ser usado con Linux Windows y ha sido tambieacuten compilado para Sun y Mac
Scipy es un proyecto de software libre que ha sido patrocinado por una compantildeiacutea Enthought inc
Su organizacioacuten se estructura en subpaquetes que se pueden considerar especializados en dominios cientiacuteficos determinados Podemos encontrar estos paquetes seguacuten la ayuda de scipy (v046)
stats -- Statistical Functions sparse -- Sparse matrix lib -- Python wrappers to external libraries linalg -- Linear algebra routines signal -- Signal Processing Tools misc -- Various utilities that dont have another home interpolate -- Interpolation Tools [] optimize -- Optimization Tools [] cluster -- Vector Quantization Kmeans [] fftpack -- Discrete Fourier Transform algorithms []
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
14
io -- Data input and output [] maxentropy -- Routines for fitting maximum entropy models [] integrate -- Integration routines [] liblapack -- Wrappers to LAPACK library [] special -- Special Functions [] libblas -- Wrappers to BLAS library []
Matplotlib es una libreriacutea de Python que facilita la publicacioacuten de calidad de la publicacioacuten interactiva Permite obtener graacuteficas de calidad para publicaciones Su principal submoacutedulo para dibujar es pyplot Mayavi Ipython PIL (Python Imaging Library) Pythonxy EPD (Enthought python distribution $$) hellip Este texto como Memoria de un Proyecto Final de Maacutester no pretende ser ni mucho menos un manual de Python pero siacute son necesarios unos conocimientos previos primero para comprender la filosofiacutea del programador y posteriormente saber las utilidades que podemos obtener al trabajar con Python Para ello vamos a incluir algunos detalles incluidos entro de la Guiacutea de aprendizaje de Python por Guido Van Rossum v24 creador de Python Para la realizacioacuten de este documento se ha consultado como aparece en Bibliografiacutea y Referencias en la Web numerosa documentacioacuten pero como punto de partida parece loacutegico recoger la documentacioacuten de la Guiacutea de aprendizaje del propio creador de Python Python contiene una serie de palabras clave dependientes de la versioacuten de instalacioacuten para asegurarnos de las palabras clave de la versioacuten descargada podemos introducir el siguiente coacutedigo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
15
Palabras clave de Python De la misma manera Python trae consigo ciertas funciones que vienen de serie esto es no es necesario cargarlas desde ninguacuten moacutedulo Dichas funciones dependen de la versioacuten de Python instalada En la paacutegina httpdocspythonorglibraryfunctionshtml Nos encontramos con dicha relacioacuten A modo de resumen eacutestas son (ver paacutegina siguiente)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
16
Funciones internas de Python
311 Guiacutea de aprendizaje de Python por Guido Van Rossum v24
Extractos del documento Si en alguna ocasioacuten hemos escrito un guioacuten para un inteacuterprete de oacuterdenes (o shell script) de UNIX largo puede que hayamos sentido que nos encantariacutea antildeadir una caracteriacutestica maacutes pero ya es tan lento tan grande tan complicadohellip O la caracteriacutestica involucra una llamada al sistema u otra funcioacuten accesible soacutelo desde C El problema en siacute no suele ser tan complejo como para transformar el guioacuten en un programa en C Igual el programa requiere cadenas de longitud variable u otros tipos de datos (como listas ordenadas de nombres de fichero) faacuteciles en sh pero tediosas en C o quizaacute no tengamos tanta soltura con C Otra situacioacuten Quizaacute tengas que trabajar con bibliotecas de C diversas y el ciclo normal en C de escribir-compilar-probar-recompilar es demasiado lento Necesitas desarrollar software con maacutes velocidad Posiblemente has escrito un programa al que vendriacutea bien un lenguaje de extensioacuten y no quieres disentildear un lenguaje escribir y depurar el inteacuterprete y adosarlo a la aplicacioacuten En tales casos Python puede ser el lenguaje que necesitas Python es simple pero es un lenguaje de programacioacuten real Ofrece maacutes apoyo e infraestructura para programas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
17
grandes que el inteacuterprete de oacuterdenes Por otra parte tambieacuten ofrece mucho maacutes comprobacioacuten de errores que C y al ser un lenguaje de muy alto nivel tiene incluidos tipos de datos de alto nivel como matrices flexibles y diccionarios que llevariacutean diacuteas de programacioacuten en C Dados sus tipos de datos maacutes generales se puede aplicar a un rango de problemas maacutes amplio que Awk o incluso Perl pero muchas cosas son al menos igual de faacuteciles en Python que en esos lenguajes Python te permite dividir su programa en moacutedulos reutilizables desde otros programas en Python Viene con una gran coleccioacuten de moacutedulos estaacutendar que puedes utilizar como base de tus programas (o como ejemplos para empezar a aprender Python) Tambieacuten hay moacutedulos incluidos que proporcionan ES de ficheros llamadas al sistema ldquosocketsrdquo y hasta interfaces graacuteficas con el usuario como Tk Python es un lenguaje interpretado lo que ahorra un tiempo considerable en el desarrollo del programa pues no es necesario compilar ni enlazar El inteacuterprete se puede utilizar de modo interacivo lo que facilita experimentar con caracteriacutesticas del lenguaje escribir programas desechables o probar funciones durante el desarrrollo del prgram de la base hacia arriba Tambieacuten es una calculadora muy uacutetil Python permite escribir programas muy compactos y legibles Los programas escritos en Python son normalmente mucho maacutes cortos que sus equivalentes en C o C++ por varios motivos
Los tipos de datos de alto nivel permiten expresar operaciones complejas en una sola sentencia
El agrupamiento de sentencias se realiza mediante sangrado (indentacioacuten) en lugar de beginend o llaves
No es necesario declarar los argumentos ni las variables
Python es ampliable si ya sabes programar en C es faacutecil antildeadir una nueva funcioacuten o moacutedulo al inteacuterprete para realizar operaciones criacuteticas a la maacutexima velocidad o para enlazar programas en Python con bibliotecas que soacutelo estaacuten disponibles en forma binaria (como bibliotecas de graacuteficos especiacuteficas del fabricante) Una vez enganchado puedes enlazar el inteacuterprete de Python a una aplicacioacuten escrita en C y utilizarlo como lenguaje de macros para dicha aplicacioacuten
3111 Llamar al inteacuterprete
En UNIX el inteacuterprete de Python se suele instalar como bdquousrlocalbinpython‟ en aquellas maacutequinas donde esteacute disponible En Windows se instala en el directorio bdquoArchivos de programa‟ o en cualquier otro directorio seleccionado Poner este directorio en la ruta de ejecutables hace posible arrancarlo tecleando en el inteacuterprete de oacuterdenes la orden
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
18
Python
Como la eleccioacuten del directorio donde reside el inteacuterprete es una opcioacuten de instalacioacuten es posible que se halle en otros lugares Consulta con tu guru de Python local o tu administrador de sistemas (por ejemplo bdquousrlocalpython‟ es una alternativa recuente) Teclear un caraacutecter fin de fichero (Control-D en UNIX Control-Z en DOS o Windows) en el inteacuterprete causa la salida del inteacuterprete con un estado cero Si eso no funciona se puede salir del inteacuterprete tecleando las siguientes oacuterdenes bdquoimport sys sysexit()‟ Las opciones de edicioacuten de la liacutenea de oacuterdenes no son muy destacables En UNIX es posible que quien instalara el inteacuterprete en su sistema incluyera soporte para la biblioteca de GNU bdquoreadline‟ que permite una edicioacuten de liacutenea maacutes elaborada y la recuperacioacuten de oacuterdenes anteriores El modo maacutes raacutepido de ver si hay soporte de edicioacuten de liacuteneas es teclear Control-P en cuanto aparece el inteacuterprete Si pita la edicioacuten de liacuteneas estaacute disponible Si no sale nada o sale ^P no estaacute disponible la edicioacuten de liacuteneas y soacutelo se puede utilizar la tecla de borrado para borrar el uacuteltimo caraacutecter tecleado El inteacuterprete funciona como el inteacuterprete de oacuterdenes de UNIX cuando se lo llama con la entrada estaacutendar conectada a un dispositivo tty lee y ejecuta las oacuterdenes interactivamente cuando se le da un nombre de fichero como argumento o se le da un fichero como entrada estaacutendar lee y ejecuta un guion desde ese fichero Otro modo de arrancar el inteacuterprete es bdquopython -c orden [argumento] ‟ que ejecuta las sentencias de orden de forma anaacuteloga a la opcioacuten -c de la liacutenea de oacuterdenes Como las sentencias de Python suelen contener espacios u otros caracteres que la liacutenea de oacuterdenes considera especiales lo mejor es encerrar orden entre dobles comillas por completo
Imagen de la pantalla al abrir Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
19
Hay moacutedulos de Python que son uacutetiles como programas independientes Se los puede llamar mediante ldquopython-m moacutedulo[arg] helliprdquo que ejecuta el fichero de coacutedigo fuente de module como si se hubiera dado el nombre completo en la liacutenea de oacuterdenes Cuando se leen oacuterdenes desde una tty se dice que el inteacuterprete estaacute en modo interacitov En este modo espera a la siguiente orden con el indicador principal que suele ser tras signos ldquomayorrdquo (ldquogtgtgtrdquo) Para las liacuteneas adicionales se utiliza el indicador secundario por omisioacuten tres puntos (ldquohelliprdquo)
Programar en Python puede hacerse de varias maneras seguacuten la necesidad o el gusto de cada persona Para los neoacutefitos mi recomendacioacuten es que utilicen el ambiente graacutefico interactivo llamado IDLE Esta herramienta viene incluiacuteda con el moacutedulo tkinter Ademaacutes de resaltar la sintaxis en colores permite editar archivos fuente y es maacutes amigable al inicio
El IDLE tiene dos ambientes el shell interactivo con tiacutetulo Python Shell en su ventana muestra el prompt gtgtgt y espera un comando y uno o maacutes editores que se abren con el menuacute File --gt New Window Cada editor empieza con el tiacutetulo Untitled en su ventana el cual cambia hasta que se salva a un archivo con File --gt Save As (y subsecuentemente File --gt Save) Cada editor nos permite ejecutar el coacutedigo Python que contiene
Se recomienda crear una carpeta para realizar y guardar los ejemplos Para correr idle cambiar primero a esa carpeta y entonces correr idle En MS- Windows
Cejemplosgt Cpython22idleidle
En Linux
[usuariopc ejemplos]$ idle amp La primera vez que hacemos un ejemplo hemos de intentar hacerlo paso a paso en forma interactiva en el shell tecleando cada comando Es la forma en que aprendemos maacutes que si simplemente copiamos y pegamos Una vez que tecleamos y funcionan las cosas podemos copiar del shell interactivo y pegamos a una ventana de editor y salvamos en un archivo con terminacioacuten py para que conservemos lo que hicimos para siempre
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
20
Imagen del Shell interactivo de IDLE
Acceso a nueva ventana dentro del Shell interactivo de IDLE
Nueva ventana del editor de IDLE Una vez que partiendo de una ventana vacia tenemos nuestro coacutedigo hemos de seleccionar FileSave As para guardar el archivo y tenerlo disponible
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
21
Ventana del editor de IDLE con coacutedigo preparado para guardar
Una vez que nos hemos asegurado de que tenemos el coacutedigo guardado iquestcoacutemo hacemos para ejecutar el programa La respuesta es seleccionando Run Module En caso de seleccionar Run Module antes de guardar el coacutedigo Python nos pide que lo guardemos anteshellip Al seleccionar Run Module Python iraacute interpretando liacutenea por liacutenea y mostrando los resultados a traveacutes del Inteacuterprete Si existiese alguacuten error de sintaxis se avisa del tipo de error y doacutende se produce Una vez corregido el problema se vuelve a intentar el Run Module
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
22
El tener un inteacuterprete permite ir probando partes de programas sobre las que no se estaacute seguro y ver coacutemo reaccionan para poder decidir si se incluyen o no y coacutemo se pueden adaptar Asiacute se estaacute continuamente alternando entre el inteacuterprete y el programa Maacutes informacioacuten en httpdocspythonorglibraryidlehtml
3112 Moacutedulos
Si salimos del inteacuterprete de Python y vuelves a entrar las definiciones que se hayan hecho (funciones y variables) se pierden Por ello si se quiere escribir un programa algo maacutes largo seraacute mejor que se utilice un editor de texto para preparar la entrada del inteacuterprete y ejecutarlo con ese fichero como entrada Esto se llama crear un guioacuten Seguacuten vayan creciendo los programas puede que quieras dividirlos en varios ficheros para facilitar el mantenimiento Puede que tambieacuten quieras utilizar una funcioacuten que has escrito en varios programas sin tener que copiar su definicioacuten en cada programa Para lograr esto Python tiene un modo de poner definiciones en un fichero y utilizarlas en un guioacuten o en una instancia interactiva del inteacuterprete Tal fichero se llama moacutedulo las definiciones de un moacutedulo se pueden importar a otros moacutedulos o al moacutedulo principal (la coleccioacuten de variables accesible desde un guioacuten ejecutado desde el nivel superior y en el modo de calculadora) Un moacutedulo es un fichero que contiene definiciones y sentencias de Python El nombre del fichero es el nombre del moacutedulo con el sufijo ldquopyrdquo Dentro de un moacutedulo el nombre del moacutedulo (como cadena) es accesible mediante la variable global __name__ Un moacutedulo puede contener sentencias ejecutables ademaacutes de definiciones de funciones Estas sentencias sirven para inicializar el moacutedulo Soacutelo se ejecutan la primera vez que se importa el moacutedulo en alguna parte1 Cada moacutedulo tiene su propia tabla de siacutembolos que utilizan todas las funciones definidas por el moacutedulo como tabla de siacutembolos global Por ello el autor de un moacutedulo puede utilizar variables globales dentro del moacutedulo sin preocuparse por conflictos con las variables globales de un usuario del moacutedulo Por otra parte si sabes lo que haces puedes tocar las variables globales de un moacutedulo con la misma notacioacuten utilizada para referirse a sus funciones nombreModnombreElem Los moacutedulos pueden importar otros moacutedulos Es una costumbre no obligatoria colocar todas las sentencias ldquoimportrdquo al principio del moacutedulo (o guioacuten) Los nombres del moacutedulo importado se colocan en la tabla de siacutembolos global del moacutedulo (o guioacuten) que lo importa Existe una variacioacuten de la sentencia import que importa los nombres de un moacutedulo directamente a la tabla de siacutembolos del moacutedulo que lo importa Por ejemplo
gtgtgt from fibo import fib fib2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
23
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto no introduce el nombre del moacutedulo del que se toman los elementos importados en la tabla de siacutembolos local (por lo que en el ejemplo no estaacute definido fibo) Ademaacutes existe una variacioacuten que importa todos los nombres que define un moacutedulo gtgtgt from fibo import
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto importa todos los nombres excepto los que empiezan por un guioacuten bajo (_)
3113 El camino de buacutesqueda de moacutedulos
Cuando se importa un moacutedulo denominado fiambre el inteacuterprete busca un fichero denominado bdquofiambrepy‟ en el directorio actual y luego en la lista de directorios especificada por la variable de entorno PYTHONPATH Tiene la misma sintaxis que la variable de liacutenea de oacuterdenes PATH de UNIX que es una lista de nombres de directorios Cuando PYTHONPATH no tiene ninguacuten valor o no se encuentra el fichero se continuacutea la buacutesqueda en un camino dependiente de la instalacioacuten En UNIX normalmente es bdquousrlocallibpython‟ En realidad se buscan los moacutedulos en la lista de directorios dada por la variable syspath que se inicializa desde el directorio que contiene el guioacuten de entrada (o el directorio actual) PYTHONPATH y el valor por omisioacuten dependiente de la instalacioacuten Esto permite que los programas que saben lo que hacen modifiquen o reemplacen el camino de buacutesqueda de moacutedulos Obseacutervese que como el directorio que contiene el guioacuten bajo ejecucioacuten estaacute en el camino de buacutesqueda de moacutedulos es importante que el moacutedulo no tenga el mismo nombre que un moacutedulo estaacutendar o Python lo intentaraacute cargar el guioacuten como moacutedulo cuando se importe el moacutedulo Normalmente esto provocaraacute errores
3114 Ficheros Python ldquoCompiladosrdquo
Como mejora considerable del tiempo de arranque de programas cortos que utilizan muchos moacutedulos estaacutendar si existe un fichero llamado bdquofiambrepyc‟ en el directorio donde se encuentra bdquofiambrepy‟ se supone que contiene una versioacuten previamente ldquocompilada a byterdquo del moacutedulo fiambre La fecha y hora de la versioacuten de bdquofiambrepy‟
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
24
utilizada para generar bdquofiambrepyc‟ se graba en bdquofiambrepyc‟ y no se considera el fichero bdquopyc‟ si no concuerdan Normalmente no hay que hacer nada para generar el fichero bdquofiambrepyc‟ Siempre que bdquofiambrepy‟ se compile sin errores se hace un intento de escribir la versioacuten compilada a bdquofiambrepyc‟ No se provoca un error si falla el intento Si por cualquier motivo no se escribe completamente el fichero el fichero bdquofiambrepyc‟ resultante seraacute reconocido como no vaacutelido y posteriormente ignorado El contenido del fichero bdquofiambrepyc‟ es independiente de la plataforma por lo que se puede compartir un directorio de moacutedulos entre maacutequinas de diferentes arquitecturas
3115 Moacutedulos estandar
Python viene con una biblioteca de moacutedulos estaacutendar descrita en un documento aparte la Referencia de las bibliotecas Algunos moacutedulos son internos al inteacuterprete y proporcionan acceso a las operaciones que no son parte del nuacutecleo del lenguaje pero se han incluido por eficiencia o para proporcionar acceso a primitivas del sistema operativo como las llamadas al sistema El conjunto de dichos moacutedulos es una opcioacuten de configuracioacuten que tambieacuten depende de la plataforma subyacente Por ejemplo el moacutedulo amoeba soacutelo se proporciona en sistemas que de alguacuten modo tienen acceso a primitivas Amoeba Hay un moacutedulo en particular que merece una especial atencioacuten el moacutedulo sys que es siempre interno en cualquier inteacuterprete de Python Estas variables soacutelo estaacuten definidas si el inteacuterprete estaacute en modo interactivo La variable syspath es una lista de cadenas que determina el camino de buacutesqueda de moacutedulos del inteacuterprete Se inicializa a un valor por omisioacuten tomado de la variable de entorno PYTHONPATH o de un valor por omisioacuten interno si PYTHONPATH no tiene valor Se puede modificar mediante operaciones de lista estaacutendar por ejemplo gtgtgt import sys gtgtgt syspathappend(‟ufsguidolibpython‟)
3116 Paquetes
Los paquetes son un meacutetodo de estructurar el espacio nominal de moacutedulos de Python mediante el uso de ldquonombres de moacutedulos con puntordquo Por ejemplo el nombre de moacutedulo AB hace referencia a un submoacutedulo denominado ldquoBrdquo de un paquete denominado ldquoArdquo Del mismo modo que el uso de moacutedulos evita que los autores de diferentes moacutedulos tengan que preocuparse de los nombres de variables globales de los otros la utilizacioacuten de nombres de moacutedulo con puntos evita que los autores de paquetes multi-moacutedulo como Numpy o Pil (Biblioteca de tratamiento de imagen de
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
25
python) tengan que preocuparse de los nombres de los moacutedulos ajenos Supoacuten que deseas disentildear una coleccioacuten de moacutedulos (un paquete) para tratar de manera uniforme ficheros de sonido y datos de sonido Existen muchos formatos de fichero de sonido (que se suelen distinguir por la extensioacuten como bdquowav‟ bdquoaiff‟ o bdquoau‟) por lo que podriacuteas necesitar crear y mantener una coleccioacuten creciente de moacutedulos de conversioacuten entre los diferentes formatos Tambieacuten existen muchas operaciones posibles sobre los datos de sonido (tales como mezclar antildeadir eco ecualizar o generar un efecto artificial de estereofoniacutea) por lo que ademaacutes estariacuteas escribiendo una serie de moacutedulos interminable para realizar estas operaciones He aquiacute una posible estructura de tu paquete (expresado en teacuterminos de sistema de ficheros jeraacuterquico)
Sonido Paquete de nivel superior __init__py Inicializa el paquete de sonido
Formatos Subpaquete de conversiones de formato de ficheros __init__py leerwavpy escriwavpy leeraiffpy escriaiffpy leeraupy escriaupy Efectos Subpaquete de efectos de sonido __init__py ecopy surroundpy inversopy Filtros Subpaquete de filtros __init__py ecualizadorpy vocoderpy karaokepy
Modelo de estructura paquetemoacutedulo Al importar el paquete Python rastrea los directorios de syspath buscando por el subdirectorio de paquetes Los ficheros bdquo__init__py‟ son necesarios para que Python trate los directorios como contenedores de paquetes Se hace asiacute para evitar que los directorios con nombres
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
26
comunes como bdquotest‟ oculten accidentalmente moacutedulos vaacutelidos que aparezcan maacutes tarde dentro del camino de buacutesqueda En el caso maacutes sencillo bdquo__init__py‟ puede ser un fichero vaciacuteo pero tambieacuten puede ejecutar coacutedigo de inicializacioacuten del paquete o actualizar la variable __all__ descrita posteriormente Los usuarios del paquete pueden importar moacutedulos individuales del paquete por ejemplo import SonidoEfectoseco
De este modo se carga el submoacutedulo SonidoEfectoseco Hay que hacer referencia a eacutel por su nombre completo SonidoEfectosecofiltroeco(entrada salida retardo=07
aten=4)
Un modo alternativo de importar el submoacutedulo es from SonidoEfectos import eco
Asiacute tambieacuten se carga el submoacutedulo eco y se hace disponible sin su prefijo de paquete por lo que se puede utilizar del siguiente modo ecofiltroeco(entrada salida retardo=07 aten=4)
Y otra variacioacuten es importar la funcioacuten o variable deseada directamente from SonidoEfectoseco import filtroeco
De nuevo se carga el submoacutedulo eco pero se hace la funcioacuten filtroeco disponible directamente filtroeco(entrada salida retardo=07 aten=4)
Observa que al utilizar from paquete import elemento el elemento puede ser tanto un submoacutedulo (o subpaquete) del paquete como cualquier otro nombre definido por el paquete como una funcioacuten clase o variable La sentencia import comprueba primero si el elemento estaacute definido en el paquete Si no asume que es un moacutedulo e intenta cargarlo Si no lo consigue se provoca una excepcioacuten ImportError Sin embargo cuando se utiliza la sintaxis
importelementosubelementosubsubelemento cada elemento menos el
uacuteltimo debe ser un paquete El uacuteltimo elemento puede ser un moacutedulo o un paquete
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
27
pero no una clase funcioacuten o variable definida en el nivel superior
3117 Importar de un paquete
Y iquestqueacute ocurre cuando el usuario escribe from SonidoEfectos import En teoriacutea deberiacutea rastrearse el sistema para encontrar queacute submoacutedulos existen en el paquete e importarlos todos Por desgracia esta operacioacuten no funciona muy bien en las plataformas Windows y Mac en las que el sistema de ficheros no tiene una idea muy precisa de las mayuacutesculas de un fichero En estas plataformas no hay un modo garantizado de conocer si un fichero bdquoECOPY‟ deberiacutea ser importado como eco Eco o ECO (por ejemplo Windows 95 tiene la molesta costumbre de mostrar todos los nombres de fichero con la primera letra en mayuacutescula) La restriccioacuten de nombres de fichero DOS (8+3) antildeade otro problema para los nombres de moacutedulo largos La uacutenica solucioacuten es que el autor del paquete proporcione un iacutendice expliacutecito del paquete La sentencia import utiliza la siguiente convencioacuten Si el coacutedigo del bdquo__init__py‟ de un paquete define una lista llamada __all__ se considera que es la lista de nombres de moacutedulos que se deben importar cuando se encuentre from paquete import Depende del autor del paquete mantener la lista actualizada cuando se libere una nueva versioacuten del paquete Los autores del paquete pueden decidir no mantenerlo si no es uacutetil importar del paquete Por ejemplo el fichero bdquoSonidoEfectos__init__py‟ podriacutea contener el siguiente coacutedigo __all__ = [eco surround inverso] Esto significariacutea que from SonidoEfectos import importariacutea los tres submoacutedulos mencionados del paquete Sonido Si __all__ no estaacute definido la sentencia from SonidoEfectos import no importa todos los moacutedulos del subpaquete SonidoEfectos al espacio nominal actual Soacutelo se asegura de que el paquete SonidoEfectos ha sido importado (ejecutando posiblemente el coacutedigo de inicializacioacuten de bdquo__init__py‟) y luego importa cualesquiera nombres definidos en el paquete Esto incluye cualquier nombre definido (y submoacutedulos cargados expliacutecitamente) por bdquo__init__py‟ Tambieacuten incluye cualquier submoacutedulo del paquete expliacutecitamente importado por sentencias import anteriores Mira este coacutedigo import SonidoEfectoseco import SonidoEfectossurround from SonidoEfectos import En este ejemplo los moacutedulos eco y surround se importan al espacio nominal vigente porque estaacuten definidos en el paquete SonidoEfectos cuando se ejecuta la sentencia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
28
fromimport (esto tambieacuten funciona si estaacute definido __all__)
Observa que en general se debe evitar importar de un moacutedulo o paquete ya que suele dar como resultado coacutedigo poco legible Sin embargo se puede usar para evitar teclear en exceso en sesiones interactivas y cuando ciertos moacutedulos esteacuten disentildeados para exportar soacutelo nombres que cumplan ciertas reglas
Recuerda no hay nada incorrecto en utilizar from Paquete import
submoacutedulo_concreto De hecho es la notacioacuten recomendada salvo que el moacutedulo
que importa necesite usar submoacutedulos del mismo nombre de diferentes paquetes
3118 Referencias internas al paquete
Es comuacuten que los submoacutedulos necesiten hacerse referencias cruzadas Por ejemplo el moacutedulo surround podriacutea utilizar el moacutedulo eco De hecho tales referencias son tan comunes que la sentencia import busca antes en el paquete contenedor que en el camino de buacutesqueda de moacutedulos estaacutendar Por ello basta con que el moacutedulo surround use import eco o from eco import filtroeco Si el moacutedulo importado no se encuentra en el paquete actual (el paquete del que el moacutedulo actual es submoacutedulo) la sentencia import busca un moacutedulo de nivel superior con el nombre dado Cuando se estructuran los paquetes en subpaquetes (como el paquete Sonido del ejemplo) no hay un atajo para referirse a los submoacutedulos de los paquetes hermanos y se ha de utilizar el nombre completo del subpaquete Por ejemplo si el moacutedulo SonidoFiltrosvocoder necesita utilizar el moacutedulo eco del paquete SonidoEfectos debe utilizar from SonidoEfectos import eco
32 FUNCIONES INCLUIDAS EN NUMPY POR CATEGORIacuteAS (ARRAY CREATION)
A modo indicativo e introductorio se incluyen las funciones incluidas en la libreriacutea Numpy por categoriacuteas Ver maacutes informacioacuten en httpdocsscipyorgdocnumpy Numerical
arange() arrayrange()
linspace() logspace()
Ones and zeros
empty() empty_like()
eye() identity()
ones() ones_like()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
29
tri() tril() triu()
zeros() zeros_like()
From existing data
array() recarray()
asarray() asanyarray() asmatrix()
copy()
fromarrays() frombuffer() fromfile() fromfunction()
fromiter() loadtxt()
Building matrices
bmat()
diag() diagflat()
mat() matrix()
vander()
Reinterpreting arrays
view()
Types
astype()
cast[]()
int8() int16() int32() int64() int128()
uint8() uint16() uint32() uint64() uint128()
float16() float32() float64() float96() float128()
float256()
complex32() complex64() complex128() complex192()
complex256() complex512()
bool_()
object_()
void() str_() unicode_()
byte() ubyte()
short() ushort()
intc() uintc()
intp() uintp()
int_() uint()
longlong() ulonglong()
single() csingle()
float_() complex_()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
30
longfloat() clongfloat()
Kinds of array
asarray()
asanyarray()
asmatrix()
Changing the number of dimensions
atleast_1d() atleast_2d() atleast_3d()
broadcast()
expand_dims()
squeeze()
Transpose-like operations
rollaxis()
swapaxes()
T transpose()
Reshaping arrays
flat flatten()
ravel()
reshape() shape
Array modification
Joining arrays
append()
column_stack()
concatenate()
dstack() hstack() vstack()
Splitting arrays
array_split()
dsplit() hsplit() split() vsplit()
Enlarging arrays
tile()
repeat()
Adding and removing elements
delete()
insert()
resize()
trim_zeros()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
31
unique()
Rearranging elements
fliplr() flipud()
reshape()
roll()
rot90()
Indexing
[]
take()
put()
putmask()
Indexing syntax
slice()
newaxis
index_exp[]
Generating arrays suitable for indexing
c_[]
r_[]
s_[]
nonzero()
where()
indices()
ix_()
mgrid[]
ogrid()
Indexing-like operations
choose()
where()
compress()
diag() diagonal()
select()
Iterating
flat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
32
ndenumerate()
ndindex()
Logic
[]
all() any()
allclose()
alltrue()
nonzero()
piecewise()
sometrue()
Finding things
argmax() argmin()
searchsorted()
Array statistics
average() mean()
bincount() histogram()
corrcoef()
cov()
max() min() ptp()
median()
std() var()
ufuncs
abs() absolute()
add() multiply()
angle()
arccos() arcsin() arctan()
arccosh() arcsinh() arctanh()
arctan2()
bitwise_and() bitwise_or() bitwise_xor()
ceil() floor() round()
conj() conjugate()
cos() sin() tan()
cosh() sinh() tanh()
fix()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
33
hypot()
logical_and() logical_not() logical_or() logical_xor()
maximum() minimum()
ufunc methods
accumulate()
outer()
reduce()
Functional constructs
apply_along_axis()
apply_over_axis()
vectorize()
Random numbers
beta() binomial() gumbel() poisson() standard_normal()
uniform() vonmises() weibull()
bytes()
permutation()
rand() randint() randn()
random_integers()
random_sample()
ranf()
sample()
seed()
shuffle()
Array math
clip()
cross()
cumprod() cumsum()
diff()
digitize()
dot()
inner()
outer()
inv() pinv()
poly1d()
polyfit()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
34
prod() sum()
tensordot()
vdot()
FFT
fft()
fftfreq()
fftshift()
ifft()
Linear algebra
inv()
lstsq()
solve()
svd()
trace()
Array output
savetxt()
set_printoptions()
tofile()
tolist()
Other
sort() argsort()
binary_repr()
dtype()
fill()
finfo()
generic
imag real
inf nan
item()
lexsort()
ndim
shape
typeDict()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
35
Numpy Functions by Category (uacuteltima edicioacuten 2008-06-13 122659
efectuada por jh)
MoinMoin Powered
Pyt
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
36
4 METODOLOGIacuteA En este apartado se proporciona una descripcioacuten detallada de la metodologiacutea utilizada para el desarrollo e implementacioacuten de la biblioteca Utilizando un paradigma Estructurado de la programacioacuten que considera que la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Esto nos permite reutilizar coacutedigo programado y nos proporciona una mejor comprensioacuten de la programacioacuten En el uacuteltimo paquete de la libreriacutea tambieacuten se ha realizado una incursioacuten a la programacioacuten orientada a objetos con la declaracioacuten de algunas clases
41 ESTRUCTURA DE LA LIBRERIacuteA GEOTOPO En nuestro caso hemos partido del concepto de creacioacuten de una libreriacutea de funciones del aacutembito de la Topografiacutea y Geodesia Esta libreriacutea de Python se estructura como un paquete con el nombre de la libreriacutea ldquogeotopordquo que a su vez contiene 6 paquetes maacutes seguacuten tipologiacutea Asiacute tenemos
Imagen de los paquetes incluidos dentro del paquete (libreriacutea) geotopo
Por orden intuitivo desde el punto de vista de aplicacioacuten de las herramientas tenemos los siguientes paquetes
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
37
general que contiene funciones de tipo general y transversal al resto de herramientas
Moacutedulos implementados dentro de general
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
38
topografia que contiene aplicacioacuten topograacuteficas
Moacutedulos implementados dentro de topografia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
39
geodesia Aplicaciones geodeacutesicas
Moacutedulos implementados dentro de geodesia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
40
proy_cartograficas Herramientas de caacutelculos en diferentes proyeccionesetc
Moacutedulos implementados dentro de proy_cartograficas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
41
transformacioacuten Aplicaciones con modelo de rejilla del IGN y EGM08REDNAP
Moacutedulos implementados dentro de transformacioacuten
aplicaciones Distintos ejemplos de aplicabilidad de las funciones y clases implementadas en los moacutedulos de la libreriacutea
Cada uno de estos paquetes (carpetas) como se ha podido ver contiene a su vez varios moacutedulos y en cada uno de ellos y con su mismo nombre se define una uacutenica funcioacuten por moacutedulo salvo en la carpeta de transformcioacuten donde como se ha comentado antes nos adentramos dentro de la programacioacuten orientada a objetos y en algunos moacutedulos se implementan clases y dentro de estas funciones etc De esta manera al importar una funcioacuten la tenemos que importar desde el modulo que la contenga Dentro de cada carpeta se aprecia la existencia de un fichero llamado __init__py que convierte dicha carpeta en un paquete de Python Se advierte que desde el cierre de esta memoria versioacuten en papel a la entrega total de documentacioacuten puede haberse ampliado el nuacutemero de moacutedulos de la libreriacutea ldquogeotoprdquo que siacute se incluiriacutea en el CD con la implementacioacuten de coacutedigos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
42
42 DOCUMENTADO DE FUNCIONES Se puede documentar una funcioacuten en Python proporcionando una cadena de documentacioacuten (comentarios)
Las comillas triples implican una cadena multiliacutenea Todo lo que haya entre el principio y el final de las comillas es parte de una sola cadena incluyendo los retornos de carro y otras comillas Pueden usarse para definir cualquier cadena pero donde suelen estar maacutes presentes es haciendo de cadena de documentacioacuten Todo lo que hay entre las comillas triples es la cadena de documentacioacuten de la funcioacuten y se usa para explicar lo que hace la funcioacuten En caso de que exista una cadena de documentacioacuten debe ser la primera cosa definida en una funcioacuten (esto es lo primero tras los dos puntos) Teacutecnicamente no es necesario dotar a una funcioacuten de una cadena de documentacioacuten pero debemos de hacerlo siempre En Python esto tiene un incentivo antildeadido la cadena de documentacioacuten estaacute disponible en tiempo de ejecucioacuten como atributo de la funcioacuten
Lecturas complementarias sobre las funciones de documentacioacuten
PEP 257 define las convenciones al respecto de las cadenas de documentacioacuten La Guiacutea de estilo de Python indica la manera de escribir una buena cadena de
documentacioacuten El Tutorial de Python expone convenciones para el espaciado dentro de las
cadenas de documentacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
43
Ejemplo de documentado de funciones con cadena de documentacioacuten
Toda la informacioacuten incluida dentro de una cadena de documentacioacuten de triple comillas estaacute accesible en tiempo de ejecucioacuten Asiacute si pedimos ayuda de una funcioacuten nos aparece toda la informacioacuten incluida en dicha cadena de documentacioacuten
Ejemplo de consulta de la ayuda de las funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
44
En la siguiente web podemos encontrar maacutes informacioacuten sobre el documentado de funciones en Python httpcoderwarcom201106hola-python-la-utilidad-de-los-comentarios Ademaacutes de los comentarios de las funciones en Python como en otros lenguajes de programacioacuten podemos incluir liacuteneas o simples palabras de comentarios En Python se usa el siacutembolo para preceder los comentarios Podemos comentar las liacuteneas de nuestro trabajo
Comentar un grupo de liacuteneas
Determinar el tipo de codificacioacuten Esto es importante para poder usar caracteres especiales como la tilde o la ntilde Generalmente se coloca en la primera liacutenea del programa Existen muchas codificaciones
Poner cabecera a nuestro programa De esta forma identificaremos el nombre del programador la fecha en que se realizoacute y demaacutes datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
45
En el caso que nos atantildee de la libreriacutea geotopo hemos considerado introducir unos comentarios descriptivos de los moacutedulos mediante el caraacutecter y tras la definicioacuten de las funciones se incluyen unas cadenas de documentacioacuten
Ejemplo de la documentacioacuten de moacutedulos y funcioneshellip
Para evitar problemas de codificacioacuten como ha ocurrido durante la implementacioacuten del coacutedigo se han incluido al inicio del mismo dos liacuteneas para solucionar el problema Estas liacuteneas son
Comentarios de los moacutedulos
Cadena de documentacioacuten de funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
46
-- coding iso 8859-1 -
ISO 8859-1 es una norma de la ISO que define la codificacioacuten del alfabeto latino incluyendo diacriacuteticos como letras aceacutentuadas ntilde) y letras especiales necesarios para la escritura de las siguientes lenguas originarias de Europa occidental alemaacuten aragoneacutes asturiano castellano catalaacuten daneacutes escoceacutes espantildeol feroeacutes fineacutes franceacutes gaeacutelico gallego ingleacutes islandeacutes italiano neerlandeacutes noruego portugueacutes sueco y Euskera Tambieacuten conocida como Alfabeto Latino nordm 1 o ISO Latiacuten 1 Esta norma pertenece al grupo de juegos de caracteres de la ISO conocidos como ISOIEC 8859 que se caracterizan por poseer la codificacioacuten ASCII en su rango inicial (128 caracteres) y otros 128 caracteres para cada codificacioacuten con lo que en total utilizan 8 bits -- coding cp1252 -
Si trabajamos con IDLE con el uso de los acentos (en general con los caracteres no ASCII) nos daraacute error Si en el coacutedigo de un programa escribimos una cadena que contenga caracteres no ASCII(acentos ntildeiquestiexcl) al guardar el archivo por primera vez IDLE nos muestra el siguiente mensaje de aviso
Si pulsamos el botoacuten ldquoEdit my filerdquo Al principio del programa se insertaraacute la liacutenea siguiente
-- coding cp1252 --
Que indica el juego de caracteres utilizado en el archivo (cp1252 es el juego de caracteres de Windows para Europa occidental) A partir de entonces podemos guardar el archivo sin problemas Python no tiene una primera o uacuteltima linea exigida pero siacute que es habitual dar la localizacioacuten de Python como primera liacutenea en forma de comentario usrbinpython
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
47
43 FUNCIONES IMPLEMENTADAS A continuacioacuten se incluye una relacioacuten de las funciones implementadas por paquetes Ademaacutes de su nombre y un pequentildeo resumen de su aplicacioacuten se han incluido 3 apartados maacutes En verde Datos de entrada Indica los datos que necesita la funcioacuten Datos de salida Nos muestra si el resultado es uacutenico o una coleccioacuten de resultados (siempre en forma vector en el orden indicado) En rojo Llamadas o ldquoimportacioacutenrdquo de moacutedulos predefinidos del sistema ossys Llamadas a funciones de predefinidas del moacutedulo numpy En morado Llamadas a funciones definidas en esta libreriacutea (geotopo) bien incluidas en el mismo subpaquete que la propia funcioacuten definida o incluida en otro subpaquete De esta manera podemos tener una idea de las funciones implementadas los datos de partida necesarios y los resultados a obtener asiacute como la interrelacioacuten de cada funcioacuten con el resto de funciones de la libreriacutea geotopo Para el caso de cambio de proyeccioacuten o de Sistema de Referencia Coordenado se ha tomado la nomenclatura ldquodesderdquo ldquoardquo ldquoahorardquo Para sentildealar el ldquoardquo se ha elegido el nuacutemero 2 por su pronunciacioacuten to (a) Asiacute por ejemplo para el paso de latitud geodeacutesica a creciente en nombre de la funcioacuten seraacute lat2cre
431 Libreriacutea en Python ldquogeotopogeneralrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 areacor - Caacutelculo de la superficie interior de un poligono sobre el plano
entrada=(matriz) 2columnas xy salida=superficie
import ossys from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
48
busca2col - Localiza la primera fila con los valores recibidos en las dos columnas indicadas
Recibe Valor en la primera y segunda columnas posiciones de las columnas y matriz de busqueda
Devuelve Primera fila que cumple comenzando en 0 entrada=(valorcol1poscol1valorcol2poscol2matriz)
salida=orden de la primera fila que cumple comenzando en 0(oacute -1 si no existe) import ossys
from numpy import shape
busca - Localiza la primera ocurrencia de un nuacutemero en la primera columna de una matriz
entrada=(valormatriz)
salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscacol - Localiza la primera ocurrencia de un nuacutemero en la fila indicada de una matriz
entrada=(valormatriznfil) salida=posicioacuten nuacutemero de columna comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscafil - Localiza la primera ocurrencia de un nuacutemero en la columna indicada de una matriz
entrada=(valormatrizncol) salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
ordena - Ordena las filas de una matriz de menor a mayor seguacuten el contenido de la columna indicada
entrada=(colummatriz) salida=matriz de entrada ordenada
import ossys
from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
49
p_entera - Da la parte entera de un nuacutemero entrada=(nuacutemero) salida=parte entera del nuacutemero
import ossys from numpy import floor
perimetro - Calculo del perimetro de un poliacutegono sobre el plano a partir de las coord de sus veacutertices
entrada=(matriz ) 2columnas xy salida=periacutemetro
import ossys
from numpy import sqrtshape
psdo2rad - Cambio de formato de aacutengulos Pasa del conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex ) a radianes
entrada=(pseudesexa)
salida=radianes
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
rad2psdo - Cambio de formato de aacutengulos Pasa un angulo de radianes al conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex )
entrada=( radianes) salida= pseudesexa
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
50
432 Libreriacutea en Python ldquogeotopotopografiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 acimut - Caacutelculo del acimut entre dos puntos
entrada=(xiyixjyj)
salida=acimut en radianes
import ossys from numpy import arctan2pi
distancia ndash Caacutelculo de la distancia entre dos puntos del mismo
entrada=(xiyixjyj) salida=distancia (misma unidad que coordenadas de entrada
import ossys
from numpy import sqrt
edgcla ndash Caacutelculo del error de una distancia geomeacutetrica utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dgInstrnialtnl)
Dg=distancia geometrica Instr=Matriz de instrumentos
Ni=Altura de instrumento Altp=Altura de prisma
Nl=Nuacutemero de veces de medida de distancia
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edgclaprn ndash Calculo del error de una distancia geometrica utilizando la formulacion claacutesica de teoriacutea de errores Impresioacuten de resultados
entrada=(dgInstrnialtnlfsalida)
dg=distancia geometrica instr=Matriz de instrumentos
ni=Altura de instrumento altp=Altura de prisma
nl=Nuacutemero de veces de medida de distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
51
fsalida=Fichero de salidade datos
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edireh ndash Caacutelculo del error de la lectura horizontal realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(Instrnidisaltpnl)
salida=error de lectura horizontal en radianes
import ossys from numpy import sqrtpi
edirev ndash Caacutelculo del error de la lectura vertical realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(instrni nl) salida=error de lectura cenital en radianes en radianes
import ossys from numpy import sqrtpi
eincz ndash Caacutelculo del error de un desnivel trigonomeacutetrico utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dglvapedgelvInstrni) salida=xpypeplanisolzesolz
import ossys
from numpy import pisqrtcostan
intinv2 ndash Caacutelculo de la interseccioacuten inversa simple en el plano
entrada=(datosinstru)
salida= xpypangmin import ossys
from numpy import sincostanarctan2pizeros
from geotopogeneralordena import ordena
intinv2e ndash Caacutelculo de la interseccioacuten inversa simple en el plano Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru) salida= xpypeplani
import ossys from numpy import shapepisincostanarctan2dottransposezerossqrt
from geotopotopografiaedireh import edireh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
52
intinv3e ndash Caacutelculo de la interseccioacuten inversa 3D simple Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru)
salida= xpypeplanivzpvezp
import ossys from numpy import zerosshapesincos
from geotopotopografiaintinv2e import intinv2e from geotopotopografiadistancia import distancia
from geotopotopografiaedirev import edirev
from geotopotopografiaedgcla import edgcla from geotopotopografiaeincz import eincz
433 Libreriacutea en Python ldquogeotopogeodesiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 aut2lat - paso de latitud autaacutelica a geodeacutesica
entrada=(autnelipsoide) salida=lat
import ossys from numpy import sinarcsin
from geotopogeneralpsdo2rad import psdo2rad from geotopogeneralpsdo2rad import psdo2rad
calcpolo - caacutelculo del polo de la esfera a partir de tres puntos no alineados de la misma de forma que pasen a estar en un mismo paralelo tras realizarse el cambio de polo
entrada(lat1lon1lat2lon2lat3lon3) salida=[latnplonnpcolat]
import ossys from numpy import pisincosarccosarctanarctan2zeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
53
cla2enu - paso de un vector geodeacutesico expresado en componentes polares (observables claacutesicos) a componentes ENU entrada(azvdg)
salida=[ieiniu]
import ossys from numpy import sincoszeros
clhapv - lectura horizontal corregida por altitud del punto visado entrada=(lhzazlat1lat2h2nelipsoide) salida=lhz12c
import ossys
from numpy import sincospi from elipsoide import elipsoide
from radioem import radioem
clhsnlg - lectura horizontal corregida por paso de la seccioacuten normal a la liacutenea geodeacutesica entrada=(lhzs12az12lat1lat2nelipsoide)
salida=lhz12c import ossys
from numpy import sincospi
from elipsoide import elipsoide from radioem import radioem
cre2lat - paso de latitud creciente a geodeacutesica entrada=(crenelipsoide) salida=lat
import ossys
from numpy import sincostanarctanexppi from geotopogeneralpsdo2rad import psdo2rad
from elipsoide import elipsoide
efleutm - paso de la elipse de error de un punto del plano tangente al elipsoide al plano de la proyeccioacuten UTM
entrada=(latlonsemiaesemibeaziaenelipsoidehuso) salida=[semiasimibazia] import ossys from numpy import zerospi from geotopoproy_cartograficaskputm import kputm from geotopoproy_cartograficaskputmh import kputmh from geotopoproy_cartograficasconvutm import convutm from geotopoproy_cartograficasconvutmh import convutmh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
54
elip2esf - determinacioacuten de la esfera tangente al elipsoide en un paralelo indicado entrada=(nelipsoidelat)
salida=[afbe1e2]esfera
import ossys from numpy import zeros
from elipsoide import elipsoide from radiopv import radiopv
elipsoide - calculo los 5 paraacutemetros (afbe1 y 22) de los elipsoides ED50 GRS80 y WGS84 en funcioacuten de un coacutedigo 123 respectivamente entrada=(nelipsoide) 1 2 oacute 3 seguacuten ED50GRS80 oacute WGS84 respectivamente salida=[afbe1e2]
import ossys from numpy import sqrt zeros
enu2cla - paso de un vector geodeacutesico expresado en componentes ENU a componentes polares (observables claacutesicos) entrada=ieiniu salida=[azdgv]
import ossys
from numpy import zerosarcsenarctan2pisqrt
enu2xyz - paso de un vector geodeacutesico expresado en componentes ENU a componentes cartesianas tridimensionales entrada=(latlonieiniu)
salida=[ixiyiz] import ossys
from numpy import sincoszeros
eta_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del primer vertical entrada=(latlon)
salida= eta_ed50
import ossys from numpy import pisqrtcossintan
from elipsoide import elipsoide from radiopv import radiopv
from radioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
55
geo2tri - paso de coordenadas geodeacutesicas a cartesianas tridimensionales para un punto y elipsoide determinados entrada=(latlonhnelipsoide
salida=[XYZ]
import ossys from numpy import cossinzeros
from elipsoide import elipsoide from radiopv import radiopv
lam2lat - caacutelculo de la latitud geodeacutesica que le corresponde a una determinada longitud de arco de meridiano en el elipsoide indicado entrada=(lamnelipsoide salida=lat
import ossys from numpy import cossin
from elipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
lam - caacutelculo de la longitud de arco de meridiano a partir de la latitud geodeacutesica y del elipsoide entrada=(lamnelipsoide
salida=lam import ossys
from numpy import sin cos from elipsoide import elipsoide
lat2aut - paso de latitud geodeacutesica a autaacutelica entrada=(latnelipsoide)
salida=aut import ossys
from numpy import sinlog from elipsoide import elipsoide
lat2cre - paso de latitud geodeacutesica a creciente entrada=(latnelipsoide)
salide=cre import ossys
from numpy import sintanpilog
ond_ed50 - caacutelculo de la ondulacioacuten del geoide de un punto en Ed50 entrada =(latlon) salida=ondulacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
56
import ossys
from numpy import pisqrtcossintan
pdesfcr - problema directo en la esfera con el meacutetodo de cambio de base entrada=(lat1lon1saziresfera) salida=[latlon]
import ossys from numpy import cossintanarcsinarcosarctan2pizerostransposedot
pdg_dif1 - problema directo de la geodesia con la primera derivada entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2azi21] import ossys
from numpy import zerossincostanpi from radiopv import radiopv
from radioem import radioem
pdg_dif2 - problema directo de la geodesia con la primera y segunda derivada entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdg_dif3 - problema directo de la geodesia con la primera segunda y tercera derivada
entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdgrk4o - problema directo de la geodesia seguacuten meacutetodo de integracioacuten numeacuterica de Runge-Kutta de cuarto orden entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2
import ossys from numpy import zerossincostanpisqrt
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
57
from radioem import radioem
piesfcr - problema inverso en la esfera con el meacutetodo de cambio de base entrada=( lat1lon1lat2lon2resfera)
salida=[s12a12] import ossys
from numpy import cossintanarcsenarccosarctan2dotzerospi
pigbsl - problema inverso de la geodesia seguacuten el meacutetodo de Bessel entrada=( lat1lon1lat2lon2nelipsoide)
salida=[ s12a12a21]
import ossys from numpy import zerossincostanarcsinarctanarctan2arccossqrtpi
pigbslm - problema inverso de la geodesia seguacuten el meacutetodo de Bessel modificado por D David Henaacutendez Loacutepez
entrada=( lat1lon1lat2lon2nelipsoide) salida=[ s12a12a21]
import ossys from numpy import cossintanarcsinarcosarctanarctan2zerossqrtpi
from elipsoide import elipsoide
from radiopv import radiopv from piesfcr import piesfcr
from pdesfcr import pdesfcr
piloxo - problema inverso para la curva loxodroacutemica entrada=(lat1lon1lat2lon2nelipsoide)
salida=[dla12]
import ossys from numpy import arctan2coszerospi
from elipsoide import elipsoide from lat2cre import lat2cre
from radiopv import radiopv
from lam import lam
psi_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del meridiano entrada=(latlon) salida=psi_ed50
import ossys
from numpy import pisqrtcossintan from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
58
radioem - radio de curvatura de la elipse meridiana en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radioem
import ossys from numpy import sin
from elipsoide import elipsoide
radioeul - radio de la seccioacuten normal de un determinado acimut a partir del teorema de Euler entrada=(lataznelipsoide)
salida=radieul import ossys
from numpy import sincos from radioem import radioem
from radiopv import radiopv
radiopv - radio de curvatura del primer vertical en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radiopv
import ossys from numpy impor sqrtsin
from elipsoide import elipsoide
rdcae - reduccioacuten de la distancia de la cuerda al arco elipsoide entrada=( dcazlat1nelipsoide) salida=recae
impor ossys from numpy import sincosarcsen
from radioem import radioem from radiopv import radiopv
rdtce - reduccioacuten de la distancia del terreno a la cuerda elipsoide entrada=(dgazlat1h1h2nelipsoide)
salida=rdtce import ossys
from numpy import sincossqrt from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
59
tri2geo - paso de coordenadas cartesianas tridimensionales a geodeacutesicas en un punto y elipsoide determinados entrada=(XYZnelipsoide)
salida=[latlonh]
import ossys from numpy import cossintanarctanarctan2sqrtzeros
from elipsoide import elipsoide from radiopv import radiopv
xyz2clae - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a observables claacutesicos sobre el elipsoide y desnivel elipsoidal entrada=( X1Y1Z1DXDYDZnelipsoide) salida=[s12az12h12]
import ossys from numpy import zeros
from tri2geo import tri2geo
from pigbslm import pigbslm
xyz2clat - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes polares en el terreno entrada=( lat1lon1ixiyiz)
salida=[ dgaz12lv] import ossys
from numpy import zeros from xyz2enu import xyz2enu
from enu2cla import enu2cla
xyz2enu - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes ENU entrada=(latlonIXIYIZ)
salida=[ieiniu]
import ossys from numpy import sincoszeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
60
434 Libreriacutea en Python ldquogeotopoproy_cartograficasrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 calhuso - caacutelculo del huso correspondiente a un punto en la proyeccioacuten UTM a partir de su longitud geodeacutesica entrada=(lon)
salida=huso
import ossys from numpy import
cdel2geo - paso de un punto de la proyeccioacuten ciliacutendrica directa equivalente de Lambert al elipsoide
entrada=(XYLon0TXTYnelipsoide) salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaaut2lat import aut2lat
convestp - caacutelculo de la convergencia de meridianos de un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lonlon0)
salida=convest import ossys
convgk - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0nelipsoide)
salida=convgk
import ossys from numpy import sincostan
from geotopogeodesiaelipsoide import elipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
61
convlamb - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(lonlat0lon0)
salida=convlamb
import ossys from numpy import sin
convutm - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=convutm import ossys
from numpy import tancossinpi
from cahuso import calhuso from geotopogeodesiaelipsoide import elipsoide
convutmh - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso indicado entrada=(latlonnelipsoide)
salida=convutmh
import ossys from numpy import tancossinpi
from geotopogeodesiaelipsoide import elipsoide
dcdgputm - paso de la distancia cuerda en la proyeccioacuten UTM entre dos puntos a la correspondiente a la proyeccioacuten UTM de la liacutenea geoacutedesica que los une en el elipsoide entrada=(lat1lon1lat2lon2nelipsoide
salida=correccioacuten en metros import ossys
from numpy import cos from utm2geo import utm2geo
from geo2utmh import geo2utmh
from calhuso import calhuso from getopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
62
dcesfera - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general conforme en una esfera entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida=dc (reduccioacuten angular de la cuerda en radianes import ossys
from numpy import sincos from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
dcestp - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en la esfera al pasar a la proyeccioacuten estereograacutefica polar entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=dc(reduccioacuten angular de la cuerda en radianes)
import ossys from numpy import cossin
from kplamb import kplamb
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
from geotopogeodesiaradiopv import radiopv
dcgk - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general de Gauss-Kruumlger entrada=(lat1lon1lat2lon2lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos from geo2gk import geo2gk
from gk2geo import gk2geo
from geotopogeodesiaradioem import radioem from geotopogeodesiaradiopv import radiopv
from getopogeodesiaelipsoide import elipsoide
dclamb - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert entrada=(lat1lon1lat2lon2lat0pelipsoide
salida= dc(reduccioacuten angular de la cuerda en radianes)
import ossys
from numpy import sintancosexpzeros from geo2lamb import geo2lamb
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
63
from kdlamb import kdlamb
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
from geotopogeodesiaradiopv import radiopv
dclambf - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert con maacutes precisioacuten que la funcioacuten anterior entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos sin
from kplamb import kplamb from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o from geotopogeodesiaradiopv import radiopv
dcutm - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=( lat1lon1lat2lon2nelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaradioem import radioem
dcutmh - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso indicado entrada=( lat1lon1lat2lon2husonelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh
from utm2geo import utm2geo from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
64
dgpdcutm - paso de la distancia geodeacutesica proyectada en el plano UTM a la distancia correspondiente a la cuerda en esta proyeccioacuten para una geodeacutesica del elipsoide entrada=( lat1lon1lat2lon2snelipsoide)
salida=correccioacuten import ossys
from numpy import cos from geo2utmh import geo2utmh
from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut
esf2esfg - paso de un punto de una esfera a la esfera con cambio de polo Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo
entrada=(latlonlatplonp)
salida=[latlong]
import ossys from numpy import cossintanarcsenarctandotzerospi
from geotopogeodesiapiesfcr import piesfcr
esf2estp - paso de un punto de la esfera a las planas de la proyeccioacuten estereograacutefica polar entrada=(latlonlon0radiotxty)
salida=[xy] estp import ossys
from numpy import zerossincos
esfg2esf - paso de un punto de la esfera con cambio de polo a la esfera original Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo entrada=(latnlonnlatplonp
salida=[lat0lon0giro import ossys
from numpy import cossintanarcsenarctan2dotzerospitranspose from geotopogeodesiapiesfcr import piesfcr
esfc2lat - paso de latitud sobre la esfera a la correspondiente sobre el elipsoide seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
65
salida=lat
import ossys from numpy import sintanarctanpi
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiaelipsoide import elipsoide
estp2esf - paso de un punto de la proyeccioacuten estereograacutefica polar a la esfera entrada=(xylon0radiotxty)
salida=[xy] import ossys
from numpy import zerosarctan2arctansinpi
geo2cdel - paso de un punto del elipsoide a la proyeccioacuten ciliacutendrica directa equivalente de Lambert entrada=( latlonlon0txtynelipsoide)
salida=[XY] import ossys
from numpy import zeros
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialat2aut import lat2aut
geo2esto - paso de una nube de puntos del elipsoide a la proyeccioacuten estereograacutefica oblicua oacuteptima entrada=(latlonlat0lon0txtynelipsoide)
salida=[XY]
import ossys from numpy import
from lat2esc import lat2esc
from esf2esfg import esf2esfg from esf2estp import esf2estp
from geotopogeodesiaradiopv import radiopv
geo2gk - paso de un punto del elipsoide a la proyeccioacuten general de Gauss-Kruumlger entrada=( latlonlon0ptxtynelipsoide)
salida= [xy]gk import ossys
from numpy import costanpizeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesialam import lam
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
66
geo2lamb - paso de un punto del elipsoide a la proyeccioacuten general coacutenica conforme de Lambert entrada=( latlonlat0lon0ptxtynelipsoide)
salida=[xy]lambert
import ossys from numpy import sintancosexpzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
geo2merc - paso de un punto del elipsoide a la proyeccioacuten de Mercator entrada=( latlonlon0txtynelipsoide)
salida= [xy]mercator import ossys
from numpy import zeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialat2cre import lat2cre
geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
import ossys from numpy import zerostancospi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
geo2utmh - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=[XY] UTM
import ossys
from numpy import zerostancospi from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
gk2geo - paso de un punto de la proyeccioacuten general de Gauss-Kruumlger al elipsoide entrada=(XYlon0ptxtynelipsoide)
salida=[latlon]
import ossys
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
67
from numpy import zerostancospi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
kdesfera - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general conforme sobre una esfera Utiliza la integracioacuten numeacuterica de Simpson entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida= kdesfera import ossys
from kpesfera import kpesfera from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o
kdestp - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica de la esfera al proyectarla en la proyeccioacuten estereograacutefica polar Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0radiotxty)
salida=kdestp import ossys
from kpestp import kpestp from esf2estp import esf2estp
from estp2esf import estp2esf
kdgk - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general de Gauss-Kruumlger Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0pnelipsoide)
salida=kdgk import ossys
from geo2gk import geo2gk from gk2geo import gk2geo
from kpgk import kpgk
kdlamb - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica el elipsoide al proyectarla en la proyeccioacuten general coacutenica conforme de Lambert Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=kdlamb import ossys
from geolamb import geolamb from lamb2geo import lamb2geo
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
68
kdutm - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso del primer punto Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2nelipsoide)
salida=kdutm import ossys
from calhuso import calhuso from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kdutmh - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso indicado Utiliza la integracioacuten numeacuterica de Simpson
entrada= lat1lon1lat2lon2husohelipsoide) salida=kdutmh
import ossys from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kpesfera - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general conforme sobre una esfera entrada=( latlat0nelipsoide)
salida=kpesfera import ossys
from numpy import cossintanexp from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaelipsoide import elipsoide
kpestp - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lat)
salida=kpestp import ossys
from numpy import sin
kpgk - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0pnelipsoide)
salida=kpgk
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
69
import ossys
from numpy import sincostan from clahuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
kplamb - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(latlat0pnelipsoide)
salida=kplamb
import ossys from numpy import cossintanexp
from geotopogeodesialat2cre import lat2cre from geotopogeodesiaradiopv import radiopv
kputm - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=kputm
import ossys from numpy import tancossinpi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
kputmh - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=kputmh
import ossys
from numpy import sincostanpi from geotopogeodesiaelipsoide import elipsoide
lamb2geo - paso de un punto de la proyeccioacuten general coacutenica conforme de Lambert al elipsoide entrada=( xylat0lon0ptxtynelipsoide)
salida=[latlon] import ossys
from numpy import sintanarctanpilogsqrtzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
from geotopogeodesiacre2lat import cre2lat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
70
lat2esc - paso de la latitud geodeacutesica sobre el elipsoide a la correspondiente sobre la esfera seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide)
salida=latesfc
import ossys from numpy import sintanarctanpi
from geotopogeodesiaelipsoide import elipsoide
merc2geo - paso de un punto de la proyeccioacuten de Mercator al elipsoide entrada= (xylon0txtynelipsoide)
salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesiacre2lat import cre2lat
utm2geo - paso de un punto de la proyeccioacuten UTM al elipsoide entrada=(XYhusonelipsoide)
salida=[latlon] import ossys
from numpy import sqrtpitancossinzeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
435 Libreriacutea en Python ldquogeotopotransformacionrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 egm08rednap ndash fichero que almacena la clase Egm08rednap para el manejo de geoides en formato egm08rednap Define la funcioacuten getOndulation(selflatitudlongitud) Llama al fichero geoide que a su vez llama a los ficheros EGM08_REDNAP
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
71
entrada=(latitudlongitud)
salida=ondulacioacuten import ossys
from numpy import fromfile reshape from geoide import Geoide
geoide ndash fichero que almacena la clase Geoide para el manejo de geoides en formato egm08rednap La clase Geoide almacena ldquollamardquo a los geoides EGM08_REDNAP de la Peniacutensula o Baleares seguacuten corresponda Define las funciones getNoOndulacioacuten y getOndulacioacuten en funcioacuten de que encuentre las coordenadas de entrada dentro de los ficheros
entrada=(latitudlongitud) salida=ondulacioacuten
import ossys from numpy import fromfile reshapepifloorndarray
ntv2 ndash fichero que almacena la funcioacuten ntv2Espana Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(longitudlatitud) en deg en ED50 salida=(longitud latitud) en deg en ETRS89
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
ntv2_2 ndash fichero que almacena la funcioacuten ntv2Espana Adaptacioacuten del fichero anterior Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz) En la adatacioacuten realizada obtenemos soacutelo los diferenciales de caacutelculo de paso de ED50 a ETRS89 para tomarlo en el caacutelculo de la aproximacioacuten del sentido inverso entre ETRS89 a ED50 El paso de nodos del fichero utilizado es cada 200‟ lo que equivaldriacutea a 6000 m aproximadamente por lo que la aproximacioacuten seriacutea vaacutelida
entrada=(longitudlatitud) en deg en ETRS89 salida=(diflongitud diflatitud) en deg en ED50
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
72
sped2etpy ndash fichero rejilla del IGN Para transformacioacuten de coordenadas en los Sistemas de Referencia ED50 a ETRS89 Adaptado a Python y descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(fichero contenedor de informacioacuten) No entramos con ninguacuten valor
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
73
5 APLICABILIDAD DE LA LIBRERIacuteA Y CONCLUSIONES FINALES Finalmente hemos implementado los 5 subpaquetes de moacutedulos con funciones y clases incluidos en el paquete (libreriacutea) geotopo destinados a caacutelculos topograacuteficos y geodeacutesicos
Estructura final de la libreriacutea geotopo
Como puede verse en el paquete de geotopo se ha incluido un moacutedulo de aplicaciones en las que se han implementado unos ejercicios praacutecticos aplicando las distintas funciones de la libreriacutea Antes de entrar a describir los casos praacutecticos implementados hemos de decir que directamente podemos obtener resultados de cada una de las funiones Asiacute si queremos pasar de coordenadas geograacuteficas a coordenadas utm mirando en la descripcioacuten de las funciones tenemos geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
74
import ossys
from numpy import zerostancospi from calhuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
Pues bien una vez seleccionada la funcioacuten a utilizar abrimos el moacutedulo correspondiente con IDLE
Coacutedigo de la funcioacuten abierto con IDLE
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
75
Imagen de la ejecucioacuten de Run Module
Ejecutando Run Module Python abre el Python Shell En esta pantalla tenemos que introducir el nombre de la funcioacuten a usar geo2utm y entre pareacutentesis los valores que se especifican de entrada en la descripcioacuten de la funcioacuten entrada=(latlonnelipsoide)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
76
Llamada a la ejecucioacuten de la funcioacuten desde Python Shell
Como hemos indicado antes y por su relevancia y empleabilidad en otras funciones con ldquonelipsoiderdquo se entiende un coacutedigo del 1 al 3 que representa cada uno un elipsoides de referencia seguacuten los Sistemas de Referencia Coordenados en este caso 1=ED50 elipsoide Internacional Hayford 1924 2=ETRS89 elipsoide GRS80 y 3=WGS84
Al introducir los datos ejecutamos con Intro Obtenemos 2 valores en forma de vector que respresentan seguacuten la descripcioacuten de la funcioacuten salida=[XY] UTM
Podemos volver a caacutelcular las coordenadas UTM en el SCR ETRS89 (en caso de que lalitud y longitud vinieran dadas en el mismohellip) simplemente copiando la liacutenea de entrada pegaacutendola abajo y cambiando 1 por 2 como iacutendice del elipsoide y volviendo a ejecutar con enter
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
77
Dentro de Python Shell se puede copiar coacutedigo de liacuteneas anteriores y
pegar abajo Para caacutelculos maacutes complejos de mayor nuacutemero de puntos etc a modo de praacutectica se ha implementado el coacutedigo de distintos tipos de caacutelculo de ejemplo Distribuidos en 2 tipologiacuteas diferentes ldquotopografiardquo y ldquogeodesiardquo se han incluido coacutedigos para la resolucioacuten e impresioacuten de distintos tipos de problemas realizando ldquoimportrdquo de funciones declaradas en los moacutedulos de los distintos subpaquetes de geotopo
51 CASOS PRAacuteCTICOS TOPOGRAFIacuteA En total se han realizada 4 casos praacutecticos dentro del apartado de topografiacutea Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica topo_practica1 Del resto soacutelo se ha incluido la salida de datos
511 Implementacioacuten del coacutedigo topo_praacutectica1
usrbinpython
-- coding iso-8859-1 --
-- coding cp1252 --
Praacutectica 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
Datos Coordenadas del punto de estacioacuten
Sistema de referencia local
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmesn)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
78
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
En esta versioacuten de la praacutectica utilizando la libreriacutea geotopo en el caacutelculo de azimutes
periacutemetro y superficie
import ossys
from numpy import matrixarrayshapepizerosconcatenatemeansincossqrt
from geotopotopografiaacimut import acimut
from geotopogeneralperimetro import perimetro
from geotopogeneralareacor import areacor
Radio medio terrestre en metros
rt=63700000
Informacioacuten del punto de estacioacuten El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto de estacioacuten
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Altitud del punto en metros
- Quinta columna- Altura de instrumento en metros
pe=array([[100030242663090376657208150]])
Informacioacuten de las referencias
- Cada fila es un punto de referencia
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Lectura azimutal en grados centesimales
ref=array([[200127863973359492354821][2002322174932757501335646][20033289406282
69902313540][2004261222126827453319067]])
Informacioacuten de los puntos radiados
- Cada fila es una observacioacuten claacutesica a un punto radiado
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Lectura azimutal en grados centesimales
- Tercera columna- Lectura cenital en grados centesimales
- Cuarta columna- Distancia geomeacutetrica en metros
- Quinta columna- Altura de instrumento en metros
rad=array([[30013387131001173422431180][300211877101000083399617200][3003240
5756999039440097150][300433037831000468414996150]])
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos de referencia
Caacutelculo de las dimensiones de la matriz de puntos de referencia
- mref seraacute el nuacutemero de filas el nuacutemero de puntos
- nref seraacute el nuacutemero de columnas 4
[mrefnref]=refshape
Se extrae la informacioacuten del punto de estacioacuten
num_pe=pe[00]
x_pe=pe[01]
y_pe=pe[02]
z_pe=pe[03]
alti_pe=pe[04]
Caacutelculo de azitutes del punto de estacioacuten a cada uno de los puntos radiados
La funcioacuten azimut de la libreriacutea Geotop devuelve el valor en radianes
acimutes=zeros((mref1))
for i in range (1mref+1)
Se leen la identificacioacuten y las coordenadas del punto radiado y se almacenan en variables
temporales
num_pref=ref[i-10]
x_pref=ref[i-11]
y_pref=ref[i-12]
azi_pe_pref=acimut(x_pey_pex_prefy_pref)
acimutes[i-10]=azi_pe_pref2000pi
ref=concatenate((refacimutes)axis=1)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
79
Caacutelculo de la desorientacioacuten de cada direccioacutenccedil
desor=zeros((mref1))
for i in range(1mref+1)
Se leen los valores angulares y se transforman a radianes almacenaacutendose en variables
temporales
lhz_pe_pref=ref[i-13]pi2000
azi_pe_pref=ref[i-14]pi2000
des_pe_pref=azi_pe_pref-lhz_pe_pref
if des_pe_preflt0
des_pe_pref=des_pe_pref+20pi
desor[i-10]=des_pe_pref200pi
ref=concatenate((refdesor)axis=1)
Caacutelculo de la desorientacioacuten media con la funcioacuten de python
des_mean=mean(ref[5])pi200
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos radiados
[mradnrad]=radshape
Caacutelculo de coordenadas polares que se almacenan en la matriz coor_polares
- Primera columna- Nuacutemero entero identificador del punto radiado
- Segunda columna- Azimut en grados centesimales
- Tercera columna- Distancia reducida en metros
Caacutelculo de coordenadas cartesianas que se almacenan en la matriz coor_cart
- Primera columna- Nuacutemero entero identificador del punto del punto radiado
- Segunda columna- Coordenada X
- Tercera columna- Coordenada Y
- Cuarta columna- Altitud
antes se almacenan las coordenadas polares en la matriz coord_polares (numero de
puntoacimutdistancia reducida)
coord_polares=zeros((mrad3))
coord_cart=zeros((mrad4))
for i in range(1mrad+1)
num_prad=rad[i-10]
lhz_pe_prad=rad[i-11]pi2000
lv_pe_prad=rad[i-12]pi2000
dg_pe_prad=rad[i-13]
altp_pe_prad=rad[i-14]
coord_polares[i-10]=num_prad
azi_pe_prad=lhz_pe_prad+des_mean
if azi_pe_pradgt(20pi)
azi_pe_prad=azi_pe_prad-20pi
coord_polares[i-11]=azi_pe_prad2000pi
dr_pe_prad=dg_pe_pradsin(lv_pe_prad)
coord_polares[i-12]=dr_pe_prad
coord_cart[i-10]=num_prad
coord_cart[i-11]= x_pe+dr_pe_pradsin(azi_pe_prad)
coord_cart[i-12]= y_pe+dr_pe_pradcos(azi_pe_prad)
coord_cart[i-13]= z_pe+alti_pe+dg_pe_pradcos(lv_pe_prad)-
altp_pe_prad+042dr_pe_prad2rt
Caacutelculo del periacutemetro de la parcela utilizando la funcioacuten periacutemetro de Geotopo
coord=zeros((mrad2))
for i in range (1mrad+1)
coord[i-10]=coord_cart[i-11]
coord[i-11]=coord_cart[i-12]
perim=perimetro(coord)
Caacutelculo de la superficie de la parcela utilizando la funcioacuten areacor de Geotopo
superficie=areacor(coord)
superficie_error=areacore(coord)
Impresioacuten de resultados
fsalida=open(topopractica1salw)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
80
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
fsalidawrite(TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(nPRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALESn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimaln)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia Localn)
Impresioacuten del paso 1 Paso de coordenadas cartesianas a polares Azimutes
fsalidawrite(n1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada
visualn)
fsalidawrite( Punto Inicial Punto Final Acimut Desorientacioacutenn)
for i in range(1mref+1)
num_pref=ref[i-10]
azi=ref[i-14]
des=ref[i-15]
fsalidawrite(100fnum_pe)
fsalidawrite(150fnum_pref)
fsalidawrite(184fazi)
fsalidawrite(184fndes)
Impresioacuten del paso 2 Caacutelculo de la desorientacioacuten media
fsalidawrite(n2 Caacutelculo de la desorientacioacuten median)
fsalidawrite( Desorientacioacuten media154fn(des_mean200pi))
Impresioacuten del paso 3 Caacutelculo de la coordenadas polares
fsalidawrite(n3 Caacutelculo de las coordenadas polaresn)
fsalidawrite( Punto Acimut Distancian)
for i in range (1mrad+1)
num_prad=coord_polares[i-10]
azi=coord_polares[i-11]
dist=coord_polares[i-12]
fsalidawrite(100fnum_prad)
fsalidawrite(184fazi)
fsalidawrite(184fndist)
Impresioacuten del paso 4 Caacutelculo de la coordenadas cartesianas
fsalidawrite(n4 Caacutelculo de las coordenadas cartesianasn)
fsalidawrite( Punto X Y Zn)
for i in range (1mrad+1)
num_prad=coord_cart[i-10]
x=coord_cart[i-11]
y=coord_cart[i-12]
z=coord_cart[i-13]
fsalidawrite(100fnum_prad)
fsalidawrite(154fx)
fsalidawrite(154fy)
fsalidawrite(154fnz)
Impresioacuten del paso 5 valor del periacutemetro
fsalidawrite(n5 Caacutelculo del periacutemetro de la parcelan)
fsalidawrite( Periacutemetro153f mnperim)
Impresioacuten del paso 6 valor de la superficie de la parcela
fsalidawrite(n6 Caacutelculo de la superficie de la parcelan)
fsalidawrite( Superficie153f m2nsuperficie)
fsalidaclose()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
81
512 Impresioacuten del fichero de salida de resultados topo_praacutectica1
Ejecuando el programa anterior obtenemos un fichero con los resultados y la presentacioacuten mejorada que hemos implementado SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada visual
Punto Inicial Punto Final Acimut Desorientacioacuten
1000 2001 3539187 3184366
1000 2002 520128 3184482
1000 2003 1497887 3184347
1000 2004 2503428 3184361
2 Caacutelculo de la desorientacioacuten media
Desorientacioacuten media 3184389
3 Caacutelculo de las coordenadas polares
Punto Acimut Distancia
3001 3523102 4224303
3002 372099 3996170
3003 1590145 4400965
3004 2488172 4149959
4 Caacutelculo de las coordenadas cartesianas
Punto X Y Z
3001 27365966 33997199 6561414
3002 32447650 34236535 6566664
3003 32884285 27383773 6578851
3004 27363219 27915286 6569143
5 Caacutelculo del periacutemetro de la parcela
Periacutemetro 2358248 m
6 Caacutelculo de la superficie de la parcela
Superficie 342540930 m2
513 Salida de resultados topo_praacutectica2
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN DIRECTA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3264596 m
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
82
Y= 4065437 m
Previsioacuten de error planimeacutetrico= 0035 m
Vector con soluciones en z y su error
Z=725931 m Previsioacuten de error altimeacutetrico 0023 m
Z=725926 m Previsioacuten de error altimeacutetrico 0024 m
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN INVERSA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3010146 m
Y= 3411841 m
Previsioacuten de error planimeacutetrico= 0022 m
Vector con soluciones en z y su error
Z=515695 m Previsioacuten de error altimeacutetrico 0021 m
Z=515703 m Previsioacuten de error altimeacutetrico 0024 m
Z=515698 m Previsioacuten de error altimeacutetrico 0022 m
514 Salida de resultados topo_praacutectica3
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 3 CALCULO DE DATOS DE REPLANTEO PARA ESTACION TOTAL EN UN SISTEMA DE REFERENCIA
LOCAL
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
ResultadosDatos de replanteo
Base Punto Azimut Distancia CotaProyecto CotaTerreno CotaRoja
1 1 3856489 75460 96930 96539 0391
1 2 2667262 77786 96903 98259 -1356
1 3 1219144 40883 95329 94688 0641
1 4 279600 67437 95045 95587 -0542
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
83
515 Salida de resultados topo_praacutectica4
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 4 TRANSFORMACIOacuteN ENTRE SISTEMAS DE REFERENCIA LOCALES HELMERT 2D
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
Planteamiento del sistema de ecuaciones que define la transformacioacuten planimeacutetrica
Matriz A
1000 0000 3258686 -2709414
0000 1000 2709414 3258686
1000 0000 2075590 -2105320
0000 1000 2105320 2075590
Vector teacuterminos independientes
4554780
228501
3244004
443737
1 Resultados de los paraacutemetros de la transformacioacuten
- Planimetriacutea
- Traslacioacuten en coordenada x del sistema S1 al sistema S2 324401 m
- Traslacioacuten en coordenada y del sistema S1 al sistema S2 -20424 m
- Valor para el paraacutemetro a (a=landacos_giro) 0805119725
adimensional
- Valor para el paraacutemetro b (b=landasin_giro) -0593023724
adimensional
- Valor para el factor de escala (landa=sqrt(a2+b2)) 0999947
tanto por uno
- Valor para el giro (giro=arctan2(ba) -404157
grados centesimales
- Altimetriacutea
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 1 6056 m
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 2 6083 m
- Traslacioacuten media en coordenada z del sistema S1 al sistema S2 6070 m
2 Resultado de la transformacioacuten del punto 3 al sistema de referencia local S2
- Coordenada x de 3 en el sistema de referencia local S2 4072286 m
- Coordenada y de 3 en el sistema de referencia local S2 45170 m
- Coordenada z de 3 en el sistema de referencia local S2 104748 m
52 CASOS PRAacuteCTICOS GEODESIA En total se han realizada 5 casos praacutecticos dentro del apartado de geodesia Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica geo_practica1 Del resto soacutelo se ha incluido la salida de datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
84
521 Implementacioacuten del coacutedigo geo_praacutectica1
Semana Geomaacutetica 2011 Bogotaacute DC Colombia
IGAC-Instituto Agustiacuten Codazzi
Taller Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea GeoTop
Impartido por Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
Dr David Hernaacutendez Loacutepez davidhernandezulcmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
Praacutectica 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
Datos Coordenadas de la Red ERGNSS - Red de Estaciones Permanentes GNSS - Instituto
Geograacutefico Nacional Espantildea
Sistema de referencia ETRS89 (Elipsoide GRS80)
Coacutedigo EPSG para coordenadas geodeacutesicas sobre el elipsoide 4258
En esta versioacuten de la praacutectica se utiliza la libreriacutea GeoTop
Otra variante con respecto a la versioacuten anterior de la praacutectica es que se parte de coordenadas
geodeacutesicas en seudo decimal sexagesimal
Documentacioacuten La formulacioacuten empleada figura en el apartado 13 Parametrizacioacuten del
elipsoide del documento
OctaveTallerGeodesiaDocumentacionApuntes_DHL_2010GeodesiaElipsoidalpdf
Matriz de coordenadas
- Cada fila es un punto una estacioacuten de referencia GNSS
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada geodeacutesica longitud en suedo decimal sexagesimal
- Tercera columna- Coordenada geodeacutesica latitud en suedo decimal sexagesimal
- Cuarta columna- Altitud elipsoidal en metros
from numpy import zerosarraygenfromtxt
from geotopogeodesiaelipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiatri2geo import tri2geo
from geotopogeodesiageo2tri import geo2tri
c4258h=[ 1 432151770811 -82356167472 66917
2 382020103584 -02852437048 60356
3 385840494457 -15123054192 751736
4 365109112636 -22734018800 127517
5 392843898433 -62030426066 436527
6 432819118007 -34753038539 99287
7 355331090227 -51823016758 52475
8 375456176191 -44315999947 202082
9 371159923466 -65513077151 81860
10 402645009016 -34234283233 766920
11 423518259367 -53903511817 970254
12 364334003748 -42336718238 119848
13 393309445258 23728383134 62063
14 422728617761 -23007691629 503204
15 405642292231 -52945108842 854969
16 394031263811 -35750290360 808968
17 402101790155 -10727483699 956188
18 392850970441 -02015543423 77592
19 421102318373 -84847057525 87790
20 403129631681 -30519065001 972777
21 413800221985 -05255792567 296111
22 281829034024 -162958855078 2417483
23 282837857413 -161428164273 51787
24 282505711067 -163302841359 54475
25 280249784309 -164306688806 58543
26 284549932439 -175337787438 2199221]
Los datos los guardamos en un txt en la misma carpeta del trabajo e importamos
c4258h=genfromtxt(CPython27geotopoaplicacionestalleresgeo_practica1dattxt)
Caacutelculo de las dimensiones de la matriz de coordenadas
- m seraacute el nuacutemero de filas el nuacutemero de puntos
- n seraacute el nuacutemero de columnas 4
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
85
[mn]=c4258hshape
grs80=elipsoide(2)
Recibe Codigo del elipsoide (nelipsoide)
1 - Ed50 Devuelve el elipsoide Internacional 1924
2 - Etrs89 Devuelve el elipsoide GRS80
3 - Wgs84 Devuelve el elipsoide Wgs84
Definicioacuten del elipsoide
fsalida=open(geo_practica1salw)
fsalidawrite(SEMANA GEOMAacuteTICA - 2011n)
fsalidawrite(TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software
libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE
COORDENADAS GEODEacuteSICAS Y ECEFn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal
ggmmssfsn)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia ETRS89n)
fsalidawrite(- Paraacutemetros del elipsoide GRS80n)
fsalidawrite( - Semieje mayor 103f mngrs80[0])
fsalidawrite( - Inverso del aplanamiento 109f adimngrs80[1])
fsalidawrite( - Semieje menor 103f mngrs80[2])
fsalidawrite( - Primera excentricidad al cuadrado 109f adimngrs80[3]2)
fsalidawrite( - Segunda excentricidad al cuadrado 109f adimngrs80[4]2)
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(1 Paso de coordenadas geodeacutesicas a ECEFn)
fsalidawrite(NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF
CoorZECEFn)
c4258XYZ=zeros((m4))
for i in range (1m+1)
np=c4258h[i-10]
longitudRad=psdo2rad(c4258h[i-12])
latitudRad=psdo2rad(c4258h[i-11])
hElip=c4258h[i-13]
[xecefyecefzecef]=geo2tri(latitudRadlongitudRadhElip2)
fsalidawrite(80fnp)
fsalidawrite(159fc4258h[i-11])
fsalidawrite(159fc4258h[i-12])
fsalidawrite(123fhElip)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(n)
c4258XYZ[i-10]=np
c4258XYZ[i-11]=xecef
c4258XYZ[i-12]=yecef
c4258XYZ[i-13]=zecef
Caacutelculo e impresioacuten del paso 2 de coordenadas ECEF a geodeacutesicas
fsalidawrite(2 Paso de coordenadas ECEF a geodeacutesicasn)
fsalidawrite( NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud
AltElipn)
for i in range(1m+1)
np=c4258XYZ[i-10]
xecef=c4258XYZ[i-11]
yecef=c4258XYZ[i-12]
zecef=c4258XYZ[i-13]
[latitudlongitudhElip]=tri2geo(xecefyecefzecef2)
fsalidawrite(80fnp)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(159frad2psdo(latitud))
fsalidawrite(159frad2psdo(longitud))
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
86
fsalidawrite(153fnhElip)
fsalidaclose()
522 Impresioacuten del fichero de salida de resultados geo_praacutectica1
SEMANA GEOMAacuteTICA - 2011
TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea
GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal ggmmssfs
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia ETRS89
- Paraacutemetros del elipsoide GRS80
- Semieje mayor 6378137000 m
- Inverso del aplanamiento 0003352811 adim
- Semieje menor 6356752314 m
- Primera excentricidad al cuadrado 0006694380 adim
- Segunda excentricidad al cuadrado 0006739497 adim
1 Paso de coordenadas geodeacutesicas a ECEF
NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF CoorZECEF
1 43215177081 -8235616747 66917 4594489890 -678368010 4357065904
2 38202010358 -0285243705 60356 5009051399 -42072472 3935057504
3 38584049446 -1512305419 751736 4962848206 -160854365 3990884209
4 36510911264 -2273401880 127517 5105220295 -219278803 3804386889
5 39284389843 -6203042607 436527 4899866820 -544567584 4033769790
6 43281911801 -3475303854 99287 4625924690 -307096765 4365771175
7 35533109023 -5182301676 52475 5150908012 -478415023 3718518240
8 37545617619 -4431599995 202082 5021256063 -414685080 3898182184
9 37115992347 -6551307715 81860 5049613168 -612885631 3835143860
10 40264500902 -3423428323 766920 4851137670 -314518688 4116282036
11 42351825937 -5390351182 970254 4680871385 -463168384 4294606572
12 36433400375 -4233671824 119848 5103282414 -392096752 3793146894
13 39330944526 2372838313 62063 4919369704 225499577 4039849606
14 42272861776 -2300769163 503204 4708688612 -205761707 4283609369
15 40564229223 -5294510884 854969 4803054799 -462131609 4158378661
16 39403126381 -3575029036 808968 4904660519 -339868032 4050823512
17 40210179016 -1072748370 956188 4867391684 -95523894 4108341277
18 39285097044 -0201554342 77592 4929534046 -29050676 4033709925
19 42110231837 -8484705753 87790 4677481077 -725205068 4260827192
20 40312963168 -3051906500 972777 4848724914 -261632472 4123093922
21 41380022199 -0525579257 296111 4773803543 -73506519 4215453698
22 28182903402 -16295885508 2417483 5390243531 -1596630330 3007752593
23 28283785741 -16142816427 51787 5386836438 -1569217617 3023118925
24 28250571107 -16330284136 54475 5381262061 -1599192518 3017377791
25 28024978431 -16430668881 58543 5395193089 -1620537044 2981146536
26 28454993244 -17533778744 2199221 5326646317 -1719826438 3052043561
2 Paso de coordenadas ECEF a geodeacutesicas
NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud AltElip
1 4594489890 -678368010 4357065904 43215177081 -8235616747 66917
2 5009051399 -42072472 3935057504 38202010358 -0285243705 60356
3 4962848206 -160854365 3990884209 38584049446 -1512305419 751736
4 5105220295 -219278803 3804386889 36510911264 -2273401880 127517
5 4899866820 -544567584 4033769790 39284389843 -6203042607 436527
6 4625924690 -307096765 4365771175 43281911801 -3475303854 99287
7 5150908012 -478415023 3718518240 35533109023 -5182301676 52475
8 5021256063 -414685080 3898182184 37545617619 -4431599995 202082
9 5049613168 -612885631 3835143860 37115992347 -6551307715 81860
10 4851137670 -314518688 4116282036 40264500902 -3423428323 766920
11 4680871385 -463168384 4294606572 42351825937 -5390351182 970254
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
87
12 5103282414 -392096752 3793146894 36433400375 -4233671824 119848
13 4919369704 225499577 4039849606 39330944526 2372838313 62063
14 4708688612 -205761707 4283609369 42272861776 -2300769163 503204
15 4803054799 -462131609 4158378661 40564229223 -5294510884 854969
16 4904660519 -339868032 4050823512 39403126381 -3575029036 808968
17 4867391684 -95523894 4108341277 40210179016 -1072748370 956188
18 4929534046 -29050676 4033709925 39285097044 -0201554342 77592
19 4677481077 -725205068 4260827192 42110231837 -8484705753 87790
20 4848724914 -261632472 4123093922 40312963168 -3051906500 972777
21 4773803543 -73506519 4215453698 41380022199 -0525579257 296111
22 5390243531 -1596630330 3007752593 28182903402 -16295885508 2417483
23 5386836438 -1569217617 3023118925 28283785741 -16142816427 51787
24 5381262061 -1599192518 3017377791 28250571107 -16330284136 54475
25 5395193089 -1620537044 2981146536 28024978431 -16430668881 58543
26 5326646317 -1719826438 3052043561 28454993244 -17533778744 2199221
523 Salida de resultados geo_praacutectica2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
88
524 Salida de resultados geo_praacutectica3
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
89
525 Salida de resultados geo_praacutectica4
helliphellip
helliphellip
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
90
526 Salida de resultados geo_praacutectica5
Con la implementacioacuten y caacutelculo de los 9 casos praacutecticos realizados e incluidos en este Proyecto Final de Maacutester se puede obtener una idea de la aplicabilidad de esta libreriacutea en aplicaciones de caacutelculos topograacuteficos y geodeacutesicos Igualmente y como uno de los puntos de partida de este Proyecto obtenemos una libreriacutea muy potente para el uso en aacutembitos universitarios facilitando al profesorado el planteamiento y resolucioacuten de los distintos casos praacutecticos de las asignaturas y al tratarse de coacutedigo abierto se facilita que los alumnos implementen nuevas utilidades formatos de salida etc Convirtiendo geotopo en una herramienta de trabajo diario
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
91
6 CONCLUSIONES FINALES Como conclusiones finales podemos enumerar
Se ha corroborado lo que dicen los impulsores de Python se trata de un lenguaje limpio sencillo y claro muy proacuteximo a pseudocoacutedigo
Resulta interesante la utilizacioacuten de software libre para caacutelculos geodeacutesicos y topografiacuteacos Al tratarse de software libre es accesible a cualquier tipo de usuario
Al partir de la consideracioacuten de un paradigma estructurado de programacioacuten hemos conseguido implementar gran nuacutemero de funciones en ficheros (moacutedulos) de pequentildeo tamantildeo facilitando la programacioacuten Tambieacuten se ha iniciado en la programacioacuten orientada a objetos con la declaracioacuten de alguna clase
La importacioacuten de moacutedulos facilita a la implementacioacuten de coacutedigo sin necesitar volver a escribir el coacutedigo importado y ante cualquier modificacioacuten del mismo automaacuteticamente se actualiza en todos los programas o moacutedulos donde se importe dicho moacutedulo
Con las funciones definidas dentro de Numpy hemos realizado la mayor parte de los caacutelculos necesarios en nuestra biblioteca
Se ha de realizar la importacioacuten expresa de gran nuacutemero de operaciones matemaacuteticas Salvo + - y casi todos los demaacutes operadores se han de importar desde Numpy por ejemplo pi sqrt sin cos etc A veces puede resultar un poco complicado hacer la importacioacuten de estos operadores pero cuando se avanza en la programacioacuten hasta parece maacutes didactico reflejar todas las funciones importadas de otros moacutedulos
Se ha apreciado que en algunos casos las mismas funciones estaacuten incluidas en distintos moacutedulos y ademaacutes con nombres diferentes Asiacute en Numpy tenemos arcsin arccos arctan etc y en SciPy asin acos atan cuando se refieren a las mismas funciones arcoseno arcocoseno y arcotangente
Se ha creado una libreriacutea abierta accesible y editable para moder modificar
coacutedigo y tambieacuten poder ampliar con el implementado de nuevas funciones que aumenten el potencial de la misma Esto tambieacuten se incluye dentro de las liacuteneas futuras de actuacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
92
7 LIacuteNEAS FUTURAS DE ACTUACIOacuteN
De forma general se establecen las siguientes liacuteneas futuras de actuacioacuten e investigacioacuten
Avance en el desarrollo a aplicaciones informaacuteticas mediante el uso de software libre y en especial de Python
Estudio de la aplicabilidad de Python en el caacutelculo minimo-cuadraacutetico de sistemas de ecuaciones aplicables en topografiacutea y geodesia Para ello se ha de profundizar en el estudio de las diferencias entre los tipos array que contiene numpy y los tipos matrix par el caacutelculo avanzado de sistemas de ecuaciones
Aplicacioacuten de Python para el caacutelculo y ajuste de Redes Geodeacutesicas mediante la utilizacioacuten de miacutenimos cuadrados Con este fin estariacuteamos evitando el tener que recurrir a los softwares de caacutelculo de las casas comerciales ahorrando asiacute un coste importante y el poder realizar los ajustes y presentaciones de resultados adapatados a nuestras necesidades
Inclusioacuten de una interfaz graacutefica a los caacutelculos realizados para poder tener visualmente el resultado de los mismos
Aplicabilidad de python en el procesado de imaacutegenes Utilizacioacuten de la libreriacutea PIL (Python Imaging Library) que agrega capacidades de procesamiento de imaacutegenes al interprete Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
93
8 ANEJO
81 EQUIVALENCIAS ENTRE FUNCIONES EN MATLAB Y PYTHON Al partir de la libreiacutea Geotop en Octave hemos de tener en cuenta la equivanlencia entre algunas funciones de MatlabOctave con Python Asiacute tenemos MATLAB numpyarray numpymatrix Notes
ndims(a) ndim(a) or andim get the number of dimensions of a (tensor rank)
size(a) shape(a) or ashape get the size of the matrix
size(an) ashape[n-1]
get the number of elements of the nth dimension of array a (Note that MATLABreg uses 1 based indexing while Python uses 0 based indexing See note INDEXING)
MATLAB numpyarray numpymatrix Notes
[ 1 2 3 4 5 6 ] array([[123] [456]])
mat([[123] [456]]) or mat(1 2 3 4 5 6)
2x3 matrix literal
[ a b c d ] vstack([hstack([ab]) hstack([cd])])
bmat(a b c d) construct a matrix from blocks abc and d
a(end) a[-1] a[-1][00] access last element in the 1xn matrix a
a(25) a[14] access element in second row fifth column
a(2) a[1] or a[1] entire second row of a
a(15) a[05] or a[5] or a[05] the first five rows of a
a(end-4end) a[-5] the last five rows of a
a(1359) a[03][49] rows one to three and columns five to nine of a This gives read-only access
a([245][13]) a[ix_([134][02])] rows 24 and 5 and columns 1 and 3 This allows the matrix to be modified and doesnt require a regular slice
a(3221) a[ 2212] every other row of a starting with the third and going to the twenty-first
a(12end) a[ 2] every other row of a starting with the first
a(end-11) or flipud(a) a[ -1] a with rows in reverse order
a([1end 1]) a[r_[len(a)0]] a with copy of the first row appended to the end
a atranspose() or aT transpose of a
a aconj()transpose() or aconj()T
aH conjugate transpose of a
a b dot(ab) a b matrix multiply
a b a b multiply(ab) element-wise multiply
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
94
MATLAB numpyarray numpymatrix Notes
ab ab element-wise divide
a^3 a3 power(a3) element-wise exponentiation
(agt05) (agt05) matrix whose ijth element is (a_ij gt 05)
find(agt05) nonzero(agt05) find the indices where (a gt 05)
a(find(vgt05)) a[nonzero(vgt05)[0]] a[nonzero(vAgt05)[0]] extract the columms of a where vector v gt 05
a(find(vgt05)) a[vTgt05] a[vTgt05)] extract the columms of a where column vector v gt 05
a(alt05)=0 a[alt05]=0 a with elements less than 05 zeroed out
a (agt05) a (agt05) mat(aA (agt05)A) a with elements less than 05 zeroed out
a() = 3 a[] = 3 set all values to the same scalar value
y=x y = xcopy() numpy assigns by reference
y=x(2) y = x[1]copy() numpy slices are by reference
y=x() y = xflatten(1) turn array into vector (note that this forces a copy)
110 arange(111) or r_[111] or r_[11010j]
mat(arange(111)) or r_[111r]
create an increasing vector see note RANGES
09 arange(10) or r_[10] or r_[910j]
mat(arange(10)) or r_[10r]
create an increasing vector see note RANGES
[110] arange(111)[ newaxis] r_[111c] create a column vector
zeros(34) zeros((34)) mat() 3x4 rank-2 array full of 64-bit floating point zeros
zeros(345) zeros((345)) mat() 3x4x5 rank-3 array full of 64-bit floating point zeros
ones(34) ones((34)) mat() 3x4 rank-2 array full of 64-bit floating point ones
eye(3) eye(3) mat() 3x3 identity matrix
diag(a) diag(a) mat() vector of diagonal elements of a
diag(a0) diag(a0) mat() square diagonal matrix whose nonzero values are the elements of a
rand(34) randomrand(34) mat() random 3x4 matrix
linspace(134) linspace(134) mat() 4 equally spaced samples between 1 and 3 inclusive
[xy]=meshgrid(0805) mgrid[0906] or meshgrid(r_[09]r_[06]
mat() two 2D arrays one of x values the other of y values
ogrid[0906] or ix_(r_[09]r_[06]
mat() the best way to eval functions on a grid
[xy]=meshgrid([124][245]) meshgrid([124][245]) mat()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
95
ix_([124][245]) mat() the best way to eval functions on a grid
MATLAB numpyarray numpymatrix Notes
repmat(a m n) tile(a (m n)) mat() create m by n copies of a
[a b]
concatenate((ab)1) or hstack((ab)) or column_stack((ab)) or c_[ab]
concatenate((ab)1) concatenate columns of a and b
[a b] concatenate((ab)) or vstack((ab)) or r_[ab]
concatenate((ab)) concatenate rows of a and b
max(max(a)) amax() maximum element of a (with ndims(a)lt=2 for matlab)
max(a) amax(0) maximum element of each column of matrix a
max(a[]2) amax(1) maximum element of each row of matrix a
max(ab) maximum(a b) compares a and b element-wise and returns the maximum value from each pair
norm(v) sqrt(dot(vv)) or Scilinalgnorm(v) or linalgnorm(v)
sqrt(dot(vAvA)) or Scilinalgnorm(v) or linalgnorm(v)
L2 norm of vector v
a amp b logical_and(ab) element-by-element AND operator (Numpy ufunc) see note LOGICOPS
a | b logical_or(ab) element-by-element OR operator (Numpy ufunc) see note LOGICOPS
bitand(ab) a amp b bitwise AND operator (Python native and Numpy ufunc)
bitor(ab) a | b bitwise OR operator (Python native and Numpy ufunc)
inv(a) linalginv(a) inverse of square matrix a
pinv(a) linalgpinv(a) pseudo-inverse of matrix a
rank(a) linalgmatrix_rank(a) rank of a matrix a
ab linalgsolve(ab) if a is square
linalglstsq(ab) otherwise solution of a x = b for x
ba Solve aT xT = bT instead solution of x a = b for x
[USV]=svd(a) U S Vh = linalgsvd(a) V = VhT singular value decomposition of a
chol(a) linalgcholesky(a)T
cholesky factorization of a matrix (chol(a) in matlab returns an upper triangular matrix but linalgcholesky(a) returns a lower triangular matrix)
[VD]=eig(a) DV = linalgeig(a) eigenvalues and eigenvectors of a
[VD]=eig(ab) VD = Scilinalgeig(ab) eigenvalues and eigenvectors of ab
[VD]=eigs(ak) find the k largest eigenvalues and eigenvectors of a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
96
MATLAB numpyarray numpymatrix notes
[QRP]=qr(a0) QR = Scilinalgqr(a) mat() QR decomposition
[LUP]=lu(a) LU = Scilinalglu(a) or LUP=Scilinalglu_factor(a)
mat() LU decomposition
conjgrad Scilinalgcg mat() Conjugate gradients solver
fft(a) fft(a) mat() Fourier transform of a
ifft(a) ifft(a) mat() inverse Fourier transform of a
sort(a) sort(a) or asort() mat() sort the matrix
[bI] = sortrows(ai) I = argsort(a[i]) b=a[I] sort the rows of the matrix
regress(yX) linalglstsq(Xy) multilinear regression
decimate(x q) Scisignalresample(x len(x)q) downsample with low-pass filtering
unique(a) unique(a)
squeeze(a) asqueeze()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
97
9 BIBLIOGRAFIacuteA
DOWNEY A ELKNER J MEYERS C Aprenda a Pensar Como un Programador con Python GARCIacuteA-ASENJO VILLAMAYOR L HERNAacuteNDEZ LOacutePEZ D Geodesia Febrero 2005 GONZAacuteLEZ DUQUE R Python PARA TODOS Edicioacuten Internet bajo licencia Creative Commons Reconocimiento 25 Espantildea Descargable en httpmundogeeknettutorial-python MARZAL A GRACIA I Introduccioacuten a la programacioacuten con Python Departamento de Lenguajes y Sistemas Informaacuteticos Universitat Jaume I 2003 Edicioacuten Internet NUMPY COMMUNITY NumPy Reference Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg NUMPY COMMUNITY NumPy User Guide Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg VAN ROSSUM G Guiacutea de aprendizaje de PythonRelease 241ordf0 Edicioacuten Intenet Septiembre 2005 Descargable en httpwwwscipyorg VAN ROSSUM G El tutorial de Python Edicioacuten Intenet Descargable en httppythonorgarpyarTutorial
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
98
10 PAacuteGINAS WEB CONSULTADAS httpenfoquevirtualwordpresscomcategorytutorial httpgeektheplanetnet1347how-to-instalar-pydev-en-aptanaxhtml httpmundogeeknetarchivos20080328python-modulos-y-paquetes httpwwwthebitsourcecomprogramming-software-developmentpythonpython-application-development-aptana-pydev httpwwwyoutubecomwatchv=XtnfY2cBbMA youtube interesante trabajo con pydev y modulos httpcodingderkeilercomArchivePythoncomplangpython2005-08msg03511html paacutegina que explica coacutemo solucionar los problemas de Non-ASCII character httpeswikibooksorgwikiInmersiC3B3n_en_PythonSu_primer_programa_en_PythonDocumentado_de_funciones paacutegina que explica la cadena de documentacioacuten despueacutes de definir una funcioacuten con ldquordquordquo___rdquordquordquo (triples comillas) httpwwwpythonorgdevpepspep-0008 style guide for python code httpmundogeeknetarchivos20080707documentacion-en-python habla de la forma de documentar en python httpwwwpythonorgdevpepspep-0257 documentacioacuten y comentarios httpprogramandoideascomcomentarios-en-python documentacioacuten y comentarios httpwwwyoutubecomwatchv=v0sqRYuL5e8 tutorial de python con aptana httpwwwyoutubecomwatchv=29mq1Bn52GYampfeature=related youtube tutorial httpprojectsscipyorgnumpybrowsertrunknumpymatlibpyrev=8567 paacutegina que habla un poco de matrices
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
99
httpwwwgfceduco~arsranguias42p8guia42html cosas interesantes de matrices httpdocencia-euptunizaresctmedrascipy_tutorialscipy_tutorialhtml varios sobre python httpdocspythonorgtutorialmoduleshtml muy buena de paquetes etc httpwwwlinux-ittcom200804python-mdulos-y-paqueteshtml maacutes sobre paquetes httpwwwmclibreorgconsultarpythonotrosin03_idlehtmlccedil coding cp1252 httpwwwmclibreorgconsultarpython tutorial de python en la web Idle httpbioinfcomavupvescourseslinuxpythonmoduloshtml csv listasetc httpwwwdavidricardocommxp=1173 ok muy bueno importacioacuten csv como matriz httpwwwaprenderpythonorg httpwwwscipyorgNumpy_Example_List_With_Doc paacutegina muy importante de scipy httpjsbsanblogspotcom201101calculo-de-un-area-de-un-poligonohtml video sobre caacutelculo de areas de poliacutegonos irregulares httpmathesaurussourceforgenetmatlab-numpyhtml viprelacioacuten entre operaciones con octave y con python httpwwwscipyorgTentative_NumPy_Tutorial pagina importante de scipy httptecnologicumwordpresscomastronomiavideo-tutoriales-de-python todos los videotutoriales de python httpwwwyoutubecomwatchv=Oj3MZXWXGiUampfeature=related csv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
100
httptranslategoogleestranslatehl=esamplangpair=en7Cesampu=httpwwwscipyorgNumPy_for_Matlab_Users interesante sobre numpyhellip httpwikipythonorgmoinHowToSorting interesante de sort httpwikipythonorgmoinHowToSortingOperator_Module_Functions sort itemgetteretc httpcodeactivestatecomrecipes304440-sorting-dictionaries-by-value-in-python-24 operator itemgetter httpmundogeeknetarchivos20080402python-entrada-salida-ficheros entrada salida de archivos httpwwwgulicorgalmacenhttlaclwpchap11htm formato de escritura textos nuacutemeros y decimales httpwwwprogramacioncomarticuloguia_de_aprendizaje_de_python_657 formatos de salida httpnumpysourceforgenetnumdocHTMLnumdochtmpgfId-57315 muy importante sobre arraysetc httpwwwhjcbnlpythonArrayshtml muy importante sobre arraysetc httpwwwalecjacobsoncomweblogp=1570 cargar un txt como una matriz en python httpdocsscipyorgdocnumpyreferencegeneratednumpygenfromtxthtml getfromtxt de numpy httpwwwalegsaonlinecomart13php httpwwwumesdocenciabarzanaIAGPIagp3html httpwebusales~dhernandsoftwarehtmGeotop httpmailpythonorgpipermailtutor2008-March060886html From future import division
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
101
httpwwwyoutubecomwatchv=I6GMIQBD6EU youtube diccionarios httpmundogeeknetarchivos20080121python-tipos-basicos-ii-colecciones diccionarios httpstaffnotiaces~rcardeneshgdiveintopython3-esnative-datatypeshtml diccionarios httpwwwestrellateyardeorgdiscovermanual-python-lo-mas-basico diccionarios httpeswikibooksorgwikiInmersiC3B3n_en_PythonTipos_de_datos_nativosPresentaciC3B3n_de_los_diccionarios diccionarios httpdocspythonorgartutorialdatastructureshtmldiccionarios python estructura de diccionarios httpwwwwikilearningcomtutorialintroduccion_informal_a_matlab_y_octave-matrices_y_algebra_lineal_i19256-8 concatenar matrices httpwwwslidesharenetsantiagosilascomputao-cientfica-com-numpy-e-scipy-7797060 detalles de numpy vectores matricesetc httpwwwscipyorgNumPy_for_Matlab_Usershead-e9a492daa18afcd86e84e07cd2824a9b1b651935 muy importante de scipy arrays y matriceshellip httpdocsscipyorgdocnumpyreferencegeneratednumpyconcatenatehtml muy importante de scipy arrays y matriceshellip httppyspanishdocsourceforgenettut traduccioacuten del tutorial de Guido httpwwwscipyorgNumpy_Example_List_With_Dochead-5202db3259f69441c695ab0efc0cdf45341829fc httppyspanishdocsourceforgenetlibmodule-picklehtml funcioacuten pickle
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
102
httpnicocesarcomq=node23 carga de ficheros binarios httpstaffnotiaces~rcardeneshgdiveintopython3-esfileshtml apertura cierre carga de ficheros etc httppythonr2wordpresscom20080829leer-archivos-binarios-en-python lectura de ficheros binarios httpwwwignesignlayoutInherramientasdo descarga de ficheros regilla del IGN httpterrasitgvaeseskbtransformacion-coordenadas-utm-ed50-utm-etrs89-utilizando-libreria-proj4 paacutegina de la gva sobre cambio de sistema y fichero rejilla httpdocspythonorglibrarystructhtml moacutedulo struct de python para lectura de ficheros binarios httpwwwslidesharenetjpadillaaprogramacion-orientada-a-objetos-en-python programacioacuten orientada a objetos con python httppyspanishdocsourceforgenettutnode7html recorrer diccionarios httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 interesante aplicacioacuten fichero rejilla ntv2 en python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
7
marco basado en software libre que permitioacute crear cluacutester de empresas locales capaces de aportar servicios de eAdministracion que de otra manera tendriacutean que haber contratado fuera de su comunidadrdquo
ldquo O el proyecto de gvSIG de la Conselleriacutea d‟Infrestructures i Transport de la Generalitat Valenciana un sistema de informacioacuten geograacutefico que cuenta con un tejido empresarial local alrededor del proyecto y estaacuten haciendo de la Comunidad Valenciana el nuacutecleo maacutes activo a nivel mundial de desarrollo GIS en entornos libres Tambieacuten es muy conocido el proyecto de Red Tecnoloacutegica Educativa de la Junta de Extremadura con Linex como primera distribucioacuten regional y concepto pionero adoptado ya por 7 comunidades autoacutenomasrdquo ldquoFinalmente a nivel de administracioacuten local hasta el 80 de los grandes ayuntamientos cuentan hoy en diacutea con proyectos de software libre siendo quizaacute el maacutes destacado el del Ayuntamiento de Zaragozardquo
22 LENGUAJES DE PROGRAMACIOacuteN Un lenguaje de programacioacuten es un lenguaje artificial que puede ser usado para controlar el comportamiento de una maacutequina especialmente una computadora Estos se componen de un conjunto de reglas sintaacutecticas y semaacutenticas que permiten expresar instrucciones que luego seraacuten interpretadas Debe distinguirse de ldquolenguaje informaacuteticordquo que es una definicioacuten maacutes amplia puesto que estos incluyen otros lenguajes como son el HTML o PDF que dan formato a un texto y no es programacioacuten en siacute misma El programador es el encargado de utilizar un lenguaje de programacioacuten para crear un conjunto de instrucciones que al final constituiraacute un programa o subprograma informaacutetico En su uso un lenguaje de programacioacuten puede acercarse a la forma humana de expresarse y por eso este tipo de lenguajes es llamado de alto nivel Esto significa que utilizan palabras y formas en sus estructuras que se asemejan al lenguaje natural (especialmente al ingleacutes) En cambio aquellos lenguajes que se aproximan maacutes a la forma en la cual la computadora se maneja son llamados lenguajes de bajo nivel Esto significa que lo que el programador deba escribir se acercaraacute al lenguaje maacutequina que es en definitiva lo que las computadoras pueden interpretar De todas maneras un lenguaje de programacioacuten difiere en muchos aspectos de un lenguaje humano Un coacutedigo escrito en un lenguaje de programacioacuten especiacutefico siempre se interpreta de la misma manera (no como los idiomas humanos ambiguos) los errores son mucho maacutes significativos (a tal punto de que un coacutedigo puede volverse ininterpretable por la computadora) etc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
8
El coacutedigo fuente es el conjunto de instrucciones que conforman un programa (o subprograma o moacutedulo) El coacutedigo fuente debe ser compilado para poder ser interpretado y ejecutado por la computadora La compilacioacuten traduce el coacutedigo fuente (que depende del lenguaje de programacioacuten) a un lenguaje maacutequina (que depende del sistema de la maacutequina) Existen lenguajes del tipo script que son directamente ejecutados por un inteacuterprete y no necesitan compilacioacuten Los lenguajes de programacioacuten pueden clasificarse empleando distintos meacutetodos y puntos de vista Esta clasificacioacuten se basa en el paradigma que utilizan Se debe aclarar que existen muchos maacutes paradigmas y subparadigmas de programacioacuten no incluidos dentro de los mencionados Ademaacutes todaviacutea hay conflictos en las definiciones y alcances de ciertos paradigmas
23 PARADIGMAS DE PROGRAMACIOacuteN Un paradigma de programacioacuten provee (y determina) la visioacuten y meacutetodos de un programador en la construccioacuten de un programa o subprograma Diferentes paradigmas resultan en diferentes estilos de programacioacuten y en diferentes formas de pensar la solucioacuten de problemas (con la solucioacuten de muacuteltiples ldquoproblemasrdquo se construye una aplicacioacuten) Los lenguajes de programacioacuten son basados en uno o maacutes paradigmas (Veacutease Programacioacuten en muacuteltiples paradigmas) Por ejemplo Smalltalk y Java son lenguajes basados en el paradigma orientado a objetos El lenguaje de programacioacuten Scheme en cambio soporta soacutelo programacioacuten funcional En cambio Python soporta muacuteltiples paradigmas Clasificacioacuten por paradigmas de programacioacuten Paradigma Imperativo describe la programacioacuten como una secuencia instrucciones o comandos que cambian el estado de un programa El coacutedigo maacutequina en general estaacute basado en el paradigma imperativo Su contrario es el paradigma declarativo En este paradigma se incluye el paradigma procedimental (procedural) entre otros Paradigma Declarativo No se basa en el coacutemo se hace algo (coacutemo se logra un objetivo paso a paso) sino que describe (declara) coacutemo es algo En otras palabras se enfoca en describir las propiedades de la solucioacuten buscada dejando indeterminado el algoritmo (conjunto de instrucciones) usado para encontrar esa solucioacuten Es maacutes complicado de implementar que el paradigma imperativo tiene desventajas en la eficiencia pero ventajas en la solucioacuten de determinados problemas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
9
Paradigma Estructurado la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Ademaacutes la programacioacuten se controla con secuencia seleccioacuten e iteracioacuten Permite reutilizar coacutedigo programado y otorga una mejor compresioacuten de la programacioacuten Es contrario al paradigma inestructurado de poco uso que no tiene ninguna estructura es simplemente un ldquobloquerdquo como por ejemplo los archivos batch (bat) Paradigma Orientado a Objetos estaacute basado en la idea de encapsular estado y operaciones en objetos En general la programacioacuten se resuelve comunicando dichos objetos a traveacutes de mensajes (programacioacuten orientada a mensajes) Se puede incluir -aunque no formalmente- dentro de este paradigma el paradigma basado en objetos que ademaacutes posee herencia y subtipos entre objetos Ej Simula Smalltalk C++ Java Visual Basic NET etc Su principal ventaja es la reutilizacioacuten de coacutedigos y su facilidad para pensar soluciones a determinados problemas Paradigma Funcional este paradigma concibe a la computacioacuten como la evaluacioacuten de funciones matemaacuteticas y evita declarar y cambiar datos En otras palabras hace hincapieacute en la aplicacioacuten de las funciones y composicioacuten entre ellas maacutes que en los cambios de estados y la ejecucioacuten secuencial de comandos (como lo hace el paradigma procedimental) Permite resolver ciertos problemas de forma elegante y los lenguajes puramente funcionales evitan los efectos secundarios comunes en otro tipo de programaciones Paradigma loacutegico se basa en la definicioacuten de reglas loacutegicas para luego a traveacutes de un motor de inferencias loacutegicas responder preguntas planteadas al sistema y asiacute resolver los problemas Ej prolog Otros paradigmas y subparadigmas son paradigma orientado al sujeto paradigma heuriacutestico paradigma reflectante programacioacuten basada en reglas paradigma basado en restricciones programacioacuten basada en prototipos etc
24 iquestPOR QUEacute PYTHON
241 Caracteriacutesticas de Python
Python es un lenguaje de programacioacuten de tipo script creado por Guido van Rossum a principios de los antildeos 90 cuyo nombre proviene del grupo ldquoMonty Pythonrdquo El objetivo es un lenguaje con una sintaxis muy limpia y con un coacutedigo legible Python es un lenguaje de programacioacuten multiparadigma Esto significa que maacutes que forzar a los programadores a adoptar un estilo particular de programacioacuten permite varios estilos programacioacuten orientada a objetos programacioacuten imperativa funcional estructurada
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
10
etc Otros paradigmas estaacuten soportados mediante el uso de extensiones Los lenguajes de script (lenguajes interpretados de muy alto nivel como Perl y Python) gozan de creciente importancia e implantacioacuten en el mundo del software libre Python es un lenguaje de programacioacuten faacutecil de aprender y potente Dispone de eficaces estructuras de datos de alto nivel y una solucioacuten de programacioacuten orientada a objetos simple pero eficaz La elegante sintaxis de Python su gestioacuten de tipos dinaacutemica y su naturaleza interpretada hacen de eacutel el lenguaje ideal para guiones (scripts) y desarrollo raacutepido de aplicaciones en muchas aacutereas y en la mayoriacutea de las plataformas En Python no hay terminadores de sentencia (como el punto y como de CC++Java) ni marcas de iniciofin de bloque (como las llaves de esos mismos lenguajes) La indentacioacuten como forma de marcar bloques elimina errores propios de los lenguajes citados y que son frecuentes en los estudiantes y tambieacuten en los programadores profesionales sentencias condicionales sin accioacuten por antildeadir un punto y coma incorrectos bucles con una sola sentencia cuando parece que hay dos o maacutes (por omisioacuten de llaves con un sangrado inadecuado del programa) sentencias con semaacutentica ldquoalteradardquo por usar una coma cuando corresponde un punto y coma o por omitir un punto y coma al declarar un registro antes de una funcioacuten etc La indentacioacuten soacutelo resulta molesta cuando el tamantildeo de un bloque de cierta profundidad excede del tamantildeo de la ventana del editor Python es un lenguaje interpretado Los lenguajes interpretados permiten ciclos de desarrollo breves (edicioacuten y ejecucioacuten) que animan a los estudiantes a experimentar Python dispone de un entorno de ejecucioacuten que ayuda a detectar los errores (incluyendo aquellos que soacutelo se manifiestan en ejecucioacuten) sentildealaacutendolos con mensajes muy informativos Python ofrece ademaacutes un entorno interactivo con el que es posible efectuar pequentildeas pruebas o disentildear incrementalmente las soluciones a los problemas La contrapartida de que se trate de un lenguaje interpretado es obviamente la menor velocidad de ejecucioacuten Python puede considerarse pseudocoacutedigo ejecutable Es muy expresivo y su sintaxis sencilla interfiere poco en la implementacioacuten de algoritmos asiacute que resulta un buen sustituto del pseudocoacutedigo con la ventaja de que los algoritmos codificados en Python siacute son ejecutables Python ofrece un rico conjunto de estructuras de datos flexibles El tipo lista de python (un vector dinaacutemico heterogeacuteneo) permite introducir con naturalidad el concepto de secuencia y presentar los algoritmos baacutesicos de manejo de secuencias Que la indexacioacuten empiece siempre en 0 ayuda a dar el salto a C C++ o Java El entorno de ejecucioacuten proporciona comprobacioacuten de validez de los iacutendices eliminando asiacute una de las principales fuentes de problemas de C y C++ El hecho de que las listas sean
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
11
redimensionables elimina al programador la necesidad de tomar decisiones acerca de la longitud maacutexima de los vectores demasiado pronto Por otra parte Python es un lenguaje muy ortogonal una vez se ha aprendido a manejar listas por ejemplo se sabe manejar cadenas ya que ambos tipos son secuenciales y presentan conjuntos de operadores con igual nombre y semaacutentica Ademaacutes de listas y cadenas Python ofrece tuplas (listas inmutables) y diccionarios (vectores asociativos) Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc No es que haya que presentar todos los moacutedulos pero sirve para ayudar a consultar la documentacioacuten de las bibliotecas disponibles favorece la programacioacuten eficiente
Python es orientado a objetos A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulos en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar al de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
El inteacuterprete de Python y su extensa biblioteca estaacutendar estaacuten disponibles libremente en forma de fuentes o ejecutables para las plataformas maacutes importantes en la sede web de Python httppythonorg y se pueden distribuir libremente La misma sede contiene tambieacuten distribuciones y direcciones de muchos moacutedulos programas y herramientas Python de terceras partes ademaacutes de documentacioacuten adicional Es faacutecil ampliar el inteacuterprete de Python con nuevas funciones y tipos de datos implementados en C o C++ (u otros lenguajes a los que se pueda acceder desde C) Python es tambieacuten adecuado como lenguaje de extensioacuten para aplicaciones adaptables al usuario Algunas de las empresas que usan Python son Google Yahoo Industrial Light amp Magic Walt Disney NASA SGI Inc
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
12
3 INSTRUMENTACIOacuteN Y SOFTWARE EMPLEADOS PHYTON
31 INTRODUCCIOacuteN A PYTHON Como se comentoacute en el punto anterior Python
es orientado a objetos (realmente es multiparadigma aceptando distintos tipos de paradigmas) A diferencia de Java Python permite una programacioacuten puramente procedimental La orientacioacuten a objetos aunque perfectamente soportada es opcional (a menos naturalmente que se recurra a ciertos moacutedulo en los que se definen clases) El soporte a la programacioacuten orientada a objetos es similar a l de lenguajes como Samlltalk la resolucioacuten de los nombres de meacutetodo y atributos es dinaacutemica
Python ofrece una ampliacutesima coleccioacuten de moacutedulos (bibliotecas) Hay moacutedulos para cualquier actividad imaginable escritura de CGI gestioacuten de correo electroacutenico desarrollo de interfaces graacuteficas de usuario anaacutelisis de documentos HTML o XML acceso a bases de datos trabajo con expresiones regulares etc
Entre estas bibliotecas cabe mencionar Numpy Numpy es un moacutedulo de Python escrito en C que define los vectores numeacutericos las matrices y las operaciones entre ellos Ademaacutes de las funciones sobre vectores y matrices tambieacuten incluye funciones trigonomeacutetricas del tipo sin cos tan etc Numpy es el paquete fundamental necesario para programacioacuten cientiacutefica con Python Contiene entre otras cosa
Un poderoso N-dimensional objeto vector Sofisticadas funciones Herramientas para integracioacuten con coacutedigo de C C++ y Fortram Uacutetiles de algebra lineal Transformada de Fourier y capacidades de
nuacutemeros aleatorios Ademaacutes de sus usos cientiacuteficos obvios NumPy tambieacuten se puede utilizar como un eficiente multi-dimensional contenedor de datos geneacutericos Pueden ser definidos tipos arbitrarios de datos Esto permite integrar a la perfeccioacuten y raacutepidamente con una amplia variedad de bases de datos El objeto principal de Numpy es el vector homogeacuteneo multidimensional Eacuteste es una tabla de elementos (generalmente nuacutemeros) todos del mismo tipo indexados por una tupla de enteros positivos Por ldquomultidimensionalrdquo entendemos que los vectores pueden tener varias dimensiones de ejes El nuacutemero de ejes se llamaraacuten a menudo ldquorangordquo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
13
Por ejemplo las coordenadas de un punto en el espacio 3D seriacutea [1 2 1] que
representariacutea un vector de rango 1 de longitud 3 Otro ejemplo seriacutea
[[ 1 0 0]
[ 0 1 2]]
que representa un array de rango 2 (2 dimensiones) Para maacutes informacioacuten mirar
Numpy Glossary
Otras libreriacuteas importantes en Python son Scipy es otra libreriacutea que usa Numpy El desarrollo de Scipy comenzoacute en el antildeo 2001 Sus oriacutegenes se remontan al paquete con extensiones numeacutericas para Python denominado Numeric Posteriormente aparecioacute Numarray con la intencioacuten de construir un paquete maacutes flexible y de limpiar el coacutedigo aunque resultoacute ser maacutes lengo para caacutelculos matriciales en pocas dimensiones En el antildeo 2005 el principal impulsor de Scipy Travis Oliphant reunificoacute ambos en un uacutenico paquete que integrse las ventajas de ambos y se denominoacute Numpy considerado el nuacutecleo de Scipy Scipy en siacute mismo se concibe actualmente como una extensioacuten de las funcionalidades de Numpy
Scipy posee moacutedulos para optimizacioacuten de funciones integracioacuten funciones especiales resolucioacuten de ecuaciones diferenciales ordinarias y otros muchos aspectos
Puede ser usado con Linux Windows y ha sido tambieacuten compilado para Sun y Mac
Scipy es un proyecto de software libre que ha sido patrocinado por una compantildeiacutea Enthought inc
Su organizacioacuten se estructura en subpaquetes que se pueden considerar especializados en dominios cientiacuteficos determinados Podemos encontrar estos paquetes seguacuten la ayuda de scipy (v046)
stats -- Statistical Functions sparse -- Sparse matrix lib -- Python wrappers to external libraries linalg -- Linear algebra routines signal -- Signal Processing Tools misc -- Various utilities that dont have another home interpolate -- Interpolation Tools [] optimize -- Optimization Tools [] cluster -- Vector Quantization Kmeans [] fftpack -- Discrete Fourier Transform algorithms []
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
14
io -- Data input and output [] maxentropy -- Routines for fitting maximum entropy models [] integrate -- Integration routines [] liblapack -- Wrappers to LAPACK library [] special -- Special Functions [] libblas -- Wrappers to BLAS library []
Matplotlib es una libreriacutea de Python que facilita la publicacioacuten de calidad de la publicacioacuten interactiva Permite obtener graacuteficas de calidad para publicaciones Su principal submoacutedulo para dibujar es pyplot Mayavi Ipython PIL (Python Imaging Library) Pythonxy EPD (Enthought python distribution $$) hellip Este texto como Memoria de un Proyecto Final de Maacutester no pretende ser ni mucho menos un manual de Python pero siacute son necesarios unos conocimientos previos primero para comprender la filosofiacutea del programador y posteriormente saber las utilidades que podemos obtener al trabajar con Python Para ello vamos a incluir algunos detalles incluidos entro de la Guiacutea de aprendizaje de Python por Guido Van Rossum v24 creador de Python Para la realizacioacuten de este documento se ha consultado como aparece en Bibliografiacutea y Referencias en la Web numerosa documentacioacuten pero como punto de partida parece loacutegico recoger la documentacioacuten de la Guiacutea de aprendizaje del propio creador de Python Python contiene una serie de palabras clave dependientes de la versioacuten de instalacioacuten para asegurarnos de las palabras clave de la versioacuten descargada podemos introducir el siguiente coacutedigo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
15
Palabras clave de Python De la misma manera Python trae consigo ciertas funciones que vienen de serie esto es no es necesario cargarlas desde ninguacuten moacutedulo Dichas funciones dependen de la versioacuten de Python instalada En la paacutegina httpdocspythonorglibraryfunctionshtml Nos encontramos con dicha relacioacuten A modo de resumen eacutestas son (ver paacutegina siguiente)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
16
Funciones internas de Python
311 Guiacutea de aprendizaje de Python por Guido Van Rossum v24
Extractos del documento Si en alguna ocasioacuten hemos escrito un guioacuten para un inteacuterprete de oacuterdenes (o shell script) de UNIX largo puede que hayamos sentido que nos encantariacutea antildeadir una caracteriacutestica maacutes pero ya es tan lento tan grande tan complicadohellip O la caracteriacutestica involucra una llamada al sistema u otra funcioacuten accesible soacutelo desde C El problema en siacute no suele ser tan complejo como para transformar el guioacuten en un programa en C Igual el programa requiere cadenas de longitud variable u otros tipos de datos (como listas ordenadas de nombres de fichero) faacuteciles en sh pero tediosas en C o quizaacute no tengamos tanta soltura con C Otra situacioacuten Quizaacute tengas que trabajar con bibliotecas de C diversas y el ciclo normal en C de escribir-compilar-probar-recompilar es demasiado lento Necesitas desarrollar software con maacutes velocidad Posiblemente has escrito un programa al que vendriacutea bien un lenguaje de extensioacuten y no quieres disentildear un lenguaje escribir y depurar el inteacuterprete y adosarlo a la aplicacioacuten En tales casos Python puede ser el lenguaje que necesitas Python es simple pero es un lenguaje de programacioacuten real Ofrece maacutes apoyo e infraestructura para programas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
17
grandes que el inteacuterprete de oacuterdenes Por otra parte tambieacuten ofrece mucho maacutes comprobacioacuten de errores que C y al ser un lenguaje de muy alto nivel tiene incluidos tipos de datos de alto nivel como matrices flexibles y diccionarios que llevariacutean diacuteas de programacioacuten en C Dados sus tipos de datos maacutes generales se puede aplicar a un rango de problemas maacutes amplio que Awk o incluso Perl pero muchas cosas son al menos igual de faacuteciles en Python que en esos lenguajes Python te permite dividir su programa en moacutedulos reutilizables desde otros programas en Python Viene con una gran coleccioacuten de moacutedulos estaacutendar que puedes utilizar como base de tus programas (o como ejemplos para empezar a aprender Python) Tambieacuten hay moacutedulos incluidos que proporcionan ES de ficheros llamadas al sistema ldquosocketsrdquo y hasta interfaces graacuteficas con el usuario como Tk Python es un lenguaje interpretado lo que ahorra un tiempo considerable en el desarrollo del programa pues no es necesario compilar ni enlazar El inteacuterprete se puede utilizar de modo interacivo lo que facilita experimentar con caracteriacutesticas del lenguaje escribir programas desechables o probar funciones durante el desarrrollo del prgram de la base hacia arriba Tambieacuten es una calculadora muy uacutetil Python permite escribir programas muy compactos y legibles Los programas escritos en Python son normalmente mucho maacutes cortos que sus equivalentes en C o C++ por varios motivos
Los tipos de datos de alto nivel permiten expresar operaciones complejas en una sola sentencia
El agrupamiento de sentencias se realiza mediante sangrado (indentacioacuten) en lugar de beginend o llaves
No es necesario declarar los argumentos ni las variables
Python es ampliable si ya sabes programar en C es faacutecil antildeadir una nueva funcioacuten o moacutedulo al inteacuterprete para realizar operaciones criacuteticas a la maacutexima velocidad o para enlazar programas en Python con bibliotecas que soacutelo estaacuten disponibles en forma binaria (como bibliotecas de graacuteficos especiacuteficas del fabricante) Una vez enganchado puedes enlazar el inteacuterprete de Python a una aplicacioacuten escrita en C y utilizarlo como lenguaje de macros para dicha aplicacioacuten
3111 Llamar al inteacuterprete
En UNIX el inteacuterprete de Python se suele instalar como bdquousrlocalbinpython‟ en aquellas maacutequinas donde esteacute disponible En Windows se instala en el directorio bdquoArchivos de programa‟ o en cualquier otro directorio seleccionado Poner este directorio en la ruta de ejecutables hace posible arrancarlo tecleando en el inteacuterprete de oacuterdenes la orden
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
18
Python
Como la eleccioacuten del directorio donde reside el inteacuterprete es una opcioacuten de instalacioacuten es posible que se halle en otros lugares Consulta con tu guru de Python local o tu administrador de sistemas (por ejemplo bdquousrlocalpython‟ es una alternativa recuente) Teclear un caraacutecter fin de fichero (Control-D en UNIX Control-Z en DOS o Windows) en el inteacuterprete causa la salida del inteacuterprete con un estado cero Si eso no funciona se puede salir del inteacuterprete tecleando las siguientes oacuterdenes bdquoimport sys sysexit()‟ Las opciones de edicioacuten de la liacutenea de oacuterdenes no son muy destacables En UNIX es posible que quien instalara el inteacuterprete en su sistema incluyera soporte para la biblioteca de GNU bdquoreadline‟ que permite una edicioacuten de liacutenea maacutes elaborada y la recuperacioacuten de oacuterdenes anteriores El modo maacutes raacutepido de ver si hay soporte de edicioacuten de liacuteneas es teclear Control-P en cuanto aparece el inteacuterprete Si pita la edicioacuten de liacuteneas estaacute disponible Si no sale nada o sale ^P no estaacute disponible la edicioacuten de liacuteneas y soacutelo se puede utilizar la tecla de borrado para borrar el uacuteltimo caraacutecter tecleado El inteacuterprete funciona como el inteacuterprete de oacuterdenes de UNIX cuando se lo llama con la entrada estaacutendar conectada a un dispositivo tty lee y ejecuta las oacuterdenes interactivamente cuando se le da un nombre de fichero como argumento o se le da un fichero como entrada estaacutendar lee y ejecuta un guion desde ese fichero Otro modo de arrancar el inteacuterprete es bdquopython -c orden [argumento] ‟ que ejecuta las sentencias de orden de forma anaacuteloga a la opcioacuten -c de la liacutenea de oacuterdenes Como las sentencias de Python suelen contener espacios u otros caracteres que la liacutenea de oacuterdenes considera especiales lo mejor es encerrar orden entre dobles comillas por completo
Imagen de la pantalla al abrir Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
19
Hay moacutedulos de Python que son uacutetiles como programas independientes Se los puede llamar mediante ldquopython-m moacutedulo[arg] helliprdquo que ejecuta el fichero de coacutedigo fuente de module como si se hubiera dado el nombre completo en la liacutenea de oacuterdenes Cuando se leen oacuterdenes desde una tty se dice que el inteacuterprete estaacute en modo interacitov En este modo espera a la siguiente orden con el indicador principal que suele ser tras signos ldquomayorrdquo (ldquogtgtgtrdquo) Para las liacuteneas adicionales se utiliza el indicador secundario por omisioacuten tres puntos (ldquohelliprdquo)
Programar en Python puede hacerse de varias maneras seguacuten la necesidad o el gusto de cada persona Para los neoacutefitos mi recomendacioacuten es que utilicen el ambiente graacutefico interactivo llamado IDLE Esta herramienta viene incluiacuteda con el moacutedulo tkinter Ademaacutes de resaltar la sintaxis en colores permite editar archivos fuente y es maacutes amigable al inicio
El IDLE tiene dos ambientes el shell interactivo con tiacutetulo Python Shell en su ventana muestra el prompt gtgtgt y espera un comando y uno o maacutes editores que se abren con el menuacute File --gt New Window Cada editor empieza con el tiacutetulo Untitled en su ventana el cual cambia hasta que se salva a un archivo con File --gt Save As (y subsecuentemente File --gt Save) Cada editor nos permite ejecutar el coacutedigo Python que contiene
Se recomienda crear una carpeta para realizar y guardar los ejemplos Para correr idle cambiar primero a esa carpeta y entonces correr idle En MS- Windows
Cejemplosgt Cpython22idleidle
En Linux
[usuariopc ejemplos]$ idle amp La primera vez que hacemos un ejemplo hemos de intentar hacerlo paso a paso en forma interactiva en el shell tecleando cada comando Es la forma en que aprendemos maacutes que si simplemente copiamos y pegamos Una vez que tecleamos y funcionan las cosas podemos copiar del shell interactivo y pegamos a una ventana de editor y salvamos en un archivo con terminacioacuten py para que conservemos lo que hicimos para siempre
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
20
Imagen del Shell interactivo de IDLE
Acceso a nueva ventana dentro del Shell interactivo de IDLE
Nueva ventana del editor de IDLE Una vez que partiendo de una ventana vacia tenemos nuestro coacutedigo hemos de seleccionar FileSave As para guardar el archivo y tenerlo disponible
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
21
Ventana del editor de IDLE con coacutedigo preparado para guardar
Una vez que nos hemos asegurado de que tenemos el coacutedigo guardado iquestcoacutemo hacemos para ejecutar el programa La respuesta es seleccionando Run Module En caso de seleccionar Run Module antes de guardar el coacutedigo Python nos pide que lo guardemos anteshellip Al seleccionar Run Module Python iraacute interpretando liacutenea por liacutenea y mostrando los resultados a traveacutes del Inteacuterprete Si existiese alguacuten error de sintaxis se avisa del tipo de error y doacutende se produce Una vez corregido el problema se vuelve a intentar el Run Module
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
22
El tener un inteacuterprete permite ir probando partes de programas sobre las que no se estaacute seguro y ver coacutemo reaccionan para poder decidir si se incluyen o no y coacutemo se pueden adaptar Asiacute se estaacute continuamente alternando entre el inteacuterprete y el programa Maacutes informacioacuten en httpdocspythonorglibraryidlehtml
3112 Moacutedulos
Si salimos del inteacuterprete de Python y vuelves a entrar las definiciones que se hayan hecho (funciones y variables) se pierden Por ello si se quiere escribir un programa algo maacutes largo seraacute mejor que se utilice un editor de texto para preparar la entrada del inteacuterprete y ejecutarlo con ese fichero como entrada Esto se llama crear un guioacuten Seguacuten vayan creciendo los programas puede que quieras dividirlos en varios ficheros para facilitar el mantenimiento Puede que tambieacuten quieras utilizar una funcioacuten que has escrito en varios programas sin tener que copiar su definicioacuten en cada programa Para lograr esto Python tiene un modo de poner definiciones en un fichero y utilizarlas en un guioacuten o en una instancia interactiva del inteacuterprete Tal fichero se llama moacutedulo las definiciones de un moacutedulo se pueden importar a otros moacutedulos o al moacutedulo principal (la coleccioacuten de variables accesible desde un guioacuten ejecutado desde el nivel superior y en el modo de calculadora) Un moacutedulo es un fichero que contiene definiciones y sentencias de Python El nombre del fichero es el nombre del moacutedulo con el sufijo ldquopyrdquo Dentro de un moacutedulo el nombre del moacutedulo (como cadena) es accesible mediante la variable global __name__ Un moacutedulo puede contener sentencias ejecutables ademaacutes de definiciones de funciones Estas sentencias sirven para inicializar el moacutedulo Soacutelo se ejecutan la primera vez que se importa el moacutedulo en alguna parte1 Cada moacutedulo tiene su propia tabla de siacutembolos que utilizan todas las funciones definidas por el moacutedulo como tabla de siacutembolos global Por ello el autor de un moacutedulo puede utilizar variables globales dentro del moacutedulo sin preocuparse por conflictos con las variables globales de un usuario del moacutedulo Por otra parte si sabes lo que haces puedes tocar las variables globales de un moacutedulo con la misma notacioacuten utilizada para referirse a sus funciones nombreModnombreElem Los moacutedulos pueden importar otros moacutedulos Es una costumbre no obligatoria colocar todas las sentencias ldquoimportrdquo al principio del moacutedulo (o guioacuten) Los nombres del moacutedulo importado se colocan en la tabla de siacutembolos global del moacutedulo (o guioacuten) que lo importa Existe una variacioacuten de la sentencia import que importa los nombres de un moacutedulo directamente a la tabla de siacutembolos del moacutedulo que lo importa Por ejemplo
gtgtgt from fibo import fib fib2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
23
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto no introduce el nombre del moacutedulo del que se toman los elementos importados en la tabla de siacutembolos local (por lo que en el ejemplo no estaacute definido fibo) Ademaacutes existe una variacioacuten que importa todos los nombres que define un moacutedulo gtgtgt from fibo import
gtgtgt fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Esto importa todos los nombres excepto los que empiezan por un guioacuten bajo (_)
3113 El camino de buacutesqueda de moacutedulos
Cuando se importa un moacutedulo denominado fiambre el inteacuterprete busca un fichero denominado bdquofiambrepy‟ en el directorio actual y luego en la lista de directorios especificada por la variable de entorno PYTHONPATH Tiene la misma sintaxis que la variable de liacutenea de oacuterdenes PATH de UNIX que es una lista de nombres de directorios Cuando PYTHONPATH no tiene ninguacuten valor o no se encuentra el fichero se continuacutea la buacutesqueda en un camino dependiente de la instalacioacuten En UNIX normalmente es bdquousrlocallibpython‟ En realidad se buscan los moacutedulos en la lista de directorios dada por la variable syspath que se inicializa desde el directorio que contiene el guioacuten de entrada (o el directorio actual) PYTHONPATH y el valor por omisioacuten dependiente de la instalacioacuten Esto permite que los programas que saben lo que hacen modifiquen o reemplacen el camino de buacutesqueda de moacutedulos Obseacutervese que como el directorio que contiene el guioacuten bajo ejecucioacuten estaacute en el camino de buacutesqueda de moacutedulos es importante que el moacutedulo no tenga el mismo nombre que un moacutedulo estaacutendar o Python lo intentaraacute cargar el guioacuten como moacutedulo cuando se importe el moacutedulo Normalmente esto provocaraacute errores
3114 Ficheros Python ldquoCompiladosrdquo
Como mejora considerable del tiempo de arranque de programas cortos que utilizan muchos moacutedulos estaacutendar si existe un fichero llamado bdquofiambrepyc‟ en el directorio donde se encuentra bdquofiambrepy‟ se supone que contiene una versioacuten previamente ldquocompilada a byterdquo del moacutedulo fiambre La fecha y hora de la versioacuten de bdquofiambrepy‟
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
24
utilizada para generar bdquofiambrepyc‟ se graba en bdquofiambrepyc‟ y no se considera el fichero bdquopyc‟ si no concuerdan Normalmente no hay que hacer nada para generar el fichero bdquofiambrepyc‟ Siempre que bdquofiambrepy‟ se compile sin errores se hace un intento de escribir la versioacuten compilada a bdquofiambrepyc‟ No se provoca un error si falla el intento Si por cualquier motivo no se escribe completamente el fichero el fichero bdquofiambrepyc‟ resultante seraacute reconocido como no vaacutelido y posteriormente ignorado El contenido del fichero bdquofiambrepyc‟ es independiente de la plataforma por lo que se puede compartir un directorio de moacutedulos entre maacutequinas de diferentes arquitecturas
3115 Moacutedulos estandar
Python viene con una biblioteca de moacutedulos estaacutendar descrita en un documento aparte la Referencia de las bibliotecas Algunos moacutedulos son internos al inteacuterprete y proporcionan acceso a las operaciones que no son parte del nuacutecleo del lenguaje pero se han incluido por eficiencia o para proporcionar acceso a primitivas del sistema operativo como las llamadas al sistema El conjunto de dichos moacutedulos es una opcioacuten de configuracioacuten que tambieacuten depende de la plataforma subyacente Por ejemplo el moacutedulo amoeba soacutelo se proporciona en sistemas que de alguacuten modo tienen acceso a primitivas Amoeba Hay un moacutedulo en particular que merece una especial atencioacuten el moacutedulo sys que es siempre interno en cualquier inteacuterprete de Python Estas variables soacutelo estaacuten definidas si el inteacuterprete estaacute en modo interactivo La variable syspath es una lista de cadenas que determina el camino de buacutesqueda de moacutedulos del inteacuterprete Se inicializa a un valor por omisioacuten tomado de la variable de entorno PYTHONPATH o de un valor por omisioacuten interno si PYTHONPATH no tiene valor Se puede modificar mediante operaciones de lista estaacutendar por ejemplo gtgtgt import sys gtgtgt syspathappend(‟ufsguidolibpython‟)
3116 Paquetes
Los paquetes son un meacutetodo de estructurar el espacio nominal de moacutedulos de Python mediante el uso de ldquonombres de moacutedulos con puntordquo Por ejemplo el nombre de moacutedulo AB hace referencia a un submoacutedulo denominado ldquoBrdquo de un paquete denominado ldquoArdquo Del mismo modo que el uso de moacutedulos evita que los autores de diferentes moacutedulos tengan que preocuparse de los nombres de variables globales de los otros la utilizacioacuten de nombres de moacutedulo con puntos evita que los autores de paquetes multi-moacutedulo como Numpy o Pil (Biblioteca de tratamiento de imagen de
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
25
python) tengan que preocuparse de los nombres de los moacutedulos ajenos Supoacuten que deseas disentildear una coleccioacuten de moacutedulos (un paquete) para tratar de manera uniforme ficheros de sonido y datos de sonido Existen muchos formatos de fichero de sonido (que se suelen distinguir por la extensioacuten como bdquowav‟ bdquoaiff‟ o bdquoau‟) por lo que podriacuteas necesitar crear y mantener una coleccioacuten creciente de moacutedulos de conversioacuten entre los diferentes formatos Tambieacuten existen muchas operaciones posibles sobre los datos de sonido (tales como mezclar antildeadir eco ecualizar o generar un efecto artificial de estereofoniacutea) por lo que ademaacutes estariacuteas escribiendo una serie de moacutedulos interminable para realizar estas operaciones He aquiacute una posible estructura de tu paquete (expresado en teacuterminos de sistema de ficheros jeraacuterquico)
Sonido Paquete de nivel superior __init__py Inicializa el paquete de sonido
Formatos Subpaquete de conversiones de formato de ficheros __init__py leerwavpy escriwavpy leeraiffpy escriaiffpy leeraupy escriaupy Efectos Subpaquete de efectos de sonido __init__py ecopy surroundpy inversopy Filtros Subpaquete de filtros __init__py ecualizadorpy vocoderpy karaokepy
Modelo de estructura paquetemoacutedulo Al importar el paquete Python rastrea los directorios de syspath buscando por el subdirectorio de paquetes Los ficheros bdquo__init__py‟ son necesarios para que Python trate los directorios como contenedores de paquetes Se hace asiacute para evitar que los directorios con nombres
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
26
comunes como bdquotest‟ oculten accidentalmente moacutedulos vaacutelidos que aparezcan maacutes tarde dentro del camino de buacutesqueda En el caso maacutes sencillo bdquo__init__py‟ puede ser un fichero vaciacuteo pero tambieacuten puede ejecutar coacutedigo de inicializacioacuten del paquete o actualizar la variable __all__ descrita posteriormente Los usuarios del paquete pueden importar moacutedulos individuales del paquete por ejemplo import SonidoEfectoseco
De este modo se carga el submoacutedulo SonidoEfectoseco Hay que hacer referencia a eacutel por su nombre completo SonidoEfectosecofiltroeco(entrada salida retardo=07
aten=4)
Un modo alternativo de importar el submoacutedulo es from SonidoEfectos import eco
Asiacute tambieacuten se carga el submoacutedulo eco y se hace disponible sin su prefijo de paquete por lo que se puede utilizar del siguiente modo ecofiltroeco(entrada salida retardo=07 aten=4)
Y otra variacioacuten es importar la funcioacuten o variable deseada directamente from SonidoEfectoseco import filtroeco
De nuevo se carga el submoacutedulo eco pero se hace la funcioacuten filtroeco disponible directamente filtroeco(entrada salida retardo=07 aten=4)
Observa que al utilizar from paquete import elemento el elemento puede ser tanto un submoacutedulo (o subpaquete) del paquete como cualquier otro nombre definido por el paquete como una funcioacuten clase o variable La sentencia import comprueba primero si el elemento estaacute definido en el paquete Si no asume que es un moacutedulo e intenta cargarlo Si no lo consigue se provoca una excepcioacuten ImportError Sin embargo cuando se utiliza la sintaxis
importelementosubelementosubsubelemento cada elemento menos el
uacuteltimo debe ser un paquete El uacuteltimo elemento puede ser un moacutedulo o un paquete
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
27
pero no una clase funcioacuten o variable definida en el nivel superior
3117 Importar de un paquete
Y iquestqueacute ocurre cuando el usuario escribe from SonidoEfectos import En teoriacutea deberiacutea rastrearse el sistema para encontrar queacute submoacutedulos existen en el paquete e importarlos todos Por desgracia esta operacioacuten no funciona muy bien en las plataformas Windows y Mac en las que el sistema de ficheros no tiene una idea muy precisa de las mayuacutesculas de un fichero En estas plataformas no hay un modo garantizado de conocer si un fichero bdquoECOPY‟ deberiacutea ser importado como eco Eco o ECO (por ejemplo Windows 95 tiene la molesta costumbre de mostrar todos los nombres de fichero con la primera letra en mayuacutescula) La restriccioacuten de nombres de fichero DOS (8+3) antildeade otro problema para los nombres de moacutedulo largos La uacutenica solucioacuten es que el autor del paquete proporcione un iacutendice expliacutecito del paquete La sentencia import utiliza la siguiente convencioacuten Si el coacutedigo del bdquo__init__py‟ de un paquete define una lista llamada __all__ se considera que es la lista de nombres de moacutedulos que se deben importar cuando se encuentre from paquete import Depende del autor del paquete mantener la lista actualizada cuando se libere una nueva versioacuten del paquete Los autores del paquete pueden decidir no mantenerlo si no es uacutetil importar del paquete Por ejemplo el fichero bdquoSonidoEfectos__init__py‟ podriacutea contener el siguiente coacutedigo __all__ = [eco surround inverso] Esto significariacutea que from SonidoEfectos import importariacutea los tres submoacutedulos mencionados del paquete Sonido Si __all__ no estaacute definido la sentencia from SonidoEfectos import no importa todos los moacutedulos del subpaquete SonidoEfectos al espacio nominal actual Soacutelo se asegura de que el paquete SonidoEfectos ha sido importado (ejecutando posiblemente el coacutedigo de inicializacioacuten de bdquo__init__py‟) y luego importa cualesquiera nombres definidos en el paquete Esto incluye cualquier nombre definido (y submoacutedulos cargados expliacutecitamente) por bdquo__init__py‟ Tambieacuten incluye cualquier submoacutedulo del paquete expliacutecitamente importado por sentencias import anteriores Mira este coacutedigo import SonidoEfectoseco import SonidoEfectossurround from SonidoEfectos import En este ejemplo los moacutedulos eco y surround se importan al espacio nominal vigente porque estaacuten definidos en el paquete SonidoEfectos cuando se ejecuta la sentencia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
28
fromimport (esto tambieacuten funciona si estaacute definido __all__)
Observa que en general se debe evitar importar de un moacutedulo o paquete ya que suele dar como resultado coacutedigo poco legible Sin embargo se puede usar para evitar teclear en exceso en sesiones interactivas y cuando ciertos moacutedulos esteacuten disentildeados para exportar soacutelo nombres que cumplan ciertas reglas
Recuerda no hay nada incorrecto en utilizar from Paquete import
submoacutedulo_concreto De hecho es la notacioacuten recomendada salvo que el moacutedulo
que importa necesite usar submoacutedulos del mismo nombre de diferentes paquetes
3118 Referencias internas al paquete
Es comuacuten que los submoacutedulos necesiten hacerse referencias cruzadas Por ejemplo el moacutedulo surround podriacutea utilizar el moacutedulo eco De hecho tales referencias son tan comunes que la sentencia import busca antes en el paquete contenedor que en el camino de buacutesqueda de moacutedulos estaacutendar Por ello basta con que el moacutedulo surround use import eco o from eco import filtroeco Si el moacutedulo importado no se encuentra en el paquete actual (el paquete del que el moacutedulo actual es submoacutedulo) la sentencia import busca un moacutedulo de nivel superior con el nombre dado Cuando se estructuran los paquetes en subpaquetes (como el paquete Sonido del ejemplo) no hay un atajo para referirse a los submoacutedulos de los paquetes hermanos y se ha de utilizar el nombre completo del subpaquete Por ejemplo si el moacutedulo SonidoFiltrosvocoder necesita utilizar el moacutedulo eco del paquete SonidoEfectos debe utilizar from SonidoEfectos import eco
32 FUNCIONES INCLUIDAS EN NUMPY POR CATEGORIacuteAS (ARRAY CREATION)
A modo indicativo e introductorio se incluyen las funciones incluidas en la libreriacutea Numpy por categoriacuteas Ver maacutes informacioacuten en httpdocsscipyorgdocnumpy Numerical
arange() arrayrange()
linspace() logspace()
Ones and zeros
empty() empty_like()
eye() identity()
ones() ones_like()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
29
tri() tril() triu()
zeros() zeros_like()
From existing data
array() recarray()
asarray() asanyarray() asmatrix()
copy()
fromarrays() frombuffer() fromfile() fromfunction()
fromiter() loadtxt()
Building matrices
bmat()
diag() diagflat()
mat() matrix()
vander()
Reinterpreting arrays
view()
Types
astype()
cast[]()
int8() int16() int32() int64() int128()
uint8() uint16() uint32() uint64() uint128()
float16() float32() float64() float96() float128()
float256()
complex32() complex64() complex128() complex192()
complex256() complex512()
bool_()
object_()
void() str_() unicode_()
byte() ubyte()
short() ushort()
intc() uintc()
intp() uintp()
int_() uint()
longlong() ulonglong()
single() csingle()
float_() complex_()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
30
longfloat() clongfloat()
Kinds of array
asarray()
asanyarray()
asmatrix()
Changing the number of dimensions
atleast_1d() atleast_2d() atleast_3d()
broadcast()
expand_dims()
squeeze()
Transpose-like operations
rollaxis()
swapaxes()
T transpose()
Reshaping arrays
flat flatten()
ravel()
reshape() shape
Array modification
Joining arrays
append()
column_stack()
concatenate()
dstack() hstack() vstack()
Splitting arrays
array_split()
dsplit() hsplit() split() vsplit()
Enlarging arrays
tile()
repeat()
Adding and removing elements
delete()
insert()
resize()
trim_zeros()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
31
unique()
Rearranging elements
fliplr() flipud()
reshape()
roll()
rot90()
Indexing
[]
take()
put()
putmask()
Indexing syntax
slice()
newaxis
index_exp[]
Generating arrays suitable for indexing
c_[]
r_[]
s_[]
nonzero()
where()
indices()
ix_()
mgrid[]
ogrid()
Indexing-like operations
choose()
where()
compress()
diag() diagonal()
select()
Iterating
flat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
32
ndenumerate()
ndindex()
Logic
[]
all() any()
allclose()
alltrue()
nonzero()
piecewise()
sometrue()
Finding things
argmax() argmin()
searchsorted()
Array statistics
average() mean()
bincount() histogram()
corrcoef()
cov()
max() min() ptp()
median()
std() var()
ufuncs
abs() absolute()
add() multiply()
angle()
arccos() arcsin() arctan()
arccosh() arcsinh() arctanh()
arctan2()
bitwise_and() bitwise_or() bitwise_xor()
ceil() floor() round()
conj() conjugate()
cos() sin() tan()
cosh() sinh() tanh()
fix()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
33
hypot()
logical_and() logical_not() logical_or() logical_xor()
maximum() minimum()
ufunc methods
accumulate()
outer()
reduce()
Functional constructs
apply_along_axis()
apply_over_axis()
vectorize()
Random numbers
beta() binomial() gumbel() poisson() standard_normal()
uniform() vonmises() weibull()
bytes()
permutation()
rand() randint() randn()
random_integers()
random_sample()
ranf()
sample()
seed()
shuffle()
Array math
clip()
cross()
cumprod() cumsum()
diff()
digitize()
dot()
inner()
outer()
inv() pinv()
poly1d()
polyfit()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
34
prod() sum()
tensordot()
vdot()
FFT
fft()
fftfreq()
fftshift()
ifft()
Linear algebra
inv()
lstsq()
solve()
svd()
trace()
Array output
savetxt()
set_printoptions()
tofile()
tolist()
Other
sort() argsort()
binary_repr()
dtype()
fill()
finfo()
generic
imag real
inf nan
item()
lexsort()
ndim
shape
typeDict()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
35
Numpy Functions by Category (uacuteltima edicioacuten 2008-06-13 122659
efectuada por jh)
MoinMoin Powered
Pyt
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
36
4 METODOLOGIacuteA En este apartado se proporciona una descripcioacuten detallada de la metodologiacutea utilizada para el desarrollo e implementacioacuten de la biblioteca Utilizando un paradigma Estructurado de la programacioacuten que considera que la programacioacuten se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre siacute Esto nos permite reutilizar coacutedigo programado y nos proporciona una mejor comprensioacuten de la programacioacuten En el uacuteltimo paquete de la libreriacutea tambieacuten se ha realizado una incursioacuten a la programacioacuten orientada a objetos con la declaracioacuten de algunas clases
41 ESTRUCTURA DE LA LIBRERIacuteA GEOTOPO En nuestro caso hemos partido del concepto de creacioacuten de una libreriacutea de funciones del aacutembito de la Topografiacutea y Geodesia Esta libreriacutea de Python se estructura como un paquete con el nombre de la libreriacutea ldquogeotopordquo que a su vez contiene 6 paquetes maacutes seguacuten tipologiacutea Asiacute tenemos
Imagen de los paquetes incluidos dentro del paquete (libreriacutea) geotopo
Por orden intuitivo desde el punto de vista de aplicacioacuten de las herramientas tenemos los siguientes paquetes
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
37
general que contiene funciones de tipo general y transversal al resto de herramientas
Moacutedulos implementados dentro de general
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
38
topografia que contiene aplicacioacuten topograacuteficas
Moacutedulos implementados dentro de topografia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
39
geodesia Aplicaciones geodeacutesicas
Moacutedulos implementados dentro de geodesia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
40
proy_cartograficas Herramientas de caacutelculos en diferentes proyeccionesetc
Moacutedulos implementados dentro de proy_cartograficas
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
41
transformacioacuten Aplicaciones con modelo de rejilla del IGN y EGM08REDNAP
Moacutedulos implementados dentro de transformacioacuten
aplicaciones Distintos ejemplos de aplicabilidad de las funciones y clases implementadas en los moacutedulos de la libreriacutea
Cada uno de estos paquetes (carpetas) como se ha podido ver contiene a su vez varios moacutedulos y en cada uno de ellos y con su mismo nombre se define una uacutenica funcioacuten por moacutedulo salvo en la carpeta de transformcioacuten donde como se ha comentado antes nos adentramos dentro de la programacioacuten orientada a objetos y en algunos moacutedulos se implementan clases y dentro de estas funciones etc De esta manera al importar una funcioacuten la tenemos que importar desde el modulo que la contenga Dentro de cada carpeta se aprecia la existencia de un fichero llamado __init__py que convierte dicha carpeta en un paquete de Python Se advierte que desde el cierre de esta memoria versioacuten en papel a la entrega total de documentacioacuten puede haberse ampliado el nuacutemero de moacutedulos de la libreriacutea ldquogeotoprdquo que siacute se incluiriacutea en el CD con la implementacioacuten de coacutedigos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
42
42 DOCUMENTADO DE FUNCIONES Se puede documentar una funcioacuten en Python proporcionando una cadena de documentacioacuten (comentarios)
Las comillas triples implican una cadena multiliacutenea Todo lo que haya entre el principio y el final de las comillas es parte de una sola cadena incluyendo los retornos de carro y otras comillas Pueden usarse para definir cualquier cadena pero donde suelen estar maacutes presentes es haciendo de cadena de documentacioacuten Todo lo que hay entre las comillas triples es la cadena de documentacioacuten de la funcioacuten y se usa para explicar lo que hace la funcioacuten En caso de que exista una cadena de documentacioacuten debe ser la primera cosa definida en una funcioacuten (esto es lo primero tras los dos puntos) Teacutecnicamente no es necesario dotar a una funcioacuten de una cadena de documentacioacuten pero debemos de hacerlo siempre En Python esto tiene un incentivo antildeadido la cadena de documentacioacuten estaacute disponible en tiempo de ejecucioacuten como atributo de la funcioacuten
Lecturas complementarias sobre las funciones de documentacioacuten
PEP 257 define las convenciones al respecto de las cadenas de documentacioacuten La Guiacutea de estilo de Python indica la manera de escribir una buena cadena de
documentacioacuten El Tutorial de Python expone convenciones para el espaciado dentro de las
cadenas de documentacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
43
Ejemplo de documentado de funciones con cadena de documentacioacuten
Toda la informacioacuten incluida dentro de una cadena de documentacioacuten de triple comillas estaacute accesible en tiempo de ejecucioacuten Asiacute si pedimos ayuda de una funcioacuten nos aparece toda la informacioacuten incluida en dicha cadena de documentacioacuten
Ejemplo de consulta de la ayuda de las funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
44
En la siguiente web podemos encontrar maacutes informacioacuten sobre el documentado de funciones en Python httpcoderwarcom201106hola-python-la-utilidad-de-los-comentarios Ademaacutes de los comentarios de las funciones en Python como en otros lenguajes de programacioacuten podemos incluir liacuteneas o simples palabras de comentarios En Python se usa el siacutembolo para preceder los comentarios Podemos comentar las liacuteneas de nuestro trabajo
Comentar un grupo de liacuteneas
Determinar el tipo de codificacioacuten Esto es importante para poder usar caracteres especiales como la tilde o la ntilde Generalmente se coloca en la primera liacutenea del programa Existen muchas codificaciones
Poner cabecera a nuestro programa De esta forma identificaremos el nombre del programador la fecha en que se realizoacute y demaacutes datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
45
En el caso que nos atantildee de la libreriacutea geotopo hemos considerado introducir unos comentarios descriptivos de los moacutedulos mediante el caraacutecter y tras la definicioacuten de las funciones se incluyen unas cadenas de documentacioacuten
Ejemplo de la documentacioacuten de moacutedulos y funcioneshellip
Para evitar problemas de codificacioacuten como ha ocurrido durante la implementacioacuten del coacutedigo se han incluido al inicio del mismo dos liacuteneas para solucionar el problema Estas liacuteneas son
Comentarios de los moacutedulos
Cadena de documentacioacuten de funciones
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
46
-- coding iso 8859-1 -
ISO 8859-1 es una norma de la ISO que define la codificacioacuten del alfabeto latino incluyendo diacriacuteticos como letras aceacutentuadas ntilde) y letras especiales necesarios para la escritura de las siguientes lenguas originarias de Europa occidental alemaacuten aragoneacutes asturiano castellano catalaacuten daneacutes escoceacutes espantildeol feroeacutes fineacutes franceacutes gaeacutelico gallego ingleacutes islandeacutes italiano neerlandeacutes noruego portugueacutes sueco y Euskera Tambieacuten conocida como Alfabeto Latino nordm 1 o ISO Latiacuten 1 Esta norma pertenece al grupo de juegos de caracteres de la ISO conocidos como ISOIEC 8859 que se caracterizan por poseer la codificacioacuten ASCII en su rango inicial (128 caracteres) y otros 128 caracteres para cada codificacioacuten con lo que en total utilizan 8 bits -- coding cp1252 -
Si trabajamos con IDLE con el uso de los acentos (en general con los caracteres no ASCII) nos daraacute error Si en el coacutedigo de un programa escribimos una cadena que contenga caracteres no ASCII(acentos ntildeiquestiexcl) al guardar el archivo por primera vez IDLE nos muestra el siguiente mensaje de aviso
Si pulsamos el botoacuten ldquoEdit my filerdquo Al principio del programa se insertaraacute la liacutenea siguiente
-- coding cp1252 --
Que indica el juego de caracteres utilizado en el archivo (cp1252 es el juego de caracteres de Windows para Europa occidental) A partir de entonces podemos guardar el archivo sin problemas Python no tiene una primera o uacuteltima linea exigida pero siacute que es habitual dar la localizacioacuten de Python como primera liacutenea en forma de comentario usrbinpython
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
47
43 FUNCIONES IMPLEMENTADAS A continuacioacuten se incluye una relacioacuten de las funciones implementadas por paquetes Ademaacutes de su nombre y un pequentildeo resumen de su aplicacioacuten se han incluido 3 apartados maacutes En verde Datos de entrada Indica los datos que necesita la funcioacuten Datos de salida Nos muestra si el resultado es uacutenico o una coleccioacuten de resultados (siempre en forma vector en el orden indicado) En rojo Llamadas o ldquoimportacioacutenrdquo de moacutedulos predefinidos del sistema ossys Llamadas a funciones de predefinidas del moacutedulo numpy En morado Llamadas a funciones definidas en esta libreriacutea (geotopo) bien incluidas en el mismo subpaquete que la propia funcioacuten definida o incluida en otro subpaquete De esta manera podemos tener una idea de las funciones implementadas los datos de partida necesarios y los resultados a obtener asiacute como la interrelacioacuten de cada funcioacuten con el resto de funciones de la libreriacutea geotopo Para el caso de cambio de proyeccioacuten o de Sistema de Referencia Coordenado se ha tomado la nomenclatura ldquodesderdquo ldquoardquo ldquoahorardquo Para sentildealar el ldquoardquo se ha elegido el nuacutemero 2 por su pronunciacioacuten to (a) Asiacute por ejemplo para el paso de latitud geodeacutesica a creciente en nombre de la funcioacuten seraacute lat2cre
431 Libreriacutea en Python ldquogeotopogeneralrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 areacor - Caacutelculo de la superficie interior de un poligono sobre el plano
entrada=(matriz) 2columnas xy salida=superficie
import ossys from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
48
busca2col - Localiza la primera fila con los valores recibidos en las dos columnas indicadas
Recibe Valor en la primera y segunda columnas posiciones de las columnas y matriz de busqueda
Devuelve Primera fila que cumple comenzando en 0 entrada=(valorcol1poscol1valorcol2poscol2matriz)
salida=orden de la primera fila que cumple comenzando en 0(oacute -1 si no existe) import ossys
from numpy import shape
busca - Localiza la primera ocurrencia de un nuacutemero en la primera columna de una matriz
entrada=(valormatriz)
salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscacol - Localiza la primera ocurrencia de un nuacutemero en la fila indicada de una matriz
entrada=(valormatriznfil) salida=posicioacuten nuacutemero de columna comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
buscafil - Localiza la primera ocurrencia de un nuacutemero en la columna indicada de una matriz
entrada=(valormatrizncol) salida=posicioacuten nuacutemero de fila comenzando en 0 (oacute -1 si no existe)
import ossys from numpy import shape
ordena - Ordena las filas de una matriz de menor a mayor seguacuten el contenido de la columna indicada
entrada=(colummatriz) salida=matriz de entrada ordenada
import ossys
from numpy import shape
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
49
p_entera - Da la parte entera de un nuacutemero entrada=(nuacutemero) salida=parte entera del nuacutemero
import ossys from numpy import floor
perimetro - Calculo del perimetro de un poliacutegono sobre el plano a partir de las coord de sus veacutertices
entrada=(matriz ) 2columnas xy salida=periacutemetro
import ossys
from numpy import sqrtshape
psdo2rad - Cambio de formato de aacutengulos Pasa del conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex ) a radianes
entrada=(pseudesexa)
salida=radianes
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
rad2psdo - Cambio de formato de aacutengulos Pasa un angulo de radianes al conocido como formato pseudo decimal sexagesimal ( ej 4024305678 son 40 g 24 m 305678 seg sex )
entrada=( radianes) salida= pseudesexa
import ossys from numpy import pi
from geotopogeneralp_entera import p_entera
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
50
432 Libreriacutea en Python ldquogeotopotopografiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Version 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 acimut - Caacutelculo del acimut entre dos puntos
entrada=(xiyixjyj)
salida=acimut en radianes
import ossys from numpy import arctan2pi
distancia ndash Caacutelculo de la distancia entre dos puntos del mismo
entrada=(xiyixjyj) salida=distancia (misma unidad que coordenadas de entrada
import ossys
from numpy import sqrt
edgcla ndash Caacutelculo del error de una distancia geomeacutetrica utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dgInstrnialtnl)
Dg=distancia geometrica Instr=Matriz de instrumentos
Ni=Altura de instrumento Altp=Altura de prisma
Nl=Nuacutemero de veces de medida de distancia
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edgclaprn ndash Calculo del error de una distancia geometrica utilizando la formulacion claacutesica de teoriacutea de errores Impresioacuten de resultados
entrada=(dgInstrnialtnlfsalida)
dg=distancia geometrica instr=Matriz de instrumentos
ni=Altura de instrumento altp=Altura de prisma
nl=Nuacutemero de veces de medida de distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
51
fsalida=Fichero de salidade datos
salida=error de distancia en metros import ossys
from numpy import sqrtpi
edireh ndash Caacutelculo del error de la lectura horizontal realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(Instrnidisaltpnl)
salida=error de lectura horizontal en radianes
import ossys from numpy import sqrtpi
edirev ndash Caacutelculo del error de la lectura vertical realizada con un teodolito utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(instrni nl) salida=error de lectura cenital en radianes en radianes
import ossys from numpy import sqrtpi
eincz ndash Caacutelculo del error de un desnivel trigonomeacutetrico utilizando la formulacioacuten claacutesica de teoriacutea de errores
entrada=(dglvapedgelvInstrni) salida=xpypeplanisolzesolz
import ossys
from numpy import pisqrtcostan
intinv2 ndash Caacutelculo de la interseccioacuten inversa simple en el plano
entrada=(datosinstru)
salida= xpypangmin import ossys
from numpy import sincostanarctan2pizeros
from geotopogeneralordena import ordena
intinv2e ndash Caacutelculo de la interseccioacuten inversa simple en el plano Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru) salida= xpypeplani
import ossys from numpy import shapepisincostanarctan2dottransposezerossqrt
from geotopotopografiaedireh import edireh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
52
intinv3e ndash Caacutelculo de la interseccioacuten inversa 3D simple Realiza tambieacuten la previsioacuten de error de la posicioacuten calculada a partir de las caracteriacutesticas del instrumental etc
entrada=(datosinstru)
salida= xpypeplanivzpvezp
import ossys from numpy import zerosshapesincos
from geotopotopografiaintinv2e import intinv2e from geotopotopografiadistancia import distancia
from geotopotopografiaedirev import edirev
from geotopotopografiaedgcla import edgcla from geotopotopografiaeincz import eincz
433 Libreriacutea en Python ldquogeotopogeodesiardquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 aut2lat - paso de latitud autaacutelica a geodeacutesica
entrada=(autnelipsoide) salida=lat
import ossys from numpy import sinarcsin
from geotopogeneralpsdo2rad import psdo2rad from geotopogeneralpsdo2rad import psdo2rad
calcpolo - caacutelculo del polo de la esfera a partir de tres puntos no alineados de la misma de forma que pasen a estar en un mismo paralelo tras realizarse el cambio de polo
entrada(lat1lon1lat2lon2lat3lon3) salida=[latnplonnpcolat]
import ossys from numpy import pisincosarccosarctanarctan2zeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
53
cla2enu - paso de un vector geodeacutesico expresado en componentes polares (observables claacutesicos) a componentes ENU entrada(azvdg)
salida=[ieiniu]
import ossys from numpy import sincoszeros
clhapv - lectura horizontal corregida por altitud del punto visado entrada=(lhzazlat1lat2h2nelipsoide) salida=lhz12c
import ossys
from numpy import sincospi from elipsoide import elipsoide
from radioem import radioem
clhsnlg - lectura horizontal corregida por paso de la seccioacuten normal a la liacutenea geodeacutesica entrada=(lhzs12az12lat1lat2nelipsoide)
salida=lhz12c import ossys
from numpy import sincospi
from elipsoide import elipsoide from radioem import radioem
cre2lat - paso de latitud creciente a geodeacutesica entrada=(crenelipsoide) salida=lat
import ossys
from numpy import sincostanarctanexppi from geotopogeneralpsdo2rad import psdo2rad
from elipsoide import elipsoide
efleutm - paso de la elipse de error de un punto del plano tangente al elipsoide al plano de la proyeccioacuten UTM
entrada=(latlonsemiaesemibeaziaenelipsoidehuso) salida=[semiasimibazia] import ossys from numpy import zerospi from geotopoproy_cartograficaskputm import kputm from geotopoproy_cartograficaskputmh import kputmh from geotopoproy_cartograficasconvutm import convutm from geotopoproy_cartograficasconvutmh import convutmh
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
54
elip2esf - determinacioacuten de la esfera tangente al elipsoide en un paralelo indicado entrada=(nelipsoidelat)
salida=[afbe1e2]esfera
import ossys from numpy import zeros
from elipsoide import elipsoide from radiopv import radiopv
elipsoide - calculo los 5 paraacutemetros (afbe1 y 22) de los elipsoides ED50 GRS80 y WGS84 en funcioacuten de un coacutedigo 123 respectivamente entrada=(nelipsoide) 1 2 oacute 3 seguacuten ED50GRS80 oacute WGS84 respectivamente salida=[afbe1e2]
import ossys from numpy import sqrt zeros
enu2cla - paso de un vector geodeacutesico expresado en componentes ENU a componentes polares (observables claacutesicos) entrada=ieiniu salida=[azdgv]
import ossys
from numpy import zerosarcsenarctan2pisqrt
enu2xyz - paso de un vector geodeacutesico expresado en componentes ENU a componentes cartesianas tridimensionales entrada=(latlonieiniu)
salida=[ixiyiz] import ossys
from numpy import sincoszeros
eta_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del primer vertical entrada=(latlon)
salida= eta_ed50
import ossys from numpy import pisqrtcossintan
from elipsoide import elipsoide from radiopv import radiopv
from radioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
55
geo2tri - paso de coordenadas geodeacutesicas a cartesianas tridimensionales para un punto y elipsoide determinados entrada=(latlonhnelipsoide
salida=[XYZ]
import ossys from numpy import cossinzeros
from elipsoide import elipsoide from radiopv import radiopv
lam2lat - caacutelculo de la latitud geodeacutesica que le corresponde a una determinada longitud de arco de meridiano en el elipsoide indicado entrada=(lamnelipsoide salida=lat
import ossys from numpy import cossin
from elipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
lam - caacutelculo de la longitud de arco de meridiano a partir de la latitud geodeacutesica y del elipsoide entrada=(lamnelipsoide
salida=lam import ossys
from numpy import sin cos from elipsoide import elipsoide
lat2aut - paso de latitud geodeacutesica a autaacutelica entrada=(latnelipsoide)
salida=aut import ossys
from numpy import sinlog from elipsoide import elipsoide
lat2cre - paso de latitud geodeacutesica a creciente entrada=(latnelipsoide)
salide=cre import ossys
from numpy import sintanpilog
ond_ed50 - caacutelculo de la ondulacioacuten del geoide de un punto en Ed50 entrada =(latlon) salida=ondulacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
56
import ossys
from numpy import pisqrtcossintan
pdesfcr - problema directo en la esfera con el meacutetodo de cambio de base entrada=(lat1lon1saziresfera) salida=[latlon]
import ossys from numpy import cossintanarcsinarcosarctan2pizerostransposedot
pdg_dif1 - problema directo de la geodesia con la primera derivada entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2azi21] import ossys
from numpy import zerossincostanpi from radiopv import radiopv
from radioem import radioem
pdg_dif2 - problema directo de la geodesia con la primera y segunda derivada entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdg_dif3 - problema directo de la geodesia con la primera segunda y tercera derivada
entrada=(lat1lon1sa12nelipsoide) salida=[lat2lon2azi21]
import ossys from numpy import zerossincostanpi
from radiopv import radiopv
from radioem import radioem from elipsoide import elipsoide
pdgrk4o - problema directo de la geodesia seguacuten meacutetodo de integracioacuten numeacuterica de Runge-Kutta de cuarto orden entrada=(lat1lon1sa12nelipsoide)
salida=[lat2lon2
import ossys from numpy import zerossincostanpisqrt
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
57
from radioem import radioem
piesfcr - problema inverso en la esfera con el meacutetodo de cambio de base entrada=( lat1lon1lat2lon2resfera)
salida=[s12a12] import ossys
from numpy import cossintanarcsenarccosarctan2dotzerospi
pigbsl - problema inverso de la geodesia seguacuten el meacutetodo de Bessel entrada=( lat1lon1lat2lon2nelipsoide)
salida=[ s12a12a21]
import ossys from numpy import zerossincostanarcsinarctanarctan2arccossqrtpi
pigbslm - problema inverso de la geodesia seguacuten el meacutetodo de Bessel modificado por D David Henaacutendez Loacutepez
entrada=( lat1lon1lat2lon2nelipsoide) salida=[ s12a12a21]
import ossys from numpy import cossintanarcsinarcosarctanarctan2zerossqrtpi
from elipsoide import elipsoide
from radiopv import radiopv from piesfcr import piesfcr
from pdesfcr import pdesfcr
piloxo - problema inverso para la curva loxodroacutemica entrada=(lat1lon1lat2lon2nelipsoide)
salida=[dla12]
import ossys from numpy import arctan2coszerospi
from elipsoide import elipsoide from lat2cre import lat2cre
from radiopv import radiopv
from lam import lam
psi_ed50 - componente de la desviacioacuten relativa de la vertical en Ed50 seguacuten la direccioacuten del meridiano entrada=(latlon) salida=psi_ed50
import ossys
from numpy import pisqrtcossintan from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
58
radioem - radio de curvatura de la elipse meridiana en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radioem
import ossys from numpy import sin
from elipsoide import elipsoide
radioeul - radio de la seccioacuten normal de un determinado acimut a partir del teorema de Euler entrada=(lataznelipsoide)
salida=radieul import ossys
from numpy import sincos from radioem import radioem
from radiopv import radiopv
radiopv - radio de curvatura del primer vertical en un punto y elipsoide determinados entrada=(latnelipsoide)
salida=radiopv
import ossys from numpy impor sqrtsin
from elipsoide import elipsoide
rdcae - reduccioacuten de la distancia de la cuerda al arco elipsoide entrada=( dcazlat1nelipsoide) salida=recae
impor ossys from numpy import sincosarcsen
from radioem import radioem from radiopv import radiopv
rdtce - reduccioacuten de la distancia del terreno a la cuerda elipsoide entrada=(dgazlat1h1h2nelipsoide)
salida=rdtce import ossys
from numpy import sincossqrt from radioem import radioem
from radiopv import radiopv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
59
tri2geo - paso de coordenadas cartesianas tridimensionales a geodeacutesicas en un punto y elipsoide determinados entrada=(XYZnelipsoide)
salida=[latlonh]
import ossys from numpy import cossintanarctanarctan2sqrtzeros
from elipsoide import elipsoide from radiopv import radiopv
xyz2clae - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a observables claacutesicos sobre el elipsoide y desnivel elipsoidal entrada=( X1Y1Z1DXDYDZnelipsoide) salida=[s12az12h12]
import ossys from numpy import zeros
from tri2geo import tri2geo
from pigbslm import pigbslm
xyz2clat - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes polares en el terreno entrada=( lat1lon1ixiyiz)
salida=[ dgaz12lv] import ossys
from numpy import zeros from xyz2enu import xyz2enu
from enu2cla import enu2cla
xyz2enu - Paso de un vector geodeacutesico expresado en componentes cartesianas tridimensionales a componentes ENU entrada=(latlonIXIYIZ)
salida=[ieiniu]
import ossys from numpy import sincoszeros
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
60
434 Libreriacutea en Python ldquogeotopoproy_cartograficasrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 calhuso - caacutelculo del huso correspondiente a un punto en la proyeccioacuten UTM a partir de su longitud geodeacutesica entrada=(lon)
salida=huso
import ossys from numpy import
cdel2geo - paso de un punto de la proyeccioacuten ciliacutendrica directa equivalente de Lambert al elipsoide
entrada=(XYLon0TXTYnelipsoide) salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaaut2lat import aut2lat
convestp - caacutelculo de la convergencia de meridianos de un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lonlon0)
salida=convest import ossys
convgk - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0nelipsoide)
salida=convgk
import ossys from numpy import sincostan
from geotopogeodesiaelipsoide import elipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
61
convlamb - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(lonlat0lon0)
salida=convlamb
import ossys from numpy import sin
convutm - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=convutm import ossys
from numpy import tancossinpi
from cahuso import calhuso from geotopogeodesiaelipsoide import elipsoide
convutmh - caacutelculo de la convergencia de meridianos de un punto del elipsoide en la proyeccioacuten UTM calculada en el huso indicado entrada=(latlonnelipsoide)
salida=convutmh
import ossys from numpy import tancossinpi
from geotopogeodesiaelipsoide import elipsoide
dcdgputm - paso de la distancia cuerda en la proyeccioacuten UTM entre dos puntos a la correspondiente a la proyeccioacuten UTM de la liacutenea geoacutedesica que los une en el elipsoide entrada=(lat1lon1lat2lon2nelipsoide
salida=correccioacuten en metros import ossys
from numpy import cos from utm2geo import utm2geo
from geo2utmh import geo2utmh
from calhuso import calhuso from getopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
62
dcesfera - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general conforme en una esfera entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida=dc (reduccioacuten angular de la cuerda en radianes import ossys
from numpy import sincos from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
dcestp - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en la esfera al pasar a la proyeccioacuten estereograacutefica polar entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=dc(reduccioacuten angular de la cuerda en radianes)
import ossys from numpy import cossin
from kplamb import kplamb
from geotopogeodesiapigbslm import pigbslm from geotopogeodesiapdgrk4o import pdgrk4o
from geotopogeodesiaradiopv import radiopv
dcgk - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general de Gauss-Kruumlger entrada=(lat1lon1lat2lon2lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos from geo2gk import geo2gk
from gk2geo import gk2geo
from geotopogeodesiaradioem import radioem from geotopogeodesiaradiopv import radiopv
from getopogeodesiaelipsoide import elipsoide
dclamb - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert entrada=(lat1lon1lat2lon2lat0pelipsoide
salida= dc(reduccioacuten angular de la cuerda en radianes)
import ossys
from numpy import sintancosexpzeros from geo2lamb import geo2lamb
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
63
from kdlamb import kdlamb
from geotopotopografiaacimut import acimut from geotopotopografiadistancia import distancia
from geotopogeodesiaradiopv import radiopv
dclambf - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten general coacutenica conforme de Lambert con maacutes precisioacuten que la funcioacuten anterior entrada=(lat1lon1lat2lon2lat0lon0pnelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes) import ossys
from numpy import cos sin
from kplamb import kplamb from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o from geotopogeodesiaradiopv import radiopv
dcutm - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso que le corresponde al punto por su longitud geodeacutesica entrada=( lat1lon1lat2lon2nelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaradioem import radioem
dcutmh - caacutelculo de la reduccioacuten angular de la cuerda en el extremo inicial de una geodeacutesica en el elipsoide al pasar a la proyeccioacuten UTM calculada en el huso indicado entrada=( lat1lon1lat2lon2husonelipsoide)
salida= dc(reduccioacuten angular de la cuerda en radianes
import ossys from numpy import cospi
from geo2utmh import geo2utmh
from utm2geo import utm2geo from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
64
dgpdcutm - paso de la distancia geodeacutesica proyectada en el plano UTM a la distancia correspondiente a la cuerda en esta proyeccioacuten para una geodeacutesica del elipsoide entrada=( lat1lon1lat2lon2snelipsoide)
salida=correccioacuten import ossys
from numpy import cos from geo2utmh import geo2utmh
from utm2geo import utm2geo
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesiaradioem import radioem
from geotopotopografiaacimut import acimut
esf2esfg - paso de un punto de una esfera a la esfera con cambio de polo Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo
entrada=(latlonlatplonp)
salida=[latlong]
import ossys from numpy import cossintanarcsenarctandotzerospi
from geotopogeodesiapiesfcr import piesfcr
esf2estp - paso de un punto de la esfera a las planas de la proyeccioacuten estereograacutefica polar entrada=(latlonlon0radiotxty)
salida=[xy] estp import ossys
from numpy import zerossincos
esfg2esf - paso de un punto de la esfera con cambio de polo a la esfera original Tambieacuten se calcula el giro de los ciacuterculos maacuteximos motivado por el cambio de polo entrada=(latnlonnlatplonp
salida=[lat0lon0giro import ossys
from numpy import cossintanarcsenarctan2dotzerospitranspose from geotopogeodesiapiesfcr import piesfcr
esfc2lat - paso de latitud sobre la esfera a la correspondiente sobre el elipsoide seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
65
salida=lat
import ossys from numpy import sintanarctanpi
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiaelipsoide import elipsoide
estp2esf - paso de un punto de la proyeccioacuten estereograacutefica polar a la esfera entrada=(xylon0radiotxty)
salida=[xy] import ossys
from numpy import zerosarctan2arctansinpi
geo2cdel - paso de un punto del elipsoide a la proyeccioacuten ciliacutendrica directa equivalente de Lambert entrada=( latlonlon0txtynelipsoide)
salida=[XY] import ossys
from numpy import zeros
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialat2aut import lat2aut
geo2esto - paso de una nube de puntos del elipsoide a la proyeccioacuten estereograacutefica oblicua oacuteptima entrada=(latlonlat0lon0txtynelipsoide)
salida=[XY]
import ossys from numpy import
from lat2esc import lat2esc
from esf2esfg import esf2esfg from esf2estp import esf2estp
from geotopogeodesiaradiopv import radiopv
geo2gk - paso de un punto del elipsoide a la proyeccioacuten general de Gauss-Kruumlger entrada=( latlonlon0ptxtynelipsoide)
salida= [xy]gk import ossys
from numpy import costanpizeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv
from geotopogeodesialam import lam
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
66
geo2lamb - paso de un punto del elipsoide a la proyeccioacuten general coacutenica conforme de Lambert entrada=( latlonlat0lon0ptxtynelipsoide)
salida=[xy]lambert
import ossys from numpy import sintancosexpzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
geo2merc - paso de un punto del elipsoide a la proyeccioacuten de Mercator entrada=( latlonlon0txtynelipsoide)
salida= [xy]mercator import ossys
from numpy import zeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialat2cre import lat2cre
geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
import ossys from numpy import zerostancospi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
geo2utmh - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=[XY] UTM
import ossys
from numpy import zerostancospi from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
gk2geo - paso de un punto de la proyeccioacuten general de Gauss-Kruumlger al elipsoide entrada=(XYlon0ptxtynelipsoide)
salida=[latlon]
import ossys
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
67
from numpy import zerostancospi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
kdesfera - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general conforme sobre una esfera Utiliza la integracioacuten numeacuterica de Simpson entrada=(lat1lon1lat2lon2lat0nelipsoide)
salida= kdesfera import ossys
from kpesfera import kpesfera from geotopogeodesiapigbslm import pigbslm
from geotopogeodesiapdgrk4o import pdgrk4o
kdestp - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica de la esfera al proyectarla en la proyeccioacuten estereograacutefica polar Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0radiotxty)
salida=kdestp import ossys
from kpestp import kpestp from esf2estp import esf2estp
from estp2esf import estp2esf
kdgk - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten general de Gauss-Kruumlger Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lon0pnelipsoide)
salida=kdgk import ossys
from geo2gk import geo2gk from gk2geo import gk2geo
from kpgk import kpgk
kdlamb - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica el elipsoide al proyectarla en la proyeccioacuten general coacutenica conforme de Lambert Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2lat0lon0pnelipsoide)
salida=kdlamb import ossys
from geolamb import geolamb from lamb2geo import lamb2geo
from kplamb import kplamb
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
68
kdutm - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso del primer punto Utiliza la integracioacuten numeacuterica de Simpson entrada=( lat1lon1lat2lon2nelipsoide)
salida=kdutm import ossys
from calhuso import calhuso from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kdutmh - caacutelculo del coeficiente de anamorfosis lineal a aplicar a una geodeacutesica del elipsoide al proyectarla en la proyeccioacuten UTM en el huso indicado Utiliza la integracioacuten numeacuterica de Simpson
entrada= lat1lon1lat2lon2husohelipsoide) salida=kdutmh
import ossys from geo2utmh import geo2utmh
from utm2geo import utm2geo
from kputmh import kputmh
kpesfera - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general conforme sobre una esfera entrada=( latlat0nelipsoide)
salida=kpesfera import ossys
from numpy import cossintanexp from lat2esc import lat2esc
from geotopogeodesiaradiopv import radiopv
from geotopogeodesiaelipsoide import elipsoide
kpestp - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto de la esfera en la proyeccioacuten estereograacutefica polar entrada=(lat)
salida=kpestp import ossys
from numpy import sin
kpgk - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general de Gauss-Kruumlger entrada=(latlonlon0pnelipsoide)
salida=kpgk
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
69
import ossys
from numpy import sincostan from clahuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
kplamb - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten general coacutenica conforme de Lambert entrada=(latlat0pnelipsoide)
salida=kplamb
import ossys from numpy import cossintanexp
from geotopogeodesialat2cre import lat2cre from geotopogeodesiaradiopv import radiopv
kputm - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=kputm
import ossys from numpy import tancossinpi
from calhuso import calhuso from geotopogeodesiaelipsoide import elipsoide
kputmh - caacutelculo del coeficiente de anamorfosis lineal puntual para un punto del elipsoide en la proyeccioacuten UTM en el huso indicado entrada=(latlonhusonelipsoide)
salida=kputmh
import ossys
from numpy import sincostanpi from geotopogeodesiaelipsoide import elipsoide
lamb2geo - paso de un punto de la proyeccioacuten general coacutenica conforme de Lambert al elipsoide entrada=( xylat0lon0ptxtynelipsoide)
salida=[latlon] import ossys
from numpy import sintanarctanpilogsqrtzeros
from geotopogeodesiaradiopv import radiopv from geotopogeodesialat2cre import lat2cre
from geotopogeodesiacre2lat import cre2lat
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
70
lat2esc - paso de la latitud geodeacutesica sobre el elipsoide a la correspondiente sobre la esfera seguacuten la proyeccioacuten general conforme sobre la esfera entrada=(latlat0nelipsoide)
salida=latesfc
import ossys from numpy import sintanarctanpi
from geotopogeodesiaelipsoide import elipsoide
merc2geo - paso de un punto de la proyeccioacuten de Mercator al elipsoide entrada= (xylon0txtynelipsoide)
salida=[latlon]
import ossys from numpy import zerosarctan2pi
from geotopogeodesiaelipsoide import elipsoide from geotopogeodesiacre2lat import cre2lat
utm2geo - paso de un punto de la proyeccioacuten UTM al elipsoide entrada=(XYhusonelipsoide)
salida=[latlon] import ossys
from numpy import sqrtpitancossinzeros from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesialam2lat import lam2lat
from geotopogeodesiaradiopv import radiopv
435 Libreriacutea en Python ldquogeotopotransformacionrdquo
Autor Dr D David Hernandez Lopez davidhernandezulcmes Migracioacuten a Python Juan Pedro Garciacutea Tendero juanpedrogarciaterraes Versioacuten 10 para Python 27 Uacuteltima Modificacioacuten Agosto 2011 egm08rednap ndash fichero que almacena la clase Egm08rednap para el manejo de geoides en formato egm08rednap Define la funcioacuten getOndulation(selflatitudlongitud) Llama al fichero geoide que a su vez llama a los ficheros EGM08_REDNAP
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
71
entrada=(latitudlongitud)
salida=ondulacioacuten import ossys
from numpy import fromfile reshape from geoide import Geoide
geoide ndash fichero que almacena la clase Geoide para el manejo de geoides en formato egm08rednap La clase Geoide almacena ldquollamardquo a los geoides EGM08_REDNAP de la Peniacutensula o Baleares seguacuten corresponda Define las funciones getNoOndulacioacuten y getOndulacioacuten en funcioacuten de que encuentre las coordenadas de entrada dentro de los ficheros
entrada=(latitudlongitud) salida=ondulacioacuten
import ossys from numpy import fromfile reshapepifloorndarray
ntv2 ndash fichero que almacena la funcioacuten ntv2Espana Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(longitudlatitud) en deg en ED50 salida=(longitud latitud) en deg en ETRS89
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
ntv2_2 ndash fichero que almacena la funcioacuten ntv2Espana Adaptacioacuten del fichero anterior Llama al fichero rejilla del IGN en este caso sped2et lo recorre y obtiene la longitud y latitud en deg en sistema ETRS89 Descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz) En la adatacioacuten realizada obtenemos soacutelo los diferenciales de caacutelculo de paso de ED50 a ETRS89 para tomarlo en el caacutelculo de la aproximacioacuten del sentido inverso entre ETRS89 a ED50 El paso de nodos del fichero utilizado es cada 200‟ lo que equivaldriacutea a 6000 m aproximadamente por lo que la aproximacioacuten seriacutea vaacutelida
entrada=(longitudlatitud) en deg en ETRS89 salida=(diflongitud diflatitud) en deg en ED50
from numpy import pi
import math from geotopogeneralrad2psdo import rad2psdo
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
72
sped2etpy ndash fichero rejilla del IGN Para transformacioacuten de coordenadas en los Sistemas de Referencia ED50 a ETRS89 Adaptado a Python y descargado de la web httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 ( web de Iker Peacuterez de Albeniz)
entrada=(fichero contenedor de informacioacuten) No entramos con ninguacuten valor
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
73
5 APLICABILIDAD DE LA LIBRERIacuteA Y CONCLUSIONES FINALES Finalmente hemos implementado los 5 subpaquetes de moacutedulos con funciones y clases incluidos en el paquete (libreriacutea) geotopo destinados a caacutelculos topograacuteficos y geodeacutesicos
Estructura final de la libreriacutea geotopo
Como puede verse en el paquete de geotopo se ha incluido un moacutedulo de aplicaciones en las que se han implementado unos ejercicios praacutecticos aplicando las distintas funciones de la libreriacutea Antes de entrar a describir los casos praacutecticos implementados hemos de decir que directamente podemos obtener resultados de cada una de las funiones Asiacute si queremos pasar de coordenadas geograacuteficas a coordenadas utm mirando en la descripcioacuten de las funciones tenemos geo2utm - paso de un punto del elipsoide a la proyeccioacuten UTM en el huso que le corresponde al punto por su longitud geodeacutesica entrada=(latlonnelipsoide)
salida=[XY] UTM
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
74
import ossys
from numpy import zerostancospi from calhuso import calhuso
from geotopogeodesiaelipsoide import elipsoide
from geotopogeodesiaradiopv import radiopv from geotopogeodesialam import lam
Pues bien una vez seleccionada la funcioacuten a utilizar abrimos el moacutedulo correspondiente con IDLE
Coacutedigo de la funcioacuten abierto con IDLE
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
75
Imagen de la ejecucioacuten de Run Module
Ejecutando Run Module Python abre el Python Shell En esta pantalla tenemos que introducir el nombre de la funcioacuten a usar geo2utm y entre pareacutentesis los valores que se especifican de entrada en la descripcioacuten de la funcioacuten entrada=(latlonnelipsoide)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
76
Llamada a la ejecucioacuten de la funcioacuten desde Python Shell
Como hemos indicado antes y por su relevancia y empleabilidad en otras funciones con ldquonelipsoiderdquo se entiende un coacutedigo del 1 al 3 que representa cada uno un elipsoides de referencia seguacuten los Sistemas de Referencia Coordenados en este caso 1=ED50 elipsoide Internacional Hayford 1924 2=ETRS89 elipsoide GRS80 y 3=WGS84
Al introducir los datos ejecutamos con Intro Obtenemos 2 valores en forma de vector que respresentan seguacuten la descripcioacuten de la funcioacuten salida=[XY] UTM
Podemos volver a caacutelcular las coordenadas UTM en el SCR ETRS89 (en caso de que lalitud y longitud vinieran dadas en el mismohellip) simplemente copiando la liacutenea de entrada pegaacutendola abajo y cambiando 1 por 2 como iacutendice del elipsoide y volviendo a ejecutar con enter
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
77
Dentro de Python Shell se puede copiar coacutedigo de liacuteneas anteriores y
pegar abajo Para caacutelculos maacutes complejos de mayor nuacutemero de puntos etc a modo de praacutectica se ha implementado el coacutedigo de distintos tipos de caacutelculo de ejemplo Distribuidos en 2 tipologiacuteas diferentes ldquotopografiardquo y ldquogeodesiardquo se han incluido coacutedigos para la resolucioacuten e impresioacuten de distintos tipos de problemas realizando ldquoimportrdquo de funciones declaradas en los moacutedulos de los distintos subpaquetes de geotopo
51 CASOS PRAacuteCTICOS TOPOGRAFIacuteA En total se han realizada 4 casos praacutecticos dentro del apartado de topografiacutea Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica topo_practica1 Del resto soacutelo se ha incluido la salida de datos
511 Implementacioacuten del coacutedigo topo_praacutectica1
usrbinpython
-- coding iso-8859-1 --
-- coding cp1252 --
Praacutectica 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
Datos Coordenadas del punto de estacioacuten
Sistema de referencia local
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmesn)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
78
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
En esta versioacuten de la praacutectica utilizando la libreriacutea geotopo en el caacutelculo de azimutes
periacutemetro y superficie
import ossys
from numpy import matrixarrayshapepizerosconcatenatemeansincossqrt
from geotopotopografiaacimut import acimut
from geotopogeneralperimetro import perimetro
from geotopogeneralareacor import areacor
Radio medio terrestre en metros
rt=63700000
Informacioacuten del punto de estacioacuten El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto de estacioacuten
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Altitud del punto en metros
- Quinta columna- Altura de instrumento en metros
pe=array([[100030242663090376657208150]])
Informacioacuten de las referencias
- Cada fila es un punto de referencia
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada X en metros
- Tercera columna- Coordenada Y en metros
- Cuarta columna- Lectura azimutal en grados centesimales
ref=array([[200127863973359492354821][2002322174932757501335646][20033289406282
69902313540][2004261222126827453319067]])
Informacioacuten de los puntos radiados
- Cada fila es una observacioacuten claacutesica a un punto radiado
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Lectura azimutal en grados centesimales
- Tercera columna- Lectura cenital en grados centesimales
- Cuarta columna- Distancia geomeacutetrica en metros
- Quinta columna- Altura de instrumento en metros
rad=array([[30013387131001173422431180][300211877101000083399617200][3003240
5756999039440097150][300433037831000468414996150]])
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos de referencia
Caacutelculo de las dimensiones de la matriz de puntos de referencia
- mref seraacute el nuacutemero de filas el nuacutemero de puntos
- nref seraacute el nuacutemero de columnas 4
[mrefnref]=refshape
Se extrae la informacioacuten del punto de estacioacuten
num_pe=pe[00]
x_pe=pe[01]
y_pe=pe[02]
z_pe=pe[03]
alti_pe=pe[04]
Caacutelculo de azitutes del punto de estacioacuten a cada uno de los puntos radiados
La funcioacuten azimut de la libreriacutea Geotop devuelve el valor en radianes
acimutes=zeros((mref1))
for i in range (1mref+1)
Se leen la identificacioacuten y las coordenadas del punto radiado y se almacenan en variables
temporales
num_pref=ref[i-10]
x_pref=ref[i-11]
y_pref=ref[i-12]
azi_pe_pref=acimut(x_pey_pex_prefy_pref)
acimutes[i-10]=azi_pe_pref2000pi
ref=concatenate((refacimutes)axis=1)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
79
Caacutelculo de la desorientacioacuten de cada direccioacutenccedil
desor=zeros((mref1))
for i in range(1mref+1)
Se leen los valores angulares y se transforman a radianes almacenaacutendose en variables
temporales
lhz_pe_pref=ref[i-13]pi2000
azi_pe_pref=ref[i-14]pi2000
des_pe_pref=azi_pe_pref-lhz_pe_pref
if des_pe_preflt0
des_pe_pref=des_pe_pref+20pi
desor[i-10]=des_pe_pref200pi
ref=concatenate((refdesor)axis=1)
Caacutelculo de la desorientacioacuten media con la funcioacuten de python
des_mean=mean(ref[5])pi200
dimensiones [nordm de filas nordm de columnas] de la matriz de puntos radiados
[mradnrad]=radshape
Caacutelculo de coordenadas polares que se almacenan en la matriz coor_polares
- Primera columna- Nuacutemero entero identificador del punto radiado
- Segunda columna- Azimut en grados centesimales
- Tercera columna- Distancia reducida en metros
Caacutelculo de coordenadas cartesianas que se almacenan en la matriz coor_cart
- Primera columna- Nuacutemero entero identificador del punto del punto radiado
- Segunda columna- Coordenada X
- Tercera columna- Coordenada Y
- Cuarta columna- Altitud
antes se almacenan las coordenadas polares en la matriz coord_polares (numero de
puntoacimutdistancia reducida)
coord_polares=zeros((mrad3))
coord_cart=zeros((mrad4))
for i in range(1mrad+1)
num_prad=rad[i-10]
lhz_pe_prad=rad[i-11]pi2000
lv_pe_prad=rad[i-12]pi2000
dg_pe_prad=rad[i-13]
altp_pe_prad=rad[i-14]
coord_polares[i-10]=num_prad
azi_pe_prad=lhz_pe_prad+des_mean
if azi_pe_pradgt(20pi)
azi_pe_prad=azi_pe_prad-20pi
coord_polares[i-11]=azi_pe_prad2000pi
dr_pe_prad=dg_pe_pradsin(lv_pe_prad)
coord_polares[i-12]=dr_pe_prad
coord_cart[i-10]=num_prad
coord_cart[i-11]= x_pe+dr_pe_pradsin(azi_pe_prad)
coord_cart[i-12]= y_pe+dr_pe_pradcos(azi_pe_prad)
coord_cart[i-13]= z_pe+alti_pe+dg_pe_pradcos(lv_pe_prad)-
altp_pe_prad+042dr_pe_prad2rt
Caacutelculo del periacutemetro de la parcela utilizando la funcioacuten periacutemetro de Geotopo
coord=zeros((mrad2))
for i in range (1mrad+1)
coord[i-10]=coord_cart[i-11]
coord[i-11]=coord_cart[i-12]
perim=perimetro(coord)
Caacutelculo de la superficie de la parcela utilizando la funcioacuten areacor de Geotopo
superficie=areacor(coord)
superficie_error=areacore(coord)
Impresioacuten de resultados
fsalida=open(topopractica1salw)
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
80
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombian)
fsalidawrite(TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(nPRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALESn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimaln)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia Localn)
Impresioacuten del paso 1 Paso de coordenadas cartesianas a polares Azimutes
fsalidawrite(n1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada
visualn)
fsalidawrite( Punto Inicial Punto Final Acimut Desorientacioacutenn)
for i in range(1mref+1)
num_pref=ref[i-10]
azi=ref[i-14]
des=ref[i-15]
fsalidawrite(100fnum_pe)
fsalidawrite(150fnum_pref)
fsalidawrite(184fazi)
fsalidawrite(184fndes)
Impresioacuten del paso 2 Caacutelculo de la desorientacioacuten media
fsalidawrite(n2 Caacutelculo de la desorientacioacuten median)
fsalidawrite( Desorientacioacuten media154fn(des_mean200pi))
Impresioacuten del paso 3 Caacutelculo de la coordenadas polares
fsalidawrite(n3 Caacutelculo de las coordenadas polaresn)
fsalidawrite( Punto Acimut Distancian)
for i in range (1mrad+1)
num_prad=coord_polares[i-10]
azi=coord_polares[i-11]
dist=coord_polares[i-12]
fsalidawrite(100fnum_prad)
fsalidawrite(184fazi)
fsalidawrite(184fndist)
Impresioacuten del paso 4 Caacutelculo de la coordenadas cartesianas
fsalidawrite(n4 Caacutelculo de las coordenadas cartesianasn)
fsalidawrite( Punto X Y Zn)
for i in range (1mrad+1)
num_prad=coord_cart[i-10]
x=coord_cart[i-11]
y=coord_cart[i-12]
z=coord_cart[i-13]
fsalidawrite(100fnum_prad)
fsalidawrite(154fx)
fsalidawrite(154fy)
fsalidawrite(154fnz)
Impresioacuten del paso 5 valor del periacutemetro
fsalidawrite(n5 Caacutelculo del periacutemetro de la parcelan)
fsalidawrite( Periacutemetro153f mnperim)
Impresioacuten del paso 6 valor de la superficie de la parcela
fsalidawrite(n6 Caacutelculo de la superficie de la parcelan)
fsalidawrite( Superficie153f m2nsuperficie)
fsalidaclose()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
81
512 Impresioacuten del fichero de salida de resultados topo_praacutectica1
Ejecuando el programa anterior obtenemos un fichero con los resultados y la presentacioacuten mejorada que hemos implementado SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS TOPOGRAacuteFICOS ELEMENTALES
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
1 Caacutelculo de los acimutes a la referencia y desorientacioacuten de cada visual
Punto Inicial Punto Final Acimut Desorientacioacuten
1000 2001 3539187 3184366
1000 2002 520128 3184482
1000 2003 1497887 3184347
1000 2004 2503428 3184361
2 Caacutelculo de la desorientacioacuten media
Desorientacioacuten media 3184389
3 Caacutelculo de las coordenadas polares
Punto Acimut Distancia
3001 3523102 4224303
3002 372099 3996170
3003 1590145 4400965
3004 2488172 4149959
4 Caacutelculo de las coordenadas cartesianas
Punto X Y Z
3001 27365966 33997199 6561414
3002 32447650 34236535 6566664
3003 32884285 27383773 6578851
3004 27363219 27915286 6569143
5 Caacutelculo del periacutemetro de la parcela
Periacutemetro 2358248 m
6 Caacutelculo de la superficie de la parcela
Superficie 342540930 m2
513 Salida de resultados topo_praacutectica2
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN DIRECTA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3264596 m
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
82
Y= 4065437 m
Previsioacuten de error planimeacutetrico= 0035 m
Vector con soluciones en z y su error
Z=725931 m Previsioacuten de error altimeacutetrico 0023 m
Z=725926 m Previsioacuten de error altimeacutetrico 0024 m
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 2 MEacuteTODOS TOPOGRAacuteFICOS CAacuteLCULO DE UNA INTERSECCIOacuteN INVERSA
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
COORDENADAS DEL PUNTO DESCONOCIDO
X= 3010146 m
Y= 3411841 m
Previsioacuten de error planimeacutetrico= 0022 m
Vector con soluciones en z y su error
Z=515695 m Previsioacuten de error altimeacutetrico 0021 m
Z=515703 m Previsioacuten de error altimeacutetrico 0024 m
Z=515698 m Previsioacuten de error altimeacutetrico 0022 m
514 Salida de resultados topo_praacutectica3
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 3 CALCULO DE DATOS DE REPLANTEO PARA ESTACION TOTAL EN UN SISTEMA DE REFERENCIA
LOCAL
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
ResultadosDatos de replanteo
Base Punto Azimut Distancia CotaProyecto CotaTerreno CotaRoja
1 1 3856489 75460 96930 96539 0391
1 2 2667262 77786 96903 98259 -1356
1 3 1219144 40883 95329 94688 0641
1 4 279600 67437 95045 95587 -0542
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
83
515 Salida de resultados topo_praacutectica4
SEMANA GEOMAacuteTICA - 2011 Bogotaacute DC Colombia
TALLER Caacutelculos topograacuteficos con software libre libreriacutea GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 4 TRANSFORMACIOacuteN ENTRE SISTEMAS DE REFERENCIA LOCALES HELMERT 2D
- Nota- Todos los aacutengulos se expresan en graduacioacuten centesimal
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia Local
Planteamiento del sistema de ecuaciones que define la transformacioacuten planimeacutetrica
Matriz A
1000 0000 3258686 -2709414
0000 1000 2709414 3258686
1000 0000 2075590 -2105320
0000 1000 2105320 2075590
Vector teacuterminos independientes
4554780
228501
3244004
443737
1 Resultados de los paraacutemetros de la transformacioacuten
- Planimetriacutea
- Traslacioacuten en coordenada x del sistema S1 al sistema S2 324401 m
- Traslacioacuten en coordenada y del sistema S1 al sistema S2 -20424 m
- Valor para el paraacutemetro a (a=landacos_giro) 0805119725
adimensional
- Valor para el paraacutemetro b (b=landasin_giro) -0593023724
adimensional
- Valor para el factor de escala (landa=sqrt(a2+b2)) 0999947
tanto por uno
- Valor para el giro (giro=arctan2(ba) -404157
grados centesimales
- Altimetriacutea
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 1 6056 m
- Traslacioacuten en coordenada z del sistema S1 al sistema S2 para el punto 2 6083 m
- Traslacioacuten media en coordenada z del sistema S1 al sistema S2 6070 m
2 Resultado de la transformacioacuten del punto 3 al sistema de referencia local S2
- Coordenada x de 3 en el sistema de referencia local S2 4072286 m
- Coordenada y de 3 en el sistema de referencia local S2 45170 m
- Coordenada z de 3 en el sistema de referencia local S2 104748 m
52 CASOS PRAacuteCTICOS GEODESIA En total se han realizada 5 casos praacutecticos dentro del apartado de geodesia Todos ellos tanto los ficheros py como los ficheros de datos de caacutelculos y salida de datos se incluyen en la versioacuten digital de esta memoria Soacutelo se muestra el coacutedigo de la praacutectica geo_practica1 Del resto soacutelo se ha incluido la salida de datos
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
84
521 Implementacioacuten del coacutedigo geo_praacutectica1
Semana Geomaacutetica 2011 Bogotaacute DC Colombia
IGAC-Instituto Agustiacuten Codazzi
Taller Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea GeoTop
Impartido por Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
Dr David Hernaacutendez Loacutepez davidhernandezulcmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn
Praacutectica 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
Datos Coordenadas de la Red ERGNSS - Red de Estaciones Permanentes GNSS - Instituto
Geograacutefico Nacional Espantildea
Sistema de referencia ETRS89 (Elipsoide GRS80)
Coacutedigo EPSG para coordenadas geodeacutesicas sobre el elipsoide 4258
En esta versioacuten de la praacutectica se utiliza la libreriacutea GeoTop
Otra variante con respecto a la versioacuten anterior de la praacutectica es que se parte de coordenadas
geodeacutesicas en seudo decimal sexagesimal
Documentacioacuten La formulacioacuten empleada figura en el apartado 13 Parametrizacioacuten del
elipsoide del documento
OctaveTallerGeodesiaDocumentacionApuntes_DHL_2010GeodesiaElipsoidalpdf
Matriz de coordenadas
- Cada fila es un punto una estacioacuten de referencia GNSS
- El significado de cada columna es
- Primera columna- Nuacutemero entero identificador del punto
- Segunda columna- Coordenada geodeacutesica longitud en suedo decimal sexagesimal
- Tercera columna- Coordenada geodeacutesica latitud en suedo decimal sexagesimal
- Cuarta columna- Altitud elipsoidal en metros
from numpy import zerosarraygenfromtxt
from geotopogeodesiaelipsoide import elipsoide
from geotopogeneralrad2psdo import rad2psdo
from geotopogeneralpsdo2rad import psdo2rad
from geotopogeodesiatri2geo import tri2geo
from geotopogeodesiageo2tri import geo2tri
c4258h=[ 1 432151770811 -82356167472 66917
2 382020103584 -02852437048 60356
3 385840494457 -15123054192 751736
4 365109112636 -22734018800 127517
5 392843898433 -62030426066 436527
6 432819118007 -34753038539 99287
7 355331090227 -51823016758 52475
8 375456176191 -44315999947 202082
9 371159923466 -65513077151 81860
10 402645009016 -34234283233 766920
11 423518259367 -53903511817 970254
12 364334003748 -42336718238 119848
13 393309445258 23728383134 62063
14 422728617761 -23007691629 503204
15 405642292231 -52945108842 854969
16 394031263811 -35750290360 808968
17 402101790155 -10727483699 956188
18 392850970441 -02015543423 77592
19 421102318373 -84847057525 87790
20 403129631681 -30519065001 972777
21 413800221985 -05255792567 296111
22 281829034024 -162958855078 2417483
23 282837857413 -161428164273 51787
24 282505711067 -163302841359 54475
25 280249784309 -164306688806 58543
26 284549932439 -175337787438 2199221]
Los datos los guardamos en un txt en la misma carpeta del trabajo e importamos
c4258h=genfromtxt(CPython27geotopoaplicacionestalleresgeo_practica1dattxt)
Caacutelculo de las dimensiones de la matriz de coordenadas
- m seraacute el nuacutemero de filas el nuacutemero de puntos
- n seraacute el nuacutemero de columnas 4
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
85
[mn]=c4258hshape
grs80=elipsoide(2)
Recibe Codigo del elipsoide (nelipsoide)
1 - Ed50 Devuelve el elipsoide Internacional 1924
2 - Etrs89 Devuelve el elipsoide GRS80
3 - Wgs84 Devuelve el elipsoide Wgs84
Definicioacuten del elipsoide
fsalida=open(geo_practica1salw)
fsalidawrite(SEMANA GEOMAacuteTICA - 2011n)
fsalidawrite(TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software
libre libreriacutea GeoTopn)
fsalidawrite(AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmesn)
fsalidawrite( Dra Beatriz Felipe Garciacutea bfelipejccmes -
beatrizfelipeuclmesn)
fsalidawrite(MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraesn)
fsalidawrite(PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE
COORDENADAS GEODEacuteSICAS Y ECEFn)
fsalidawrite(- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal
ggmmssfsn)
fsalidawrite(- Nota- Las magnitudes lineales se expresan en metrosn)
fsalidawrite(- Sistema de Referencia ETRS89n)
fsalidawrite(- Paraacutemetros del elipsoide GRS80n)
fsalidawrite( - Semieje mayor 103f mngrs80[0])
fsalidawrite( - Inverso del aplanamiento 109f adimngrs80[1])
fsalidawrite( - Semieje menor 103f mngrs80[2])
fsalidawrite( - Primera excentricidad al cuadrado 109f adimngrs80[3]2)
fsalidawrite( - Segunda excentricidad al cuadrado 109f adimngrs80[4]2)
Impresioacuten de la cabecera del fichero de salida
fsalidawrite(1 Paso de coordenadas geodeacutesicas a ECEFn)
fsalidawrite(NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF
CoorZECEFn)
c4258XYZ=zeros((m4))
for i in range (1m+1)
np=c4258h[i-10]
longitudRad=psdo2rad(c4258h[i-12])
latitudRad=psdo2rad(c4258h[i-11])
hElip=c4258h[i-13]
[xecefyecefzecef]=geo2tri(latitudRadlongitudRadhElip2)
fsalidawrite(80fnp)
fsalidawrite(159fc4258h[i-11])
fsalidawrite(159fc4258h[i-12])
fsalidawrite(123fhElip)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(n)
c4258XYZ[i-10]=np
c4258XYZ[i-11]=xecef
c4258XYZ[i-12]=yecef
c4258XYZ[i-13]=zecef
Caacutelculo e impresioacuten del paso 2 de coordenadas ECEF a geodeacutesicas
fsalidawrite(2 Paso de coordenadas ECEF a geodeacutesicasn)
fsalidawrite( NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud
AltElipn)
for i in range(1m+1)
np=c4258XYZ[i-10]
xecef=c4258XYZ[i-11]
yecef=c4258XYZ[i-12]
zecef=c4258XYZ[i-13]
[latitudlongitudhElip]=tri2geo(xecefyecefzecef2)
fsalidawrite(80fnp)
fsalidawrite(153fxecef)
fsalidawrite(153fyecef)
fsalidawrite(153fzecef)
fsalidawrite(159frad2psdo(latitud))
fsalidawrite(159frad2psdo(longitud))
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
86
fsalidawrite(153fnhElip)
fsalidaclose()
522 Impresioacuten del fichero de salida de resultados geo_praacutectica1
SEMANA GEOMAacuteTICA - 2011
TALLER Caacutelculos geodeacutesicos y de cartografiacutea matemaacutetica con software libre libreriacutea
GeoTop
AUTORES Dr David Hernaacutendez Loacutepez davidhernandezulcmes
Dra Beatriz Felipe Garciacutea bfelipejccmes - beatrizfelipeuclmes
MIGRACIOacuteN A PYTHON Juan Pedro Garciacutea Tendero juanpedrogarciaterraes
PRAacuteCTICA 1 CAacuteLCULOS GEODEacuteSICOS ELEMENTALES - OPERACIONES DE CONVERSIOacuteN ENTRE COORDENADAS
GEODEacuteSICAS Y ECEF
- Nota- Todos los aacutengulos se expresan en seudo decimal sexagesimal ggmmssfs
- Nota- Las magnitudes lineales se expresan en metros
- Sistema de Referencia ETRS89
- Paraacutemetros del elipsoide GRS80
- Semieje mayor 6378137000 m
- Inverso del aplanamiento 0003352811 adim
- Semieje menor 6356752314 m
- Primera excentricidad al cuadrado 0006694380 adim
- Segunda excentricidad al cuadrado 0006739497 adim
1 Paso de coordenadas geodeacutesicas a ECEF
NPunto Latitud Longitud AltElip CoorXECEF CoorYECEF CoorZECEF
1 43215177081 -8235616747 66917 4594489890 -678368010 4357065904
2 38202010358 -0285243705 60356 5009051399 -42072472 3935057504
3 38584049446 -1512305419 751736 4962848206 -160854365 3990884209
4 36510911264 -2273401880 127517 5105220295 -219278803 3804386889
5 39284389843 -6203042607 436527 4899866820 -544567584 4033769790
6 43281911801 -3475303854 99287 4625924690 -307096765 4365771175
7 35533109023 -5182301676 52475 5150908012 -478415023 3718518240
8 37545617619 -4431599995 202082 5021256063 -414685080 3898182184
9 37115992347 -6551307715 81860 5049613168 -612885631 3835143860
10 40264500902 -3423428323 766920 4851137670 -314518688 4116282036
11 42351825937 -5390351182 970254 4680871385 -463168384 4294606572
12 36433400375 -4233671824 119848 5103282414 -392096752 3793146894
13 39330944526 2372838313 62063 4919369704 225499577 4039849606
14 42272861776 -2300769163 503204 4708688612 -205761707 4283609369
15 40564229223 -5294510884 854969 4803054799 -462131609 4158378661
16 39403126381 -3575029036 808968 4904660519 -339868032 4050823512
17 40210179016 -1072748370 956188 4867391684 -95523894 4108341277
18 39285097044 -0201554342 77592 4929534046 -29050676 4033709925
19 42110231837 -8484705753 87790 4677481077 -725205068 4260827192
20 40312963168 -3051906500 972777 4848724914 -261632472 4123093922
21 41380022199 -0525579257 296111 4773803543 -73506519 4215453698
22 28182903402 -16295885508 2417483 5390243531 -1596630330 3007752593
23 28283785741 -16142816427 51787 5386836438 -1569217617 3023118925
24 28250571107 -16330284136 54475 5381262061 -1599192518 3017377791
25 28024978431 -16430668881 58543 5395193089 -1620537044 2981146536
26 28454993244 -17533778744 2199221 5326646317 -1719826438 3052043561
2 Paso de coordenadas ECEF a geodeacutesicas
NPunto CoorXCG CoorYCG CoorZCG Latitud Longitud AltElip
1 4594489890 -678368010 4357065904 43215177081 -8235616747 66917
2 5009051399 -42072472 3935057504 38202010358 -0285243705 60356
3 4962848206 -160854365 3990884209 38584049446 -1512305419 751736
4 5105220295 -219278803 3804386889 36510911264 -2273401880 127517
5 4899866820 -544567584 4033769790 39284389843 -6203042607 436527
6 4625924690 -307096765 4365771175 43281911801 -3475303854 99287
7 5150908012 -478415023 3718518240 35533109023 -5182301676 52475
8 5021256063 -414685080 3898182184 37545617619 -4431599995 202082
9 5049613168 -612885631 3835143860 37115992347 -6551307715 81860
10 4851137670 -314518688 4116282036 40264500902 -3423428323 766920
11 4680871385 -463168384 4294606572 42351825937 -5390351182 970254
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
87
12 5103282414 -392096752 3793146894 36433400375 -4233671824 119848
13 4919369704 225499577 4039849606 39330944526 2372838313 62063
14 4708688612 -205761707 4283609369 42272861776 -2300769163 503204
15 4803054799 -462131609 4158378661 40564229223 -5294510884 854969
16 4904660519 -339868032 4050823512 39403126381 -3575029036 808968
17 4867391684 -95523894 4108341277 40210179016 -1072748370 956188
18 4929534046 -29050676 4033709925 39285097044 -0201554342 77592
19 4677481077 -725205068 4260827192 42110231837 -8484705753 87790
20 4848724914 -261632472 4123093922 40312963168 -3051906500 972777
21 4773803543 -73506519 4215453698 41380022199 -0525579257 296111
22 5390243531 -1596630330 3007752593 28182903402 -16295885508 2417483
23 5386836438 -1569217617 3023118925 28283785741 -16142816427 51787
24 5381262061 -1599192518 3017377791 28250571107 -16330284136 54475
25 5395193089 -1620537044 2981146536 28024978431 -16430668881 58543
26 5326646317 -1719826438 3052043561 28454993244 -17533778744 2199221
523 Salida de resultados geo_praacutectica2
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
88
524 Salida de resultados geo_praacutectica3
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
89
525 Salida de resultados geo_praacutectica4
helliphellip
helliphellip
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
90
526 Salida de resultados geo_praacutectica5
Con la implementacioacuten y caacutelculo de los 9 casos praacutecticos realizados e incluidos en este Proyecto Final de Maacutester se puede obtener una idea de la aplicabilidad de esta libreriacutea en aplicaciones de caacutelculos topograacuteficos y geodeacutesicos Igualmente y como uno de los puntos de partida de este Proyecto obtenemos una libreriacutea muy potente para el uso en aacutembitos universitarios facilitando al profesorado el planteamiento y resolucioacuten de los distintos casos praacutecticos de las asignaturas y al tratarse de coacutedigo abierto se facilita que los alumnos implementen nuevas utilidades formatos de salida etc Convirtiendo geotopo en una herramienta de trabajo diario
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
91
6 CONCLUSIONES FINALES Como conclusiones finales podemos enumerar
Se ha corroborado lo que dicen los impulsores de Python se trata de un lenguaje limpio sencillo y claro muy proacuteximo a pseudocoacutedigo
Resulta interesante la utilizacioacuten de software libre para caacutelculos geodeacutesicos y topografiacuteacos Al tratarse de software libre es accesible a cualquier tipo de usuario
Al partir de la consideracioacuten de un paradigma estructurado de programacioacuten hemos conseguido implementar gran nuacutemero de funciones en ficheros (moacutedulos) de pequentildeo tamantildeo facilitando la programacioacuten Tambieacuten se ha iniciado en la programacioacuten orientada a objetos con la declaracioacuten de alguna clase
La importacioacuten de moacutedulos facilita a la implementacioacuten de coacutedigo sin necesitar volver a escribir el coacutedigo importado y ante cualquier modificacioacuten del mismo automaacuteticamente se actualiza en todos los programas o moacutedulos donde se importe dicho moacutedulo
Con las funciones definidas dentro de Numpy hemos realizado la mayor parte de los caacutelculos necesarios en nuestra biblioteca
Se ha de realizar la importacioacuten expresa de gran nuacutemero de operaciones matemaacuteticas Salvo + - y casi todos los demaacutes operadores se han de importar desde Numpy por ejemplo pi sqrt sin cos etc A veces puede resultar un poco complicado hacer la importacioacuten de estos operadores pero cuando se avanza en la programacioacuten hasta parece maacutes didactico reflejar todas las funciones importadas de otros moacutedulos
Se ha apreciado que en algunos casos las mismas funciones estaacuten incluidas en distintos moacutedulos y ademaacutes con nombres diferentes Asiacute en Numpy tenemos arcsin arccos arctan etc y en SciPy asin acos atan cuando se refieren a las mismas funciones arcoseno arcocoseno y arcotangente
Se ha creado una libreriacutea abierta accesible y editable para moder modificar
coacutedigo y tambieacuten poder ampliar con el implementado de nuevas funciones que aumenten el potencial de la misma Esto tambieacuten se incluye dentro de las liacuteneas futuras de actuacioacuten
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
92
7 LIacuteNEAS FUTURAS DE ACTUACIOacuteN
De forma general se establecen las siguientes liacuteneas futuras de actuacioacuten e investigacioacuten
Avance en el desarrollo a aplicaciones informaacuteticas mediante el uso de software libre y en especial de Python
Estudio de la aplicabilidad de Python en el caacutelculo minimo-cuadraacutetico de sistemas de ecuaciones aplicables en topografiacutea y geodesia Para ello se ha de profundizar en el estudio de las diferencias entre los tipos array que contiene numpy y los tipos matrix par el caacutelculo avanzado de sistemas de ecuaciones
Aplicacioacuten de Python para el caacutelculo y ajuste de Redes Geodeacutesicas mediante la utilizacioacuten de miacutenimos cuadrados Con este fin estariacuteamos evitando el tener que recurrir a los softwares de caacutelculo de las casas comerciales ahorrando asiacute un coste importante y el poder realizar los ajustes y presentaciones de resultados adapatados a nuestras necesidades
Inclusioacuten de una interfaz graacutefica a los caacutelculos realizados para poder tener visualmente el resultado de los mismos
Aplicabilidad de python en el procesado de imaacutegenes Utilizacioacuten de la libreriacutea PIL (Python Imaging Library) que agrega capacidades de procesamiento de imaacutegenes al interprete Python
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
93
8 ANEJO
81 EQUIVALENCIAS ENTRE FUNCIONES EN MATLAB Y PYTHON Al partir de la libreiacutea Geotop en Octave hemos de tener en cuenta la equivanlencia entre algunas funciones de MatlabOctave con Python Asiacute tenemos MATLAB numpyarray numpymatrix Notes
ndims(a) ndim(a) or andim get the number of dimensions of a (tensor rank)
size(a) shape(a) or ashape get the size of the matrix
size(an) ashape[n-1]
get the number of elements of the nth dimension of array a (Note that MATLABreg uses 1 based indexing while Python uses 0 based indexing See note INDEXING)
MATLAB numpyarray numpymatrix Notes
[ 1 2 3 4 5 6 ] array([[123] [456]])
mat([[123] [456]]) or mat(1 2 3 4 5 6)
2x3 matrix literal
[ a b c d ] vstack([hstack([ab]) hstack([cd])])
bmat(a b c d) construct a matrix from blocks abc and d
a(end) a[-1] a[-1][00] access last element in the 1xn matrix a
a(25) a[14] access element in second row fifth column
a(2) a[1] or a[1] entire second row of a
a(15) a[05] or a[5] or a[05] the first five rows of a
a(end-4end) a[-5] the last five rows of a
a(1359) a[03][49] rows one to three and columns five to nine of a This gives read-only access
a([245][13]) a[ix_([134][02])] rows 24 and 5 and columns 1 and 3 This allows the matrix to be modified and doesnt require a regular slice
a(3221) a[ 2212] every other row of a starting with the third and going to the twenty-first
a(12end) a[ 2] every other row of a starting with the first
a(end-11) or flipud(a) a[ -1] a with rows in reverse order
a([1end 1]) a[r_[len(a)0]] a with copy of the first row appended to the end
a atranspose() or aT transpose of a
a aconj()transpose() or aconj()T
aH conjugate transpose of a
a b dot(ab) a b matrix multiply
a b a b multiply(ab) element-wise multiply
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
94
MATLAB numpyarray numpymatrix Notes
ab ab element-wise divide
a^3 a3 power(a3) element-wise exponentiation
(agt05) (agt05) matrix whose ijth element is (a_ij gt 05)
find(agt05) nonzero(agt05) find the indices where (a gt 05)
a(find(vgt05)) a[nonzero(vgt05)[0]] a[nonzero(vAgt05)[0]] extract the columms of a where vector v gt 05
a(find(vgt05)) a[vTgt05] a[vTgt05)] extract the columms of a where column vector v gt 05
a(alt05)=0 a[alt05]=0 a with elements less than 05 zeroed out
a (agt05) a (agt05) mat(aA (agt05)A) a with elements less than 05 zeroed out
a() = 3 a[] = 3 set all values to the same scalar value
y=x y = xcopy() numpy assigns by reference
y=x(2) y = x[1]copy() numpy slices are by reference
y=x() y = xflatten(1) turn array into vector (note that this forces a copy)
110 arange(111) or r_[111] or r_[11010j]
mat(arange(111)) or r_[111r]
create an increasing vector see note RANGES
09 arange(10) or r_[10] or r_[910j]
mat(arange(10)) or r_[10r]
create an increasing vector see note RANGES
[110] arange(111)[ newaxis] r_[111c] create a column vector
zeros(34) zeros((34)) mat() 3x4 rank-2 array full of 64-bit floating point zeros
zeros(345) zeros((345)) mat() 3x4x5 rank-3 array full of 64-bit floating point zeros
ones(34) ones((34)) mat() 3x4 rank-2 array full of 64-bit floating point ones
eye(3) eye(3) mat() 3x3 identity matrix
diag(a) diag(a) mat() vector of diagonal elements of a
diag(a0) diag(a0) mat() square diagonal matrix whose nonzero values are the elements of a
rand(34) randomrand(34) mat() random 3x4 matrix
linspace(134) linspace(134) mat() 4 equally spaced samples between 1 and 3 inclusive
[xy]=meshgrid(0805) mgrid[0906] or meshgrid(r_[09]r_[06]
mat() two 2D arrays one of x values the other of y values
ogrid[0906] or ix_(r_[09]r_[06]
mat() the best way to eval functions on a grid
[xy]=meshgrid([124][245]) meshgrid([124][245]) mat()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
95
ix_([124][245]) mat() the best way to eval functions on a grid
MATLAB numpyarray numpymatrix Notes
repmat(a m n) tile(a (m n)) mat() create m by n copies of a
[a b]
concatenate((ab)1) or hstack((ab)) or column_stack((ab)) or c_[ab]
concatenate((ab)1) concatenate columns of a and b
[a b] concatenate((ab)) or vstack((ab)) or r_[ab]
concatenate((ab)) concatenate rows of a and b
max(max(a)) amax() maximum element of a (with ndims(a)lt=2 for matlab)
max(a) amax(0) maximum element of each column of matrix a
max(a[]2) amax(1) maximum element of each row of matrix a
max(ab) maximum(a b) compares a and b element-wise and returns the maximum value from each pair
norm(v) sqrt(dot(vv)) or Scilinalgnorm(v) or linalgnorm(v)
sqrt(dot(vAvA)) or Scilinalgnorm(v) or linalgnorm(v)
L2 norm of vector v
a amp b logical_and(ab) element-by-element AND operator (Numpy ufunc) see note LOGICOPS
a | b logical_or(ab) element-by-element OR operator (Numpy ufunc) see note LOGICOPS
bitand(ab) a amp b bitwise AND operator (Python native and Numpy ufunc)
bitor(ab) a | b bitwise OR operator (Python native and Numpy ufunc)
inv(a) linalginv(a) inverse of square matrix a
pinv(a) linalgpinv(a) pseudo-inverse of matrix a
rank(a) linalgmatrix_rank(a) rank of a matrix a
ab linalgsolve(ab) if a is square
linalglstsq(ab) otherwise solution of a x = b for x
ba Solve aT xT = bT instead solution of x a = b for x
[USV]=svd(a) U S Vh = linalgsvd(a) V = VhT singular value decomposition of a
chol(a) linalgcholesky(a)T
cholesky factorization of a matrix (chol(a) in matlab returns an upper triangular matrix but linalgcholesky(a) returns a lower triangular matrix)
[VD]=eig(a) DV = linalgeig(a) eigenvalues and eigenvectors of a
[VD]=eig(ab) VD = Scilinalgeig(ab) eigenvalues and eigenvectors of ab
[VD]=eigs(ak) find the k largest eigenvalues and eigenvectors of a
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
96
MATLAB numpyarray numpymatrix notes
[QRP]=qr(a0) QR = Scilinalgqr(a) mat() QR decomposition
[LUP]=lu(a) LU = Scilinalglu(a) or LUP=Scilinalglu_factor(a)
mat() LU decomposition
conjgrad Scilinalgcg mat() Conjugate gradients solver
fft(a) fft(a) mat() Fourier transform of a
ifft(a) ifft(a) mat() inverse Fourier transform of a
sort(a) sort(a) or asort() mat() sort the matrix
[bI] = sortrows(ai) I = argsort(a[i]) b=a[I] sort the rows of the matrix
regress(yX) linalglstsq(Xy) multilinear regression
decimate(x q) Scisignalresample(x len(x)q) downsample with low-pass filtering
unique(a) unique(a)
squeeze(a) asqueeze()
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
97
9 BIBLIOGRAFIacuteA
DOWNEY A ELKNER J MEYERS C Aprenda a Pensar Como un Programador con Python GARCIacuteA-ASENJO VILLAMAYOR L HERNAacuteNDEZ LOacutePEZ D Geodesia Febrero 2005 GONZAacuteLEZ DUQUE R Python PARA TODOS Edicioacuten Internet bajo licencia Creative Commons Reconocimiento 25 Espantildea Descargable en httpmundogeeknettutorial-python MARZAL A GRACIA I Introduccioacuten a la programacioacuten con Python Departamento de Lenguajes y Sistemas Informaacuteticos Universitat Jaume I 2003 Edicioacuten Internet NUMPY COMMUNITY NumPy Reference Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg NUMPY COMMUNITY NumPy User Guide Release 160 Mayo Edicioacuten Internet Descargable en httpwwwscipyorg VAN ROSSUM G Guiacutea de aprendizaje de PythonRelease 241ordf0 Edicioacuten Intenet Septiembre 2005 Descargable en httpwwwscipyorg VAN ROSSUM G El tutorial de Python Edicioacuten Intenet Descargable en httppythonorgarpyarTutorial
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
98
10 PAacuteGINAS WEB CONSULTADAS httpenfoquevirtualwordpresscomcategorytutorial httpgeektheplanetnet1347how-to-instalar-pydev-en-aptanaxhtml httpmundogeeknetarchivos20080328python-modulos-y-paquetes httpwwwthebitsourcecomprogramming-software-developmentpythonpython-application-development-aptana-pydev httpwwwyoutubecomwatchv=XtnfY2cBbMA youtube interesante trabajo con pydev y modulos httpcodingderkeilercomArchivePythoncomplangpython2005-08msg03511html paacutegina que explica coacutemo solucionar los problemas de Non-ASCII character httpeswikibooksorgwikiInmersiC3B3n_en_PythonSu_primer_programa_en_PythonDocumentado_de_funciones paacutegina que explica la cadena de documentacioacuten despueacutes de definir una funcioacuten con ldquordquordquo___rdquordquordquo (triples comillas) httpwwwpythonorgdevpepspep-0008 style guide for python code httpmundogeeknetarchivos20080707documentacion-en-python habla de la forma de documentar en python httpwwwpythonorgdevpepspep-0257 documentacioacuten y comentarios httpprogramandoideascomcomentarios-en-python documentacioacuten y comentarios httpwwwyoutubecomwatchv=v0sqRYuL5e8 tutorial de python con aptana httpwwwyoutubecomwatchv=29mq1Bn52GYampfeature=related youtube tutorial httpprojectsscipyorgnumpybrowsertrunknumpymatlibpyrev=8567 paacutegina que habla un poco de matrices
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
99
httpwwwgfceduco~arsranguias42p8guia42html cosas interesantes de matrices httpdocencia-euptunizaresctmedrascipy_tutorialscipy_tutorialhtml varios sobre python httpdocspythonorgtutorialmoduleshtml muy buena de paquetes etc httpwwwlinux-ittcom200804python-mdulos-y-paqueteshtml maacutes sobre paquetes httpwwwmclibreorgconsultarpythonotrosin03_idlehtmlccedil coding cp1252 httpwwwmclibreorgconsultarpython tutorial de python en la web Idle httpbioinfcomavupvescourseslinuxpythonmoduloshtml csv listasetc httpwwwdavidricardocommxp=1173 ok muy bueno importacioacuten csv como matriz httpwwwaprenderpythonorg httpwwwscipyorgNumpy_Example_List_With_Doc paacutegina muy importante de scipy httpjsbsanblogspotcom201101calculo-de-un-area-de-un-poligonohtml video sobre caacutelculo de areas de poliacutegonos irregulares httpmathesaurussourceforgenetmatlab-numpyhtml viprelacioacuten entre operaciones con octave y con python httpwwwscipyorgTentative_NumPy_Tutorial pagina importante de scipy httptecnologicumwordpresscomastronomiavideo-tutoriales-de-python todos los videotutoriales de python httpwwwyoutubecomwatchv=Oj3MZXWXGiUampfeature=related csv
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
100
httptranslategoogleestranslatehl=esamplangpair=en7Cesampu=httpwwwscipyorgNumPy_for_Matlab_Users interesante sobre numpyhellip httpwikipythonorgmoinHowToSorting interesante de sort httpwikipythonorgmoinHowToSortingOperator_Module_Functions sort itemgetteretc httpcodeactivestatecomrecipes304440-sorting-dictionaries-by-value-in-python-24 operator itemgetter httpmundogeeknetarchivos20080402python-entrada-salida-ficheros entrada salida de archivos httpwwwgulicorgalmacenhttlaclwpchap11htm formato de escritura textos nuacutemeros y decimales httpwwwprogramacioncomarticuloguia_de_aprendizaje_de_python_657 formatos de salida httpnumpysourceforgenetnumdocHTMLnumdochtmpgfId-57315 muy importante sobre arraysetc httpwwwhjcbnlpythonArrayshtml muy importante sobre arraysetc httpwwwalecjacobsoncomweblogp=1570 cargar un txt como una matriz en python httpdocsscipyorgdocnumpyreferencegeneratednumpygenfromtxthtml getfromtxt de numpy httpwwwalegsaonlinecomart13php httpwwwumesdocenciabarzanaIAGPIagp3html httpwebusales~dhernandsoftwarehtmGeotop httpmailpythonorgpipermailtutor2008-March060886html From future import division
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
101
httpwwwyoutubecomwatchv=I6GMIQBD6EU youtube diccionarios httpmundogeeknetarchivos20080121python-tipos-basicos-ii-colecciones diccionarios httpstaffnotiaces~rcardeneshgdiveintopython3-esnative-datatypeshtml diccionarios httpwwwestrellateyardeorgdiscovermanual-python-lo-mas-basico diccionarios httpeswikibooksorgwikiInmersiC3B3n_en_PythonTipos_de_datos_nativosPresentaciC3B3n_de_los_diccionarios diccionarios httpdocspythonorgartutorialdatastructureshtmldiccionarios python estructura de diccionarios httpwwwwikilearningcomtutorialintroduccion_informal_a_matlab_y_octave-matrices_y_algebra_lineal_i19256-8 concatenar matrices httpwwwslidesharenetsantiagosilascomputao-cientfica-com-numpy-e-scipy-7797060 detalles de numpy vectores matricesetc httpwwwscipyorgNumPy_for_Matlab_Usershead-e9a492daa18afcd86e84e07cd2824a9b1b651935 muy importante de scipy arrays y matriceshellip httpdocsscipyorgdocnumpyreferencegeneratednumpyconcatenatehtml muy importante de scipy arrays y matriceshellip httppyspanishdocsourceforgenettut traduccioacuten del tutorial de Guido httpwwwscipyorgNumpy_Example_List_With_Dochead-5202db3259f69441c695ab0efc0cdf45341829fc httppyspanishdocsourceforgenetlibmodule-picklehtml funcioacuten pickle
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CAacuteLCULOS GEODEacuteSICOS Y
TOPOGRAacuteFICOS
Maacutester en Geotecnologiacuteas Cartograacuteficas en Ingenieriacutea y Arquitectura
102
httpnicocesarcomq=node23 carga de ficheros binarios httpstaffnotiaces~rcardeneshgdiveintopython3-esfileshtml apertura cierre carga de ficheros etc httppythonr2wordpresscom20080829leer-archivos-binarios-en-python lectura de ficheros binarios httpwwwignesignlayoutInherramientasdo descarga de ficheros regilla del IGN httpterrasitgvaeseskbtransformacion-coordenadas-utm-ed50-utm-etrs89-utilizando-libreria-proj4 paacutegina de la gva sobre cambio de sistema y fichero rejilla httpdocspythonorglibrarystructhtml moacutedulo struct de python para lectura de ficheros binarios httpwwwslidesharenetjpadillaaprogramacion-orientada-a-objetos-en-python programacioacuten orientada a objetos con python httppyspanishdocsourceforgenettutnode7html recorrer diccionarios httpwwwikeralbeniznet20101215conversion-de-ed50-a-wgs84-o-etrs89 interesante aplicacioacuten fichero rejilla ntv2 en python