{"id":3029,"date":"2021-02-13T12:20:27","date_gmt":"2021-02-13T17:20:27","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/girni\/?p=3029"},"modified":"2021-02-17T12:47:24","modified_gmt":"2021-02-17T17:47:24","slug":"5-2-localiza-por-trilateracion-intervalos-algoritmo-python","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/girni\/5-2-localiza-por-trilateracion-intervalos-algoritmo-python\/","title":{"rendered":"5.2 Localiza por Trilateraci\u00f3n \u2013 Intervalos. Algoritmo Python"},"content":{"rendered":"<h2>Algoritmo en Python<\/h2>\n<pre>\r\n<span style=\"color: #ff0000\"># Localizaci\u00f3n por trilateraci\u00f3n<\/span>\r\n<span style=\"color: #ff0000\"># Ubicaci\u00f3n de puntos en el mapa<\/span>\r\n<span style=\"color: #ff0000\"># Girni 2020-10-07 propuesta: edelros@espol.edu.ec<\/span>\r\n\r\n<span style=\"color: #d35400\">import<\/span> numpy <span style=\"color: #d35400\">as<\/span> np\r\n<span style=\"color: #d35400\">import<\/span> sympy <span style=\"color: #d35400\">as<\/span> sym\r\n<span style=\"color: #d35400\">import<\/span> matplotlib.pyplot <span style=\"color: #d35400\">as<\/span> plt\r\n\r\n<span style=\"color: #d35400\">import<\/span> pandas <span style=\"color: #d35400\">as<\/span> pd\r\n<span style=\"color: #d35400\">import<\/span> json\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\n<span style=\"color: #ff0000\"># revisar parametros al inicio<\/span>\r\nmodo   = <span style=\"color: #008000\">'rx'<\/span>\r\nmedida = <span style=\"color: #008000\">'rssi'<\/span>\r\n\r\n<span style=\"color: #ff0000\"># archivos de entrada<\/span>\r\narch_medUbAtrib = <span style=\"color: #008000\">'rsmP06_'<\/span>+medida+<span style=\"color: #008000\">'UbicaUsar01.txt'<\/span>\r\narch_ecuaciones = <span style=\"color: #008000\">'rsmP06_ecuaciones01.json'<\/span>\r\n\r\n<span style=\"color: #ff0000\"># archivos de salida<\/span>\r\narch_trilatera = <span style=\"color: #008000\">'rsmP07_'<\/span>+medida+<span style=\"color: #008000\">'trilatera01.txt'<\/span>\r\n\r\n<span style=\"color: #ff0000\"># grupo a procesar<\/span>\r\nmostrargrp   = [<span style=\"color: #008000\">'FIEC'<\/span>] <span style=\"color: #ff0000\">#['FIEC','FCNM','RECT','CIRC']<\/span>\r\nmostrartip   = [<span style=\"color: #008000\">'punto'<\/span>]\r\nmostrarfuera = [0,1]    <span style=\"color: #ff0000\">#[0,1]<\/span>\r\ntolera_error = 2 <span style=\"color: #ff0000\"># decimales en error<\/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\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\n<span style=\"color: #d35400\">with<\/span> <span style=\"color: #ff00ff\">open<\/span>(arch_ecuaciones) <span style=\"color: #d35400\">as<\/span> json_file: \r\n    ecuacion = json.load(json_file) \r\ntabla = pd.read_csv(arch_medUbAtrib, index_col=<span style=\"color: #008000\">'etiqueta'<\/span>)\r\ntabla = pd.DataFrame(tabla)\r\n\r\n<span style=\"color: #ff0000\"># coordenadas de baliza<\/span>\r\ncoordbaliza = {}\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\r\n<span style=\"color: #ff0000\"># inicializa ubicados, encontrados, intervalos fuera, errores<\/span>\r\n<span style=\"color: #ff0000\"># ubicados tiene [distancia, distancia+1s, distancia +2s,total]<\/span>\r\nubicados   = np.zeros(shape=(3,4),dtype=<span style=\"color: #ff00ff\">int<\/span>)\r\ntabla[<span style=\"color: #008000\">'interv_fuera'<\/span>] = <span style=\"color: #008000\">''<\/span>\r\ntabla[<span style=\"color: #008000\">'encontrado'<\/span>] = np.nan\r\n<span style=\"color: #ff0000\"># suma de errores<\/span>\r\nsumatrilat = np.zeros(shape=(2,4),dtype=<span style=\"color: #ff00ff\">float<\/span>)\r\nsumagps    = np.zeros(shape=(2,4),dtype=<span style=\"color: #ff00ff\">float<\/span>)\r\nsumagpsdx  = np.zeros(shape=(2,4),dtype=<span style=\"color: #ff00ff\">float<\/span>)\r\nsumagpsdy  = np.zeros(shape=(2,4),dtype=<span style=\"color: #ff00ff\">float<\/span>)\r\n\r\n<span style=\"color: #ff0000\"># distancias y errores a cada baliza<\/span>\r\n<span style=\"color: #d35400\">for<\/span> unabaliza <span style=\"color: #d35400\">in<\/span> baliza_val:\r\n    donde = baliza_val.index(unabaliza)\r\n    cualbaliza = baliza_key[donde]\r\n    columna = medida+<span style=\"color: #008000\">'_'<\/span>+modo+<span style=\"color: #008000\">'_'<\/span>+cualbaliza\r\n    tabla[<span style=\"color: #008000\">'dist0_'<\/span>+cualbaliza] = np.nan\r\n    tabla[<span style=\"color: #008000\">'dist1_'<\/span>+cualbaliza] = np.nan\r\n    tabla[<span style=\"color: #008000\">'dist2_'<\/span>+cualbaliza] = np.nan\r\n    \r\n    <span style=\"color: #ff0000\"># distancia estimada por punto<\/span>\r\n    <span style=\"color: #d35400\">for<\/span> cadapunto <span style=\"color: #d35400\">in<\/span> tabla.index:\r\n        p_rssi = tabla[columna][cadapunto]\r\n        esgrupo = tabla[<span style=\"color: #008000\">'grupo'<\/span>][cadapunto]\r\n        estipo  = tabla[<span style=\"color: #008000\">'tipo'<\/span>][cadapunto]\r\n        <span style=\"color: #ff0000\"># ecuacion a usar<\/span>\r\n        ecuacion_rssi = ecuacion[unabaliza]\r\n        <span style=\"color: #d35400\">if<\/span> <span style=\"color: #d35400\">not<\/span>(np.isnan(p_rssi)):\r\n            <span style=\"color: #d35400\">if<\/span> (esgrupo <span style=\"color: #d35400\">in<\/span> mostrargrp) <span style=\"color: #d35400\">and<\/span> (estipo <span style=\"color: #d35400\">in<\/span> mostrartip):\r\n                ubicados[2,donde] = ubicados[2,donde] + 1\r\n            dist = girni.dist_rssi(p_rssi,ecuacion_rssi)\r\n            [distancia,e_mean,e_1std,e_2std,interv_fuera] = dist\r\n            dist1 = distancia + e_1std\r\n            dist2 = distancia + e_2std\r\n            tabla.loc[cadapunto,<span style=\"color: #008000\">'dist0_'<\/span>+cualbaliza] = distancia\r\n            tabla.loc[cadapunto,<span style=\"color: #008000\">'dist1_'<\/span>+cualbaliza] = dist1\r\n            tabla.loc[cadapunto,<span style=\"color: #008000\">'dist2_'<\/span>+cualbaliza] = dist2\r\n            <span style=\"color: #d35400\">if<\/span> interv_fuera&gt;0:\r\n                <span style=\"color: #d35400\">if<\/span> <span style=\"color: #ff00ff\">len<\/span>(tabla[<span style=\"color: #008000\">'interv_fuera'<\/span>][cadapunto])==0:\r\n                       separador=<span style=\"color: #008000\">''<\/span>\r\n                <span style=\"color: #d35400\">else<\/span>:\r\n                       separador=<span style=\"color: #008000\">','<\/span>\r\n                tabla.loc[cadapunto,<span style=\"color: #008000\">'interv_fuera'<\/span>] = tabla[<span style=\"color: #008000\">'interv_fuera'<\/span>][cadapunto]+separador+cualbaliza\r\nprocesados = np.max(ubicados[2,:])\r\n\r\n<span style=\"color: #ff0000\"># trilateraci\u00f3n. estima localizaci\u00f3n cada punto<\/span>\r\n<span style=\"color: #ff0000\"># inicializa cada punto a i*std<\/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    tabla[<span style=\"color: #008000\">'trilat_este_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(i)] = np.nan\r\n    tabla[<span style=\"color: #008000\">'trilat_norte_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(i)] = np.nan\r\n    tabla[<span style=\"color: #008000\">'trilat_error_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(i)] = np.nan\r\n    tabla[<span style=\"color: #008000\">'ubicado_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(i)] = np.nan\r\n    tabla[<span style=\"color: #008000\">'trilat_gps_error_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(i)] = np.nan\r\n    tabla[<span style=\"color: #008000\">'trilat_gps_dx_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(i)] = np.nan\r\n    tabla[<span style=\"color: #008000\">'trilat_gps_dy_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(i)] = np.nan\r\n\r\n<span style=\"color: #ff0000\"># procesa cada punto<\/span>\r\n<span style=\"color: #d35400\">for<\/span> cadapunto <span style=\"color: #d35400\">in<\/span> tabla.index:\r\n    esgrupo = tabla[<span style=\"color: #008000\">'grupo'<\/span>][cadapunto]\r\n    <span style=\"color: #d35400\">if<\/span> esgrupo <span style=\"color: #d35400\">in<\/span> mostrargrp:\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\"># cada punto a i*std<\/span>\r\n        punto = {}\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: #ff0000\"># Hay 3 mediciones a baliza<\/span>\r\n            <span style=\"color: #d35400\">if<\/span> cuenta==3:\r\n                localiza = girni.trilatera(punto[i],\r\n                                           coordbaliza,\r\n                                           tolera = 10e-4)\r\n                baricentro = localiza[<span style=\"color: #008000\">'baricentro'<\/span>]\r\n                barerror   = localiza[<span style=\"color: #008000\">'barerror'<\/span>]\r\n                poligono   = localiza[<span style=\"color: #008000\">'poligono'<\/span>]\r\n                sumabaricentro = np.sum(baricentro)\r\n                <span style=\"color: #ff0000\"># Hay coordenadas de baricentro<\/span>\r\n                <span style=\"color: #d35400\">if<\/span> <span style=\"color: #d35400\">not<\/span>(np.isnan(sumabaricentro)):\r\n                    tabla.loc[cadapunto,<span style=\"color: #008000\">'trilat_este_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(i)]  = baricentro[0]\r\n                    tabla.loc[cadapunto,<span style=\"color: #008000\">'trilat_norte_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(i)] = baricentro[1]\r\n                    tabla.loc[cadapunto,<span style=\"color: #008000\">'trilat_error_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(i)] = np.round(barerror,tolera_error)\r\n\r\n                    <span style=\"color: #ff0000\"># error trilatera hacia gps<\/span>\r\n                    dx = baricentro[0] - c_este\r\n                    dy = baricentro[1] - c_norte\r\n                    error_gps = np.sqrt(dx**2+dy**2)\r\n                    tabla.loc[cadapunto,<span style=\"color: #008000\">'trilat_gps_error_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(i)] = np.round(error_gps,tolera_error)\r\n                    tabla.loc[cadapunto,<span style=\"color: #008000\">'trilat_gps_dx_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(i)] = np.round(dx,tolera_error)\r\n                    tabla.loc[cadapunto,<span style=\"color: #008000\">'trilat_gps_dy_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(i)] = np.round(dy,tolera_error)\r\n\r\n                    <span style=\"color: #ff0000\"># cuenta error si encuentra primera vez<\/span>\r\n                    cond1 = np.isnan(tabla[<span style=\"color: #008000\">'encontrado'<\/span>][cadapunto])\r\n                    cond2 = <span style=\"color: #ff00ff\">len<\/span>(tabla[<span style=\"color: #008000\">'interv_fuera'<\/span>][cadapunto])&gt;0\r\n                    k = <span style=\"color: #ff00ff\">int<\/span>(cond2) <span style=\"color: #ff0000\"># intervalo extendido<\/span>\r\n                    <span style=\"color: #d35400\">if<\/span> cond1:\r\n                        tabla.loc[cadapunto,<span style=\"color: #008000\">'encontrado'<\/span>] = i\r\n                        ubicados[k,i]   = ubicados[k,i]+1\r\n                        sumatrilat[k,i] = sumatrilat[k,i] + np.round(barerror,tolera_error)\r\n                        sumagps[k,i]    = sumagps[k,i] + np.round(error_gps,tolera_error)\r\n                        sumagpsdx[k,i]  = sumagpsdx[k,i] + np.round(np.abs(dx),tolera_error)\r\n                        sumagpsdy[k,i]  = sumagpsdy[k,i] + np.round(np.abs(dy),tolera_error)\r\n\r\n<span style=\"color: #ff0000\"># contabiliza errores de localizados<\/span>\r\nubicasuma = np.zeros(2)\r\nubicasumporc = np.zeros(2)\r\nubicaporc = np.zeros(shape=(2,3))\r\n<span style=\"color: #d35400\">for<\/span> k <span style=\"color: #d35400\">in<\/span> <span style=\"color: #ff00ff\">range<\/span>(0,2,1):\r\n    ubicados[k,3] = <span style=\"color: #ff00ff\">int<\/span>(np.sum(ubicados[k,0:3]))\r\n    ubicasuma[k]  = np.sum(ubicados[k,0:3])\r\n    ubicasumporc[k] = np.round(100*ubicasuma[k]\/ubicados[k,3],1)\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        ubicaporc[k,i]  = np.round(100*ubicados[k,i]\/ubicasuma[k],1)\r\n        <span style=\"color: #d35400\">if<\/span> ubicados[k,i]&gt;0:\r\n            sumatrilat[k,i] = np.round(sumatrilat[k,i]\/ubicados[k,i],1)\r\n            sumagps[k,i]    = np.round(sumagps[k,i]\/ubicados[k,i],1)\r\n            sumagpsdx[k,i]  = np.round(sumagpsdx[k,i]\/ubicados[k,i],1)\r\n            sumagpsdy[k,i]  = np.round(sumagpsdy[k,i]\/ubicados[k,i],1)\r\n\r\n<span style=\"color: #ff0000\"># SALIDA<\/span>\r\n<span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'Errores localizacion'<\/span>)\r\n\r\n<span style=\"color: #d35400\">import<\/span> prettytable <span style=\"color: #d35400\">as<\/span> ptt\r\n<span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'Errores estimado: Cota-Trilatera-pol\u00edgono y Trilatera_vs_GPS'<\/span>)\r\nmostrar = ptt.PrettyTable([<span style=\"color: #008000\">'punto'<\/span>,<span style=\"color: #008000\">'i*std'<\/span>,<span style=\"color: #008000\">'fuera'<\/span>,<span style=\"color: #008000\">'trilat'<\/span>,\r\n                           <span style=\"color: #008000\">'gps'<\/span>,<span style=\"color: #008000\">'gps_dx'<\/span>,<span style=\"color: #008000\">'gps_dy'<\/span>,\r\n                           <span style=\"color: #008000\">'u_d1'<\/span>,<span style=\"color: #008000\">'u_d2'<\/span>,<span style=\"color: #008000\">'u_d3'<\/span>])\r\n<span style=\"color: #d35400\">for<\/span> cadapunto <span style=\"color: #d35400\">in<\/span> tabla.index:\r\n\r\n    <span style=\"color: #ff0000\"># selecciona puntos a mostrar<\/span>\r\n    encontrado = tabla[<span style=\"color: #008000\">'encontrado'<\/span>][cadapunto]\r\n    esgrupo = tabla[<span style=\"color: #008000\">'grupo'<\/span>][cadapunto]\r\n    interv_fuera = <span style=\"color: #ff00ff\">int<\/span>(<span style=\"color: #ff00ff\">len<\/span>(tabla[<span style=\"color: #008000\">'interv_fuera'<\/span>][cadapunto])!=0)\r\n    cond1 = <span style=\"color: #d35400\">not<\/span>(np.isnan(encontrado))\r\n    cond2 = esgrupo <span style=\"color: #d35400\">in<\/span> mostrargrp\r\n    cond3 = interv_fuera <span style=\"color: #d35400\">in<\/span> mostrarfuera \r\n\r\n    <span style=\"color: #d35400\">if<\/span> cond1 <span style=\"color: #d35400\">and<\/span> cond2 <span style=\"color: #d35400\">and<\/span> cond3:\r\n        encontrado = <span style=\"color: #ff00ff\">int<\/span>(encontrado)\r\n        \r\n        mostrar.add_row([cadapunto,\r\n                <span style=\"color: #ff00ff\">str<\/span>(<span style=\"color: #ff00ff\">int<\/span>(tabla[<span style=\"color: #008000\">'encontrado'<\/span>][cadapunto])),\r\n                tabla[<span style=\"color: #008000\">'interv_fuera'<\/span>][cadapunto],\r\n                <span style=\"color: #ff00ff\">str<\/span>(tabla[<span style=\"color: #008000\">'trilat_error_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(encontrado)][cadapunto]),\r\n                <span style=\"color: #ff00ff\">str<\/span>(tabla[<span style=\"color: #008000\">'trilat_gps_error_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(encontrado)][cadapunto]),\r\n                <span style=\"color: #ff00ff\">str<\/span>(tabla[<span style=\"color: #008000\">'trilat_gps_dx_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(encontrado)][cadapunto]),\r\n                <span style=\"color: #ff00ff\">str<\/span>(tabla[<span style=\"color: #008000\">'trilat_gps_dy_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(encontrado)][cadapunto]),\r\n                tabla[<span style=\"color: #008000\">'usar_d1'<\/span>][cadapunto],\r\n                tabla[<span style=\"color: #008000\">'usar_d2'<\/span>][cadapunto],\r\n                tabla[<span style=\"color: #008000\">'usar_d3'<\/span>][cadapunto]])\r\n<span style=\"color: #ff00ff\">print<\/span>(mostrar)\r\n<span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'puntos con medidas:        '<\/span>,procesados)\r\nloc_alg = np.round(100*np.sum(ubicados[:,3])\/procesados,1)\r\n<span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'localizados con algoritmo: '<\/span>,\r\n      np.sum(ubicados[:,3]),\r\n      <span style=\"color: #008000\">'  , '<\/span>+<span style=\"color: #ff00ff\">str<\/span>(loc_alg)+<span style=\"color: #008000\">'%'<\/span> )\r\n<span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'Errores Promedio:'<\/span>)\r\nresumen = ptt.PrettyTable([<span style=\"color: #008000\">'error+i*std'<\/span>,<span style=\"color: #008000\">'cant'<\/span>,<span style=\"color: #008000\">'%'<\/span>,\r\n                           <span style=\"color: #008000\">'trilat'<\/span>,<span style=\"color: #008000\">'gps'<\/span>,<span style=\"color: #008000\">'gps_dx'<\/span>,\r\n                           <span style=\"color: #008000\">'gps_dy'<\/span>])\r\n<span style=\"color: #d35400\">for<\/span> k <span style=\"color: #d35400\">in<\/span> <span style=\"color: #ff00ff\">range<\/span>(0,2,1):\r\n    <span style=\"color: #d35400\">if<\/span> k == 0:\r\n        texto = <span style=\"color: #008000\">'dentro'<\/span>\r\n    <span style=\"color: #d35400\">if<\/span> k == 1:\r\n        texto = <span style=\"color: #008000\">'fuera'<\/span>\r\n    resumen.add_row([<span style=\"color: #008000\">'interv_'<\/span>+texto,ubicados[k,3],<span style=\"color: #008000\">''<\/span>,\r\n                     <span style=\"color: #008000\">''<\/span>,<span style=\"color: #008000\">''<\/span>,<span style=\"color: #008000\">''<\/span>,<span style=\"color: #008000\">''<\/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        resumen.add_row([<span style=\"color: #008000\">'error_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(i),ubicados[k,i],\r\n                         <span style=\"color: #ff00ff\">str<\/span>(ubicaporc[k,i])+<span style=\"color: #008000\">'%'<\/span>,\r\n                         sumatrilat[k,i],sumagps[k,i],\r\n                         sumagpsdx[k,i],sumagpsdy[k,i],\r\n                         ])\r\n<span style=\"color: #ff00ff\">print<\/span>(resumen)\r\n\r\n<span style=\"color: #ff0000\"># salida hacia archivo<\/span>\r\ntabla.to_csv(arch_trilatera)\r\n\r\n<span style=\"color: #ff0000\"># Grafica ubicados ------------<\/span>\r\n<span style=\"color: #ff0000\"># Referencias para gr\u00e1fica<\/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\ncolorstd = [<span style=\"color: #008000\">'lightblue'<\/span>, <span style=\"color: #008000\">'lightgreen'<\/span>,<span style=\"color: #008000\">'orange'<\/span>]\r\ncolorlin = [<span style=\"color: #008000\">'lightblue'<\/span>, <span style=\"color: #008000\">'lightgreen'<\/span>,<span style=\"color: #008000\">'orange'<\/span>]\r\n\r\nfigura,grafica = plt.subplots()\r\n<span style=\"color: #ff0000\"># balizas<\/span>\r\n<span style=\"color: #d35400\">for<\/span> unabaliza <span style=\"color: #d35400\">in<\/span> coordbaliza:\r\n    g_este = coordbaliza[unabaliza][0]\r\n    g_norte = coordbaliza[unabaliza][1]\r\n    grafica.scatter(g_este,g_norte,\r\n                    color = <span style=\"color: #008000\">'red'<\/span>,\r\n                    marker = <span style=\"color: #008000\">'D'<\/span>,\r\n                    label = cadapunto)\r\n    grafica.annotate(unabaliza,\r\n                     (g_este,g_norte))\r\n<span style=\"color: #ff0000\"># Puntos<\/span>\r\n<span style=\"color: #d35400\">for<\/span> cadapunto <span style=\"color: #d35400\">in<\/span> tabla.index:\r\n    g_este  = tabla[<span style=\"color: #008000\">'c_este'<\/span>][cadapunto]\r\n    g_norte = tabla[<span style=\"color: #008000\">'c_norte'<\/span>][cadapunto]\r\n\r\n    <span style=\"color: #ff0000\"># selecciona puntos a mostrar<\/span>\r\n    encontrado = tabla[<span style=\"color: #008000\">'encontrado'<\/span>][cadapunto]\r\n    esgrupo = tabla[<span style=\"color: #008000\">'grupo'<\/span>][cadapunto]\r\n    interv_fuera = <span style=\"color: #ff00ff\">int<\/span>(<span style=\"color: #ff00ff\">len<\/span>(tabla[<span style=\"color: #008000\">'interv_fuera'<\/span>][cadapunto])!=0)\r\n    cond1 = <span style=\"color: #d35400\">not<\/span>(np.isnan(encontrado))\r\n    cond2 = esgrupo <span style=\"color: #d35400\">in<\/span> mostrargrp\r\n    cond3 = interv_fuera <span style=\"color: #d35400\">in<\/span> mostrarfuera \r\n\r\n    <span style=\"color: #d35400\">if<\/span> cond1 <span style=\"color: #d35400\">and<\/span> cond2 <span style=\"color: #d35400\">and<\/span> cond3:\r\n        encontrado = <span style=\"color: #ff00ff\">int<\/span>(encontrado)\r\n        p_este  = tabla[<span style=\"color: #008000\">'trilat_este_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(encontrado)][cadapunto]\r\n        p_norte = tabla[<span style=\"color: #008000\">'trilat_norte_'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(encontrado)][cadapunto]\r\n        grafica.scatter(p_este,p_norte,\r\n                        color = colorstd[encontrado],\r\n                        label = cadapunto)\r\n        grafica.plot([p_este,g_este],\r\n                     [p_norte,g_norte],\r\n                     color = colorstd[encontrado],\r\n                     linestyle=<span style=\"color: #008000\">'dotted'<\/span>)\r\n        grafica.scatter(g_este,g_norte,\r\n                        color = <span style=\"color: #008000\">'blue'<\/span>,\r\n                        label = cadapunto)\r\n        grafica.annotate(cadapunto,(g_este,g_norte),\r\n                         color=<span style=\"color: #008000\">'blue'<\/span>)\r\n\r\ngrafica.set_xlabel(<span style=\"color: #008000\">'UTM_este'<\/span>)\r\ngrafica.set_ylabel(<span style=\"color: #008000\">'UTM_norte'<\/span>)\r\ngrafica.grid()\r\ngrafica.set_title(<span style=\"color: #008000\">'Puntos Ubicados'<\/span>)\r\n\r\nplt.show()\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Algoritmo en Python # Localizaci\u00f3n por trilateraci\u00f3n # Ubicaci\u00f3n de puntos en el mapa # Girni 2020-10-07 propuesta: edelros@espol.edu.ec import numpy as np import sympy as sym import matplotlib.pyplot as plt import pandas as pd import json import girni_lora_libreria as girni # INGRESO # revisar parametros al inicio modo = 'rx' medida = 'rssi' # &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/blog.espol.edu.ec\/girni\/5-2-localiza-por-trilateracion-intervalos-algoritmo-python\/\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \"5.2 Localiza por Trilateraci\u00f3n \u2013 Intervalos. Algoritmo Python\"<\/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-3029","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\/3029","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=3029"}],"version-history":[{"count":5,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/3029\/revisions"}],"predecessor-version":[{"id":3072,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/3029\/revisions\/3072"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/media?parent=3029"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/categories?post=3029"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/tags?post=3029"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}