{"id":2724,"date":"2020-11-21T14:37:00","date_gmt":"2020-11-21T19:37:00","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/girni\/?p=2724"},"modified":"2026-08-04T21:16:28","modified_gmt":"2026-08-05T02:16:28","slug":"procesa-datos-coordenadas-distancias-txt","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/girni\/procesa-datos-coordenadas-distancias-txt\/","title":{"rendered":"3.3 Procesa datos - Coordenadas GPS y distancias al archivo.txt"},"content":{"rendered":"\n<p>Procesa las coordenadas de cada punto medido, registradas en un archivo de texto usando un GPS Diferencial.<\/p>\n\n\n\n<p>Las coordenadas se encuentran en formato UTM ubicadas en la zona \"17 M\".<\/p>\n\n\n\n<p>Ejemplo de archivo de coordenadas del GPS Diferencial<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>item,c_norte,c_este,altitud,etiqueta\n6,9762822.08,614817.64,62.213,FIEC101\n8,9762828.622,614788.477,82.308,FIEC102\n7,9762836.027,614795.73,77.421,FIEC103\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image alignright\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/11\/GPSDiferencial01.png\"><img loading=\"lazy\" decoding=\"async\" width=\"218\" height=\"232\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/11\/GPSDiferencial01.png\" alt=\"GPS Diferencial 01\" class=\"wp-image-2785\" \/><\/a><\/figure>\n\n\n\n<p>A los datos de cada punto se a\u00f1aden los c\u00e1lculos de distancia hacia cada \"baliza\". En el proceso, tambi\u00e9n se usa el nombre del archivo para separar el grupo y tipo de cada medici\u00f3n.<\/p>\n\n\n\n<p>Para observar los datos en el mapa mediante googleEarth, se convierten las coordenadas UTM a latitud y longitud. Los valores de grupo permiten segmentar los puntos en el mapa.<\/p>\n\n\n\n<p><strong><em>Referencias<\/em><\/strong>: <a href=\"https:\/\/en.wikipedia.org\/wiki\/Differential_GPS\">https:\/\/en.wikipedia.org\/wiki\/Differential_GPS<\/a>,<br><a href=\"https:\/\/es.wikipedia.org\/wiki\/Sistema_de_coordenadas_universal_transversal_de_Mercator\">https:\/\/es.wikipedia.org\/wiki\/Sistema_de_coordenadas_universal_transversal_de_Mercator<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">Par\u00e1metros del algoritmo<\/h2>\n\n\n\n<p>En el bloque de ingreso del algoritmo se configuran los par\u00e1metros que son requeridos para obtener un archivo m\u00e1s completo de coordenadas y distancias.<\/p>\n\n\n\n<p>Las posiciones para los gateways se indican como baliza, asociando el identificador d1, d2 o d3 con los nombres registrados con el GPS.<\/p>\n\n\n\n<p>En la tabla creada se usa la etiqueta de cada punto como \u00edndice de fila. las columnas corresponden a cada dato del punto.<\/p>\n\n\n\n<p>Un ejemplo de resultado al ejecutar del algoritmo es:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>archivo resumen: resumen_ubica01.txt\nuna muestra de archivo: \n         grupo   tipo  LOS_d1  LOS_d2  LOS_d3      c_norte  ...  altitud  dist_d1  dist_d2  dist_d3  Longitud Latitud\netiqueta                                                    ...                                                         \nFIEC101   FIEC  punto       1       1       1  9762822.080  ...   62.213  423.450   78.492  351.924 79.967500 -2.145463\nFIEC102   FIEC  punto       1       1       1  9762828.622  ...   82.308  451.423   67.435  357.220 79.967762 -2.145404\nFIEC103   FIEC  punto       1       1       1  9762836.027  ...   77.421  449.414   60.141  364.706 79.967697 -2.145337\nFIEC104   FIEC  punto       1       1       1  9762810.917  ...   87.352  399.437   97.611  343.328 79.967307 -2.145563\nFIEC105   FIEC  punto       1       1       1  9762792.518  ...   82.708  382.250  117.785  326.571 79.967231 -2.145730\n\n<\/code><\/pre>\n\n\n\n<p><strong><em>archivo de gps utm<\/em><\/strong>: <a href=\"https:\/\/drive.google.com\/file\/d\/17NNDyRQ9xm-wCZnxjbiR79Gbql-WJqu7\/view?usp=sharing\">ubicapuntos01.txt<\/a><\/p>\n\n\n\n<p><em><strong>archivo de resumen<\/strong><\/em> de coordenadas y distancias : <a href=\"https:\/\/drive.google.com\/file\/d\/1pCb1D-U0Z5Jg3FssnhqayOi2GUJS_C2k\/view?usp=sharing\">resumen_ubica01.txt<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">Algoritmo en Python<\/h2>\n\n\n\n<p>Para la conversi\u00f3n del sistema de coordenadas se usa la librer\u00eda <code>utm<\/code>. En caso de no disponer de la librer\u00eda, puede ser instalada con la instrucci\u00f3n <code>pip<\/code> desde una ventana de comandos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install utm<\/code><\/pre>\n\n\n\n<p>con lo que es posible hacer las conversiones de UTM a latitud y longitud y viceversa.<\/p>\n\n\n\n<p>La f\u00f3rmula de distancia en UTM es la tradicional para distancia entre dos puntos en el plano.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# Datos desde GPS Diferencial a un archivo.txt\n# Incorpora distancias a los vertices (baliza),\n# a\u00f1ade grupo por sector, tipo de punto y LOS.\n# Girni 2020-10-07 edelros@espol.edu.ec\nimport numpy as np\nimport pandas as pd\nimport utm\n\n# INGRESO\n# Archivo de coordenadas\narch_gps    = 'ubicaPuntos01.txt'\n\n# Archivo salida procesado con distancias\narch_gpsrsm = 'resumen_ubica03.txt'\nzona ='17 M'\n\n# Referencias\nbaliza = {'d1':'gtwRECT',\n          'd2':'gtwFIEC',\n          'd3':'gtwFCNM'}\ngrupo = &#x5B;'FIEC','FCNM','RECT','CIRC']\ntipo  = &#x5B;'punto','1m','gtw','dispositivo']\n\n# digitos decimales en distancias\ndigitos = 3\n\n# PROCEDIMIENTO\n# leer coordenadas\nubica = pd.read_csv(arch_gps,index_col='etiqueta')\nubica.drop('item',inplace=True, axis=1)\nubica = pd.DataFrame(ubica)\nn = len(ubica)\nzonanum = int(zona&#x5B;0:2])\nzonalet = zona&#x5B;3]\n\n# vertices con balizas\nbaliza_key = list(baliza.keys())\nbaliza_val = list(baliza.values())\nvertices   = ubica.loc&#x5B;baliza_val]\n\n# distancias a vertices\nfor fila in vertices.index:\n    x1 = vertices&#x5B;'c_este']&#x5B;fila]\n    y1 = vertices&#x5B;'c_norte']&#x5B;fila]\n    x2 = ubica&#x5B;'c_este']\n    y2 = ubica&#x5B;'c_norte']\n    dist  = np.sqrt((x2-x1)**2 + (y2-y1)**2)\n    dist  = np.round(dist,digitos)\n    donde = baliza_val.index(fila)\n    cual  = baliza_key&#x5B;donde]\n    etiq_col = 'dist_'+cual\n    ubica&#x5B;etiq_col] = dist\n\n# redondear a dos digitos\nubica&#x5B;'c_este']  = np.round(ubica&#x5B;'c_este'],digitos)\nubica&#x5B;'c_norte'] = np.round(ubica&#x5B;'c_norte'],digitos)\nubica&#x5B;'altitud'] = np.round(ubica&#x5B;'altitud'],digitos)\n\n# a\u00f1adir coordenadas en latitud y longitud\nubica&#x5B;'longitud'] = 0.0\nubica&#x5B;'latitud']  = 0.0\nfor fila in ubica.index:\n    lon_utm = ubica&#x5B;'c_este']&#x5B;fila]\n    lat_utm = ubica&#x5B;'c_norte']&#x5B;fila]\n    coord_gra = utm.to_latlon(lon_utm,lat_utm,\n                              zonanum,zonalet)\n    ubica&#x5B;'latitud']&#x5B;fila]  = coord_gra&#x5B;0]\n    ubica&#x5B;'longitud']&#x5B;fila] = coord_gra&#x5B;1]\n\n# grupo y tipo en cada punto\nubica.insert(0,'grupo','')\nubica.insert(1,'tipo','')\nfor cadauno in ubica.index:\n    \n    # etiqueta de grupo\n    esgrupo = 'CIRC'\n    for ungrupo in grupo:\n        cond1 = cadauno.startswith(ungrupo)\n        cond2 = cadauno.endswith(ungrupo)\n        if cond1 or cond2:\n            esgrupo = ungrupo\n    \n    # etiqueta de tipo\n    estipo = tipo&#x5B;0]\n    for untipo in tipo:\n        cond1 = cadauno.startswith(untipo)\n        if cond1:\n            estipo = untipo\n    if esgrupo == 'CIRC':\n        estipo = 'dispositivo'\n    \n    ubica.loc&#x5B;cadauno,'grupo'] = esgrupo\n    ubica.loc&#x5B;cadauno,'tipo']  = estipo\n\n# generar columna de Linea de vista LOS\ncolumna = 2\nfor cadauno in baliza.keys():\n    ubica.insert(columna,'LOS_'+cadauno,1)\n    columna = columna + 1\n\n# SALIDA\nprint('archivo resumen:', arch_gpsrsm)\nprint('una muestra de archivo: ')\nprint(ubica.head())\nprint('vertices: \\n',vertices)\nubica.to_csv(arch_gpsrsm)\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>Procesa las coordenadas de cada punto medido, registradas en un archivo de texto usando un GPS Diferencial. Las coordenadas se encuentran en formato UTM ubicadas en la zona \"17 M\". Ejemplo de archivo de coordenadas del GPS Diferencial A los datos de cada punto se a\u00f1aden los c\u00e1lculos de distancia hacia cada \"baliza\". En el [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1463489],"tags":[20777],"class_list":["post-2724","post","type-post","status-publish","format-standard","hentry","category-lorawan-localizacion-rssi","tag-python"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2724","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=2724"}],"version-history":[{"count":14,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2724\/revisions"}],"predecessor-version":[{"id":4836,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2724\/revisions\/4836"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/media?parent=2724"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/categories?post=2724"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/tags?post=2724"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}