desarrollo de herramientas en python para …

110
DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CÁLCULOS GEODÉSICOS Y TOPOGRÁFICOS ESCUELA POLITÉCNICA SUPERIOR DE ÁVILA Máster en Geotecnologías Cartográficas en Ingeniería y Arquitectura Proyecto Final de Máster Alumno: D. Juan Pedro García Tendero Ingeniero Técnico en Topografía Tutor E.P.S.A.: D. José Antonio Martín Jiménez Co - tutor: D. David Hernández López Dr. Ingeniero en Geodesia y Cartografía Ávila, septiembre de 2011

Upload: others

Post on 25-Nov-2021

1 views

Category:

Documents


0 download

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