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

DESARROLLO DE HERRAMIENTAS EN PYTHON PARA … · Además del uso para cálculos topográficos en ámbitos del uso diario de ingenieros ... a las PYMES, servicios y ampliar ... permite

  • Upload
    lyquynh

  • View
    220

  • Download
    1

Embed Size (px)

Citation preview

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y TOPOGRFICOS

    ESCUELA POLITCNICA SUPERIOR DE VILA Mster en Geotecnologas Cartogrficas

    en Ingeniera y Arquitectura

    Proyecto Final de Mster Alumno: D. Juan Pedro Garca Tendero

    Ingeniero Tcnico en Topografa

    Tutor E.P.S.A.: D. Jos Antonio Martn Jimnez

    Co - tutor: D. David Hernndez Lpez Dr. Ingeniero en Geodesia y Cartografa

    vila, septiembre de 2011

  • A mis dos mujeres, mi hija Emma y mi esposa Sonia.

  • Agradecimientos

    He de agradecer su dedicacin a mis dos tutores en este Proyecto Final de Mster.

    Deseo mostrar mi gratitud a D. Jos Antonio Martn Jimnez quien supervis y tutoriz este Proyecto desde la Universidad de Salamanca. Escuela Politcnica Superior de vila.

    Muy especialmente, quiero agradecer a D. David Hernndez Lpez su dedicacin y apoyo en la ejecucin de esta tarea. Por las tardes de verano, dedicadas a la resolucin de dudas o planteamientos al proyecto y por la confianza que deposit en m al aceptar ser mi tutor. De la misma manera, espero haber estado a la altura esperada en la consecucin de los objetivos que desde el primer momento me plante.

  • Resumen

    Como Ingeniero Tcnico en Topografa, numerosas han sido las necesidades de disponer de herramientas informticas para los distintos clculos necesarios desde la etapa de estudiante en la Universidad como una vez incurso en la vida laboral. Desde el simple clculo de un acimut y distancia entre dos puntos, medidas de superficies encerradas en polgonos irregulares, datos de replanteo de puntos, clculo de previsin 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 librera Geotop en Octave del Profesor y Co-tutor de este proyecto Dr. D. David Hernndez Lpez, se han elaborado una serie de herramientas en Python para clculos geodsicos y topogrficos en Python, principalmente, migrando del lenguaje Octave a lenguaje Python. Adems del uso para clculos topogrficos en mbitos del uso diario de ingenieros Tcnicos en Topografa o cualquier Ingeniera afn, esta librera tambin 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 clculo y presentacin que se consideren oportunas. La eleccin de Python, aunque posteriormente se desarrolle ms, se debe a que se trata de un lenguaje de programacin fcil de aprender, potente y en auge. Tiene eficaces estructuras de datos de alto nivel y una solucin de programacin orientada a objetos eficaz. La elegante sintaxis de Python, su gestin de tipos dinmica y su naturaleza interpretada hacen de l el lenguaje ideal para guiones (scripts) y desarrollo rpido de aplicaciones, en muchas reas y en la mayora de plataformas. El intrprete de Python y la extensa biblioteca estndar estn disponibles libremente, en forma de fuentes o ejecutables y se pueden distribuir libremente.

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    1

    TABLA DE CONTENIDOS

    1 OBJETIVOS DEL TRABAJO ......................................................................... 3 2 CONTEXTO DEL PROYECTO. ...................................................................... 4

    2.1 POR QU SOFTWARE LIBRE? ................................................................................... 4

    2.2 LENGUAJES DE PROGRAMACIN .............................................................................. 7

    2.3 PARADIGMAS DE PROGRAMACIN ........................................................................... 8

    2.4 POR QU PYTHON? .................................................................................................... 9

    2.4.1 Caractersticas de Python ..................................................................................... 9

    3 INSTRUMENTACIN Y SOFTWARE EMPLEADOS. PHYTON ..................... 12 3.1 INTRODUCCIN A PYTHON ..................................................................................... 12

    3.1.1 Gua de aprendizaje de Python por Guido Van Rossum v.2.4 ..................... 16

    3.1.1.1 Llamar al intrprete ..................................................................................... 17

    3.1.1.2 Mdulos ......................................................................................................... 22

    3.1.1.3 El camino de bsqueda de mdulos ......................................................... 23

    3.1.1.4 Ficheros Python Compilados ................................................................... 23

    3.1.1.5 Mdulos estandar. ....................................................................................... 24

    3.1.1.6 Paquetes. ...................................................................................................... 24

    3.1.1.7 Importar * de un paquete. ......................................................................... 27

    3.1.1.8 Referencias internas al paquete. ............................................................... 28

    3.2 FUNCIONES INCLUIDAS EN NUMPY POR CATEGORAS (ARRAY CREATION) .. 28

    4 METODOLOGA ........................................................................................ 36 4.1 ESTRUCTURA DE LA LIBRERA GEOTOPO ............................................................. 36

    4.2 DOCUMENTADO DE FUNCIONES ............................................................................. 42

    4.3 FUNCIONES IMPLEMENTADAS ................................................................................. 47

    4.3.1 Librera en Python geotopo.general .............................................................. 47

    4.3.2 Librera en Python geotopo.topografia ......................................................... 50

    4.3.3 Librera en Python geotopo.geodesia ........................................................... 52

    4.3.4 Librera en Python geotopo.proy_cartograficas .......................................... 60

    4.3.5 Librera en Python geotopo.transformacion ................................................ 70

    5 APLICABILIDAD DE LA LIBRERA Y CONCLUSIONES FINALES .............. 73 5.1 CASOS PRCTICOS TOPOGRAFA. .......................................................................... 77

    5.1.1 Implementacin del cdigo, topo_prctica1 ........................................................ 77 5.1.2 Impresin del fichero de salida de resultados, topo_prctica1 ............................ 81 5.1.3 Salida de resultados topo_prctica2 ..................................................................... 81 5.1.4 Salida de resultados topo_prctica3 ..................................................................... 82 5.1.5 Salida de resultados topo_prctica4 ..................................................................... 83

    5.2 CASOS PRCTICOS GEODESIA. ............................................................................... 83 5.2.1 Implementacin del cdigo, geo_prctica1 ......................................................... 84 5.2.2 Impresin del fichero de salida de resultados, geo_prctica1 ............................. 86 5.2.3 Salida de resultados geo_prctica2 ....................................................................... 87

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    2

    5.2.4 Salida de resultados geo_prctica3 ...................................................................... 88 5.2.5 Salida de resultados geo_prctica4 ...................................................................... 89 5.2.6 Salida de resultados geo_prctica5 ...................................................................... 90

    6 CONCLUSIONES FINALES. ....................................................................... 91 7 LNEAS FUTURAS DE ACTUACIN ........................................................... 92 8 ANEJO. ..................................................................................................... 93

    8.1 EQUIVALENCIAS ENTRE FUNCIONES EN MATLAB Y PYTHON. ..................................... 93

    9 BIBLIOGRAFA ........................................................................................ 97 10 PGINAS WEB CONSULTADAS ................................................................ 98

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    3

    1 OBJETIVOS DEL TRABAJO Dentro del marco general de la gua docente del Mster en Geotecnolgias Cartogrficas en Ingeniera y Arquitectura impartido por la Escuela Politcnica Superior de vila de la Universidad de Salamanca, se establece como requisito para la obtencin de esta titulacin la realizacin de un proyecto final de mster. A tal fin responde el presente trabajo, en el que se ha optado por la realizacin de un proyecto de desarrollo de herramientas en Python para clculos geodsicos y topogrficos. Como Ingeniero Tcnico en Topografa, numerosas han sido las necesidades de disponer de herramientas informticas para los distintos clculos necesarios desde la etapa de estudiante en la Universidad como una vez incurso en la vida laboral. Desde el simple clculo de un acimut y distancia entre dos puntos, medidas de superficies encerradas en polgonos irregulares, datos de replanteo de puntos, clculo de previsin 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 librera Geotop en Octave del Profesor y Co-tutor de este proyecto Dr. D. David Hernndez Lpez, se han elaborado una serie de herramientas en Python para clculos geodsicos y topogrficos en Python, principalmente migrando del lenguaje Octave a lenguaje Python. Adems del uso para clculos topogrficos en mbitos del uso diario de ingenieros Tcnicos en Topografa o cualquier Ingeniera afn, esta librera tambin 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 clculo y presentacin que se consideren oportunas. La eleccin de Python, aunque posteriormente se desarrolle ms, se debe a que se trata de un lenguaje de programacin fcil de aprender y potente. Tiene eficaces estructuras de datos de alto nivel y una solucin de programacin orientada a objetos eficaz. La elegante sintaxis de Python, su gestin de tipos dinmica y su naturaleza interpretada hacen de l el lenguaje ideal para guiones (scripts) y desarrollo rpido de aplicaciones, en muchas reas y en la mayora de plataformas. El intrprete de Python y la extensa biblioteca estndar estn disponibles libremente, en forma de fuentes o ejecutables y se pueden distribuir libremente.

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera 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 tambin la eleccin de Python, al tratarse de un lenguaje de programacin que aunque parece novedoso, esta encontrando gran aceptacin en entornos docentes y tambin en el desarrollo de programacin en la empresa privada.

    2.1 POR QU SOFTWARE LIBRE? Muchsimos gobiernos de todo el mundo estn empezando a ver al software libre como una poderosa herramienta para disminuir sus costos de administracin, reducir la dependencia tecnolgica y fomentar sus industrias locales de software. Las razones principales que impulsan la migracin de los sistemas de informacin de las administraciones pblicas al software libre son:

    Ahorro econmico. 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 tecnolgica, mayor transparencia, aumento de la interoperabilidad, permite auditar el cdigo fuente, etc. El secretismo tenolgico 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 prctica totalidad de los concursos para desarrollo de software para la administracin pblica pasan por compatibilizar con productos de la factora de Microsoft, por lo que garantiza la perpetuacin e ingresos hacia Microsoft y no favorece a las empresas locales que pudieran ofrecer productos equivalentes. Adems de la reduccin de costes por uso de software libre, qu podran aportar esas inversiones si los beneficiados fuesen empresas del propio estado, en lugar de mandar a una compaa extranjera esas enormes cantidades de dinero?

    Facilita la adaptacin a las necesidades concretas de las administraciones, en materia lingstica, legislativa, de accesibilidad e imagen.

    El conocimiento generado es pblico. 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 contratacin de servicios de atencin al cliente. Este sistema permite que las compaas que den el servicio compitan en igualdad de condiciones a

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    5

    no poseer la propiedad del producto del cual dan el servicio.

    Tratamiento seguro de los datos y la informacin. Formatos estndar. Los formatos estndar permiten una

    interoperatividad ms alta entre sistemas, evitando incompatibilidades. Los estndares de facto son vlidos 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 perpeten mucho tiempo.

    Sistemas sin puertas traseras y ms seguros. El acceso al cdigo 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 ilgica ya que se pondra en evidencia y contraviene el inters de la comunidad que es la que lo genera.

    Correccin ms rpida y eficiente de fallos. El funcionamiento e inters conjunto de la comunidad ha demostrado solucionar ms rpidamente los fallos de seguridad en el software libre, algo que desgraciadamente en el software propietario es ms difcil y costoso.

    Mtodos simples y unificados de gestin de software. Actualmente la mayora de distribuciones de linux incorporan alguno de los sistemas que unifican el mtodo de instalacin de programas, libreras, etc. Por parte de los usuarios. As se permite el acceso a las miles de aplicaciones existentes de forma segura y gratuita a la par que evitan tener que recurrir a pginas web de dudosa tica desde las que los usuarios instalan sin saberlo spyware o virus informticos en sus sistemas. Este sistema de acceso y gestin del software se hace prcticamente utpico si se extrapola al mercado propietario.

    Sistema en expansin. El software libre ya no es una promesa, es una realidad y se utiliza en sitemas de produccin por algunas de las empresas tecnolgicas ms importantes como IBM, Sun Microsystems, Google, Hewlett-Packard, etc. Paradjicamente, incluso Microsoft, que posee sus propias herramientas, emplea GNU Linux en muchos de sus servidores.

    Entre los pases ms adeptos al software libre, sus desarrollos y alcance de sus

    proyectos de migracin se encuentran de la siguiente manera: ALEMANIA. Alemania es el pas con mayor uso del software libre del mundo. No

    slo est presente en todas sus dependencias gubernamentales y universidades, sino que tiene programas multimillonarios para el desarrollo de aplicaciones libres. En 2009, destin ms de 500 millones de Euros al proyecto Open Source and Green IT. El software libre es tan importante para los alemanes que incluso el 59% de sus empresas lo utiliza, el argumento ms utilizado no es la reduccin de costos, sino la posibilidad de poder modificar el cdigo fuente.

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    6

    BRASIL. Fue el primer pas en migrar masivamente sus sistemas de informacin a alternativas open source. Se llev a cabo en primera instancia en el estado de Ro Grande, luego se realiz a escala nacional.

    ARGENTINA. Existen varias iniciativas estatales que apuntan a fomentar el desarrollo de software libre. Actualmente, el software libre est implementado en algunas provincias, siendo Santa Fe el mximo exponente de utilizacin, dnde 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 Administracin Pblica sea libre para el 2012, tambin ofrece beneficios fiscales para las agrupaciones de usuarios y desarrolladores de SL.

    ESPAA. Espaa 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 cdigo abierto es una realidad cotidiana. Muchos ayuntamientos y universidades ya se pasaron a sistemas open source.

    A principios de 2010 se present un proyecto liderado por la Plataforma Tecnolgica Espaola de Software y Servicios con el apoyo del Plan Avanza. Dicho plan, pretende colocar a Espaa a la par del resto de Europa en el diseo 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 tecnolgicos y empresas que, hasta el momento, haban dedicado sus esfuerzos al mbito de la educacin.

    En un entrevista ofrecida por David Snchez, Director de Comunicacin y Relaciones Instituciones en CENATIC, que es el Centro Nacional de Referencia de Aplicacin de las Tecnologas de la informacin y la Comunicacin basadas en Fuentes Abiertas, podemos encontrar: http://www.muylinux.com/2011/04/07/entrevistamos-a-david-sanchez-de-cenatic/

    CENATIC es una Fundacin Pblica Estatal del gobierno de Espaa promovida por el Ministerio de Industria, Turismo y Comercio y la Junta de Extremadura, que adems cuenta en su patronato con las comunidades autnomas de Andaluca, Aragn, Asturias, Cantabria, Catalua, Islas Balares, Pas Vasco y Galicia, as como las empresas Atos Origin, Telefnica y Grupo pex.

    Su trabajo es promover el conocimiento y uso del software libre en todos los mbitos de la sociedad, con especial atencin en las administraciones pblicas, las empresas, el sector tecnolgico proveedor o usuario de tecnologas libres y las comunidades de desarrollo, a travs de proyectos especficos para cada uno de estos sectores.

    La apuesta a del Administracin del Estado por el software libre se inici ya en los 90, cuando el entonces ministerio para las Administraciones Pblicas llev a cabo la primera gran migracin a software libre de 1.375 servidores. Llegaron tambin proyectos como el del Principado de Asturias para generar de forma colaborativa un

    http://www.muylinux.com/2011/04/07/entrevistamos-a-david-sanchez-de-cenatic/http://www.muylinux.com/2011/04/07/entrevistamos-a-david-sanchez-de-cenatic/
  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    7

    marco basado en software libre, que permiti crear clster de empresas locales capaces de aportar servicios de eAdministracion que de otra manera tendran que haber contratado fuera de su comunidad.

    O el proyecto de gvSIG de la Consellera dInfrestructures i Transport de la Generalitat Valenciana, un sistema de informacin geogrfico que cuenta con un tejido empresarial local alrededor del proyecto y estn haciendo de la Comunidad Valenciana el ncleo ms activo a nivel mundial de desarrollo GIS en entornos libres. Tambin es muy conocido el proyecto de Red Tecnolgica Educativa de la Junta de Extremadura, con Linex como primera distribucin regional y concepto pionero, adoptado ya por 7 comunidades autnomas. Finalmente, a nivel de administracin local, hasta el 80% de los grandes ayuntamientos cuentan hoy en da con proyectos de software libre, siendo quiz el ms destacado el del Ayuntamiento de Zaragoza.

    2.2 LENGUAJES DE PROGRAMACIN Un lenguaje de programacin es un lenguaje artificial que puede ser usado para controlar el comportamiento de una mquina, especialmente una computadora. Estos, se componen de un conjunto de reglas sintcticas y semnticas que permiten expresar instrucciones que luego sern interpretadas. Debe distinguirse de lenguaje informtico, que es una definicin ms amplia, puesto que estos incluyen otros lenguajes como son el HTML o PDF que dan formato a un texto y no es programacin en s misma. El programador es el encargado de utilizar un lenguaje de programacin para crear un conjunto de instrucciones que, al final, constituir un programa o subprograma informtico. En su uso, un lenguaje de programacin 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 ingls). En cambio, aquellos lenguajes que se aproximan ms 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 acercar al lenguaje mquina, que es, en definitiva, lo que las computadoras pueden interpretar. De todas maneras, un lenguaje de programacin difiere en muchos aspectos de un lenguaje humano. Un cdigo escrito en un lenguaje de programacin especfico siempre se interpreta de la misma manera (no como los idiomas humanos ambiguos), los errores son mucho ms significativos (a tal punto de que un cdigo puede volverse ininterpretable por la computadora), etc.

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    8

    El cdigo fuente es el conjunto de instrucciones que conforman un programa (o subprograma o mdulo). El cdigo fuente debe ser compilado para poder ser interpretado y ejecutado por la computadora. La compilacin traduce el cdigo fuente (que depende del lenguaje de programacin) a un lenguaje mquina (que depende del sistema de la mquina). Existen lenguajes del tipo script que son directamente ejecutados por un intrprete y no necesitan compilacin. Los lenguajes de programacin pueden clasificarse empleando distintos mtodos y puntos de vista. Esta clasificacin se basa en el paradigma que utilizan. Se debe aclarar que existen muchos ms paradigmas y subparadigmas de programacin no incluidos dentro de los mencionados. Adems, todava hay conflictos en las definiciones y alcances de ciertos paradigmas.

    2.3 PARADIGMAS DE PROGRAMACIN Un paradigma de programacin provee (y determina) la visin y mtodos de un programador en la construccin de un programa o subprograma. Diferentes paradigmas resultan en diferentes estilos de programacin y en diferentes formas de pensar la solucin de problemas (con la solucin de mltiples problemas se construye una aplicacin). Los lenguajes de programacin son basados en uno o ms paradigmas. (Vase Programacin en mltiples paradigmas) Por ejemplo: Smalltalk y Java son lenguajes basados en el paradigma orientado a objetos. El lenguaje de programacin Scheme, en cambio, soporta slo programacin funcional. En cambio Python, soporta mltiples paradigmas. Clasificacin por paradigmas de programacin Paradigma Imperativo: describe la programacin como una secuencia instrucciones o comandos que cambian el estado de un programa. El cdigo mquina en general est 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 cmo se hace algo (cmo se logra un objetivo paso a paso), sino que describe (declara) cmo es algo. En otras palabras, se enfoca en describir las propiedades de la solucin buscada, dejando indeterminado el algoritmo (conjunto de instrucciones) usado para encontrar esa solucin. Es ms complicado de implementar que el paradigma imperativo, tiene desventajas en la eficiencia, pero ventajas en la solucin de determinados problemas.

    http://www.alegsaonline.com/art/11.phphttp://www.alegsaonline.com/art/14.php
  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    9

    Paradigma Estructurado: la programacin se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre s. Adems la programacin se controla con secuencia, seleccin e iteracin. Permite reutilizar cdigo programado y otorga una mejor compresin de la programacin. Es contrario al paradigma inestructurado, de poco uso, que no tiene ninguna estructura, es simplemente un bloque, como por ejemplo, los archivos batch (.bat). Paradigma Orientado a Objetos: est basado en la idea de encapsular estado y operaciones en objetos. En general, la programacin se resuelve comunicando dichos objetos a travs de mensajes (programacin orientada a mensajes). Se puede incluir -aunque no formalmente- dentro de este paradigma, el paradigma basado en objetos, que adems posee herencia y subtipos entre objetos. Ej.: Simula, Smalltalk, C++, Java, Visual Basic .NET, etc. Su principal ventaja es la reutilizacin de cdigos y su facilidad para pensar soluciones a determinados problemas. Paradigma Funcional: este paradigma concibe a la computacin como la evaluacin de funciones matemticas y evita declarar y cambiar datos. En otras palabras, hace hincapi en la aplicacin de las funciones y composicin entre ellas, ms que en los cambios de estados y la ejecucin 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 lgico: se basa en la definicin de reglas lgicas para luego, a travs de un motor de inferencias lgicas, responder preguntas planteadas al sistema y as resolver los problemas. Ej.: prolog. Otros paradigmas y subparadigmas son: paradigma orientado al sujeto, paradigma heurstico, paradigma reflectante, programacin basada en reglas, paradigma basado en restricciones, programacin basada en prototipos, etc.

    2.4 POR QU PYTHON?

    2.4.1 Caractersticas de Python

    Python es un lenguaje de programacin de tipo script creado por Guido van Rossum a principios de los aos 90, cuyo nombre proviene del grupo Monty Python. El objetivo es un lenguaje con una sintaxis muy limpia y con un cdigo legible. Python es un lenguaje de programacin multiparadigma. Esto significa que ms que forzar a los programadores a adoptar un estilo particular de programacin, permite varios estilos: programacin orientada a objetos, programacin imperativa, funcional, estructurada,

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    10

    etc. Otros paradigmas estn 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 implantacin en el mundo del software libre. Python es un lenguaje de programacin fcil de aprender y potente. Dispone de eficaces estructuras de datos de alto nivel y una solucin de programacin orientada a objetos simple pero eficaz. La elegante sintaxis de Python, su gestin de tipos dinmica y su naturaleza interpretada hacen de l el lenguaje ideal para guiones (scripts) y desarrollo rpido de aplicaciones en muchas reas y en la mayora de las plataformas. En Python no hay terminadores de sentencia (como el punto y como de C/C++/Java) ni marcas de inicio/fin de bloque (como las llaves de esos mismos lenguajes). La indentacin como forma de marcar bloques elimina errores propios de los lenguajes citados y que son frecuentes en los estudiantes y tambin en los programadores profesionales: sentencias condicionales sin accin por aadir un punto y coma incorrectos, bucles con una sola sentencia cuando parece que hay dos o ms (por omisin de llaves con un sangrado inadecuado del programa), sentencias con semntica alterada por usar una coma cuando corresponde un punto y coma o por omitir un punto y coma al declarar un registro antes de una funcin, etc. La indentacin slo resulta molesta cuando el tamao de un bloque de cierta profundidad excede del tamao de la ventana del editor. Python es un lenguaje interpretado. Los lenguajes interpretados permiten ciclos de desarrollo breves (edicin y ejecucin) que animan a los estudiantes a experimentar. Python dispone de un entorno de ejecucin que ayuda a detectar los errores (incluyendo aquellos que slo se manifiestan en ejecucin) sealndolos con mensajes muy informativos. Python ofrece, adems, un entorno interactivo con el que es posible efectuar pequeas pruebas o disear incrementalmente las soluciones a los problemas. La contrapartida de que se trate de un lenguaje interpretado es, obviamente, la menor velocidad de ejecucin. Python puede considerarse pseudocdigo ejecutable. Es muy expresivo y su sintaxis sencilla interfiere poco en la implementacin de algoritmos, as que resulta un buen sustituto del pseudocdigo, con la ventaja de que los algoritmos codificados en Python s son ejecutables. Python ofrece un rico conjunto de estructuras de datos flexibles. El tipo lista de python (un vector dinmico heterogneo) permite introducir con naturalidad el concepto de secuencia y presentar los algoritmos bsicos de manejo de secuencias. Que la indexacin empiece siempre en 0 ayuda a dar el salto a C, C++ o Java. El entorno de ejecucin proporciona comprobacin de validez de los ndices, eliminando as una de las principales fuentes de problemas de C y C++. El hecho de que las listas sean

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    11

    redimensionables elimina al programador la necesidad de tomar decisiones acerca de la longitud mxima 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 semntica. Adems de listas y cadenas, Python ofrece tuplas (listas inmutables) y diccionarios (vectores asociativos). Python ofrece una amplsima coleccin de mdulos (bibliotecas). Hay mdulos para cualquier actividad imaginable: escritura de CGI, gestin de correo electrnico, desarrollo de interfaces grficas de usuario, anlisis de documentos HTML o XML, acceso a bases de datos, trabajo con expresiones regulares, etc. No es que haya que presentar todos los mdulos pero sirve para ayudar a consultar la documentacin de las bibliotecas disponibles favorece la programacin eficiente.

    Python es orientado a objetos. A diferencia de Java, Python permite una programacin puramente procedimental. La orientacin a objetos, aunque perfectamente soportada, es opcional (a menos, naturalmente, que se recurra a ciertos mdulos en los que se definen clases). El soporte a la programacin orientada a objetos es similar al de lenguajes como Samlltalk: la resolucin de los nombres de mtodo y atributos es dinmica.

    El intrprete de Python y su extensa biblioteca estndar estn disponibles libremente, en forma de fuentes o ejecutables, para las plataformas ms importantes, en la sede web de Python, http://python.org y se pueden distribuir libremente. La misma sede contiene tambin distribuciones y direcciones de muchos mdulos, programas y herramientas Python de terceras partes, adems de documentacin adicional. Es fcil ampliar el intrprete 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 tambin adecuado como lenguaje de extensin para aplicaciones adaptables al usuario. Algunas de las empresas que usan Python son: Google. Yahoo Industrial Light & Magic Walt Disney NASA SGI, Inc.

    http://python.org/
  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    12

    3 INSTRUMENTACIN Y SOFTWARE EMPLEADOS. PHYTON

    3.1 INTRODUCCIN A PYTHON Como se coment en el punto anterior Python:

    es orientado a objetos. (realmente es multiparadigma, aceptando distintos tipos de paradigmas). A diferencia de Java, Python permite una programacin puramente procedimental. La orientacin a objetos, aunque perfectamente soportada, es opcional (a menos, naturalmente, que se recurra a ciertos mdulo en los que se definen clases). El soporte a la programacin orientada a objetos es similar a l de lenguajes como Samlltalk: la resolucin de los nombres de mtodo y atributos es dinmica.

    Python ofrece una amplsima coleccin de mdulos (bibliotecas). Hay mdulos para cualquier actividad imaginable: escritura de CGI, gestin de correo electrnico, desarrollo de interfaces grficas de usuario, anlisis de documentos HTML o XML, acceso a bases de datos, trabajo con expresiones regulares, etc.

    Entre estas bibliotecas, cabe mencionar Numpy: Numpy es un mdulo de Python, escrito en C, que define los vectores numricos, las matrices y las operaciones entre ellos. Adems de las funciones sobre vectores y matrices, tambin incluye funciones trigonomtricas del tipo: sin, cos, tan, etc. Numpy es el paquete fundamental necesario para programacin cientfica con Python. Contiene entre otras cosa:

    Un poderoso N-dimensional objeto vector Sofisticadas funciones. Herramientas para integracin con cdigo de C, C++ y Fortram tiles de algebra lineal, Transformada de Fourier y capacidades de

    nmeros aleatorios. Adems de sus usos cientficos obvios, NumPy tambin se puede utilizar como un eficiente multi-dimensional contenedor de datos genricos. Pueden ser definidos tipos arbitrarios de datos. Esto permite integrar a la perfeccin y rpidamente con una amplia variedad de bases de datos. El objeto principal de Numpy es el vector homogneo multidimensional. ste es, una tabla de elementos (generalmente nmeros), todos del mismo tipo, indexados por una tupla de enteros positivos. Por multidimensional, entendemos que los vectores pueden tener varias dimensiones de ejes. El nmero de ejes se llamarn a menudo rango.

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    13

    Por ejemplo, las coordenadas de un punto en el espacio 3D sera [1, 2, 1] que

    representara un vector de rango 1 de longitud 3. Otro ejemplo sera

    [[ 1., 0., 0.],

    [ 0., 1., 2.]]

    que representa un array de rango 2 (2 dimensiones). Para ms informacin mirar

    Numpy Glossary.

    Otras libreras importantes en Python son: Scipy es otra librera que usa Numpy. El desarrollo de Scipy comenz en el ao 2001. Sus orgenes se remontan al paquete con extensiones numricas para Python denominado Numeric. Posteriormente apareci Numarray, con la intencin de construir un paquete ms flexible y de limpiar el cdigo, aunque result ser ms lengo para clculos matriciales en pocas dimensiones. En el ao 2005, el principal impulsor de Scipy, Travis Oliphant, reunific ambos en un nico paquete que integrse las ventajas de ambos, y se denomin Numpy, considerado el ncleo de Scipy. Scipy en s mismo se concibe actualmente como una extensin de las funcionalidades de Numpy.

    Scipy posee mdulos para optimizacin de funciones, integracin, funciones especiales, resolucin de ecuaciones diferenciales ordinarias y otros muchos aspectos.

    Puede ser usado con Linux, Windows y ha sido tambin compilado para Sun y Mac.

    Scipy es un proyecto de software libre que ha sido patrocinado por una compaa, Enthought inc.

    Su organizacin se estructura en subpaquetes, que se pueden considerar especializados en dominios cientficos determinados. Podemos encontrar estos paquetes, segn la ayuda de scipy (v0.4.6):

    stats -- Statistical Functions sparse -- Sparse matrix lib -- Python wrappers to external libraries linalg -- Linear algebra routines signal -- Signal Processing Tools misc -- Various utilities that don't have another home interpolate -- Interpolation Tools [*] optimize -- Optimization Tools [*] cluster -- Vector Quantization / Kmeans [*] fftpack -- Discrete Fourier Transform algorithms [*]

    http://www.scipy.org/Numpy_Glossary
  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    14

    io -- Data input and output [*] maxentropy -- Routines for fitting maximum entropy models [*] integrate -- Integration routines [*] lib.lapack -- Wrappers to LAPACK library [*] special -- Special Functions [*] lib.blas -- Wrappers to BLAS library [*]

    Matplotlib es una librera de Python que facilita la publicacin de calidad de la publicacin interactiva. Permite obtener grficas de calidad para publicaciones. Su principal submdulo para dibujar es pyplot Mayavi Ipython PIL (Python Imaging Library) Pythonxy EPD (Enthought python distribution $$) Este texto como Memoria de un Proyecto Final de Mster no pretende ser, ni mucho menos, un manual de Python, pero s son necesarios unos conocimientos previos, primero para comprender la filosofa 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 Gua de aprendizaje de Python por Guido Van Rossum v.2.4, creador de Python. Para la realizacin de este documento se ha consultado como aparece en Bibliografa y Referencias en la Web numerosa documentacin pero como punto de partida, parece lgico recoger la documentacin de la Gua de aprendizaje del propio creador de Python. Python contiene una serie de palabras clave, dependientes de la versin de instalacin, para asegurarnos de las palabras clave de la versin descargada podemos introducir el siguiente cdigo:

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera 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 ningn mdulo. Dichas funciones dependen de la versin de Python instalada. En la pgina http://docs.python.org/library/functions.html. Nos encontramos con dicha relacin. A modo de resumen, stas son: (ver pgina siguiente)

    http://docs.python.org/library/functions.html
  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    16

    Funciones internas de Python

    3.1.1 Gua de aprendizaje de Python por Guido Van Rossum v.2.4

    Extractos del documento: Si en alguna ocasin hemos escrito un guin para un intrprete de rdenes (o shell script) de UNIX largo, puede que hayamos sentido: que nos encantara aadir una caracterstica ms, pero ya es tan lento, tan grande, tan complicado O la caracterstica involucra una llamada al sistema u otra funcin accesible slo desde C. El problema en s no suele ser tan complejo como para transformar el guin 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) fciles en sh, pero tediosas en C. o quiz no tengamos tanta soltura con C. Otra situacin: Quiz 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 ms velocidad. Posiblemente has escrito un programa al que vendra bien un lenguaje de extensin y no quieres disear un lenguaje, escribir y depurar el intrprete y adosarlo a la aplicacin. En tales casos, Python puede ser el lenguaje que necesitas. Python es simple, pero es un lenguaje de programacin real. Ofrece ms apoyo e infraestructura para programas

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    17

    grandes que el intrprete de rdenes. Por otra parte, tambin ofrece mucho ms, comprobacin 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 llevaran das de programacin en C. Dados sus tipos de datos ms generales, se puede aplicar a un rango de problemas ms amplio que Awk o incluso Perl, pero muchas cosas son, al menos, igual de fciles en Python que en esos lenguajes. Python te permite dividir su programa en mdulos reutilizables desde otros programas en Python. Viene con una gran coleccin de mdulos estndar que puedes utilizar como base de tus programas (o como ejemplos para empezar a aprender Python). Tambin hay mdulos incluidos que proporcionan E/S de ficheros, llamadas al sistema, sockets y hasta interfaces grficas 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 intrprete se puede utilizar de modo interacivo, lo que facilita experimentar con caractersticas del lenguaje, escribir programas desechables o probar funciones durante el desarrrollo del prgram de la base hacia arriba. Tambin es una calculadora muy til. Python permite escribir programas muy compactos y legibles. Los programas escritos en Python son normalmente mucho ms 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 (indentacin) en lugar de begin/end o llaves.

    No es necesario declarar los argumentos ni las variables.

    Python es ampliable: si ya sabes programar en C, es fcil aadir una nueva funcin o mdulo al intrprete, para realizar operaciones crticas a la mxima velocidad o para enlazar programas en Python con bibliotecas que slo estn disponibles en forma binaria (como bibliotecas de grficos especficas del fabricante). Una vez enganchado, puedes enlazar el intrprete de Python a una aplicacin escrita en C y utilizarlo como lenguaje de macros para dicha aplicacin.

    3.1.1.1 Llamar al intrprete

    En UNIX, el intrprete de Python se suele instalar como /usr/local/bin/python en aquellas mquinas donde est disponible. En Windows, se instala en el directorio Archivos de programa o en cualquier otro directorio seleccionado. Poner este directorio en la ruta de ejecutables hace posible arrancarlo tecleando en el intrprete de rdenes la orden:

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    18

    Python

    Como la eleccin del directorio donde reside el intrprete es una opcin de instalacin, es posible que se halle en otros lugares. Consulta con tu guru de Python local o tu administrador de sistemas (por ejemplo, /usr/local/python es una alternativa recuente). Teclear un carcter fin de fichero (Control-D en UNIX, Control-Z en DOS o Windows) en el intrprete causa la salida del intrprete con un estado cero. Si eso no funciona, se puede salir del intrprete tecleando las siguientes rdenes: import sys; sys.exit(). Las opciones de edicin de la lnea de rdenes no son muy destacables. En UNIX, es posible que quien instalara el intrprete en su sistema incluyera soporte para la biblioteca de GNU readline, que permite una edicin de lnea ms elaborada y la recuperacin de rdenes anteriores. El modo ms rpido de ver si hay soporte de edicin de lneas es teclear Control-P en cuanto aparece el intrprete. Si pita, la edicin de lneas est disponible. Si no sale nada o sale ^P, no est disponible la edicin de lneas y slo se puede utilizar la tecla de borrado para borrar el ltimo carcter tecleado. El intrprete funciona como el intrprete de rdenes de UNIX: cuando se lo llama con la entrada estndar conectada a un dispositivo tty, lee y ejecuta las rdenes interactivamente; cuando se le da un nombre de fichero como argumento o se le da un fichero como entrada estndar, lee y ejecuta un guion desde ese fichero. Otro modo de arrancar el intrprete es python -c orden [argumento] ..., que ejecuta las sentencias de orden, de forma anloga a la opcin -c de la lnea de rdenes. Como las sentencias de Python suelen contener espacios u otros caracteres que la lnea de rdenes 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 CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    19

    Hay mdulos de Python que son tiles como programas independientes. Se los puede llamar mediante python-m mdulo[arg] , que ejecuta el fichero de cdigo fuente de module como si se hubiera dado el nombre completo en la lnea de rdenes. Cuando se leen rdenes desde una tty, se dice que el intrprete est en modo interacitov. En este modo, espera a la siguiente orden con el indicador principal, que suele ser tras signos mayor (>>>). Para las lneas adicionales, se utiliza el indicador secundario, por omisin tres puntos ().

    Programar en Python puede hacerse de varias maneras segn la necesidad o el gusto de cada persona. Para los nefitos mi recomendacin es que utilicen el ambiente grfico interactivo llamado IDLE. Esta herramienta viene includa con el mdulo tkinter. Adems de resaltar la sintaxis en colores, permite editar archivos fuente y es ms amigable al inicio.

    El IDLE tiene dos ambientes: el shell interactivo con ttulo Python Shell en su ventana; muestra el prompt >>> y espera un comando, y uno o ms editores que se abren con el men File --> New Window. Cada editor empieza con el ttulo Untitled en su ventana, el cual cambia hasta que se salva a un archivo con File --> Save As (y subsecuentemente File --> Save). Cada editor nos permite ejecutar el cdigo 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:

    C:\ejemplos> C:\python22\idle\idle

    En Linux:

    [usuario@pc ejemplos]$ idle & 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 ms 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 terminacin .py para que conservemos lo que hicimos para siempre.

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera 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 cdigo, hemos de seleccionar File/Save As para guardar el archivo y tenerlo disponible

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    21

    Ventana del editor de IDLE con cdigo preparado para guardar

    Una vez que nos hemos asegurado de que tenemos el cdigo guardado cmo hacemos para ejecutar el programa?. La respuesta es seleccionando Run Module. En caso de seleccionar Run Module antes de guardar el cdigo, Python nos pide que lo guardemos antes Al seleccionar Run Module, Python ir interpretando lnea por lnea y mostrando los resultados a travs del Intrprete. Si existiese algn error de sintaxis, se avisa del tipo de error y dnde se produce. Una vez corregido el problema, se vuelve a intentar el Run Module.

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    22

    El tener un intrprete permite ir probando partes de programas sobre las que no se est seguro y ver cmo reaccionan, para poder decidir si se incluyen o no, y cmo se pueden adaptar. As, se est continuamente alternando entre el intrprete y el programa. Ms informacin en http://docs.python.org/library/idle.html.

    3.1.1.2 Mdulos

    Si salimos del intrprete 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 ms largo, ser mejor que se utilice un editor de texto para preparar la entrada del intrprete y ejecutarlo con ese fichero como entrada. Esto se llama crear un guin. Segn vayan creciendo los programas, puede que quieras dividirlos en varios ficheros para facilitar el mantenimiento. Puede que tambin quieras utilizar una funcin que has escrito en varios programas sin tener que copiar su definicin en cada programa. Para lograr esto, Python tiene un modo de poner definiciones en un fichero y utilizarlas en un guin o en una instancia interactiva del intrprete. Tal fichero se llama mdulo; las definiciones de un mdulo se pueden importar a otros mdulos o al mdulo principal (la coleccin de variables accesible desde un guin ejecutado desde el nivel superior y en el modo de calculadora). Un mdulo es un fichero que contiene definiciones y sentencias de Python. El nombre del fichero es el nombre del mdulo con el sufijo py. Dentro de un mdulo, el nombre del mdulo (como cadena) es accesible mediante la variable global __name__. Un mdulo puede contener sentencias ejecutables adems de definiciones de funciones. Estas sentencias sirven para inicializar el mdulo. Slo se ejecutan la primera vez que se importa el mdulo en alguna parte1. Cada mdulo tiene su propia tabla de smbolos, que utilizan todas las funciones definidas por el mdulo como tabla de smbolos global. Por ello, el autor de un mdulo puede utilizar variables globales dentro del mdulo sin preocuparse por conflictos con las variables globales de un usuario del mdulo. Por otra parte, si sabes lo que haces, puedes tocar las variables globales de un mdulo con la misma notacin utilizada para referirse a sus funciones, nombreMod.nombreElem. Los mdulos pueden importar otros mdulos. Es una costumbre no obligatoria colocar todas las sentencias import al principio del mdulo (o guin). Los nombres del mdulo importado se colocan en la tabla de smbolos global del mdulo (o guin) que lo importa. Existe una variacin de la sentencia import que importa los nombres de un mdulo directamente a la tabla de smbolos del mdulo que lo importa. Por ejemplo:

    >>> from fibo import fib, fib2

    http://docs.python.org/library/idle.html
  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    23

    >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377

    Esto no introduce el nombre del mdulo del que se toman los elementos importados en la tabla de smbolos local (por lo que, en el ejemplo, no est definido fibo). Adems, existe una variacin que importa todos los nombres que define un mdulo: >>> from fibo import *

    >>> 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 guin bajo (_).

    3.1.1.3 El camino de bsqueda de mdulos

    Cuando se importa un mdulo denominado fiambre, el intrprete busca un fichero denominado fiambre.py 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 lnea de rdenes PATH de UNIX, que es una lista de nombres de directorios. Cuando PYTHONPATH no tiene ningn valor o no se encuentra el fichero, se contina la bsqueda en un camino dependiente de la instalacin. En UNIX, normalmente es .:/usr/local/lib/python. En realidad, se buscan los mdulos en la lista de directorios dada por la variable sys.path, que se inicializa desde el directorio que contiene el guin de entrada (o el directorio actual), PYTHONPATH y el valor por omisin dependiente de la instalacin. Esto permite que los programas que saben lo que hacen modifiquen o reemplacen el camino de bsqueda de mdulos. Obsrvese que, como el directorio que contiene el guin bajo ejecucin est en el camino de bsqueda de mdulos, es importante que el mdulo no tenga el mismo nombre que un mdulo estndar, o Python lo intentar cargar el guin como mdulo cuando se importe el mdulo. Normalmente, esto provocar errores.

    3.1.1.4 Ficheros Python Compilados

    Como mejora considerable del tiempo de arranque de programas cortos que utilizan muchos mdulos estndar, si existe un fichero llamado fiambre.pyc en el directorio donde se encuentra fiambre.py, se supone que contiene una versin previamente compilada a byte del mdulo fiambre. La fecha y hora de la versin de fiambre.py

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    24

    utilizada para generar fiambre.pyc se graba en fiambre.pyc y no se considera el fichero .pyc si no concuerdan. Normalmente, no hay que hacer nada para generar el fichero fiambre.pyc. Siempre que fiambre.py se compile sin errores, se hace un intento de escribir la versin compilada a fiambre.pyc. No se provoca un error si falla el intento. Si por cualquier motivo no se escribe completamente el fichero, el fichero fiambre.pyc resultante ser reconocido como no vlido y posteriormente ignorado. El contenido del fichero fiambre.pyc es independiente de la plataforma, por lo que se puede compartir un directorio de mdulos entre mquinas de diferentes arquitecturas.

    3.1.1.5 Mdulos estandar.

    Python viene con una biblioteca de mdulos estndar, descrita en un documento aparte, la Referencia de las bibliotecas. Algunos mdulos son internos al intrprete y proporcionan acceso a las operaciones que no son parte del ncleo 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 mdulos es una opcin de configuracin que tambin depende de la plataforma subyacente. Por ejemplo, el mdulo amoeba slo se proporciona en sistemas que de algn modo tienen acceso a primitivas Amoeba. Hay un mdulo en particular que merece una especial atencin, el mdulo sys, que es siempre interno en cualquier intrprete de Python. Estas variables slo estn definidas si el intrprete est en modo interactivo. La variable sys.path es una lista de cadenas que determina el camino de bsqueda de mdulos del intrprete. Se inicializa a un valor por omisin tomado de la variable de entorno PYTHONPATH o de un valor por omisin interno, si PYTHONPATH no tiene valor. Se puede modificar mediante operaciones de lista estndar, por ejemplo: >>> import sys >>> sys.path.append(/ufs/guido/lib/python)

    3.1.1.6 Paquetes.

    Los paquetes son un mtodo de estructurar el espacio nominal de mdulos de Python, mediante el uso de nombres de mdulos con punto. Por ejemplo, el nombre de mdulo A.B hace referencia a un submdulo denominado B de un paquete denominado A. Del mismo modo que el uso de mdulos evita que los autores de diferentes mdulos tengan que preocuparse de los nombres de variables globales de los otros, la utilizacin de nombres de mdulo con puntos evita que los autores de paquetes multi-mdulo, como Numpy o Pil (Biblioteca de tratamiento de imagen de

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    25

    python), tengan que preocuparse de los nombres de los mdulos ajenos. Supn que deseas disear una coleccin de mdulos (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 extensin, como .wav, .aiff o .au), por lo que podras necesitar crear y mantener una coleccin creciente de mdulos de conversin entre los diferentes formatos. Tambin existen muchas operaciones posibles sobre los datos de sonido (tales como mezclar, aadir eco, ecualizar o generar un efecto artificial de estereofona), por lo que, adems, estaras escribiendo una serie de mdulos interminable para realizar estas operaciones. He aqu una posible estructura de tu paquete (expresado en trminos de sistema de ficheros jerrquico):

    Sonido/ Paquete de nivel superior __init__.py Inicializa el paquete de sonido

    Formatos/ Subpaquete de conversiones de formato de ficheros __init__.py leerwav.py escriwav.py leeraiff.py escriaiff.py leerau.py escriau.py ... Efectos/ Subpaquete de efectos de sonido __init__.py eco.py surround.py inverso.py ... Filtros/ Subpaquete de filtros __init__.py ecualizador.py vocoder.py karaoke.py ...

    Modelo de estructura paquete.mdulo Al importar el paquete, Python rastrea los directorios de sys.path buscando por el subdirectorio de paquetes. Los ficheros __init__.py son necesarios para que Python trate los directorios como contenedores de paquetes. Se hace as para evitar que los directorios con nombres

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    26

    comunes, como test, oculten accidentalmente mdulos vlidos que aparezcan ms tarde dentro del camino de bsqueda. En el caso ms sencillo, __init__.py puede ser un fichero vaco, pero tambin puede ejecutar cdigo de inicializacin del paquete o actualizar la variable __all__, descrita posteriormente. Los usuarios del paquete pueden importar mdulos individuales del paquete, por ejemplo: import Sonido.Efectos.eco

    De este modo se carga el submdulo Sonido.Efectos.eco. Hay que hacer referencia a l por su nombre completo: Sonido.Efectos.eco.filtroeco(entrada, salida, retardo=0.7,

    aten=4)

    Un modo alternativo de importar el submdulo es: from Sonido.Efectos import eco

    As tambin se carga el submdulo eco y se hace disponible sin su prefijo de paquete, por lo que se puede utilizar del siguiente modo: eco.filtroeco(entrada, salida, retardo=0.7, aten=4)

    Y otra variacin es importar la funcin o variable deseada directamente: from Sonido.Efectos.eco import filtroeco

    De nuevo, se carga el submdulo eco, pero se hace la funcin filtroeco disponible directamente: filtroeco(entrada, salida, retardo=0.7, aten=4)

    Observa que al utilizar from paquete import elemento, el elemento puede ser tanto un submdulo (o subpaquete) del paquete como cualquier otro nombre definido por el paquete, como una funcin, clase o variable. La sentencia import comprueba primero si el elemento est definido en el paquete. Si no, asume que es un mdulo e intenta cargarlo. Si no lo consigue, se provoca una excepcin ImportError. Sin embargo, cuando se utiliza la sintaxis;

    import.elemento.subelemento.subsubelemento, cada elemento menos el

    ltimo debe ser un paquete. El ltimo elemento puede ser un mdulo o un paquete,

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    27

    pero no una clase, funcin o variable definida en el nivel superior.

    3.1.1.7 Importar * de un paquete.

    Y qu ocurre cuando el usuario escribe from Sonido.Efectos import *? En teora, debera rastrearse el sistema para encontrar qu submdulos existen en el paquete e importarlos todos. Por desgracia, esta operacin 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 maysculas de un fichero. En estas plataformas, no hay un modo garantizado de conocer si un fichero ECO.PY debera 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 mayscula). La restriccin de nombres de fichero DOS (8+3) aade otro problema para los nombres de mdulo largos. La nica solucin es que el autor del paquete proporcione un ndice explcito del paquete. La sentencia import utiliza la siguiente convencin: Si el cdigo del __init__.py de un paquete define una lista llamada __all__, se considera que es la lista de nombres de mdulos que se deben importar cuando se encuentre from paquete import *. Depende del autor del paquete mantener la lista actualizada cuando se libere una nueva versin del paquete. Los autores del paquete pueden decidir no mantenerlo, si no es til importar * del paquete. Por ejemplo, el fichero Sonido/Efectos/__init__.py podra contener el siguiente cdigo: __all__ = ["eco", "surround", "inverso"] Esto significara que from Sonido.Efectos import * importara los tres submdulos mencionados del paquete Sonido. Si __all__ no est definido, la sentencia from Sonido.Efectos import * no importa todos los mdulos del subpaquete Sonido.Efectos al espacio nominal actual. Slo se asegura de que el paquete Sonido.Efectos ha sido importado (ejecutando posiblemente el cdigo de inicializacin de __init__.py) y luego importa cualesquiera nombres definidos en el paquete. Esto incluye cualquier nombre definido (y submdulos cargados explcitamente) por __init__.py. Tambin incluye cualquier submdulo del paquete explcitamente importado por sentencias import anteriores. Mira este cdigo: import Sonido.Efectos.eco import Sonido.Efectos.surround from Sonido.Efectos import * En este ejemplo, los mdulos eco y surround se importan al espacio nominal vigente porque estn definidos en el paquete Sonido.Efectos cuando se ejecuta la sentencia

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    28

    from...import (esto tambin funciona si est definido __all__).

    Observa que en general se debe evitar importar * de un mdulo o paquete, ya que suele dar como resultado cdigo poco legible. Sin embargo, se puede usar para evitar teclear en exceso en sesiones interactivas y cuando ciertos mdulos estn diseados para exportar slo nombres que cumplan ciertas reglas.

    Recuerda, no hay nada incorrecto en utilizar from Paquete import

    submdulo_concreto. De hecho, es la notacin recomendada salvo que el mdulo

    que importa necesite usar submdulos del mismo nombre de diferentes paquetes.

    3.1.1.8 Referencias internas al paquete.

    Es comn que los submdulos necesiten hacerse referencias cruzadas. Por ejemplo, el mdulo surround podra utilizar el mdulo eco. De hecho, tales referencias son tan comunes que la sentencia import busca antes en el paquete contenedor que en el camino de bsqueda de mdulos estndar. Por ello, basta con que el mdulo surround use import eco o from eco import filtroeco. Si el mdulo importado no se encuentra en el paquete actual (el paquete del que el mdulo actual es submdulo), la sentencia import busca un mdulo 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 submdulos de los paquetes hermanos y se ha de utilizar el nombre completo del subpaquete. Por ejemplo, si el mdulo Sonido.Filtros.vocoder necesita utilizar el mdulo eco del paquete Sonido.Efectos, debe utilizar from Sonido.Efectos import eco.

    3.2 FUNCIONES INCLUIDAS EN NUMPY POR CATEGORAS (ARRAY CREATION)

    A modo indicativo e introductorio, se incluyen las funciones incluidas en la librera Numpy por categoras. Ver ms informacin en http://docs.scipy.org/doc/numpy/. Numerical

    arange(), arrayrange()

    linspace(), logspace()

    Ones and zeros

    empty(), empty_like()

    eye(), identity()

    ones(), ones_like()

    http://docs.scipy.org/doc/numpy/http://www.scipy.org/Numpy_Example_List_With_Doc#arangehttp://www.scipy.org/Numpy_Example_List_With_Doc#arrayrangehttp://www.scipy.org/Numpy_Example_List_With_Doc#linspacehttp://www.scipy.org/Numpy_Example_List_With_Doc#logspacehttp://www.scipy.org/Numpy_Example_List_With_Doc#emptyhttp://www.scipy.org/Numpy_Example_List_With_Doc#empty_likehttp://www.scipy.org/Numpy_Example_List_With_Doc#eyehttp://www.scipy.org/Numpy_Example_List_With_Doc#identityhttp://www.scipy.org/Numpy_Example_List_With_Doc#oneshttp://www.scipy.org/Numpy_Example_List_With_Doc#ones_like
  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera 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_()

    http://www.scipy.org/Numpy_Example_List_With_Doc#trihttp://www.scipy.org/Numpy_Example_List_With_Doc#trilhttp://www.scipy.org/Numpy_Example_List_With_Doc#triuhttp://www.scipy.org/Numpy_Example_List_With_Doc#zeroshttp://www.scipy.org/Numpy_Example_List_With_Doc#zeros_likehttp://www.scipy.org/Numpy_Example_List_With_Doc#arrayhttp://www.scipy.org/Numpy_Example_List_With_Doc#recarrayhttp://www.scipy.org/Numpy_Example_List_With_Doc#asarrayhttp://www.scipy.org/Numpy_Example_List_With_Doc#asanyarrayhttp://www.scipy.org/Numpy_Example_List_With_Doc#asmatrixhttp://www.scipy.org/Numpy_Example_List_With_Doc#copyhttp://www.scipy.org/Numpy_Example_List_With_Doc#fromarrayshttp://www.scipy.org/Numpy_Example_List_With_Doc#frombufferhttp://www.scipy.org/Numpy_Example_List_With_Doc#fromfilehttp://www.scipy.org/Numpy_Example_List_With_Doc#fromfunctionhttp://www.scipy.org/Numpy_Example_List_With_Doc#fromiterhttp://www.scipy.org/Numpy_Example_List_With_Doc#loadtxthttp://www.scipy.org/Numpy_Example_List_With_Doc#bmathttp://www.scipy.org/Numpy_Example_List_With_Doc#diaghttp://www.scipy.org/Numpy_Example_List_With_Doc#diagflathttp://www.scipy.org/Numpy_Example_List_With_Doc#mathttp://www.scipy.org/Numpy_Example_List_With_Doc#matrixhttp://www.scipy.org/Numpy_Example_List_With_Doc#vanderhttp://www.scipy.org/Numpy_Example_List_With_Doc#viewhttp://www.scipy.org/Numpy_Example_List_With_Doc#astypehttp://www.scipy.org/Numpy_Example_List_With_Doc#casthttp://www.scipy.org/Numpy_Example_List_With_Doc#int8http://www.scipy.org/Numpy_Example_List_With_Doc#int16http://www.scipy.org/Numpy_Example_List_With_Doc#int32http://www.scipy.org/Numpy_Example_List_With_Doc#int64http://www.scipy.org/Numpy_Example_List_With_Doc#int128http://www.scipy.org/Numpy_Example_List_With_Doc#uint8http://www.scipy.org/Numpy_Example_List_With_Doc#uint16http://www.scipy.org/Numpy_Example_List_With_Doc#uint32http://www.scipy.org/Numpy_Example_List_With_Doc#uint64http://www.scipy.org/Numpy_Example_List_With_Doc#uint128http://www.scipy.org/Numpy_Example_List_With_Doc#float16http://www.scipy.org/Numpy_Example_List_With_Doc#float32http://www.scipy.org/Numpy_Example_List_With_Doc#float64http://www.scipy.org/Numpy_Example_List_With_Doc#float96http://www.scipy.org/Numpy_Example_List_With_Doc#float128http://www.scipy.org/Numpy_Example_List_With_Doc#float256http://www.scipy.org/Numpy_Example_List_With_Doc#complex32http://www.scipy.org/Numpy_Example_List_With_Doc#complex64http://www.scipy.org/Numpy_Example_List_With_Doc#complex128http://www.scipy.org/Numpy_Example_List_With_Doc#complex192http://www.scipy.org/Numpy_Example_List_With_Doc#complex256http://www.scipy.org/Numpy_Example_List_With_Doc#complex512http://www.scipy.org/Numpy_Example_List_With_Doc#boolhttp://www.scipy.org/Numpy_Example_List_With_Doc#objecthttp://www.scipy.org/Numpy_Example_List_With_Doc#voidhttp://www.scipy.org/Numpy_Example_List_With_Doc#strhttp://www.scipy.org/Numpy_Example_List_With_Doc#unicodehttp://www.scipy.org/Numpy_Example_List_With_Doc#bytehttp://www.scipy.org/Numpy_Example_List_With_Doc#ubytehttp://www.scipy.org/Numpy_Example_List_With_Doc#shorthttp://www.scipy.org/Numpy_Example_List_With_Doc#ushorthttp://www.scipy.org/Numpy_Example_List_With_Doc#intchttp://www.scipy.org/Numpy_Example_List_With_Doc#uintchttp://www.scipy.org/Numpy_Example_List_With_Doc#intphttp://www.scipy.org/Numpy_Example_List_With_Doc#uintphttp://www.scipy.org/Numpy_Example_List_With_Doc#inthttp://www.scipy.org/Numpy_Example_List_With_Doc#uinthttp://www.scipy.org/Numpy_Example_List_With_Doc#longlonghttp://www.scipy.org/Numpy_Example_List_With_Doc#ulonglonghttp://www.scipy.org/Numpy_Example_List_With_Doc#singlehttp://www.scipy.org/Numpy_Example_List_With_Doc#csinglehttp://www.scipy.org/Numpy_Example_List_With_Doc#floathttp://www.scipy.org/Numpy_Example_List_With_Doc#complex
  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera 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()

    http://www.scipy.org/Numpy_Example_List_With_Doc#longfloathttp://www.scipy.org/Numpy_Example_List_With_Doc#clongfloathttp://www.scipy.org/Numpy_Example_List_With_Doc#asarrayhttp://www.scipy.org/Numpy_Example_List_With_Doc#asanyarrayhttp://www.scipy.org/Numpy_Example_List_With_Doc#asmatrixhttp://www.scipy.org/Numpy_Example_List_With_Doc#atleast_1dhttp://www.scipy.org/Numpy_Example_List_With_Doc#atleast_2dhttp://www.scipy.org/Numpy_Example_List_With_Doc#atleast_3dhttp://www.scipy.org/Numpy_Example_List_With_Doc#broadcasthttp://www.scipy.org/Numpy_Example_List_With_Doc#expand_dimshttp://www.scipy.org/Numpy_Example_List_With_Doc#squeezehttp://www.scipy.org/Numpy_Example_List_With_Doc#rollaxishttp://www.scipy.org/Numpy_Example_List_With_Doc#swapaxeshttp://www.scipy.org/Numpy_Example_List_With_Doc#Thttp://www.scipy.org/Numpy_Example_List_With_Doc#transposehttp://www.scipy.org/Numpy_Example_List_With_Doc#flathttp://www.scipy.org/Numpy_Example_List_With_Doc#flattenhttp://www.scipy.org/Numpy_Example_List_With_Doc#ravelhttp://www.scipy.org/Numpy_Example_List_With_Doc#reshapehttp://www.scipy.org/Numpy_Example_List_With_Doc#shapehttp://www.scipy.org/Numpy_Example_List_With_Doc#appendhttp://www.scipy.org/Numpy_Example_List_With_Doc#column_stackhttp://www.scipy.org/Numpy_Example_List_With_Doc#concatenatehttp://www.scipy.org/Numpy_Example_List_With_Doc#dstackhttp://www.scipy.org/Numpy_Example_List_With_Doc#hstackhttp://www.scipy.org/Numpy_Example_List_With_Doc#vstackhttp://www.scipy.org/Numpy_Example_List_With_Doc#array_splithttp://www.scipy.org/Numpy_Example_List_With_Doc#dsplithttp://www.scipy.org/Numpy_Example_List_With_Doc#hsplithttp://www.scipy.org/Numpy_Example_List_With_Doc#splithttp://www.scipy.org/Numpy_Example_List_With_Doc#vsplithttp://www.scipy.org/Numpy_Example_List_With_Doc#tilehttp://www.scipy.org/Numpy_Example_List_With_Doc#repeathttp://www.scipy.org/Numpy_Example_List_With_Doc#deletehttp://www.scipy.org/Numpy_Example_List_With_Doc#inserthttp://www.scipy.org/Numpy_Example_List_With_Doc#resizehttp://www.scipy.org/Numpy_Example_List_With_Doc#trim_zeros
  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera 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

    http://www.scipy.org/Numpy_Example_List_With_Doc#uniquehttp://www.scipy.org/Numpy_Example_List_With_Doc#fliplrhttp://www.scipy.org/Numpy_Example_List_With_Doc#flipudhttp://www.scipy.org/Numpy_Example_List_With_Doc#reshapehttp://www.scipy.org/Numpy_Example_List_With_Doc#rot90http://www.scipy.org/Numpy_Example_List_With_Doc#rot90http://www.scipy.org/Numpy_Example_List_With_Doc#takehttp://www.scipy.org/Numpy_Example_List_With_Doc#puthttp://www.scipy.org/Numpy_Example_List_With_Doc#putmaskhttp://www.scipy.org/Numpy_Example_List_With_Dochttp://www.scipy.org/Numpy_Example_List_With_Doc#slicehttp://www.scipy.org/Numpy_Example_List_With_Doc#newaxishttp://www.scipy.org/Numpy_Example_List_With_Doc#index_exphttp://www.scipy.org/Numpy_Example_List_With_Doc#c_http://www.scipy.org/Numpy_Example_List_With_Doc#r_http://www.scipy.org/Numpy_Example_List_With_Doc#s_http://www.scipy.org/Numpy_Example_List_With_Doc#nonzerohttp://www.scipy.org/Numpy_Example_List_With_Doc#wherehttp://www.scipy.org/Numpy_Example_List_With_Doc#indiceshttp://www.scipy.org/Numpy_Example_List_With_Doc#ix_http://www.scipy.org/Numpy_Example_List_With_Doc#mgridhttp://www.scipy.org/Numpy_Example_List_With_Doc#ogridhttp://www.scipy.org/Numpy_Example_List_With_Doc#choosehttp://www.scipy.org/Numpy_Example_List_With_Doc#wherehttp://www.scipy.org/Numpy_Example_List_With_Doc#compresshttp://www.scipy.org/Numpy_Example_List_With_Doc#diaghttp://www.scipy.org/Numpy_Example_List_With_Doc#diagonalhttp://www.scipy.org/Numpy_Example_List_With_Doc#selecthttp://www.scipy.org/Numpy_Example_List_With_Doc#flat
  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera 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()

    http://www.scipy.org/Numpy_Example_List_With_Doc#ndenumeratehttp://www.scipy.org/Numpy_Example_List_With_Doc#ndindexhttp://www.scipy.org/Numpy_Example_List_With_Doc#allhttp://www.scipy.org/Numpy_Example_List_With_Doc#anyhttp://www.scipy.org/Numpy_Example_List_With_Doc#allclosehttp://www.scipy.org/Numpy_Example_List_With_Doc#alltruehttp://www.scipy.org/Numpy_Example_List_With_Doc#nonzerohttp://www.scipy.org/Numpy_Example_List_With_Doc#piecewisehttp://www.scipy.org/Numpy_Example_List_With_Doc#sometruehttp://www.scipy.org/Numpy_Example_List_With_Doc#argmaxhttp://www.scipy.org/Numpy_Example_List_With_Doc#argminhttp://www.scipy.org/Numpy_Example_List_With_Doc#searchsortedhttp://www.scipy.org/Numpy_Example_List_With_Doc#averagehttp://www.scipy.org/Numpy_Example_List_With_Doc#meanhttp://www.scipy.org/Numpy_Example_List_With_Doc#bincounthttp://www.scipy.org/Numpy_Example_List_With_Doc#histogramhttp://www.scipy.org/Numpy_Example_List_With_Doc#corrcoefhttp://www.scipy.org/Numpy_Example_List_With_Doc#covhttp://www.scipy.org/Numpy_Example_List_With_Doc#maxhttp://www.scipy.org/Numpy_Example_List_With_Doc#minhttp://www.scipy.org/Numpy_Example_List_With_Doc#ptphttp://www.scipy.org/Numpy_Example_List_With_Doc#medianhttp://www.scipy.org/Numpy_Example_List_With_Doc#stdhttp://www.scipy.org/Numpy_Example_List_With_Doc#varhttp://www.scipy.org/Numpy_Example_List_With_Doc#abshttp://www.scipy.org/Numpy_Example_List_With_Doc#absolutehttp://www.scipy.org/Numpy_Example_List_With_Doc#addhttp://www.scipy.org/Numpy_Example_List_With_Doc#multiplyhttp://www.scipy.org/Numpy_Example_List_With_Doc#anglehttp://www.scipy.org/Numpy_Example_List_With_Doc#arccoshttp://www.scipy.org/Numpy_Example_List_With_Doc#arcsinhttp://www.scipy.org/Numpy_Example_List_With_Doc#arctanhttp://www.scipy.org/Numpy_Example_List_With_Doc#arccoshhttp://www.scipy.org/Numpy_Example_List_With_Doc#arcsinhhttp://www.scipy.org/Numpy_Example_List_With_Doc#arctanhhttp://www.scipy.org/Numpy_Example_List_With_Doc#arctan2http://www.scipy.org/Numpy_Example_List_With_Doc#bitwise_andhttp://www.scipy.org/Numpy_Example_List_With_Doc#bitwise_orhttp://www.scipy.org/Numpy_Example_List_With_Doc#bitwise_xorhttp://www.scipy.org/Numpy_Example_List_With_Doc#ceilhttp://www.scipy.org/Numpy_Example_List_With_Doc#floorhttp://www.scipy.org/Numpy_Example_List_With_Doc#roundhttp://www.scipy.org/Numpy_Example_List_With_Doc#conjhttp://www.scipy.org/Numpy_Example_List_With_Doc#conjugatehttp://www.scipy.org/Numpy_Example_List_With_Doc#coshttp://www.scipy.org/Numpy_Example_List_With_Doc#sinhttp://www.scipy.org/Numpy_Example_List_With_Doc#tanhttp://www.scipy.org/Numpy_Example_List_With_Doc#coshhttp://www.scipy.org/Numpy_Example_List_With_Doc#sinhhttp://www.scipy.org/Numpy_Example_List_With_Doc#tanhhttp://www.scipy.org/Numpy_Example_List_With_Doc#fix
  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera 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()

    http://www.scipy.org/Numpy_Example_List_With_Doc#hypothttp://www.scipy.org/Numpy_Example_List_With_Doc#logical_andhttp://www.scipy.org/Numpy_Example_List_With_Doc#logical_nothttp://www.scipy.org/Numpy_Example_List_With_Doc#logical_orhttp://www.scipy.org/Numpy_Example_List_With_Doc#logical_xorhttp://www.scipy.org/Numpy_Example_List_With_Doc#maximumhttp://www.scipy.org/Numpy_Example_List_With_Doc#minimumhttp://www.scipy.org/Numpy_Example_List_With_Doc#accumulatehttp://www.scipy.org/Numpy_Example_List_With_Doc#outerhttp://www.scipy.org/Numpy_Example_List_With_Doc#reducehttp://www.scipy.org/Numpy_Example_List_With_Doc#apply_along_axishttp://www.scipy.org/Numpy_Example_List_With_Doc#apply_over_axishttp://www.scipy.org/Numpy_Example_List_With_Doc#vectorizehttp://www.scipy.org/Numpy_Example_List_With_Doc#betahttp://www.scipy.org/Numpy_Example_List_With_Doc#binomialhttp://www.scipy.org/Numpy_Example_List_With_Doc#gumbelhttp://www.scipy.org/Numpy_Example_List_With_Doc#poissonhttp://www.scipy.org/Numpy_Example_List_With_Doc#standard_normalhttp://www.scipy.org/Numpy_Example_List_With_Doc#uniformhttp://www.scipy.org/Numpy_Example_List_With_Doc#vonmiseshttp://www.scipy.org/Numpy_Example_List_With_Doc#weibullhttp://www.scipy.org/Numpy_Example_List_With_Doc#byteshttp://www.scipy.org/Numpy_Example_List_With_Doc#permutationhttp://www.scipy.org/Numpy_Example_List_With_Doc#randhttp://www.scipy.org/Numpy_Example_List_With_Doc#randinthttp://www.scipy.org/Numpy_Example_List_With_Doc#randnhttp://www.scipy.org/Numpy_Example_List_With_Doc#random_integershttp://www.scipy.org/Numpy_Example_List_With_Doc#random_samplehttp://www.scipy.org/Numpy_Example_List_With_Doc#ranfhttp://www.scipy.org/Numpy_Example_List_With_Doc#samplehttp://www.scipy.org/Numpy_Example_List_With_Doc#seedhttp://www.scipy.org/Numpy_Example_List_With_Doc#shufflehttp://www.scipy.org/Numpy_Example_List_With_Doc#cliphttp://www.scipy.org/Numpy_Example_List_With_Doc#crosshttp://www.scipy.org/Numpy_Example_List_With_Doc#cumprodhttp://www.scipy.org/Numpy_Example_List_With_Doc#cumsumhttp://www.scipy.org/Numpy_Example_List_With_Doc#diffhttp://www.scipy.org/Numpy_Example_List_With_Doc#digitizehttp://www.scipy.org/Numpy_Example_List_With_Doc#dothttp://www.scipy.org/Numpy_Example_List_With_Doc#innerhttp://www.scipy.org/Numpy_Example_List_With_Doc#outerhttp://www.scipy.org/Numpy_Example_List_With_Doc#invhttp://www.scipy.org/Numpy_Example_List_With_Doc#pinvhttp://www.scipy.org/Numpy_Example_List_With_Doc#poly1dhttp://www.scipy.org/Numpy_Example_List_With_Doc#polyfit
  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera 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()

    http://www.scipy.org/Numpy_Example_List_With_Doc#prodhttp://www.scipy.org/Numpy_Example_List_With_Doc#sumhttp://www.scipy.org/Numpy_Example_List_With_Doc#tensordothttp://www.scipy.org/Numpy_Example_List_With_Doc#vdothttp://www.scipy.org/Numpy_Example_List_With_Doc#ffthttp://www.scipy.org/Numpy_Example_List_With_Doc#fftfreqhttp://www.scipy.org/Numpy_Example_List_With_Doc#fftshifthttp://www.scipy.org/Numpy_Example_List_With_Doc#iffthttp://www.scipy.org/Numpy_Example_List_With_Doc#invhttp://www.scipy.org/Numpy_Example_List_With_Doc#lstsqhttp://www.scipy.org/Numpy_Example_List_With_Doc#solvehttp://www.scipy.org/Numpy_Example_List_With_Doc#svdhttp://www.scipy.org/Numpy_Example_List_With_Doc#tracehttp://www.scipy.org/Numpy_Example_List_With_Doc#savetxthttp://www.scipy.org/Numpy_Example_List_With_Doc#set_printoptionshttp://www.scipy.org/Numpy_Example_List_With_Doc#tofilehttp://www.scipy.org/Numpy_Example_List_With_Doc#tolisthttp://www.scipy.org/Numpy_Example_List_With_Doc#sorthttp://www.scipy.org/Numpy_Example_List_With_Doc#argsorthttp://www.scipy.org/Numpy_Example_List_With_Doc#binary_reprhttp://www.scipy.org/Numpy_Example_List_With_Doc#dtypehttp://www.scipy.org/Numpy_Example_List_With_Doc#fillhttp://www.scipy.org/Numpy_Example_List_With_Doc#finfohttp://www.scipy.org/Numpy_Example_List_With_Doc#generichttp://www.scipy.org/Numpy_Example_List_With_Doc#imaghttp://www.scipy.org/Numpy_Example_List_With_Doc#realhttp://www.scipy.org/Numpy_Example_List_With_Doc#infhttp://www.scipy.org/Numpy_Example_List_With_Doc#nanhttp://www.scipy.org/Numpy_Example_List_With_Doc#itemhttp://www.scipy.org/Numpy_Example_List_With_Doc#lexsorthttp://www.scipy.org/Numpy_Example_List_With_Doc#ndimhttp://www.scipy.org/Numpy_Example_List_With_Doc#shapehttp://www.scipy.org/Numpy_Example_List_With_Doc#typeDict
  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    35

    Numpy Functions by Category (ltima edicin 2008-06-13 12:26:59

    efectuada por jh)

    MoinMoin Powered

    Pyt

    http://www.scipy.org/jhhttp://moinmoin.wikiwikiweb.de/http://www.python.org/
  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    36

    4 METODOLOGA En este apartado se proporciona una descripcin detallada de la metodologa utilizada para el desarrollo e implementacin de la biblioteca. Utilizando un paradigma Estructurado de la programacin, que considera que la programacin se divide en bloques (procedimientos y funciones) que, pueden o no, comunicarse entre s. Esto, nos permite reutilizar cdigo programado y nos proporciona una mejor comprensin de la programacin. En el ltimo paquete de la librera, tambin se ha realizado una incursin a la programacin orientada a objetos con la declaracin de algunas clases.

    4.1 ESTRUCTURA DE LA LIBRERA GEOTOPO En nuestro caso hemos partido del concepto de creacin de una librera de funciones del mbito de la Topografa y Geodesia. Esta librera de Python se estructura como un paquete con el nombre de la librera geotopo, que a su vez contiene 6 paquetes ms, segn tipologa. As, tenemos:

    Imagen de los paquetes incluidos dentro del paquete (librera) geotopo

    Por orden intuitivo desde el punto de vista de aplicacin de las herramientas tenemos los siguientes paquetes:

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    37

    general que contiene funciones de tipo general y transversal al resto de herramientas.

    Mdulos implementados dentro de general

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    38

    topografia que contiene aplicacin topogrficas

    Mdulos implementados dentro de topografia

  • DESARROLLO DE HERRAMIENTAS EN PYTHON PARA CLCULOS GEODSICOS Y

    TOPOGRFICOS

    Mster en Geotecnologas Cartogrf