{"id":3068,"date":"2021-02-17T12:16:44","date_gmt":"2021-02-17T17:16:44","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/girni\/?p=3068"},"modified":"2021-02-17T12:16:44","modified_gmt":"2021-02-17T17:16:44","slug":"5-5-localiza-por-trilateracion-revisa-un-punto","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/girni\/5-5-localiza-por-trilateracion-revisa-un-punto\/","title":{"rendered":"5.5 Localiza por Trilateraci\u00f3n \u2013 Revisa un punto"},"content":{"rendered":"<p>Para revisar los resultados de un solo punto, de todos los resultados anteriores, se realiza una gr\u00e1fica que muestre los c\u00edrculos de cada baliza con los radios de las distancias estimadas.<\/p>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Trilatera01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3021\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Trilatera01.png\" alt=\"\" width=\"613\" height=\"621\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Trilatera01.png 613w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Trilatera01-296x300.png 296w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Trilatera01-100x100.png 100w\" sizes=\"auto, (max-width: 613px) 100vw, 613px\" \/><\/a><\/p>\n<p>La gr\u00e1fica permite observar los detalles de trilateraci\u00f3n para ese punto en particular.<\/p>\n<pre>Resultados: \r\nbaricentro:  [ 614804.97 9762762.46]\r\nbar_error:   72.84\r\npoligono x:  [614760.66 614776.52 614877.73]\r\npoligono y:  [9762742.69 9762778.91 9762765.77]\r\n<\/pre>\n<p>Por ejemplo para el caso del punto 'FIEC130' del que no se registr\u00f3 se\u00f1al desde 'gtwFCNM' se tiene:<\/p>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/TrilateraSectorEstima2sect02.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-3069 aligncenter\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/TrilateraSectorEstima2sect02.png\" alt=\"\" width=\"426\" height=\"452\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/TrilateraSectorEstima2sect02.png 426w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/TrilateraSectorEstima2sect02-283x300.png 283w\" sizes=\"auto, (max-width: 426px) 100vw, 426px\" \/><\/a><\/p>\n<hr \/>\n<h2>Algoritmo Python<\/h2>\n<pre><span style=\"color: #ff0000\"># trilaterando - gr\u00e1fica de un punto<\/span>\r\n<span style=\"color: #ff0000\"># Girni 2020-10-07 propuesta: 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> matplotlib.pyplot <span style=\"color: #d35400\">as<\/span> plt\r\n<span style=\"color: #d35400\">import<\/span> pandas <span style=\"color: #d35400\">as<\/span> pd\r\n<span style=\"color: #d35400\">import<\/span> girni_lora_libreria <span style=\"color: #d35400\">as<\/span> girni\r\n    \r\n<span style=\"color: #ff0000\"># INGRESO<\/span>\r\ncadapunto = <span style=\"color: #008000\">'FIEC111'<\/span>\r\n\r\nmodo       = <span style=\"color: #008000\">'rx'<\/span>\r\nmedida     = <span style=\"color: #008000\">'rssi'<\/span>\r\narch_trilatera = <span style=\"color: #008000\">'rsmP07_'<\/span>+medida+<span style=\"color: #008000\">'trilateraSector01.txt'<\/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\ntolera = 1e-8\r\n\r\n<span style=\"color: #ff0000\"># PROCEDIMIENTO <\/span>\r\nbaliza_key = <span style=\"color: #ff00ff\">list<\/span>(baliza.keys())\r\nbaliza_val = <span style=\"color: #ff00ff\">list<\/span>(baliza.values())\r\n\r\n<span style=\"color: #ff0000\"># leer datos<\/span>\r\ntabla = pd.read_csv(arch_trilatera, index_col=<span style=\"color: #008000\">'etiqueta'<\/span>)\r\ntabla = pd.DataFrame(tabla)\r\n\r\n<span style=\"color: #ff0000\"># Revisa indices<\/span>\r\nexiste = 0\r\n<span style=\"color: #d35400\">if<\/span> cadapunto <span style=\"color: #d35400\">in<\/span> tabla.index:\r\n    <span style=\"color: #ff0000\"># coordenadas de baliza<\/span>\r\n    coordbaliza = {}\r\n    <span style=\"color: #d35400\">for<\/span> cadabaliza <span style=\"color: #d35400\">in<\/span> baliza:\r\n        cualbaliza = baliza[cadabaliza]\r\n        coordbaliza[cadabaliza] = [tabla[<span style=\"color: #008000\">'c_este'<\/span>][cualbaliza]]\r\n        coordbaliza[cadabaliza].append(tabla[<span style=\"color: #008000\">'c_norte'<\/span>][cualbaliza])\r\n    existe = 1\r\n    <span style=\"color: #ff0000\"># coordenadas GPS del punto<\/span>\r\n    c_este  = tabla[<span style=\"color: #008000\">'c_este'<\/span>][cadapunto]\r\n    c_norte = tabla[<span style=\"color: #008000\">'c_norte'<\/span>][cadapunto]\r\n\r\n    <span style=\"color: #ff0000\"># coordenadas por trilateraci\u00f3n<\/span>\r\n    punto = {}\r\n    ubicados = np.zeros(4,dtype=<span style=\"color: #ff00ff\">int<\/span>)\r\n    <span style=\"color: #d35400\">for<\/span> i <span style=\"color: #d35400\">in<\/span> <span style=\"color: #ff00ff\">range<\/span>(0,3,1):\r\n        punto[i] = {}\r\n        cuenta = 0\r\n        <span style=\"color: #d35400\">for<\/span> unabaliza <span style=\"color: #d35400\">in<\/span> baliza:\r\n            punto[i][unabaliza] = tabla[<span style=\"color: #008000\">'dist'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(i)+<span style=\"color: #008000\">'_'<\/span>+unabaliza][cadapunto]\r\n            <span style=\"color: #ff0000\"># si existe distancia<\/span>\r\n            <span style=\"color: #d35400\">if<\/span> <span style=\"color: #d35400\">not<\/span>(np.isnan(punto[i][unabaliza])):\r\n                cuenta = cuenta + 1\r\n        <span style=\"color: #d35400\">if<\/span> cuenta&gt;0:\r\n            ubicados[3]= ubicados[3] + 1\r\n\r\n    encontrado = tabla[<span style=\"color: #008000\">'encontrado'<\/span>][cadapunto]\r\n    <span style=\"color: #d35400\">if<\/span> <span style=\"color: #d35400\">not<\/span>(np.isnan(encontrado)):\r\n        encontrado = <span style=\"color: #ff00ff\">int<\/span>(encontrado)\r\n    <span style=\"color: #d35400\">else<\/span>:\r\n        encontrado = 0\r\n    <span style=\"color: #ff0000\"># trilatera el  punto<\/span>\r\n    raiztodas = girni.intersectacirculos(punto[encontrado],coordbaliza,tolera)\r\n    todasx = raiztodas[0]\r\n    todasy = raiztodas[1]\r\n    <span style=\"color: #d35400\">if<\/span> <span style=\"color: #ff00ff\">len<\/span>(todasx)&gt;0:\r\n        resultado = girni.trilatera(punto[encontrado],coordbaliza,tolera)\r\n    \r\n<span style=\"color: #ff0000\"># SALIDA<\/span>\r\nprecision=2\r\nnp.set_printoptions(precision)\r\n<span style=\"color: #d35400\">if<\/span> existe ==1:\r\n    <span style=\"color: #d35400\">if<\/span> <span style=\"color: #ff00ff\">len<\/span>(todasx)&gt;0: \r\n        <span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'intersectados: '<\/span>)\r\n        <span style=\"color: #ff00ff\">print<\/span>(np.array(todasx))\r\n        <span style=\"color: #ff00ff\">print<\/span>(np.array(todasy))\r\n        <span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'\\nResultados: '<\/span>)\r\n        <span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'baricentro: '<\/span>,np.array(resultado[<span style=\"color: #008000\">'baricentro'<\/span>]))\r\n        <span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'bar_error:  '<\/span>,np.round(resultado[<span style=\"color: #008000\">'barerror'<\/span>],precision))\r\n        <span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'poligono x: '<\/span>,np.array(resultado[<span style=\"color: #008000\">'poligono'<\/span>][0]))\r\n        <span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'poligono y: '<\/span>,np.array(resultado[<span style=\"color: #008000\">'poligono'<\/span>][1]))\r\n<span style=\"color: #d35400\">else<\/span>:\r\n    <span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'El punto indicado no existe'<\/span>)\r\n    \r\n<span style=\"color: #ff0000\"># Grafica<\/span>\r\n<span style=\"color: #d35400\">if<\/span> existe ==1:\r\n    figura = plt.figure()\r\n    grafica = figura.add_subplot(111)\r\n    grafica.set_aspect(<span style=\"color: #008000\">'equal'<\/span>, adjustable=<span style=\"color: #008000\">'box'<\/span>)\r\n\r\n    <span style=\"color: #ff0000\"># punto con GPS<\/span>\r\n    texto = <span style=\"color: #008000\">'['<\/span>+<span style=\"color: #ff00ff\">str<\/span>(np.round(c_este,2))+<span style=\"color: #008000\">', '<\/span>+<span style=\"color: #ff00ff\">str<\/span>(np.round(c_norte,2))+<span style=\"color: #008000\">']'<\/span>\r\n    grafica.scatter(c_este,c_norte,\r\n                    marker=<span style=\"color: #008000\">'D'<\/span>, color = <span style=\"color: #008000\">'grey'<\/span>,\r\n                    label = texto)\r\n    grafica.annotate(<span style=\"color: #008000\">'gps'<\/span>,(c_este,c_norte),\r\n                     color =<span style=\"color: #008000\">'grey'<\/span>)\r\n\r\n    <span style=\"color: #ff0000\"># cotas de gr\u00e1fica<\/span>\r\n    unalista = <span style=\"color: #ff00ff\">list<\/span>(coordbaliza.values())\r\n    unalista = np.array(unalista)\r\n    cotax = [np.min(unalista[:,0]), np.max(unalista[:,0])]\r\n    cotay = [np.min(unalista[:,1]), np.max(unalista[:,1])]\r\n    cotadx = 0.15*(cotax[1]-cotax[0])\r\n    cotady = 0.15*(cotay[1]-cotay[0])\r\n    grafica.set_xlim(cotax[0]-cotadx,cotax[1]+cotadx)\r\n    grafica.set_ylim(cotay[0]-cotady,cotay[1]+cotady)\r\n\r\n    <span style=\"color: #ff0000\"># raices<\/span>\r\n    k = <span style=\"color: #ff00ff\">len<\/span>(todasx)\r\n    <span style=\"color: #d35400\">if<\/span> k&gt;0:\r\n        grafica.scatter(todasx,todasy,\r\n                        marker=<span style=\"color: #008000\">'+'<\/span>, color = <span style=\"color: #008000\">'magenta'<\/span>)\r\n        poligono = resultado[<span style=\"color: #008000\">'poligono'<\/span>]\r\n        p = <span style=\"color: #ff00ff\">len<\/span>(poligono[0])\r\n        <span style=\"color: #d35400\">for<\/span> j <span style=\"color: #d35400\">in<\/span> <span style=\"color: #ff00ff\">range<\/span>(0,p,1):\r\n            grafica.scatter(poligono[0][j],poligono[1][j],\r\n                            marker=<span style=\"color: #008000\">'*'<\/span>, color = <span style=\"color: #008000\">'blue'<\/span>)\r\n        <span style=\"color: #ff0000\"># coodenada con trilatera<\/span>\r\n        baricentro = resultado[<span style=\"color: #008000\">'baricentro'<\/span>]\r\n        sumabaricentro = np.sum(baricentro)\r\n        <span style=\"color: #d35400\">if<\/span> <span style=\"color: #d35400\">not<\/span>(np.isnan(sumabaricentro)):\r\n            texto = <span style=\"color: #008000\">'['<\/span>+<span style=\"color: #ff00ff\">str<\/span>(np.round(baricentro[0],2))\r\n            texto = texto +<span style=\"color: #008000\">', '<\/span>+<span style=\"color: #ff00ff\">str<\/span>(np.round(baricentro[1],2))+<span style=\"color: #008000\">']'<\/span>\r\n            grafica.scatter(baricentro[0],baricentro[1],\r\n                            marker=<span style=\"color: #008000\">'D'<\/span>, color = <span style=\"color: #008000\">'red'<\/span>,\r\n                            label = texto)\r\n            grafica.annotate(<span style=\"color: #008000\">'trilatera'<\/span>,\r\n                             (baricentro[0],baricentro[1]),\r\n                             color =<span style=\"color: #008000\">'red'<\/span>)\r\n            uncirculo = plt.Circle((baricentro[0],baricentro[1]),\r\n                                   resultado[<span style=\"color: #008000\">'barerror'<\/span>],\r\n                                   ec = <span style=\"color: #008000\">'red'<\/span>, fc=<span style=\"color: #008000\">'None'<\/span>,\r\n                                   linestyle =<span style=\"color: #008000\">'dashed'<\/span>)\r\n            grafica.add_artist(uncirculo)\r\n            \r\n    <span style=\"color: #ff0000\"># circulos<\/span>\r\n    colores = [<span style=\"color: #008000\">'blue'<\/span>,<span style=\"color: #008000\">'orange'<\/span>,<span style=\"color: #008000\">'lightgreen'<\/span>,<span style=\"color: #008000\">'grey'<\/span>]\r\n    j = 0\r\n    <span style=\"color: #d35400\">for<\/span> fila <span style=\"color: #d35400\">in<\/span> coordbaliza:\r\n        xc = coordbaliza[fila][0]\r\n        yc = coordbaliza[fila][1]\r\n        r = punto[encontrado][fila]\r\n        uncolor = colores[j]\r\n        grafica.scatter(xc,yc,\r\n                        marker = <span style=\"color: #008000\">'+'<\/span>,\r\n                        color  = uncolor)\r\n        grafica.annotate(fila,(xc,yc))\r\n        uncirculo = plt.Circle((xc,yc),r,\r\n                               ec = uncolor, fc=<span style=\"color: #008000\">'None'<\/span>,\r\n                               linestyle =<span style=\"color: #008000\">'dotted'<\/span>)\r\n        grafica.add_artist(uncirculo)\r\n        j = j + 1\r\n    plt.title(<span style=\"color: #008000\">'Trilatera: '<\/span> + cadapunto)\r\n    plt.legend()\r\n    plt.xlabel(<span style=\"color: #008000\">'coordenada este'<\/span>)\r\n    plt.ylabel(<span style=\"color: #008000\">'coordenada norte'<\/span>)\r\n    plt.show()\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Para revisar los resultados de un solo punto, de todos los resultados anteriores, se realiza una gr\u00e1fica que muestre los c\u00edrculos de cada baliza con los radios de las distancias estimadas. La gr\u00e1fica permite observar los detalles de trilateraci\u00f3n para ese punto en particular. Resultados: baricentro: [ 614804.97 9762762.46] bar_error: 72.84 poligono x: [614760.66 614776.52 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/blog.espol.edu.ec\/girni\/5-5-localiza-por-trilateracion-revisa-un-punto\/\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \"5.5 Localiza por Trilateraci\u00f3n \u2013 Revisa un punto\"<\/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":[],"class_list":["post-3068","post","type-post","status-publish","format-standard","hentry","category-localizacion-rssi-lora"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/3068","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=3068"}],"version-history":[{"count":1,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/3068\/revisions"}],"predecessor-version":[{"id":3070,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/3068\/revisions\/3070"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/media?parent=3068"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/categories?post=3068"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/tags?post=3068"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}