{"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":"2022-02-25T21:21:07","modified_gmt":"2022-02-26T02:21:07","slug":"procesa-datos-ubica-los-puntos-en-grafica-2d-o-3d","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/girni\/procesa-datos-ubica-los-puntos-en-grafica-2d-o-3d\/","title":{"rendered":"3.4 Procesa datos. Ubica los puntos en gr\u00e1fica 2D o 3D"},"content":{"rendered":"<p>Para revisar los datos de coordenadas y ubicaciones obtenidos en el proceso anterior, se grafica la ubicaci\u00f3n de los puntos usando las coordenadas este, norte y altura registradas con el GPS diferencial.<\/p>\n<p>Las gr\u00e1ficas se pueden realizar en 2D y en 3D, se adjunta los resultados:<\/p>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/11\/resumen_Ubica012D.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2731 aligncenter\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/11\/resumen_Ubica012D.png\" alt=\"\" width=\"640\" height=\"480\" 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>Como referencia se usan las etiquetas de los gateways que permiten observar la posici\u00f3n relativa de cada punto.<\/p>\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 obervar con mayor detalle la ubicaci\u00f3n de cada punto<\/p>\n<p>Una observaci\u00f3n en 3D de los puntos permite revisar que lso valores de altura presentan menor precisi\u00f3n que la de posici\u00f3n, principalmente en puntos ubicados entre vegetaci\u00f3n.<\/p>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/11\/resumen_Ubica01_3D.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2733 size-full\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/11\/resumen_Ubica01_3D.gif\" alt=\"\" width=\"512\" height=\"384\" \/><\/a><\/p>\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<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<hr \/>\n<h2>Algoritmo en Python<\/h2>\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<pre><span style=\"color: #ff0000\"># Datos desde GPS Diferencial archivo.txt<\/span>\r\n<span style=\"color: #ff0000\"># Graficas de coordenadas 2D o 3D<\/span>\r\n<span style=\"color: #ff0000\"># Girni 2020-10-07 edelros@espol.edu.ec<\/span>\r\n<span style=\"color: #d35400\">import<\/span> numpy <span style=\"color: #d35400\">as<\/span> np\r\n<span style=\"color: #d35400\">import<\/span> pandas <span style=\"color: #d35400\">as<\/span> pd\r\n<span style=\"color: #d35400\">import<\/span> matplotlib.pyplot <span style=\"color: #d35400\">as<\/span> plt\r\n<span style=\"color: #d35400\">from<\/span> mpl_toolkits.mplot3d <span style=\"color: #d35400\">import<\/span> Axes3D\r\n<span style=\"color: #d35400\">import<\/span> matplotlib.animation <span style=\"color: #d35400\">as<\/span> animation\r\n\r\n<span style=\"color: #ff0000\"># INGRESO<\/span>\r\n<span style=\"color: #ff0000\"># Archivo procesado con distancias<\/span>\r\narch_gpsrsm = <span style=\"color: #008000\">'resumen_ubica01.txt'<\/span>\r\n\r\n<span style=\"color: #ff0000\"># Parametros de gr\u00e1fica<\/span>\r\nmostrargrp = [<span style=\"color: #008000\">'FIEC'<\/span>,<span style=\"color: #008000\">'FCNM'<\/span>,<span style=\"color: #008000\">'RECT'<\/span>]\r\n<span style=\"color: #ff0000\"># ['FIEC','FCNM','RECT','CIRC']<\/span>\r\n\r\nmostrartip = [<span style=\"color: #008000\">'punto'<\/span>,<span style=\"color: #008000\">'1m'<\/span>,<span style=\"color: #008000\">'dispositivo'<\/span>,<span style=\"color: #008000\">'gtw'<\/span>]\r\n<span style=\"color: #ff0000\"># ['punto','1m','dispositivo','gtw']<\/span>\r\n\r\ntipograf = <span style=\"color: #008000\">'3D'<\/span> <span style=\"color: #ff0000\"># '2D','3D'<\/span>\r\narch_rotacion = <span style=\"color: #008000\">'rotando3D.gif'<\/span>\r\n\r\n<span style=\"color: #ff0000\"># Referencias<\/span>\r\nbaliza  = {<span style=\"color: #008000\">'d1'<\/span>:<span style=\"color: #008000\">'gtwRECT'<\/span>,\r\n           <span style=\"color: #008000\">'d2'<\/span>:<span style=\"color: #008000\">'gtwFIEC'<\/span>,\r\n           <span style=\"color: #008000\">'d3'<\/span>:<span style=\"color: #008000\">'gtwFCNM'<\/span>}\r\ngrupo   = [<span style=\"color: #008000\">'FIEC'<\/span> ,<span style=\"color: #008000\">'FCNM'<\/span>  ,<span style=\"color: #008000\">'RECT'<\/span>,<span style=\"color: #008000\">'CIRC'<\/span>]\r\ncolores = [<span style=\"color: #008000\">'green'<\/span>,<span style=\"color: #008000\">'orange'<\/span>,<span style=\"color: #008000\">'grey'<\/span>,<span style=\"color: #008000\">'magenta'<\/span>]\r\ntipo    = [<span style=\"color: #008000\">'punto'<\/span>,<span style=\"color: #008000\">'1m'<\/span> ,<span style=\"color: #008000\">'gtw'<\/span>,<span style=\"color: #008000\">'dispositivo'<\/span>]\r\nmarcas  = [    <span style=\"color: #008000\">'o'<\/span>,<span style=\"color: #008000\">'D'<\/span>  ,<span style=\"color: #008000\">'D'<\/span>  ,<span style=\"color: #008000\">'*'<\/span> ]\r\n\r\n<span style=\"color: #ff0000\"># PROCEDIMIENTO<\/span>\r\n<span style=\"color: #ff0000\"># leer coordenadas<\/span>\r\nubica = pd.read_csv(arch_gpsrsm, index_col=<span style=\"color: #008000\">'etiqueta'<\/span>)\r\nubica = pd.DataFrame(ubica)\r\nn = <span style=\"color: #ff00ff\">len<\/span>(ubica)\r\n\r\n<span style=\"color: #ff0000\"># puntos de vertices<\/span>\r\nvertices = ubica.loc[baliza.values()]\r\n\r\n<span style=\"color: #ff0000\"># segmento de grupo\/tipo<\/span>\r\nubica[<span style=\"color: #008000\">'usar'<\/span>]  = <span style=\"color: #d35400\">False<\/span>\r\nubica[<span style=\"color: #008000\">'color'<\/span>] = <span style=\"color: #008000\">'yellow'<\/span>\r\nubica[<span style=\"color: #008000\">'marca'<\/span>] = <span style=\"color: #008000\">'o'<\/span>\r\n<span style=\"color: #d35400\">for<\/span> fila <span style=\"color: #d35400\">in<\/span> ubica.index:\r\n    unaeti  = <span style=\"color: #ff00ff\">str<\/span>(fila)\r\n    ungrupo = ubica[<span style=\"color: #008000\">'grupo'<\/span>][fila]\r\n    untipo  = ubica[<span style=\"color: #008000\">'tipo'<\/span>][fila]\r\n    cond1  = ungrupo <span style=\"color: #d35400\">in<\/span> mostrargrp\r\n    cond2  = untipo <span style=\"color: #d35400\">in<\/span> mostrartip\r\n    <span style=\"color: #d35400\">if<\/span> cond1:\r\n        cual = grupo.index(ungrupo)\r\n        ubica.loc[fila,<span style=\"color: #008000\">'color'<\/span>] = colores[cual]\r\n    <span style=\"color: #d35400\">if<\/span> cond2:\r\n        cual = tipo.index(untipo)\r\n        ubica.loc[fila,<span style=\"color: #008000\">'marca'<\/span>] = marcas[cual]\r\n    <span style=\"color: #d35400\">if<\/span> (cond1 <span style=\"color: #d35400\">and<\/span> cond2):\r\n        ubica.loc[fila,<span style=\"color: #008000\">'usar'<\/span>]  = <span style=\"color: #d35400\">True<\/span>\r\n\r\n<span style=\"color: #ff0000\"># SALIDA<\/span>\r\n<span style=\"color: #ff00ff\">print<\/span>(ubica.head())\r\n\r\n<span style=\"color: #ff0000\"># Grafica 2D --------------------------<\/span>\r\n<span style=\"color: #d35400\">if<\/span> tipograf == <span style=\"color: #008000\">'2D'<\/span>:\r\n    figura, grafica = plt.subplots()\r\n    <span style=\"color: #d35400\">for<\/span> fila <span style=\"color: #d35400\">in<\/span> ubica.index:\r\n        unalon = ubica[<span style=\"color: #008000\">'c_este'<\/span>][fila]\r\n        unalat = ubica[<span style=\"color: #008000\">'c_norte'<\/span>][fila]\r\n        unaalt = ubica[<span style=\"color: #008000\">'altitud'<\/span>][fila]\r\n        usar   = ubica[<span style=\"color: #008000\">'usar'<\/span>][fila]\r\n        uncolor = ubica[<span style=\"color: #008000\">'color'<\/span>][fila] \r\n        unamarca = ubica[<span style=\"color: #008000\">'marca'<\/span>][fila]\r\n        untipo = ubica[<span style=\"color: #008000\">'tipo'<\/span>][fila]\r\n        <span style=\"color: #d35400\">if<\/span> usar:\r\n            grafica.scatter(unalon,unalat,\r\n                            color = uncolor,\r\n                            marker = unamarca,\r\n                            label = fila)\r\n        <span style=\"color: #d35400\">if<\/span> usar <span style=\"color: #d35400\">and<\/span> untipo==<span style=\"color: #008000\">'gtw'<\/span>:\r\n            grafica.annotate(fila,\r\n                             (unalon,unalat))\r\n    plt.xlabel(<span style=\"color: #008000\">'UTM_este'<\/span>)\r\n    plt.ylabel(<span style=\"color: #008000\">'UTM_norte'<\/span>)\r\n    plt.title(<span style=\"color: #008000\">'Ubicacion UTM'<\/span>)\r\n    plt.show()\r\n\r\n<span style=\"color: #ff0000\"># Grafica 3D --------------------------<\/span>\r\n<span style=\"color: #d35400\">if<\/span> tipograf == <span style=\"color: #008000\">'3D'<\/span>:\r\n    figura = plt.figure()\r\n    grafica = Axes3D(figura)\r\n    <span style=\"color: #d35400\">for<\/span> fila <span style=\"color: #d35400\">in<\/span> ubica.index:\r\n        unalon  = ubica[<span style=\"color: #008000\">'c_este'<\/span>][fila]\r\n        unalat  = ubica[<span style=\"color: #008000\">'c_norte'<\/span>][fila]\r\n        unaalt  = ubica[<span style=\"color: #008000\">'altitud'<\/span>][fila]\r\n        usar    = ubica[<span style=\"color: #008000\">'usar'<\/span>][fila]\r\n        uncolor = ubica[<span style=\"color: #008000\">'color'<\/span>][fila] \r\n        unamarca = ubica[<span style=\"color: #008000\">'marca'<\/span>][fila]\r\n        untipo  = ubica[<span style=\"color: #008000\">'tipo'<\/span>][fila]\r\n        <span style=\"color: #d35400\">if<\/span> usar:\r\n            grafica.scatter(unalon,unalat,\r\n                            unaalt,\r\n                            marker = unamarca,\r\n                            color = uncolor,\r\n                            label = fila)\r\n        <span style=\"color: #d35400\">if<\/span> (usar <span style=\"color: #d35400\">and<\/span> (untipo==<span style=\"color: #008000\">'gtw'<\/span>)):\r\n            grafica.text(unalon,unalat,\r\n                         unaalt,fila)\r\n    grafica.set_xlabel(<span style=\"color: #008000\">'UTM_este'<\/span>)\r\n    grafica.set_ylabel(<span style=\"color: #008000\">'UTM_norte'<\/span>)\r\n    grafica.set_zlabel(<span style=\"color: #008000\">'altitud'<\/span>)\r\n    grafica.set_title(<span style=\"color: #008000\">'Ubicacion UTM'<\/span>)\r\n\r\n    <span style=\"color: #d35400\">def<\/span> <span style=\"color: #0000e6\">rotate<\/span>(angle):\r\n        grafica.view_init(azim=angle)\r\n\r\n    <span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">\"realizando animation\"<\/span>)\r\n    rot_animation = animation.FuncAnimation(figura,\r\n                    rotate,\r\n                    frames = np.arange(45,360+45,10),\r\n                    interval = 200)\r\n    rot_animation.save(arch_rotacion, dpi=80,\r\n                    writer = animation.PillowWriter(fps=5))\r\n    plt.show()\r\n<\/pre>\n<p><strong>Referencia<\/strong>: <a href=\"http:\/\/blog.espol.edu.ec\/analisisnumerico\/recursos\/resumen-python\/graficas-3d-puntos-dispersos-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 grafica 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 los gateways &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/blog.espol.edu.ec\/girni\/procesa-datos-ubica-los-puntos-en-grafica-2d-o-3d\/\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \"3.4 Procesa datos. Ubica los puntos en gr\u00e1fica 2D o 3D\"<\/span><\/a><\/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-localizacion-rssi-lora","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":15,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2730\/revisions"}],"predecessor-version":[{"id":3974,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2730\/revisions\/3974"}],"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}]}}