{"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":"2025-04-07T11:51:45","modified_gmt":"2025-04-07T16:51:45","slug":"procesa-datos-coordenadas-gps-y-distancias-al-archivo-txt","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/girni\/procesa-datos-coordenadas-gps-y-distancias-al-archivo-txt\/","title":{"rendered":"3.3 Procesa datos. Coordenadas GPS y distancias al archivo.txt"},"content":{"rendered":"<p>Procesa las coordenadas de cada punto medido, registradas en un archivo de texto usando un GPS Diferencial.<\/p>\n<p>Las coordenadas se encuentran en formato UTM ubicadas en la zona \"17 M\".<\/p>\n<p>Ejemplo de archivo de coordenadas del GPS Diferencial<\/p>\n<pre>item,c_norte,c_este,altitud,etiqueta\r\n6,9762822.08,614817.64,62.213,FIEC101\r\n8,9762828.622,614788.477,82.308,FIEC102\r\n7,9762836.027,614795.73,77.421,FIEC103\r\n<\/pre>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/11\/GPSDiferencial01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright wp-image-2785 size-full\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2020\/11\/GPSDiferencial01.png\" alt=\"GPS Diferencial 01\" width=\"218\" height=\"232\" \/><\/a>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<p>Para observar los datos en el mapa mediante google Earth, se convierten las coordenadas UTM a latitud y longitud. Los valores de grupo permiten segmentar los puntos en el mapa.<\/p>\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 \/>\n<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<hr \/>\n<h2>Par\u00e1metros del algoritmo<\/h2>\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<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<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<p>Un ejemplo de resultado al ejecutar del algoritmo es:<\/p>\n<pre>archivo resumen: resumen_ubica01.txt\r\nuna muestra de archivo: \r\n         grupo   tipo  LOS_d1  LOS_d2  LOS_d3      c_norte  ...  altitud  dist_d1  dist_d2  dist_d3  Longitud Latitud\r\netiqueta                                                    ...                                                         \r\nFIEC101   FIEC  punto       1       1       1  9762822.080  ...   62.213  423.450   78.492  351.924 79.967500 -2.145463\r\nFIEC102   FIEC  punto       1       1       1  9762828.622  ...   82.308  451.423   67.435  357.220 79.967762 -2.145404\r\nFIEC103   FIEC  punto       1       1       1  9762836.027  ...   77.421  449.414   60.141  364.706 79.967697 -2.145337\r\nFIEC104   FIEC  punto       1       1       1  9762810.917  ...   87.352  399.437   97.611  343.328 79.967307 -2.145563\r\nFIEC105   FIEC  punto       1       1       1  9762792.518  ...   82.708  382.250  117.785  326.571 79.967231 -2.145730\r\n\r\n<\/pre>\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<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>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<pre>pip install utm<\/pre>\n<p>con lo que es posible hacer las conversiones de UTM a latitud y longitud y viceversa.<\/p>\n<p>La f\u00f3rmula de distancia en UTM es la tradicional para distancia entre dos puntos en el plano.<\/p>\n<pre><span style=\"color: #ff0000\"># Datos desde GPS Diferencial a un archivo.txt<\/span>\r\n<span style=\"color: #ff0000\"># Incorpora distancias a los vertices (baliza),<\/span>\r\n<span style=\"color: #ff0000\"># a\u00f1ade grupo por sector, tipo de punto y LOS.<\/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> utm\r\n\r\n<span style=\"color: #ff0000\"># INGRESO<\/span>\r\n<span style=\"color: #ff0000\"># Archivo de coordenadas<\/span>\r\narch_gps    = <span style=\"color: #008000\">'ubicaPuntos01.txt'<\/span>\r\n\r\n<span style=\"color: #ff0000\"># Archivo salida procesado con distancias<\/span>\r\narch_gpsrsm = <span style=\"color: #008000\">'resumen_ubica03.txt'<\/span>\r\nzona =<span style=\"color: #008000\">'17 M'<\/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\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\n\r\n<span style=\"color: #ff0000\"># digitos decimales en distancias<\/span>\r\ndigitos = 3\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_gps,index_col=<span style=\"color: #008000\">'etiqueta'<\/span>)\r\nubica.drop(<span style=\"color: #008000\">'item'<\/span>,inplace=<span style=\"color: #d35400\">True<\/span>, axis=1)\r\nubica = pd.DataFrame(ubica)\r\nn = <span style=\"color: #ff00ff\">len<\/span>(ubica)\r\nzonanum = <span style=\"color: #ff00ff\">int<\/span>(zona[0:2])\r\nzonalet = zona[3]\r\n\r\n<span style=\"color: #ff0000\"># vertices con balizas<\/span>\r\nbaliza_key = <span style=\"color: #ff00ff\">list<\/span>(baliza.keys())\r\nbaliza_val = <span style=\"color: #ff00ff\">list<\/span>(baliza.values())\r\nvertices   = ubica.loc[baliza_val]\r\n\r\n<span style=\"color: #ff0000\"># distancias a vertices<\/span>\r\n<span style=\"color: #d35400\">for<\/span> fila <span style=\"color: #d35400\">in<\/span> vertices.index:\r\n    x1 = vertices[<span style=\"color: #008000\">'c_este'<\/span>][fila]\r\n    y1 = vertices[<span style=\"color: #008000\">'c_norte'<\/span>][fila]\r\n    x2 = ubica[<span style=\"color: #008000\">'c_este'<\/span>]\r\n    y2 = ubica[<span style=\"color: #008000\">'c_norte'<\/span>]\r\n    dist  = np.sqrt((x2-x1)**2 + (y2-y1)**2)\r\n    dist  = np.round(dist,digitos)\r\n    donde = baliza_val.index(fila)\r\n    cual  = baliza_key[donde]\r\n    etiq_col = <span style=\"color: #008000\">'dist_'<\/span>+cual\r\n    ubica[etiq_col] = dist\r\n\r\n<span style=\"color: #ff0000\"># redondear a dos digitos<\/span>\r\nubica[<span style=\"color: #008000\">'c_este'<\/span>]  = np.round(ubica[<span style=\"color: #008000\">'c_este'<\/span>],digitos)\r\nubica[<span style=\"color: #008000\">'c_norte'<\/span>] = np.round(ubica[<span style=\"color: #008000\">'c_norte'<\/span>],digitos)\r\nubica[<span style=\"color: #008000\">'altitud'<\/span>] = np.round(ubica[<span style=\"color: #008000\">'altitud'<\/span>],digitos)\r\n\r\n<span style=\"color: #ff0000\"># a\u00f1adir coordenadas en latitud y longitud<\/span>\r\nubica[<span style=\"color: #008000\">'longitud'<\/span>] = 0.0\r\nubica[<span style=\"color: #008000\">'latitud'<\/span>]  = 0.0\r\n<span style=\"color: #d35400\">for<\/span> fila <span style=\"color: #d35400\">in<\/span> ubica.index:\r\n    lon_utm = ubica[<span style=\"color: #008000\">'c_este'<\/span>][fila]\r\n    lat_utm = ubica[<span style=\"color: #008000\">'c_norte'<\/span>][fila]\r\n    coord_gra = utm.to_latlon(lon_utm,lat_utm,\r\n                              zonanum,zonalet)\r\n    ubica[<span style=\"color: #008000\">'latitud'<\/span>][fila]  = coord_gra[0]\r\n    ubica[<span style=\"color: #008000\">'longitud'<\/span>][fila] = coord_gra[1]\r\n\r\n<span style=\"color: #ff0000\"># grupo y tipo en cada punto<\/span>\r\nubica.insert(0,<span style=\"color: #008000\">'grupo'<\/span>,<span style=\"color: #008000\">''<\/span>)\r\nubica.insert(1,<span style=\"color: #008000\">'tipo'<\/span>,<span style=\"color: #008000\">''<\/span>)\r\n<span style=\"color: #d35400\">for<\/span> cadauno <span style=\"color: #d35400\">in<\/span> ubica.index:\r\n    \r\n    <span style=\"color: #ff0000\"># etiqueta de grupo<\/span>\r\n    esgrupo = <span style=\"color: #008000\">'CIRC'<\/span>\r\n    <span style=\"color: #d35400\">for<\/span> ungrupo <span style=\"color: #d35400\">in<\/span> grupo:\r\n        cond1 = cadauno.startswith(ungrupo)\r\n        cond2 = cadauno.endswith(ungrupo)\r\n        <span style=\"color: #d35400\">if<\/span> cond1 <span style=\"color: #d35400\">or<\/span> cond2:\r\n            esgrupo = ungrupo\r\n    \r\n    <span style=\"color: #ff0000\"># etiqueta de tipo<\/span>\r\n    estipo = tipo[0]\r\n    <span style=\"color: #d35400\">for<\/span> untipo <span style=\"color: #d35400\">in<\/span> tipo:\r\n        cond1 = cadauno.startswith(untipo)\r\n        <span style=\"color: #d35400\">if<\/span> cond1:\r\n            estipo = untipo\r\n    <span style=\"color: #d35400\">if<\/span> esgrupo == <span style=\"color: #008000\">'CIRC'<\/span>:\r\n        estipo = <span style=\"color: #008000\">'dispositivo'<\/span>\r\n    \r\n    ubica.loc[cadauno,<span style=\"color: #008000\">'grupo'<\/span>] = esgrupo\r\n    ubica.loc[cadauno,<span style=\"color: #008000\">'tipo'<\/span>]  = estipo\r\n\r\n<span style=\"color: #ff0000\"># generar columna de Linea de vista LOS<\/span>\r\ncolumna = 2\r\n<span style=\"color: #d35400\">for<\/span> cadauno <span style=\"color: #d35400\">in<\/span> baliza.keys():\r\n    ubica.insert(columna,<span style=\"color: #008000\">'LOS_'<\/span>+cadauno,1)\r\n    columna = columna + 1\r\n\r\n<span style=\"color: #ff0000\"># SALIDA<\/span>\r\n<span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'archivo resumen:'<\/span>, arch_gpsrsm)\r\n<span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'una muestra de archivo: '<\/span>)\r\n<span style=\"color: #ff00ff\">print<\/span>(ubica.head())\r\n<span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'vertices: \\n'<\/span>,vertices)\r\nubica.to_csv(arch_gpsrsm)\r\n<\/pre>\n","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 item,c_norte,c_este,altitud,etiqueta 6,9762822.08,614817.64,62.213,FIEC101 8,9762828.622,614788.477,82.308,FIEC102 7,9762836.027,614795.73,77.421,FIEC103 A los datos de cada punto se a\u00f1aden los c\u00e1lculos de distancia hacia &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/blog.espol.edu.ec\/girni\/procesa-datos-coordenadas-gps-y-distancias-al-archivo-txt\/\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \"3.3 Procesa datos. Coordenadas GPS y distancias al archivo.txt\"<\/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-2724","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\/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":12,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2724\/revisions"}],"predecessor-version":[{"id":4163,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2724\/revisions\/4163"}],"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}]}}