{"id":120,"date":"2022-10-19T05:42:36","date_gmt":"2022-10-19T05:42:36","guid":{"rendered":"http:\/\/34.172.140.203\/wordpress\/?p=120"},"modified":"2022-11-11T15:08:19","modified_gmt":"2022-11-11T15:08:19","slug":"codificar-coordenadas-en-google-maps","status":"publish","type":"post","link":"https:\/\/blog-esource.daxosline.com.co\/wordpress\/index.php\/2022\/10\/19\/codificar-coordenadas-en-google-maps\/","title":{"rendered":"Codificar coordenadas en Google Maps"},"content":{"rendered":"\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/strapi_bucket-1\/coding_f67ff050af\/coding_f67ff050af.png\" alt=\"foto\" width=\"806\" height=\"537\"\/><\/figure>\n\n\n\n<p><a href=\"http:\/\/welivesecurity.com\/\">Camilo Gutierrez<\/a>&nbsp;se\u00f1ala que la criptograf\u00eda se enfoca en estudiar los m\u00e9todos para lograr que un mensaje no pueda ser le\u00eddo por un tercero sin autorizaci\u00f3n, es decir, para garantizar la confidencialidad de la informaci\u00f3n. De esta \u00e1rea de estudio surgen los conceptos&nbsp;cifrar&nbsp;y&nbsp;codificar, que, aunque persiguen el mismo objetivo (hacer que cierta informaci\u00f3n carezca de sentido para terceros ajenos a la comunicaci\u00f3n), no son lo mismo.&nbsp;<\/p>\n\n\n\n<p>El cifrado de informaci\u00f3n se basa en la aplicaci\u00f3n de un algoritmo que suele utilizar una clave que transforma la estructura y composici\u00f3n de lo que se pretende proteger, de tal manera que si es interceptada por un tercero no la pueda entender.<\/p>\n\n\n\n<p>Por otro lado, la codificaci\u00f3n es el proceso de transformar un tipo de informaci\u00f3n en otra, sin perder nada de informaci\u00f3n en esta transformaci\u00f3n. Para saber qu\u00e9 significa el mensaje codificado, es necesario decodificarlo y obtener el mensaje original. De esta forma, no podremos saber cu\u00e1l es el mensaje si no sabemos el c\u00f3digo.<\/p>\n\n\n\n<p>Entonces, cuando se habla de un mensaje cifrado, tiene que ver con ocultar la informaci\u00f3n bas\u00e1ndose en la sintaxis del mensaje, lo que significa valorar los s\u00edmbolos que lo componen; en cambio, la codificaci\u00f3n se basa en alterar la sem\u00e1ntica del mensaje, lo que est\u00e1 relacionado con el significado del mensaje. Esto \u00faltimo es lo que Google Maps propone.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">La Polil\u00edneas, codificaci\u00f3n en Google Maps<\/h2>\n\n\n\n<p>Las polil\u00edneas en Google Maps se forman como un conjunto de pares de latitud y longitud, que pueden ser una o m\u00e1s coordenadas en el mismo string.&nbsp;<\/p>\n\n\n\n<p>Google Maps Platform define un formato para codificar las polil\u00edneas, dicho algoritmo permite almacenar una serie de coordenadas como un solo string. Este proceso de codificaci\u00f3n convierte un valor binario en una serie de c\u00f3digos para caracteres ASCII utilizando el esquema de codificaci\u00f3n base64 , lo que significa que, para mostrar apropiadamente los caracteres, los valores codificados se les suma 63 (el caracter \u00b4?\u00b4 en ASCII), antes de convertirlo a dicho c\u00f3digo. El algoritmo tambien verifica codigos adicionales para un punto dado tomando en cuenta el bit menos significativo de cada grupo; si el bit esta en 1, el punto no esta completamente formado y le seguira informaci\u00f3n adicional.&nbsp;<\/p>\n\n\n\n<p>Otro dato a tomar en cuenta es que, para conservar espacio en el string, los puntos (coordenadas) solo incluyen el desplazamiento desde el punto anterior (a excepci\u00f3n del primer punto). Todos los puntos son codificados en Base64 como numeros enteros con signo, ya que las latitudes y las longitudes contienen valores positivos y negativos.&nbsp;<\/p>\n\n\n\n<p>El formato de codificaci\u00f3n dentro de una polil\u00ednea debe representar una coordenada con precisi\u00f3n razonable. Dada una longitud m\u00e1xima de +\/- 180 grados a una precisi\u00f3n de 5 decimales (180.00000 a -180.00000), esto da como resultado la necesidad de un valor entero binario con signo de 32 bits.&nbsp;<\/p>\n\n\n\n<p>Hay que tomar en cuenta que la barra inversa se interpreta como un caracter de escape dentro del string.&nbsp;<\/p>\n\n\n\n<p>Pasos que hace Google para codificar las coordenadas:&nbsp;<\/p>\n\n\n\n<p>1.- Toma un valor inicial con signo, por ejemplo:&nbsp;<\/p>\n\n\n\n<p>-179.9832104<\/p>\n\n\n\n<p>2.- Multiplica el decimal por 1e5 y redondea el resultado:&nbsp;<\/p>\n\n\n\n<p>-17998321<\/p>\n\n\n\n<p>3.- Convierte el valor del sistema decimal a sistema binario. El valor negativo debe ser calculado utilzando el sistema \u201ccomplemento a dos\u201d* al invertir el numero binario y a\u00f1adir uno al resultado:&nbsp;<\/p>\n\n\n\n<p>00000001 00010010 10100001 11110001<\/p>\n\n\n\n<p>11111100 11101100 010000000000000001000000000101.<\/p>\n\n\n\n<p>4.- Desplaza el valor binario un bit a la izquierda:&nbsp;<\/p>\n\n\n\n<p>11111101 11011010 10111100 00011110<\/p>\n\n\n\n<p>5.- Si el valor del sistema decimal original es negativo, invierte esta codificaci\u00f3n:<\/p>\n\n\n\n<p>00000010 00100101 01000011 11100001<\/p>\n\n\n\n<p>6.- Divide el valor binario en fragmentos de 5 bits (a partir del lado derecho):<\/p>\n\n\n\n<p>00001 00010 01010 10000 11111 00001<\/p>\n\n\n\n<p>7.- Coloca los fragmentos de 5 bits en orden inverso:<\/p>\n\n\n\n<p>00001 11111 10000 01010 00010 00001<\/p>\n\n\n\n<p>8.- O cada valor con 0x20 si sigue otro fragmento de bits:<\/p>\n\n\n\n<p>100001 111111 110000 101010 100010 000001<\/p>\n\n\n\n<p>9.- Convierte cada valor a sistema decimal:<\/p>\n\n\n\n<p>33 63 48 42 34 1<\/p>\n\n\n\n<p>10.- Agregue 63 a cada valor:<\/p>\n\n\n\n<p>96 126 111 105 97 64<\/p>\n\n\n\n<p>11.- Convierte cada valor a su equivalente ASCII:<\/p>\n\n\n\n<p>`~oia@<\/p>\n\n\n\n<p>Ejemplo de la documentaci\u00f3n de Google Maps Platform:&nbsp;<\/p>\n\n\n\n<p>Puntos: (38.5, -120.2), (40.7, -120.95), (43.252, -126.453)<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/kH4mT4jAkRREzs-ix8eG0lDKc3MeN1x9CzYisAYGQkLH8rf90ltcpgdtFEgDSjWqE4dFJD2s7-C8i7JfVtAqW1juFXtg7IRvaIPZbkdC2xpSoT5ur2iCxkfv_rsrtiONyJBpLBddxPtB44y--Pz612MJD9Noc3kr0ocbesUuDCasNrdZ3dGyrpB3wA\" alt=\"\" width=\"650\"\/><\/figure>\n\n\n\n<p>polil\u00ednea codificada: _p~iF~ps|U_ulLnnqC_mqNvxq`@<\/p>\n\n\n\n<p>Google nos facilita este proceso con una herramienta para codificar y decodificar coordenadas, la cual la puedes encontrar aqu\u00ed:&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/developers.google.com\/maps\/documentation\/utilities\/polylineutility\">https:\/\/developers.google.com\/maps\/documentation\/utilities\/polylineutility<\/a><\/p>\n\n\n\n<p>Esta herramienta utiliza la API de Maps JavaScript, en particular la codificaci\u00f3n y la decodificaci\u00f3n de rutas se controlan mediante los m\u00e9todos est\u00e1ticos encodePath() y decodePath en el espacio de nombres google.maps.geometry.encoding.&nbsp;<\/p>\n\n\n\n<p>* Complemento a dos: del ingl\u00e9s Two\u2019s complement, es una operaci\u00f3n matem\u00e1tica para convertir reversiblemente un n\u00famero binario positivo en un n\u00famero binario negativo con un valor equivalente, pero negativo, usando el d\u00edgito binario &nbsp;con el mayor valor posicional, el bit mas a la izquierda en n\u00fameros big-endian, el bit mas a la derecha en n\u00fameros little-endian, para indicar si el n\u00famero binario es positivo o negativo.&nbsp;<\/p>\n\n\n\n<p>Fuentes consultadas<\/p>\n\n\n\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Character_encoding\">https:\/\/en.wikipedia.org\/wiki\/Character_encoding<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/definicion.de\/codificacion\/\">https:\/\/definicion.de\/codificacion\/<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/developers.google.com\/maps\/documentation\/utilities\/polylinealgorithm\">https:\/\/developers.google.com\/maps\/documentation\/utilities\/polylinealgorithm<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.welivesecurity.com\/la-es\/2016\/12\/07\/codificacion-o-cifrado-diferencia\/#:~:text=En%20%C3%BAltima%2C%20cuando%20nos%20referimos,con%20el%20significado%20del%20mensaje.\">https:\/\/www.welivesecurity.com\/la-es\/2016\/12\/07\/codificacion-o-cifrado-diferencia\/#:~:text=En%20%C3%BAltima%2C%20cuando%20nos%20referimos,con%20el%20significado%20del%20mensaje.<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Signedness#:~:text=In%20computing%2C%20signedness%20is%20a,(zero%20or%20positive%20numbers).\">https:\/\/en.wikipedia.org\/wiki\/Signedness#:~:text=In%20computing%2C%20signedness%20is%20a,(zero%20or%20positive%20numbers).<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Two%27s_complement\">https:\/\/en.wikipedia.org\/wiki\/Two%27s_complement<\/a><\/p>\n\n\n\n<!-- AddToAny BEGIN -->\n<div class=\"a2a_kit a2a_kit_size_32 a2a_default_style\">\n<a class=\"a2a_dd\" href=\"https:\/\/www.addtoany.com\/share\"><\/a>\n<a class=\"a2a_button_facebook\"><\/a>\n<a class=\"a2a_button_twitter\"><\/a>\n<a class=\"a2a_button_email\"><\/a>\n<a class=\"a2a_button_whatsapp\"><\/a>\n<a class=\"a2a_button_linkedin\"><\/a>\n<\/div>\n<script async=\"\" src=\"https:\/\/static.addtoany.com\/menu\/page.js\"><\/script>\n<!-- AddToAny END -->\n\n\n\n<p>interesting topics on that<\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Camilo Gutierrez&nbsp;se\u00f1ala que la criptograf\u00eda se enfoca en estudiar los m\u00e9todos para lograr que un mensaje no pueda ser le\u00eddo por un tercero sin autorizaci\u00f3n, es decir, para garantizar la confidencialidad de la informaci\u00f3n. De esta \u00e1rea de estudio surgen los conceptos&nbsp;cifrar&nbsp;y&nbsp;codificar, que, aunque persiguen el mismo objetivo (hacer que cierta informaci\u00f3n carezca de sentido [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":184,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[3,1],"tags":[],"class_list":["post-120","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articulos-de-interes","category-novedades"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/blog-esource.daxosline.com.co\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/120","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog-esource.daxosline.com.co\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog-esource.daxosline.com.co\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog-esource.daxosline.com.co\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog-esource.daxosline.com.co\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=120"}],"version-history":[{"count":7,"href":"https:\/\/blog-esource.daxosline.com.co\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/120\/revisions"}],"predecessor-version":[{"id":205,"href":"https:\/\/blog-esource.daxosline.com.co\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/120\/revisions\/205"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog-esource.daxosline.com.co\/wordpress\/index.php\/wp-json\/wp\/v2\/media\/184"}],"wp:attachment":[{"href":"https:\/\/blog-esource.daxosline.com.co\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=120"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog-esource.daxosline.com.co\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=120"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog-esource.daxosline.com.co\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}