tag:blogger.com,1999:blog-847988614236901602024-03-05T05:19:46.440-05:00SIG, Veamos algo diferente Es un blog dedicado a todos usuarios que buscan nuevas opciones libres para SIG.Nelson Garzahttp://www.blogger.com/profile/11854219464960671201noreply@blogger.comBlogger1125tag:blogger.com,1999:blog-84798861423690160.post-68626376244320093782013-03-18T16:41:00.001-05:002013-03-27T20:06:37.436-05:00Geocodificar en Colombia con Open Refine y Google Geocoding API <div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;">Esta sección esta dirigida especialmente a las personas que están interesadas en geocodificar direcciones en Colombia. Aunque creo que Colombia posee un sistema lógico, no muchos esfuerzos se han hecho para poder hacer una buena geocodificación, no como Europa o Estados Unidos. Espero ante mano que les sea útil esta primera entrega y cualquier duda, comentario, corrección, adición... por favor háganme saberla.</span></div>
<div class="MsoNormal">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">La geocodificación es el proceso por el cual se le asigna coordenadas a un
punto por medio de una dirección. Este proceso es realizado por diferentes softwares SIG usando datos propios o conectándose a servidores especializados ¿Pero que hacemos si no tenemos la posibilidad de acceder a uno de estos programas o si no tenemos los datos necesarios? Una posible
solución es basarnos en otras herramientas tales como Open Refine y Google
Maps.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">Open Refine<a href="file:///C:/Documents%20and%20Settings/Consultor/Mis%20documentos/Nelson/COMIENZO%20RAPIDO%20CON%20MAPINFO%20PROFESIONAL%2011.docx#_ftn1" name="_ftnref1" title=""><span class="MsoFootnoteReference"><span class="MsoFootnoteReference"><span style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: ES; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-language: AR-SA; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;">[1]</span></span></span></a> es una
poderosa herramienta libre que trabaja con datos desordenados, limpiándolos,
transformándolos de un formato a otro, extendiéndolos con servicios web y
enlazándolos a bases de datos tal como <i>Freebase</i>. Una de las ventajas de esta aplicación
es poder crear columnas a partir de datos existentes por medio de servicios
Web, tal como Google Geocoding API. Esta API (Application Programming
Interface) permite transformar direcciones a coordenadas geográficas.</span></div>
</div>
<div class="MsoNormal">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><o:p></o:p><br /></span>
<span style="font-family: Verdana, sans-serif;">Al usar la API debemos tener en cuenta algunas restricciones:
si somos usuarios gratuitos podemos geocodificar máximo 2.500 puntos por día o,
si somos usuarios API Google Maps for Business podemos geocodificar hasta
100.000 puntos por día. Otro aspecto importante es la sintaxis de la dirección, ya que Colombia no usa el sistema europeo de calles con nombres propios, debemos colocar las direcciones de un forma especifica.</span></div>
</div>
<div class="MsoNormal">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><o:p></o:p></span><br />
<span style="font-family: Verdana, sans-serif;">En Colombia, a comparación de otros países, usamos un
sistema cartesiano para definir las calles. El nombre de la calle depende de su sentido así, en Colombia tenemos Carreras, Calles, Diagonales o Transversales.
Las Carreras y Transversales dividen la ciudad en este y oeste, o sea que van norte-sur,
las Calles y Diagonales van de Este-Oeste dividiendo la ciudad en Norte y Sur. Para
formar una dirección se ubica el inmueble sobre una calle principal y se mide
la distancia a la que se encuentra de la calle transversal a la calle principal.
Por ejemplo, en la imagen </span><span style="font-family: Verdana, sans-serif;">a continuación vemos un predio que se encuentra sobre la Calle 84 BIS, separado 42 m de la Carrera
13, por lo tanto la dirección será Calle 84 BIS N. 13-42. En Colombia las Calles
y Diagonales aumentan hacia el Norte y las Carreras y Transversales hacia el Oeste.
Este sistema es eficiente en cuanto a ubicación, por que una persona que no
conozca el lugar puede fácilmente llegar a su destino en el momento en que se
ubique pero, como es el caso de muchas ciudades en Colombia, las calles no son
creadas según planes de ordenamiento territorial sino por la inserción de casas
sin control, por las cuales se permite el paso vehicular y finalmente se les
asigna una abreviatura.</span></div>
</div>
<div class="MsoNormal">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEOUDdWo21Qbw1Mdc6LbuLT0WkZqlVXue0x1ckAm8Zx7Lb-S09-NgBnMTF14PqwhxAG8iq_vzg5NnuIkMY-eIAF20dsbTuIoFGfsa_3pT_A6ayT1Q5pHht-KGcnAZ04w1wtN9AqqozzA/s1600/direccion_colombia.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif;"><img border="0" height="205" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEOUDdWo21Qbw1Mdc6LbuLT0WkZqlVXue0x1ckAm8Zx7Lb-S09-NgBnMTF14PqwhxAG8iq_vzg5NnuIkMY-eIAF20dsbTuIoFGfsa_3pT_A6ayT1Q5pHht-KGcnAZ04w1wtN9AqqozzA/s400/direccion_colombia.png" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
<div class="MsoNormal">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;">Muchas calles poseen los mismos números con diferente letra,
dichas letras van de la A-Z y algunas poseen hasta dos letras (Por ejemplo la Calle
13 C y la Calle 13 AA). En las grandes ciudades, se ha dividido el territorio
en zonas norte, sur y centro, que se ve codificado en la nomenclatura con una S
o Sur, N o Norte y si no especifica es centro. Para geocodificar un punto a
partir de una dirección en Colombia usando Google Maps, la dirección debe tener
la siguiente sintaxis:</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
<div class="MsoNormal">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><o:p></o:p></span></div>
</div>
<div class="parrafosinter">
<div style="text-align: justify;">
<div style="text-align: center;">
<span style="font-family: Verdana, sans-serif;">Calle 38AS 93D 54, Bogotá, Colombia<o:p></o:p></span></div>
</div>
</div>
<div class="parrafosinter">
<div style="text-align: justify;">
<div style="text-align: center;">
<span style="font-family: Verdana, sans-serif;">Calle 38AS # 93D-54, Bogotá, Colombia<o:p></o:p></span></div>
</div>
</div>
<div class="parrafosinter">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
<div class="MsoNormal">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;">Como se ve, la dirección debe empezar con el nombre completo
de la calle (Carrera, Calle, Diagonal o Transversal), seguido de un espacio y
el número de la respectiva calle. En el caso de que la calle contenga una
letra, la letra debe estar junto al número. Luego, si el usuario desea puede
colocar un numeral (#) o dejar un espacio, en seguida se coloca el número de la
calle transversal a la calle principal seguida de la letra (si la posee). Dejando
un espacio o un guion (-) se coloca la distancia a la cual se encuentra el predio y
seguido la letra si la posee. Finalmente, se coloca las especificaciones de la dirección
como el barrio, localidad o comuna, ciudad, país… procurando llevar un orden
ascendente. <o:p></o:p></span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
<div class="MsoNormal">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;">Lo anterior es una aproximación de cómo se deben escribir
las calles en Google Maps, aunque no en todas las ocasiones funcione
correctamente, generalmente se obtienen buenos resultados. Ahora bien,
conociendo la sintaxis de la dirección, vamos a ver primero algo sobre Open Refine y luego explicaremos el procedimiento
general de cómo obtener las coordenadas longitud/latitud por medio de Google Geocoding API. <o:p></o:p></span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">Antes de mostrar como obtener las coordenadas de nuestras direcciones, les dejo este pequeño vídeo (1 de los tres hechos) para introducirlos en Open Refine. Estos videos los encuentran en <a href="http://www.openrefine.org/">www.openrefine.org</a>.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://img.youtube.com/vi/B70J_H_zAWM/0.jpg" height="266" width="320"><param name="movie" value="http://youtube.googleapis.com/v/B70J_H_zAWM&source=uds" /><param name="bgcolor" value="#FFFFFF" /><param name="allowFullScreen" value="true" /><embed width="320" height="266" src="http://youtube.googleapis.com/v/B70J_H_zAWM&source=uds" type="application/x-shockwave-flash" allowfullscreen="true"></embed></object></div>
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">Ahora si, u</span><span style="font-family: Verdana, sans-serif;">na vez exportada la tabla en la cual poseemos las
direcciones a geocodificar en Open Refine, vamos a la columna donde se
encuentra la dirección y damos clic en la barra desplegable, seguimos a </span><i style="font-family: Verdana, sans-serif;">Edit Column y Add Column by fetching URLs… </i><span style="font-family: Verdana, sans-serif;">Enseguida saldrá una ventana en la cual escribiremos:</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
<div class="parrafosinter">
<div style="text-align: justify;">
<span lang="EN-US" style="font-family: Verdana, sans-serif;"><i>‘<span style="background: white; border: none windowtext 1.0pt; mso-border-alt: none windowtext 0cm; padding: 0cm;">http://maps.google.com/maps/api/geocode/json?sensor=false&address=</span><span style="background: white; color: #333333;">’+ escape(value, ‘url’)</span></i><o:p></o:p></span></div>
</div>
<div class="parrafosinter">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
<v:imagedata cropbottom="31612f" cropleft="31691f" cropright="9093f" croptop="9869f" o:title="" src="file:///D:\DOCUME~1\Admin\CONFIG~1\Temp\msohtmlclip1\01\clip_image002.png">
</v:imagedata><span lang="EN-US"><o:p></o:p></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4NdywTx7f8brBzeELMU40oDsE-4wrdt9clv4hnXjTC5MxYaW091mOEioUMZUuUuSD154Jk3XgMtrygOqmcGEFG_4vNOdOa9K81hpPZPcNzVDOWpodZ22LWz8908jInoBSTjm8GH_Exg/s1600/ventanas.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="147" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4NdywTx7f8brBzeELMU40oDsE-4wrdt9clv4hnXjTC5MxYaW091mOEioUMZUuUuSD154Jk3XgMtrygOqmcGEFG_4vNOdOa9K81hpPZPcNzVDOWpodZ22LWz8908jInoBSTjm8GH_Exg/s400/ventanas.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<span style="font-family: Verdana, sans-serif; text-align: justify;">En esta expresión vemos el llamado de la API con un formato
de salida </span><b style="font-family: Verdana, sans-serif; text-align: justify;"><i>json </i></b><span style="font-family: Verdana, sans-serif; text-align: justify;">y una función </span><b style="font-family: Verdana, sans-serif; text-align: justify;"><i>escape</i></b><span style="font-family: Verdana, sans-serif; text-align: justify;">
que convierte el texto contenido en </span><b style="font-family: Verdana, sans-serif; text-align: justify;"><i>value</i></b><span style="font-family: Verdana, sans-serif; text-align: justify;"> a formato URL </span><span style="font-family: Verdana, sans-serif; text-align: justify;">(Mirar <a href="http://www.blogger.com/blogger.g?blogID=84798861423690160#[2]">[2]</a>). Esta acción va a
crear una nueva columna con un respuesta que contiene los criterios de búsqueda
y las coordenadas geográficas latitud/longitud que la API estableció para cada dirección.
Para separar las coordenadas vamos al menú desplegable de la columna recién creada,
</span><i style="font-family: Verdana, sans-serif; text-align: justify;">Edit
Column/ Add column based on this column…</i><span style="font-family: Verdana, sans-serif; text-align: justify;"> y escribimos lo siguiente:</span><br />
<div class="MsoNormal">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
<div class="parrafosinter">
<div style="text-align: justify;">
<div style="text-align: center;">
<span style="font-family: Verdana, sans-serif;"><i><span lang="EN-US" style="background: white; mso-ansi-language: EN-US;">with(value.parseJson().results[0].geometry.location, pair, pair.lat
+", " + pair.lng)</span><o:p></o:p></i></span></div>
</div>
</div>
<div class="parrafosinter">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
<div class="MsoNormal">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;">Esto creara una columna con los valores de latitud y longitud
separados por una coma. Para separar estos valores vamos otra vez al menú desplegable,
<i>Split into several columns</i> y
definimos separar la columna por la coma en dos nuevas columnas.<o:p></o:p></span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
<div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; text-align: center;">
<span style="font-family: Verdana, sans-serif;"><v:shape id="Imagen_x0020_64" o:spid="_x0000_i1025" style="height: 164.25pt; mso-wrap-style: square; visibility: visible; width: 315pt;" type="#_x0000_t75">
<v:imagedata cropbottom="19737f" cropleft="15845f" cropright="15687f" croptop="22206f" o:title="" src="file:///D:\DOCUME~1\Admin\CONFIG~1\Temp\msohtmlclip1\01\clip_image004.png">
</v:imagedata></v:shape><o:p></o:p></span></div>
<div class="MsoCaption" style="text-align: center;">
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggBjHPJkBz3sulV22vDa0crs6zRkWfCdF7tzTcn-pDY11ZW2EJ0dW1pmMvrLRs742-1LsKOsQqAw0FA3_e17BfyI8WKm0VjOfWyv07OktASY0rAYlpCw6Dz_2HSeT3AvNlbMrWD7NutQ/s1600/ventanas_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="207" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggBjHPJkBz3sulV22vDa0crs6zRkWfCdF7tzTcn-pDY11ZW2EJ0dW1pmMvrLRs742-1LsKOsQqAw0FA3_e17BfyI8WKm0VjOfWyv07OktASY0rAYlpCw6Dz_2HSeT3AvNlbMrWD7NutQ/s400/ventanas_1.png" width="400" /></a></div>
<br /></div>
</div>
<div class="MsoNormal">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
<div class="MsoNormal">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;">Finalmente tendemos una tabla con las coordenadas de cada
punto, que podremos ubicar usando algún SIG o programa en línea. La API de Google no es la única opción
que tenemos para geocodificar, por ejemplo tenemos el proyecto Nominatum<a href="file:///C:/Documents%20and%20Settings/Consultor/Mis%20documentos/Nelson/COMIENZO%20RAPIDO%20CON%20MAPINFO%20PROFESIONAL%2011.docx#_ftn2" name="_ftnref2" title=""><span class="MsoFootnoteReference"><!--[if !supportFootnotes]--><span class="MsoFootnoteReference"><span style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: ES; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-language: AR-SA; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;">[3]</span></span><!--[endif]--></span></a> de OpenStreetMap que con pasos similares a los anteriores podemos encontrar las
coordenadas para nuestras direcciones.</span><o:p></o:p></div>
</div>
<div>
<!--[if !supportFootnotes]--><br clear="all" />
<hr align="left" size="1" width="33%" />
<!--[endif]-->
<br />
<div id="ftn1">
<div class="MsoFootnoteText">
<a href="file:///C:/Documents%20and%20Settings/Consultor/Mis%20documentos/Nelson/COMIENZO%20RAPIDO%20CON%20MAPINFO%20PROFESIONAL%2011.docx#_ftnref1" name="_ftn1" title=""><span class="MsoFootnoteReference"><!--[if !supportFootnotes]--><span class="MsoFootnoteReference"><span style="font-family: "Calibri","sans-serif"; font-size: 10.0pt; mso-ansi-language: ES; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-language: AR-SA; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;">[1]</span></span><!--[endif]--></span></a> Desde el
2 de Octubre 2012 Google dejo de dar soporte al proyecto llamado Google Refine, desde entonces personas independientes tomaron su dirección y lo llamaron Open Refine. Para más información visiten la pagina <a href="http://www.openrefine.org/">www.openrefine.org</a>. <o:p></o:p><br />
[2] Para más información mirar <a href="https://github.com/OpenRefine/OpenRefine/wiki/Geocoding">Geocoding Open Refine</a> y <a href="https://developers.google.com/maps/documentation/geocoding/">Google Geocoding API</a><br />
<a href="file:///C:/Documents%20and%20Settings/Consultor/Mis%20documentos/Nelson/COMIENZO%20RAPIDO%20CON%20MAPINFO%20PROFESIONAL%2011.docx#_ftnref2" name="_ftn2" title=""><span class="MsoFootnoteReference"><span class="MsoFootnoteReference"><span style="font-family: "Calibri","sans-serif"; font-size: 10.0pt; mso-ansi-language: ES; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-language: AR-SA; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;">[3]</span></span></span></a> Para Mas
Información ver <a href="http://wiki.openstreetmap.org/wiki/Nominatim.">Proyecto Nominatim. </a></div>
</div>
<div id="ftn2">
<div class="MsoFootnoteText">
<o:p></o:p><br />
<br /></div>
</div>
</div>
Nelson Garzahttp://www.blogger.com/profile/11854219464960671201noreply@blogger.com13