{"id":3062,"date":"2021-02-17T11:52:25","date_gmt":"2021-02-17T16:52:25","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/girni\/?p=3062"},"modified":"2025-04-07T11:21:03","modified_gmt":"2025-04-07T16:21:03","slug":"localiza-por-trilateracion-sectores-e-intervalos-algoritmo-python","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/girni\/localiza-por-trilateracion-sectores-e-intervalos-algoritmo-python\/","title":{"rendered":"5.4 Localiza por Trilateraci\u00f3n \u2013 Sectores e Intervalos. Algoritmo Python"},"content":{"rendered":"<p>Los sectores en una baliza se incorporan en el algoritmo como la estimaci\u00f3n de ubicaci\u00f3n del punto usando las otras balizas. <a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/TrilateraSectorEstima01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright wp-image-3064 size-medium\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/TrilateraSectorEstima01-281x300.png\" alt=\"Trilatera Sector Estima 01\" width=\"281\" height=\"300\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/TrilateraSectorEstima01-281x300.png 281w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/TrilateraSectorEstima01.png 482w\" sizes=\"auto, (max-width: 281px) 100vw, 281px\" \/><\/a><\/p>\n<p>Para un punto de ejemplo, dado que baliza 'gtwRECT' tiene sectores, se usan las otras balizas 'gtwFIEC' y 'gtwFCNM' para estimar la ubicaci\u00f3n y el \u00e1ngulo que permite aproximar el sector donde se ubicar\u00eda el punto.<\/p>\n<p>Este sector se usa para aplicar la ecuaci\u00f3n que corresponde al\u00a0 'gtwFIEC'.<\/p>\n<p>El desarrollo continua desde la secci\u00f3n anterior con solo intervalos y se incorpora el concepto.<\/p>\n<h2>Algoritmo Python<\/h2>\n<pre><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\">'UbicaUsarSector01.txt'<\/span>\r\narch_ecuaciones = <span style=\"color: #008000\">'rsmP06_ecuacionSector01.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\">'trilateraSector01.txt'<\/span>\r\n\r\n<span style=\"color: #ff0000\"># Parametros de grafica<\/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<span style=\"color: #ff0000\"># Par\u00e1metros de grafica<\/span>\r\ntipograf   = <span style=\"color: #008000\">'2D'<\/span>  <span style=\"color: #ff0000\"># '2D','' sin grafica<\/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\ntabla[<span style=\"color: #008000\">'ensector'<\/span>] = <span style=\"color: #008000\">''<\/span>\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\r\n        unsector = <span style=\"color: #008000\">'s0'<\/span>\r\n        <span style=\"color: #d35400\">if<\/span> <span style=\"color: #d35400\">not<\/span>(np.isnan(p_rssi)):\r\n            ecuacion_rssi = ecuacion[unabaliza][unsector]\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\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\"># Revisa un sector_estimado<\/span>\r\ncolumnas = <span style=\"color: #ff00ff\">list<\/span>(tabla.keys())\r\n<span style=\"color: #d35400\">for<\/span> cadapunto <span style=\"color: #d35400\">in<\/span> tabla.index:\r\n    <span style=\"color: #d35400\">for<\/span> cualbaliza <span style=\"color: #d35400\">in<\/span> baliza:\r\n        sector_baliza = <span style=\"color: #008000\">'sector_'<\/span>+cualbaliza\r\n        unsector = 0\r\n        <span style=\"color: #d35400\">if<\/span> sector_baliza <span style=\"color: #d35400\">in<\/span> columnas:\r\n            unsector = tabla[<span style=\"color: #008000\">'sector_'<\/span>+cualbaliza][cadapunto]\r\n        <span style=\"color: #d35400\">if<\/span> unsector!=0:\r\n            <span style=\"color: #ff0000\"># evalua en sector<\/span>\r\n            donde = baliza_key.index(cualbaliza)\r\n            otrasbalizas = baliza_key.copy()\r\n            otrasbalizas.pop(donde)\r\n\r\n            <span style=\"color: #ff0000\"># coordenadas de baliza<\/span>\r\n            coord_otrasbalizas = {}\r\n            <span style=\"color: #d35400\">for<\/span> cadaotrabaliza <span style=\"color: #d35400\">in<\/span> otrasbalizas:\r\n                cualotrabaliza = baliza[cadaotrabaliza]\r\n                coord_otrasbalizas[cadaotrabaliza] = [tabla[<span style=\"color: #008000\">'c_este'<\/span>][cualotrabaliza]]\r\n                coord_otrasbalizas[cadaotrabaliza].append(tabla[<span style=\"color: #008000\">'c_norte'<\/span>][cualotrabaliza])\r\n            \r\n            <span style=\"color: #ff0000\"># cada punto a i*std<\/span>\r\n            punto = {}\r\n            sumabaricentro = np.nan\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> cadaotrabaliza <span style=\"color: #d35400\">in<\/span> otrasbalizas:\r\n                    punto[i][cadaotrabaliza] = tabla[<span style=\"color: #008000\">'dist'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(i)+<span style=\"color: #008000\">'_'<\/span>+cadaotrabaliza][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][cadaotrabaliza])):\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==2:\r\n                    localiza   = girni.trilatera(punto[i],\r\n                                                 coord_otrasbalizas,\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: #d35400\">if<\/span> <span style=\"color: #d35400\">not<\/span>(np.isnan(sumabaricentro)):\r\n                        <span style=\"color: #d35400\">break<\/span>\r\n            <span style=\"color: #d35400\">if<\/span> <span style=\"color: #d35400\">not<\/span>(np.isnan(sumabaricentro)):\r\n                <span style=\"color: #ff0000\"># coordenadas baliza para identificar \u00e1ngulo<\/span>\r\n                b_este  = tabla[<span style=\"color: #008000\">'c_este'<\/span>][baliza[cualbaliza]]\r\n                b_norte = tabla[<span style=\"color: #008000\">'c_norte'<\/span>][baliza[cualbaliza]]\r\n                <span style=\"color: #ff0000\"># coordenadas del punto entre otras balizas<\/span>\r\n                p_este  = baricentro[0]\r\n                p_norte = baricentro[1]\r\n                dx = p_este-b_este\r\n                dy = p_norte-b_norte\r\n                theta = np.arctan2(dy,dx)\r\n                <span style=\"color: #d35400\">if<\/span> theta&lt;0:\r\n                    theta = theta + 2*np.pi\r\n                sectores   =  ecuacion[baliza[cualbaliza]][<span style=\"color: #008000\">'sector_rad'<\/span>]\r\n                nsectores  = <span style=\"color: #ff00ff\">len<\/span>(sectores)\r\n                otrosector = <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,nsectores-1,1):\r\n                    a = sectores[i]\r\n                    b = sectores[i+1]\r\n                    <span style=\"color: #d35400\">if<\/span> theta&gt;=a <span style=\"color: #d35400\">and<\/span> theta&lt;b:\r\n                        otrosector = i+1\r\n                <span style=\"color: #d35400\">if<\/span> otrosector !=<span style=\"color: #008000\">''<\/span>:\r\n                    tabla.loc[cadapunto,<span style=\"color: #008000\">'sector_'<\/span>+cualbaliza] = otrosector\r\n                    \r\n                    <span style=\"color: #ff0000\"># recalcula distancia con sector<\/span>\r\n                    columna = medida+<span style=\"color: #008000\">'_'<\/span>+modo+<span style=\"color: #008000\">'_'<\/span>+cualbaliza\r\n                    p_rssi = tabla[columna][cadapunto]\r\n                    ecuacion_rssi = ecuacion[baliza[cualbaliza]][<span style=\"color: #008000\">'s'<\/span>+<span style=\"color: #ff00ff\">str<\/span>(otrosector)]\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\r\n<span style=\"color: #ff0000\"># trilateraci\u00f3n. localiza cada punto<\/span>\r\n<span style=\"color: #ff0000\"># 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: #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    <span style=\"color: #d35400\">if<\/span> esgrupo <span style=\"color: #d35400\">in<\/span> mostrargrp:\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>,<span style=\"color: #008000\">'sect_d1'<\/span>,<span style=\"color: #008000\">'sect_d2'<\/span>,<span style=\"color: #008000\">'sect_d3'<\/span>])\r\n<span style=\"color: #d35400\">for<\/span> cadapunto <span style=\"color: #d35400\">in<\/span> tabla.index:\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    <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        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\">'sector_d1'<\/span>][cadapunto],\r\n                         tabla[<span style=\"color: #008000\">'sector_d2'<\/span>][cadapunto],\r\n                         tabla[<span style=\"color: #008000\">'sector_d3'<\/span>][cadapunto]\r\n                         ])\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>, 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>,<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: #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\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: #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    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.grid()\r\n    grafica.set_title(<span style=\"color: #008000\">'Puntos Ubicados'<\/span>)\r\n\r\n    plt.show()\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Los sectores en una baliza se incorporan en el algoritmo como la estimaci\u00f3n de ubicaci\u00f3n del punto usando las otras balizas. Para un punto de ejemplo, dado que baliza 'gtwRECT' tiene sectores, se usan las otras balizas 'gtwFIEC' y 'gtwFCNM' para estimar la ubicaci\u00f3n y el \u00e1ngulo que permite aproximar el sector donde se ubicar\u00eda &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/blog.espol.edu.ec\/girni\/localiza-por-trilateracion-sectores-e-intervalos-algoritmo-python\/\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \"5.4 Localiza por Trilateraci\u00f3n \u2013 Sectores e 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-3062","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\/3062","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=3062"}],"version-history":[{"count":6,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/3062\/revisions"}],"predecessor-version":[{"id":4142,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/3062\/revisions\/4142"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/media?parent=3062"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/categories?post=3062"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/tags?post=3062"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}