{"id":2730,"date":"2020-11-21T16:31:39","date_gmt":"2020-11-21T21:31:39","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/girni\/?p=2730"},"modified":"2026-08-04T21:21:09","modified_gmt":"2026-08-05T02:21:09","slug":"procesa-datos-ubica-grafica-2d-3d","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/girni\/procesa-datos-ubica-grafica-2d-3d\/","title":{"rendered":"3.4 Procesa datos - Ubica los puntos en gr\u00e1fica 2D o 3D"},"content":{"rendered":"\n<p>Para revisar los datos de coordenadas y ubicaciones obtenidos en el proceso anterior, se realiza la gr\u00e1fica la ubicaci\u00f3n de los puntos usando las coordenadas este, norte y altura registradas con el GPS diferencial.<\/p>\n\n\n\n<p>Las gr\u00e1ficas se pueden realizar en 2D y en 3D, se adjunta los resultados:<\/p>\n\n\n\n<figure class=\"wp-block-image alignleft\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/11\/resumen_Ubica012D.png\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/11\/resumen_Ubica012D.png\" alt=\"\" class=\"wp-image-2731\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2020\/11\/resumen_Ubica012D.png 640w, https:\/\/blog.espol.edu.ec\/girni\/files\/2020\/11\/resumen_Ubica012D-300x225.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/figure>\n\n\n\n<p>Como referencia se usan las etiquetas de los gateways que permiten observar la posici\u00f3n relativa de cada punto.<\/p>\n\n\n\n<p>Los grupos de puntos a mostrar se pueden seleccionar en el bloque de ingreso dentro de los par\u00e1metros de la gr\u00e1fica, permitiendo observar con mayor detalle la ubicaci\u00f3n de cada punto<\/p>\n\n\n\n<p>Una observaci\u00f3n en 3D de los puntos permite revisar que los valores de altura presentan menor precisi\u00f3n que la de posici\u00f3n, principalmente en puntos ubicados entre vegetaci\u00f3n.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/11\/resumen_Ubica01_3D.gif\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"384\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/11\/resumen_Ubica01_3D.gif\" alt=\"\" class=\"wp-image-2733\" \/><\/a><\/figure>\n\n\n\n<p>Se observa que las medidas de alturas tienen valores muy variables, por lo que el uso de los valores de altura se descarta inicialmente de los modelos. Se podr\u00eda realizar posteriormente un an\u00e1lisis m\u00e1s detallado de lo presentado con los valores de las alturas.<\/p>\n\n\n\n<p><em><strong>archivo de resumen<\/strong><\/em> de coordenadas y distancias : <a href=\"https:\/\/drive.google.com\/file\/d\/1pCb1D-U0Z5Jg3FssnhqayOi2GUJS_C2k\/view?usp=sharing\">resumen_ubica01.txt<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">Algoritmo en Python<\/h2>\n\n\n\n<p>En el caso de gr\u00e1ficas 3D, para crear el archivo.gif animado es necesario instalar imagemagic. El nombre del archivo animado es 'rotando3D.gif' que se guarda en el mismo directorio del algoritmo.py.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Datos desde GPS Diferencial archivo.txt\n# Graficas de coordenadas 2D o 3D\n# Girni 2020-10-07 edelros@espol.edu.ec\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nfrom mpl_toolkits.mplot3d import Axes3D\nimport matplotlib.animation as animation\n\n# INGRESO\n# Archivo procesado con distancias\narch_gpsrsm = 'resumen_ubica01.txt'\n\n# Parametros de gr\u00e1fica\nmostrargrp = &#x5B;'FIEC','FCNM','RECT']\n# &#x5B;'FIEC','FCNM','RECT','CIRC']\n\nmostrartip = &#x5B;'punto','1m','dispositivo','gtw']\n# &#x5B;'punto','1m','dispositivo','gtw']\n\ntipograf = '3D' # '2D','3D'\narch_rotacion = 'rotando3D.gif'\n\n# Referencias\nbaliza  = {'d1':'gtwRECT',\n           'd2':'gtwFIEC',\n           'd3':'gtwFCNM'}\ngrupo   = &#x5B;'FIEC' ,'FCNM'  ,'RECT','CIRC']\ncolores = &#x5B;'green','orange','grey','magenta']\ntipo    = &#x5B;'punto','1m' ,'gtw','dispositivo']\nmarcas  = &#x5B;    'o','D'  ,'D'  ,'*' ]\n\n# PROCEDIMIENTO\n# leer coordenadas\nubica = pd.read_csv(arch_gpsrsm, index_col='etiqueta')\nubica = pd.DataFrame(ubica)\nn = len(ubica)\n\n# puntos de vertices\nvertices = ubica.loc&#x5B;baliza.values()]\n\n# segmento de grupo\/tipo\nubica&#x5B;'usar']  = False\nubica&#x5B;'color'] = 'yellow'\nubica&#x5B;'marca'] = 'o'\nfor fila in ubica.index:\n    unaeti  = str(fila)\n    ungrupo = ubica&#x5B;'grupo']&#x5B;fila]\n    untipo  = ubica&#x5B;'tipo']&#x5B;fila]\n    cond1  = ungrupo in mostrargrp\n    cond2  = untipo in mostrartip\n    if cond1:\n        cual = grupo.index(ungrupo)\n        ubica.loc&#x5B;fila,'color'] = colores&#x5B;cual]\n    if cond2:\n        cual = tipo.index(untipo)\n        ubica.loc&#x5B;fila,'marca'] = marcas&#x5B;cual]\n    if (cond1 and cond2):\n        ubica.loc&#x5B;fila,'usar']  = True\n\n# SALIDA\nprint(ubica.head())\n\n# Grafica 2D --------------------------\nif tipograf == '2D':\n    figura, grafica = plt.subplots()\n    for fila in ubica.index:\n        unalon = ubica&#x5B;'c_este']&#x5B;fila]\n        unalat = ubica&#x5B;'c_norte']&#x5B;fila]\n        unaalt = ubica&#x5B;'altitud']&#x5B;fila]\n        usar   = ubica&#x5B;'usar']&#x5B;fila]\n        uncolor = ubica&#x5B;'color']&#x5B;fila] \n        unamarca = ubica&#x5B;'marca']&#x5B;fila]\n        untipo = ubica&#x5B;'tipo']&#x5B;fila]\n        if usar:\n            grafica.scatter(unalon,unalat,\n                            color = uncolor,\n                            marker = unamarca,\n                            label = fila)\n        if usar and untipo=='gtw':\n            grafica.annotate(fila,\n                             (unalon,unalat))\n    plt.xlabel('UTM_este')\n    plt.ylabel('UTM_norte')\n    plt.title('Ubicacion UTM')\n    plt.show()\n\n# Grafica 3D --------------------------\nif tipograf == '3D':\n    figura = plt.figure()\n    grafica = Axes3D(figura)\n    for fila in ubica.index:\n        unalon  = ubica&#x5B;'c_este']&#x5B;fila]\n        unalat  = ubica&#x5B;'c_norte']&#x5B;fila]\n        unaalt  = ubica&#x5B;'altitud']&#x5B;fila]\n        usar    = ubica&#x5B;'usar']&#x5B;fila]\n        uncolor = ubica&#x5B;'color']&#x5B;fila] \n        unamarca = ubica&#x5B;'marca']&#x5B;fila]\n        untipo  = ubica&#x5B;'tipo']&#x5B;fila]\n        if usar:\n            grafica.scatter(unalon,unalat,\n                            unaalt,\n                            marker = unamarca,\n                            color = uncolor,\n                            label = fila)\n        if (usar and (untipo=='gtw')):\n            grafica.text(unalon,unalat,\n                         unaalt,fila)\n    grafica.set_xlabel('UTM_este')\n    grafica.set_ylabel('UTM_norte')\n    grafica.set_zlabel('altitud')\n    grafica.set_title('Ubicacion UTM')\n\n    def rotate(angle):\n        grafica.view_init(azim=angle)\n\n    print(&quot;realizando animation&quot;)\n    rot_animation = animation.FuncAnimation(figura,\n                    rotate,\n                    frames = np.arange(45,360+45,10),\n                    interval = 200)\n    rot_animation.save(arch_rotacion, dpi=80,\n                    writer = animation.PillowWriter(fps=5))\n    plt.show()\n<\/pre><\/div>\n\n\n<p><strong>Referencia<\/strong>: <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/fp-u08\/graficas-3d-en-python\/#scatter\">Graficas 3D puntos dispersos-scatter<\/a> en m\u00e9todos num\u00e9ricos<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Para revisar los datos de coordenadas y ubicaciones obtenidos en el proceso anterior, se realiza la gr\u00e1fica la ubicaci\u00f3n de los puntos usando las coordenadas este, norte y altura registradas con el GPS diferencial. Las gr\u00e1ficas se pueden realizar en 2D y en 3D, se adjunta los resultados: Como referencia se usan las etiquetas de [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1463489],"tags":[20777],"class_list":["post-2730","post","type-post","status-publish","format-standard","hentry","category-lorawan-localizacion-rssi","tag-python"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2730","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/comments?post=2730"}],"version-history":[{"count":18,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2730\/revisions"}],"predecessor-version":[{"id":4839,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2730\/revisions\/4839"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/media?parent=2730"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/categories?post=2730"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/tags?post=2730"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}