<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>openstreetmap &#8211; danisanchez.net</title>
	<atom:link href="https://danisanchez.net/tag/openstreetmap/feed/" rel="self" type="application/rss+xml" />
	<link>https://danisanchez.net</link>
	<description></description>
	<lastBuildDate>Tue, 13 Apr 2021 08:16:09 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://danisanchez.net/wp-content/uploads/2026/07/cropped-favicon-32x32.png</url>
	<title>openstreetmap &#8211; danisanchez.net</title>
	<link>https://danisanchez.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Agrupar marcadores en clusters en OpenStreetMap</title>
		<link>https://danisanchez.net/agrupar-marcadores-en-clusters-en-openstreetmap/</link>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Tue, 13 Apr 2021 08:16:09 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[markercluster]]></category>
		<category><![CDATA[openstreetmap]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=10500</guid>

					<description><![CDATA[Cuando en determinadas zonas de nuestro mapa se aglutinan varios marcadores, un buen recurso suele ser agruparlos en clusters, de forma que el número de elementos en el mapa disminuya mejorando así la usabilidad y visibilidad. Esta funcionalidad no viene integrada directamente en la API de OpenStreetMap (LeafletJS) y tenemos que implementarla mediante un sencillo [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Cuando en determinadas zonas de nuestro mapa se aglutinan varios marcadores, un buen recurso suele ser agruparlos en clusters, de forma que el número de elementos en el mapa disminuya mejorando así la usabilidad y visibilidad.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img fetchpriority="high" decoding="async" width="466" height="402" src="https://danisanchez.net/wp-content/uploads/2021/04/imagen.png" alt="" class="wp-image-10501" srcset="https://danisanchez.net/wp-content/uploads/2021/04/imagen.png 466w, https://danisanchez.net/wp-content/uploads/2021/04/imagen-300x259.png 300w" sizes="(max-width: 466px) 100vw, 466px" /></figure></div>



<p class="wp-block-paragraph">Esta funcionalidad no viene integrada directamente en la API de OpenStreetMap (<a rel="noreferrer noopener" href="https://leafletjs.com/" target="_blank">LeafletJS</a>) y tenemos que implementarla mediante un sencillo plugin, <a rel="noreferrer noopener" href="https://github.com/Leaflet/Leaflet.markercluster" target="_blank">Leaflet MarkerCluster</a>.</p>



<p class="wp-block-paragraph">Para el ejemplo vamos a crear un mapa en OpenStreetMap como lo haríamos normalmente y como vimos en artículos anteriores:  <em><a href="https://danisanchez.net/integra-openstreetmap-en-tus-aplicaciones-web-con-leaflet-y-mapbox/">Integra OpenStreetMap en tus aplicaciones web con LeafLet y MapBox</a></em>.</p>



<pre class="wp-block-code"><code>&lt;!DOCTYPE html>
&lt;html lang="es">
&lt;head>
    &lt;meta charset="UTF-8">
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0">
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge">
    &lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.6.0/dist/leaflet.css"
   integrity="sha512-xwE/Az9zrjBIphAcBb3F6JVqxf46+CDLwfLMHloNu6KEQCAWi6HcDUbeOfBIptF7tcCzusKFjFw2yuvEpDL9wQ=="
   crossorigin=""/>
    &lt;script src="https://unpkg.com/leaflet@1.6.0/dist/leaflet.js"
    integrity="sha512-gZwIG9x3wUXg2hdXF6+rVkLF/0Vi9U8D2Ntg4Ga5I5BZpVkVxlJWbSQtXPSiUTtC0TjtGOmxa1AJPuV0CPthew=="
    crossorigin="">&lt;/script>
    &lt;title>Mapa con OpenStreetMap&lt;/title>
    
    &lt;style>
    	#mimapa {height: 600px;}
    &lt;/style>
&lt;/head>

&lt;body>
    &lt;div id="mimapa">&lt;/div>
    
    &lt;script>
    	var mymap = L.map('mimapa').setView(&#91;37.1698, -3.965], 18);
    	
    	L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw', {
    		maxZoom: 25,
    		attribution: 'Datos del mapa de &amp;copy; &lt;a href="https://www.openstreetmap.org/">OpenStreetMap&lt;/a>, ' + '&lt;a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA&lt;/a>, ' + 'Imágenes © &lt;a href="https://www.mapbox.com/">Mapbox&lt;/a>', 
    		id: 'mapbox/streets-v11'
		}).addTo(mymap);
	&lt;/script>
&lt;/body>
&lt;/html></code></pre>



<p class="wp-block-paragraph">Ejecutando este código ya deberíamos poder visualizar un mapa vacío. Si no carga, revisa el código. Puedes modificar las coordenadas por las de tu zona, si lo prefieres.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="980" height="659" src="https://danisanchez.net/wp-content/uploads/2021/04/imagen-1.png" alt="" class="wp-image-10502" srcset="https://danisanchez.net/wp-content/uploads/2021/04/imagen-1.png 980w, https://danisanchez.net/wp-content/uploads/2021/04/imagen-1-300x202.png 300w, https://danisanchez.net/wp-content/uploads/2021/04/imagen-1-768x516.png 768w" sizes="(max-width: 980px) 100vw, 980px" /></figure>



<p class="wp-block-paragraph">Ahora vamos a añadir unos cuantos marcadores en un espacio reducido:</p>



<pre class="wp-block-code"><code>/*MARCADORES*/
var marker1 = L.marker(&#91;37.1698, -3.965]).addTo(mymap);
var marker2 = L.marker(&#91;37.1698, -3.966]).addTo(mymap);
var marker3 = L.marker(&#91;37.1700, -3.966]).addTo(mymap);
var marker4 = L.marker(&#91;37.1700, -3.967]).addTo(mymap);
var marker5 = L.marker(&#91;37.1696, -3.964]).addTo(mymap);
var marker6 = L.marker(&#91;37.1694, -3.964]).addTo(mymap);</code></pre>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="607" height="423" src="https://danisanchez.net/wp-content/uploads/2021/04/imagen-2.png" alt="" class="wp-image-10504" srcset="https://danisanchez.net/wp-content/uploads/2021/04/imagen-2.png 607w, https://danisanchez.net/wp-content/uploads/2021/04/imagen-2-300x209.png 300w" sizes="(max-width: 607px) 100vw, 607px" /></figure></div>



<p class="wp-block-paragraph">Hasta aquí bien, tenemos 6 marcadores agrupados en una zona reducida, lo que a simple vista dificulta un poco la visibilidad. Para poder agrupar estor marcadores en clusters vamos a añadir los scripts del plugin MarkerCluster en el &lt;head> de nuestra página a continuación de los scripts de Leaflet:</p>



<pre class="wp-block-code"><code>&lt;link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.1.0/dist/MarkerCluster.css" />
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.1.0/dist/MarkerCluster.Default.css" />
&lt;script src="https://unpkg.com/leaflet.markercluster@1.1.0/dist/leaflet.markercluster.js">&lt;/script></code></pre>



<p class="wp-block-paragraph">Bien, lo primero que vamos a hacer es volver al código de marcadores y quitarles el método addTo(mymap), ya que no vamos a añadirlos de forma indepeniente y dejar este método puede crear repeticiones y comportamientos extraños.</p>



<pre class="wp-block-code"><code>/*MARCADORES*/
var marker1 = L.marker(&#91;37.1698, -3.965]);
var marker2 = L.marker(&#91;37.1698, -3.966]);
var marker3 = L.marker(&#91;37.1700, -3.966]);
var marker4 = L.marker(&#91;37.1700, -3.967]);
var marker5 = L.marker(&#91;37.1696, -3.964]);
var marker6 = L.marker(&#91;37.1694, -3.964]);</code></pre>



<p class="wp-block-paragraph">A continuación de los marcadores, vamos a declarar un grupo de clusters:</p>



<pre class="wp-block-code"><code>var grupos = L.markerClusterGroup(); </code></pre>



<p class="wp-block-paragraph">Y lo único que tenemos que hacer es añadir cada marcador a este grupo:</p>



<pre class="wp-block-code"><code>grupos.addLayer(marker1);
grupos.addLayer(marker2);
grupos.addLayer(marker3);
grupos.addLayer(marker4);
grupos.addLayer(marker5);
grupos.addLayer(marker6);</code></pre>



<p class="wp-block-paragraph">Huelga decir que si tienes cientos de marcadores no es necesario escribir todo manualmente, usa un bucle que para eso están!</p>



<pre class="wp-block-code"><code>/*POR EJEMPLO:*/
for(var i=1; i &lt;= 6; i++){
    grupos.addLayer(marker+i);
}</code></pre>



<p class="wp-block-paragraph">Por último agregamos el grupo al mapa:</p>



<pre class="wp-block-code"><code>mymap.addLayer(grupos);</code></pre>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="978" height="656" src="https://danisanchez.net/wp-content/uploads/2021/04/imagen-3.png" alt="" class="wp-image-10506" srcset="https://danisanchez.net/wp-content/uploads/2021/04/imagen-3.png 978w, https://danisanchez.net/wp-content/uploads/2021/04/imagen-3-300x201.png 300w, https://danisanchez.net/wp-content/uploads/2021/04/imagen-3-768x515.png 768w" sizes="auto, (max-width: 978px) 100vw, 978px" /></figure></div>



<p class="wp-block-paragraph">Los marcadores se irán agrupando dinámicamente según el zoom que apliquemos al mapa.</p>



<p class="wp-block-paragraph">Os dejo el código del archivo html final comentado:</p>



<pre class="wp-block-code"><code>&lt;!DOCTYPE html>
&lt;html lang="es">
&lt;head>
    &lt;meta charset="UTF-8">
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0">
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge">
    
    &lt;!-- API LEAFLET -->
    &lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.6.0/dist/leaflet.css"
   integrity="sha512-xwE/Az9zrjBIphAcBb3F6JVqxf46+CDLwfLMHloNu6KEQCAWi6HcDUbeOfBIptF7tcCzusKFjFw2yuvEpDL9wQ=="
   crossorigin=""/>
    &lt;script src="https://unpkg.com/leaflet@1.6.0/dist/leaflet.js"
    integrity="sha512-gZwIG9x3wUXg2hdXF6+rVkLF/0Vi9U8D2Ntg4Ga5I5BZpVkVxlJWbSQtXPSiUTtC0TjtGOmxa1AJPuV0CPthew=="
    crossorigin="">&lt;/script>
    	
    &lt;!--PLUGIN MARKERCLUSTER -->	
   	&lt;link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.1.0/dist/MarkerCluster.css" />
	&lt;link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.1.0/dist/MarkerCluster.Default.css" />
	&lt;script src="https://unpkg.com/leaflet.markercluster@1.1.0/dist/leaflet.markercluster.js">&lt;/script> 
    &lt;title>Mapa con Open Street Map&lt;/title>
    
    &lt;style>
    	#mimapa {height: 600px;}
    &lt;/style>
&lt;/head>

&lt;body>
    &lt;div id="mimapa">&lt;/div>
    
    &lt;script>
    	/*DECLARAR EL MAPA*/
    	var mymap = L.map('mimapa').setView(&#91;37.1698, -3.965], 16);
    	
    	/*DIBUJAR EL MAPA*/
    	L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw', {
    maxZoom: 25,
    attribution: 'Datos del mapa de &amp;copy; &lt;a href="https://www.openstreetmap.org/">OpenStreetMap&lt;/a>, ' + '&lt;a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA&lt;/a>, ' + 'Imágenes © &lt;a href="https://www.mapbox.com/">Mapbox&lt;/a>', 
    id: 'mapbox/streets-v11'
}).addTo(mymap);
		
/*DEFINIR MARCADORES*/
var marker1 = L.marker(&#91;37.1698, -3.965]);
var marker2 = L.marker(&#91;37.1698, -3.966]);
var marker3 = L.marker(&#91;37.1700, -3.966]);
var marker4 = L.marker(&#91;37.1700, -3.967]);
var marker5 = L.marker(&#91;37.1696, -3.964]);
var marker6 = L.marker(&#91;37.1694, -3.964]);
		
/*CREAR GRUPO DE CLUSTERS*/
var grupos = L.markerClusterGroup(); 
		
/*AÑADIR CADA MARCADOR AL CLUSTER*/
grupos.addLayer(marker1);
grupos.addLayer(marker2);
grupos.addLayer(marker3);
grupos.addLayer(marker4);
grupos.addLayer(marker5);
grupos.addLayer(marker6);
		
//AÑADIR CLUSTER AL MAPA
mymap.addLayer(grupos);
&lt;/script>
&lt;/body>
&lt;/html></code></pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Contribuir al crecimiento de OpenStreetMap es muy sencillo</title>
		<link>https://danisanchez.net/contribuir-al-crecimiento-de-openstreetmap-es-muy-sencillo/</link>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Thu, 18 Jun 2020 10:07:33 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[openstreetmap]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=6797</guid>

					<description><![CDATA[OpenStreetMap es la base de datos de mapas libre más grande del mundo. A diferencia de otros mapas comerciales, no pertenece a una gran empresa con ánimo de lucro, si no a una comunidad mundial tanto de desarrolladores encargados de los aspectos técnicos, pasando por colaboradores que contribuyen añadiendo datos sobre caminos, sendas, cafeterías, puntos [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><a rel="noreferrer noopener" href="https://www.openstreetmap.org" target="_blank">OpenStreetMap</a> es la base de datos de mapas <strong>libre</strong> más grande del mundo. A diferencia de otros mapas comerciales, no pertenece a una gran empresa con ánimo de lucro, si no a una comunidad mundial tanto de desarrolladores encargados de los aspectos técnicos, pasando por colaboradores que contribuyen añadiendo datos sobre caminos, sendas, cafeterías, puntos de interés&#8230; y apoyado (que no dirigido) por la <a rel="noreferrer noopener" href="https://wiki.osmfoundation.org/wiki/Main_Page" target="_blank">OpenStreetMap Foundation</a>, que como detallan en su página web, nacen con la iniciativa de <strong>crear y proporcionar datos geográficos libres que cualquiera pueda usar y compartir</strong>.</p>



<p class="wp-block-paragraph">OpenStreetMap puede ser utilizado en sitios web para señalar ubicaciones, trazar rutas, delimitar áreas circulares o poligonales, puede ser usado como navegador GPS con aplicaciones como <a rel="noreferrer noopener" href="https://f-droid.org/es/packages/net.osmand.plus/" target="_blank">OSMand</a>, etc.</p>



<p class="wp-block-paragraph">En este mismo blog he escrito un par de tutoriales sobre la integración y uso de la API para tu sitio web:</p>



<p class="wp-block-paragraph"><a rel="noreferrer noopener" href="https://danisanchez.net/integra-openstreetmap-en-tus-aplicaciones-web-con-leaflet-y-mapbox/" target="_blank">Integra OpenStreetMap en tus aplicaciones web con LeafLet y MapBox</a></p>



<p class="wp-block-paragraph"><a rel="noreferrer noopener" href="https://danisanchez.net/calcular-rutas-con-openstreetmap-partiendo-de-la-geolocalizacion-del-usuario/" target="_blank">Calcular rutas con OpenStreetMap partiendo de la geolocalización del usuario</a></p>



<p class="wp-block-paragraph">Tú puedes contribuir a que OpenStreetMap siga creciendo aportando datos de interés de tu zona (ciudad, barrio, municipio) a la base de datos. <strong>Y hacerlo es tremendamente sencillo</strong>.</p>



<h2 class="wp-block-heading">Crea una cuenta en OpenStreetMap.org</h2>



<p class="wp-block-paragraph">Para poder subir tus aportaciones, primero crea una cuenta en <a rel="noreferrer noopener" href="https://www.openstreetmap.org" target="_blank">openstreetmap.org</a>, tranquilo/a, no vas a recibir SPAM ni promociones, pero a través de tu cuenta podrás ver tus contribuciones, modificarlas y eliminarlas.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="491" src="https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-26-05-1024x491.png" alt="" class="wp-image-6798" srcset="https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-26-05-1024x491.png 1024w, https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-26-05-300x144.png 300w, https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-26-05-768x368.png 768w, https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-26-05.png 1446w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Una vez inicies sesión con tu cuenta, tendrás habilitado el botón de Editar:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="745" height="459" src="https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-26-41.png" alt="" class="wp-image-6799" srcset="https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-26-41.png 745w, https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-26-41-300x185.png 300w" sizes="auto, (max-width: 745px) 100vw, 745px" /></figure>



<p class="wp-block-paragraph">Antes de editar nada, el sistema te va a proponer realizar un tutorial, <strong>te animo a que lo hagas</strong>, es muy sencillo de seguir y no tardarás más de 5 minutos en completarlo. </p>



<p class="wp-block-paragraph">Aún así te daré algunos «TIPS» para hacer tus aportaciones.</p>



<p class="wp-block-paragraph">Navega por tu zona localizando <strong>puntos de interés</strong>. Puedes empezar por las <strong>instalaciones públicas</strong> como: Centros de salud, oficinas de administración, de correos, bibliotecas, colegios, institutos, instalaciones deportivas, parques&#8230; </p>



<p class="wp-block-paragraph">Existen 3 herramientas principales para añadir datos al mapa:</p>



<ul class="wp-block-list"><li>Punto.</li><li>Área.</li><li>Línea</li></ul>



<p class="wp-block-paragraph"><strong>El punto</strong> se utiliza principalmente para marcar establecimientos, como cafeterías, estaciones de servicio, tiendas, etc.</p>



<p class="wp-block-paragraph">Con el <strong>área</strong> puedes delimitar parques, zonas residenciales o edificios completos.</p>



<p class="wp-block-paragraph">Las <strong>líneas</strong> se utilizan para trazar nuevas calles o caminos que no estén registrados.</p>



<p class="wp-block-paragraph">En la siguiente imagen, he delimitado con un área el estadio de fútbol de mi municipio:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="511" src="https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-30-30-1024x511.png" alt="" class="wp-image-6800" srcset="https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-30-30-1024x511.png 1024w, https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-30-30-300x150.png 300w, https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-30-30-768x383.png 768w, https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-30-30.png 1441w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Una vez delimitada el área, lo primero es seleccionar una categoría, en este caso «Campo o cancha de fútbol» y después puedo cumplimentar todos los datos que conozca sobre el lugar.</p>



<p class="wp-block-paragraph">En la siguiente imagen he utilizado un punto para señalar una cafetería:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="509" src="https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-39-17-1024x509.png" alt="" class="wp-image-6801" srcset="https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-39-17-1024x509.png 1024w, https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-39-17-300x149.png 300w, https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-39-17-768x382.png 768w, https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-39-17.png 1441w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">También he señalado el área de bajos comerciales:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="506" src="https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-40-34-1024x506.png" alt="" class="wp-image-6802" srcset="https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-40-34-1024x506.png 1024w, https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-40-34-300x148.png 300w, https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-40-34-768x380.png 768w, https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-40-34.png 1444w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Y la piscina municipal, que tampoco estaba ubicada:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="392" src="https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-43-29-1024x392.png" alt="" class="wp-image-6803" srcset="https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-43-29-1024x392.png 1024w, https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-43-29-300x115.png 300w, https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-43-29-768x294.png 768w, https://danisanchez.net/wp-content/uploads/2020/06/captura-18-06-2020_10-43-29.png 1438w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Para finalizar guardamos los cambios y estos se verán reflejados casi en tiempo real en todos los servicios que utilicen mapas de OpenStreetMap.</p>



<p class="wp-block-paragraph">De verdad que <strong>te animo a que tú hagas lo mismo en tu zona</strong>, cuanto más práctico sea OpenStreetMap, más gente comenzará a usarlo. De hecho muchas empresas se están planteando migrar a OpenStreetMap debido al cambio de políticas de Google en su actual API de GoogleMaps.</p>



<p class="wp-block-paragraph"><strong>Contribuir a un proyecto libre repercute en beneficio de todos.</strong></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Calcular rutas con OpenStreetMap partiendo de la geolocalización del usuario</title>
		<link>https://danisanchez.net/calcular-rutas-con-openstreetmap-partiendo-de-la-geolocalizacion-del-usuario/</link>
					<comments>https://danisanchez.net/calcular-rutas-con-openstreetmap-partiendo-de-la-geolocalizacion-del-usuario/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Thu, 16 Jan 2020 09:46:15 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[desarrollo web]]></category>
		<category><![CDATA[openstreetmap]]></category>
		<category><![CDATA[programación web]]></category>
		<category><![CDATA[tutoriales]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=6448</guid>

					<description><![CDATA[Hace unos días veíamos los conceptos básicos para integrar OpenStreetMap en nuestras aplicaciones web. Hoy vamos a ir un paso más allá y veremos un ejemplo de cómo calcular rutas partiendo de la geolocalización del usuario hasta el punto destino que estará predefinido (por ejemplo, nuestro negocio, un punto de interés, etc.). Lo primero, debemos [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Hace unos días veíamos los conceptos básicos para <a href="https://danisanchez.net/integra-openstreetmap-en-tus-aplicaciones-web-con-leaflet-y-mapbox/" target="_blank" rel="noreferrer noopener" aria-label="integrar OpenStreetMap (opens in a new tab)">integrar OpenStreetMap</a> en nuestras aplicaciones web.</p>



<p class="wp-block-paragraph">Hoy vamos a ir un paso más allá y veremos un ejemplo de cómo calcular rutas partiendo de la geolocalización del usuario hasta el punto destino que estará predefinido (por ejemplo, nuestro negocio, un punto de interés, etc.).</p>



<p class="wp-block-paragraph">Lo primero, debemos agregar un nuevo plugin que se encargará de realizar los cálculos de ruta y dibujar el trazado: <a href="https://www.liedman.net/leaflet-routing-machine/"><strong>Leaflet Routing Machine</strong></a>.</p>



<p class="wp-block-paragraph">Este sería el código base de nuestra página HTML, con las llamadas tanto a las librerías de Leaflet como a las de Routing Machine.</p>



<pre class="wp-block-code"><code>&lt;!DOCTYPE html>
&lt;html lang="es">
&lt;head>
    &lt;meta charset="UTF-8">
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0">
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge">
    &lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.2.0/dist/leaflet.css" />
    &lt;link rel="stylesheet" href="https://unpkg.com/leaflet-routing-machine@latest/dist/leaflet-routing-machine.css" />
    &lt;script src="https://unpkg.com/leaflet@1.2.0/dist/leaflet.js">&lt;/script>
    &lt;script src="https://unpkg.com/leaflet-routing-machine@latest/dist/leaflet-routing-machine.js">&lt;/script>
    &lt;title>Calcular rutas&lt;/title>
    &lt;style>
        #mapa{
            height: 600px;
        }
    &lt;/style>
&lt;/head>

&lt;body>
    &lt;div id="mapa">&lt;/div>
&lt;/body>
&lt;/html></code></pre>



<h2 class="wp-block-heading">Comprobar que el dispositivo (navegador) soporta geolocalización</h2>



<p class="wp-block-paragraph">Aquí me voy a centrar en la <strong>documentación de Mozilla</strong> donde no he tenido ningún problema para geolocalizarme con Firefox (en Chrome/Chromium si he tenido problemas para geolocalizarme debido a unas limitaciones que ha impuesto Google a la geolocalización a través de HTML5).</p>



<p class="wp-block-paragraph"><em><strong>El siguiente código está probado para Firefox y podría no funcionar correctamente en otros navegadores.</strong></em></p>



<pre class="wp-block-code"><code>&lt;script>
    if(navigator.geolocation){
        //Funciona la geolocalización
    }
    else{
        //No funciona la geolocalización
    }
&lt;/script></code></pre>



<p class="wp-block-paragraph">Con el código anterior comprobamos si la geolocalización está disponible en el dispositivo o navegador web del usuario, en caso afirmativo dibujaremos un mapa donde se mostrará la ruta calculada desde la posición del usuario hasta nuestra ubicación de interés.</p>



<p class="wp-block-paragraph">En caso de que la geolocalización no funcione, podemos dibujar un mapa normal con la ubicación de nuestro destino (sin calcular rutas).</p>



<pre class="wp-block-code"><code>&lt;script>
    if(navigator.geolocation){
        navigator.geolocation.getCurrentPosition(function(position){
            var latitude = position.coords.latitude;
            var longitude = position.coords.longitude;

            var mymap = L.map('mapa', {
                center: &#91;latitude, longitude],
                zoom: 12
            });

            L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw', {
                maxZoom: 25,
                attribution: 'Datos del mapa de &amp;copy; &lt;a href="https://www.openstreetmap.org/">OpenStreetMap&lt;/a>, ' + '&lt;a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA&lt;/a>, ' + 'Imágenes © &lt;a href="https://www.mapbox.com/">Mapbox&lt;/a>', 
                id: 'mapbox/streets-v11'
            }).addTo(mymap);

            L.Routing.control({
                waypoints: &#91;
                    L.latLng(latitude, longitude),
                    L.latLng(37.17059, -3.60552)
                ],
                language: 'es'
            }).addTo(mymap);
        });
    }
    else{
        var mymap = L.map('mapa', {
            center: &#91;37.17059, -3.60552],
            zoom: 17
        });

        L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw', {
            maxZoom: 25,
            attribution: 'Datos del mapa de &amp;copy; &lt;a href="https://www.openstreetmap.org/">OpenStreetMap&lt;/a>, ' + '&lt;a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA&lt;/a>, ' + 'Imágenes © &lt;a href="https://www.mapbox.com/">Mapbox&lt;/a>', 
            id: 'mapbox/streets-v11'
        }).addTo(mymap);
    }
&lt;/script></code></pre>



<h2 class="wp-block-heading">Obtener las coordenadas del usuario</h2>



<p class="wp-block-paragraph">Vamos a comentar un poco el codigo. En caso de que la geolocalización esté disponible, el método que obtiene la ubicación del usuario es <strong>getCurrentPosition</strong>, al que le pasamos una función de callback con un parámetro (position) en el que podemos obtener tanto la latitud como la longitud por separado:</p>



<pre class="wp-block-code"><code>navigator.geolocation.getCurrentPosition(function(position){
    var latitude = position.coords.latitude;
    var longitude = position.coords.longitude;
});</code></pre>



<p class="wp-block-paragraph">A continuación dibujamos el mapa posicionándolo en la ubicación del usuario:</p>



<pre class="wp-block-code"><code>var mymap = L.map('mapa', {
    center: &#91;latitude, longitude],
    zoom: 12
});</code></pre>



<p class="wp-block-paragraph">Hay que tener en cuenta que la geolocalización a través de IP puede no ser muy fiable. Si la central a la que estás conectado se encuentra en tu misma población, la geolocalización te ubicará más o menos en tu pueblo, pero por ejemplo, mi conexión ADSL proviene de una red Air Wifi, cuya central se encuentra en otra ciudad, así que el navegador me geolocaliza en esa otra ciudad&#8230;</p>



<p class="wp-block-paragraph">Esto no ocurre con el navegador de mi smartphone si además tengo activada la Ubicación, en este caso me geolocaliza a la perfección.</p>



<p class="wp-block-paragraph">Tras dibujar el mapa llamamos al Routing Machine pasándole las dos coordenadas a calcular:</p>



<h2 class="wp-block-heading">Llamar al método para calcular la ruta</h2>



<pre class="wp-block-code"><code>L.Routing.control({
    waypoints: &#91;
        L.latLng(latitude, longitude), //dirección obtenida del usuario
        L.latLng(37.17059, -3.60552) //dirección fija de destino
    ],
    language: 'es'
}).addTo(mymap);</code></pre>



<p class="wp-block-paragraph">No olvides especificar el código de idioma para que las indicaciones aparezcan en español.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="984" height="711" src="https://danisanchez.net/wp-content/uploads/2020/01/imagen-5.png" alt="" class="wp-image-6460" srcset="https://danisanchez.net/wp-content/uploads/2020/01/imagen-5.png 984w, https://danisanchez.net/wp-content/uploads/2020/01/imagen-5-300x217.png 300w, https://danisanchez.net/wp-content/uploads/2020/01/imagen-5-768x555.png 768w" sizes="auto, (max-width: 984px) 100vw, 984px" /></figure>



<p class="wp-block-paragraph"><strong>NOTA IMPORTANTE:</strong></p>



<p class="wp-block-paragraph">El cálculo de ruta se origina en un servidor OSRM de demostración cuya finalidad es la de probar la API, de hecho si abrimos la consola del inspector de elementos nos avisa de esto:</p>



<p class="wp-block-paragraph"><em>You are using OSRM&#8217;s demo server. Please note that it is <strong>NOT SUITABLE FOR PRODUCTION USE</strong>. Refer to the demo server&#8217;s usage policy: https://github.com/Project-OSRM/osrm-backend/wiki/Api-usage-policy</em></p>



<p class="wp-block-paragraph"><em>To change, set the serviceUrl option.</em></p>



<p class="wp-block-paragraph"><em>Please do not report issues with this server to neither Leaflet Routing Machine or OSRM &#8211; it&#8217;s for demo only, and will sometimes not be available, or work in unexpected ways.</em></p>



<p class="wp-block-paragraph">P<em>lease set up your own OSRM server, or use a paid service provider for production.</em></p>



<p class="wp-block-paragraph">El texto nos advierte que no es recomendable usarlo para entornos de producción, ya que el servidor puede no estar disponible en determinados momentos.</p>



<p class="wp-block-paragraph">Por lo que si queremos implementar el cálculo de rutas en una aplicación web de producción, deberíamos configurar nuestro propio servidor OSRM en nuestro servicio de hosting (consultar al soporte técnico) y modificar la variable <strong>serviceURL</strong> dentro del <em>leaflet-routing-machine.js</em></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="984" height="711" src="https://danisanchez.net/wp-content/uploads/2020/01/imagen-4.png" alt="" class="wp-image-6458" srcset="https://danisanchez.net/wp-content/uploads/2020/01/imagen-4.png 984w, https://danisanchez.net/wp-content/uploads/2020/01/imagen-4-300x217.png 300w, https://danisanchez.net/wp-content/uploads/2020/01/imagen-4-768x555.png 768w" sizes="auto, (max-width: 984px) 100vw, 984px" /></figure>



<h2 class="wp-block-heading">Calcular rutas enviando las coordenadas a OpenStreetMap.org</h2>



<p class="wp-block-paragraph">Si no queremos configurar un servidor OSRM siempre podemos hacer el cálculo de rutas directamente en la web de <a rel="noreferrer noopener" aria-label="openstreetmap.org (opens in a new tab)" href="https://www.openstreetmap.org" target="_blank">openstreetmap.org</a>.</p>



<p class="wp-block-paragraph">Para ello podemos enviar a través de un formulario HTML, las coordenadas mediante GET al action=»https://www.openstreetmap.org/directions?engine=fossgis_osrm_car» si queremos hacer la ruta en coche o a  «https://www.openstreetmap.org/directions?engine=fossgis_osrm_foot» si queremos calcular la ruta a pie.</p>



<p class="wp-block-paragraph">La cadena con las coordenadas tiene que tener la siguiente síntaxis:</p>



<p class="wp-block-paragraph"><em>latitud1,longitud1;latitud2,longitud2</em>, por ejemplo:</p>



<p class="wp-block-paragraph"><em>37.17618,-3.96473;37.1894,-3.7216</em></p>



<p class="wp-block-paragraph">Las coordenadas del usuario tendrán que enviarse en el formulario de forma dinámica, es decir, a través de una variable, mientras que las coordenadas de destino pueden especificarse estáticamente.</p>



<p class="wp-block-paragraph">Para el ejemplo, vamos a crear una página HTML con el formulario, y un archivo de funciones .JS que obtendrá las coordenadas del usuario, las pasará al formulario y lo enviará a openstreetmap.org. En el código he integrado jQuery para hacer las escuchas al botón y enviar los datos.</p>



<p class="wp-block-paragraph">Página HTML:</p>



<pre class="wp-block-code"><code>&lt;!DOCTYPE html>
&lt;html lang="es">
&lt;head>
    &lt;meta charset="UTF-8">
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0">
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge">
    &lt;script src="https://code.jquery.com/jquery-3.4.1.min.js"
		integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
        crossorigin="anonymous">
    &lt;/script>
    &lt;script src="js/funciones.js">&lt;/script>
    &lt;title>Document&lt;/title>
&lt;/head>
&lt;body>
    &lt;h2>Cómo llegar&lt;/h2>

    &lt;form id="formulario_rutas" method="get" action="https://www.openstreetmap.org/directions?engine=fossgis_osrm_car">    
        &lt;input id="coordenadas" type="hidden" name="route" value=""/>
        &lt;input id="calcular_ruta" type="button" value="Cómo llegar"/>
    &lt;/form>
&lt;/body>
&lt;/html></code></pre>



<p class="wp-block-paragraph">Crearemos un formulario con un campo oculto (hidden) que contendrá como valor la cadena que pasaremos a openstreetmap ya formateada como éste espera recibirla. Y un botón que al hacer clic ejecute todo el proceso.</p>



<p class="wp-block-paragraph">Archivo JS:</p>



<pre class="wp-block-code"><code>"use strict";

$(document).ready(function(){
    $("#calcular_ruta").click(function(){
        if(navigator.geolocation){
            navigator.geolocation.getCurrentPosition(function(position){
                var latitude = position.coords.latitude;
                var longitude = position.coords.longitude;

                var cadenaRuta = latitude+","+longitude+";37.1894,-3.7216";
                $("#coordenadas").val(cadenaRuta);
                $("#formulario_rutas").submit();
            });
        }
    });
});</code></pre>



<p class="wp-block-paragraph">En el archivo de funciones, captamos el clic al botón del formulario, geolocalizamos al usuario y construimos la cadenaRuta que pasaremos como valor al campo hidden (coordenadas) del formulario. Por último hacemos un submit al formulario y OpenStreetMap hará la magia.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="588" src="https://danisanchez.net/wp-content/uploads/2020/01/imagen-6-1024x588.png" alt="" class="wp-image-6467" srcset="https://danisanchez.net/wp-content/uploads/2020/01/imagen-6-1024x588.png 1024w, https://danisanchez.net/wp-content/uploads/2020/01/imagen-6-300x172.png 300w, https://danisanchez.net/wp-content/uploads/2020/01/imagen-6-768x441.png 768w, https://danisanchez.net/wp-content/uploads/2020/01/imagen-6.png 1239w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">No queda integrado en nuestra web como sí pasaría con un servidor OSRM, pero al menos es una solución elegante.</p>



<p class="wp-block-paragraph">Paso a paso y no sin alguna dificultad vamos avanzando hacia la no dependencia del todopoderoso GoogleMaps. Seguiremos próximamente&#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/calcular-rutas-con-openstreetmap-partiendo-de-la-geolocalizacion-del-usuario/feed/</wfw:commentRss>
			<slash:comments>15</slash:comments>
		
		
			</item>
		<item>
		<title>Integra OpenStreetMap en tus aplicaciones web con LeafLet y MapBox</title>
		<link>https://danisanchez.net/integra-openstreetmap-en-tus-aplicaciones-web-con-leaflet-y-mapbox/</link>
					<comments>https://danisanchez.net/integra-openstreetmap-en-tus-aplicaciones-web-con-leaflet-y-mapbox/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Fri, 10 Jan 2020 17:47:06 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[desarrollo web]]></category>
		<category><![CDATA[leaflet]]></category>
		<category><![CDATA[openstreetmap]]></category>
		<category><![CDATA[tutoriales]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=6418</guid>

					<description><![CDATA[Para compartir una ubicación rápida con OpenStreetMap puedes ir directamente a OpenStreetMap.org y localizar el lugar que deseas compartir, ya sea indicando una dirección exacta o unas coordenadas: En el menú derecho utiliza la opción «Compartir», selecciona HTML y copia el código HTML que tendrás que incrustar en tu página. Ejemplo de mapa incrustado: Ver [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Para compartir una ubicación rápida con OpenStreetMap puedes ir directamente a <a rel="noreferrer noopener" aria-label="OpenStreetMap.org (opens in a new tab)" href="https://www.openstreetmap.org" target="_blank">OpenStreetMap.org</a> y localizar el lugar que deseas compartir, ya sea indicando una dirección exacta o unas coordenadas:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="635" src="https://danisanchez.net/wp-content/uploads/2020/01/001.buscar-en-open-street-map-1024x635.jpg" alt="" class="wp-image-6423" srcset="https://danisanchez.net/wp-content/uploads/2020/01/001.buscar-en-open-street-map-1024x635.jpg 1024w, https://danisanchez.net/wp-content/uploads/2020/01/001.buscar-en-open-street-map-300x186.jpg 300w, https://danisanchez.net/wp-content/uploads/2020/01/001.buscar-en-open-street-map-768x476.jpg 768w, https://danisanchez.net/wp-content/uploads/2020/01/001.buscar-en-open-street-map.jpg 1230w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">En el menú derecho utiliza la opción «Compartir», selecciona HTML y copia el código HTML que tendrás que incrustar en tu página.</p>



<p class="wp-block-paragraph">Ejemplo de mapa incrustado:</p>



<iframe loading="lazy" scrolling="no" marginheight="0" marginwidth="0" src="https://www.openstreetmap.org/export/embed.html?bbox=-3.8318252563476567%2C37.05736900011469%2C-3.392715454101563%2C37.292081740702365&amp;layer=mapnik&amp;marker=37.17481651466045%2C-3.6122703552246094" style="border: 1px solid black" width="100%" height="350" frameborder="0"></iframe><br><small><a href="https://www.openstreetmap.org/?mlat=37.1748&amp;mlon=-3.6123#map=12/37.1748/-3.6123">Ver mapa más grande</a></small>



<p class="wp-block-paragraph">Pero si necesitas crear un mapa personalizado, con varios marcadores, con la posibilidad de insertar áreas, personalizar la imagen del marcador, podemos integrar OpenStreetMap en nuestro proyecto web gracias a las librerías de <a rel="noreferrer noopener" aria-label="Leaflet (opens in a new tab)" href="https://leafletjs.com/" target="_blank">Leaflet</a> y a los fondos de <a rel="noreferrer noopener" aria-label="MapBox (opens in a new tab)" href="https://www.mapbox.com/" target="_blank">MapBox</a>.</p>



<p class="wp-block-paragraph">Para dar nuestros primeros pasos vamos a ejecutar un ejercicio sencillo. Crea un nuevo directorio con los siguientes archivos:</p>



<ul class="wp-block-list"><li>index.html</li><li>estilos.css</li></ul>



<p class="wp-block-paragraph">En el archivo index.html añade las librerías de LeafLet:</p>



<p class="wp-block-paragraph">Archivo CSS:</p>



<pre class="wp-block-code"><code>&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.6.0/dist/leaflet.css"
   integrity="sha512-xwE/Az9zrjBIphAcBb3F6JVqxf46+CDLwfLMHloNu6KEQCAWi6HcDUbeOfBIptF7tcCzusKFjFw2yuvEpDL9wQ=="
   crossorigin=""/></code></pre>



<p class="wp-block-paragraph">Enlaza también tu archivo de estilos.css:</p>



<pre class="wp-block-code"><code>&lt;link rel="stylesheet" href="estilos.css"/></code></pre>



<p class="wp-block-paragraph">Archivo JS:</p>



<pre class="wp-block-code"><code>&lt;script src="https://unpkg.com/leaflet@1.6.0/dist/leaflet.js"
    integrity="sha512-gZwIG9x3wUXg2hdXF6+rVkLF/0Vi9U8D2Ntg4Ga5I5BZpVkVxlJWbSQtXPSiUTtC0TjtGOmxa1AJPuV0CPthew=="
    crossorigin="">
&lt;/script></code></pre>



<p class="wp-block-paragraph">Y crea un DIV con un identificador, por ejemplo:</p>



<pre class="wp-block-code"><code>&lt;div id="mimapa">&lt;/div></code></pre>



<p class="wp-block-paragraph">Ajusta con CSS el alto que desees para el mapa:</p>



<pre class="wp-block-code"><code>#mimapa {height: 600px;}</code></pre>



<p class="wp-block-paragraph">De forma que tu index.html quede más o menos así:</p>



<pre class="wp-block-code"><code>&lt;!DOCTYPE html>
&lt;html lang="es">
&lt;head>
    &lt;meta charset="UTF-8">
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0">
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge">
    &lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.6.0/dist/leaflet.css"
   integrity="sha512-xwE/Az9zrjBIphAcBb3F6JVqxf46+CDLwfLMHloNu6KEQCAWi6HcDUbeOfBIptF7tcCzusKFjFw2yuvEpDL9wQ=="
   crossorigin=""/>
    &lt;link rel="stylesheet" href="estilos.css"/>
    &lt;script src="https://unpkg.com/leaflet@1.6.0/dist/leaflet.js"
    integrity="sha512-gZwIG9x3wUXg2hdXF6+rVkLF/0Vi9U8D2Ntg4Ga5I5BZpVkVxlJWbSQtXPSiUTtC0TjtGOmxa1AJPuV0CPthew=="
    crossorigin="">&lt;/script>
    &lt;title>Mapa con Open Street Map&lt;/title>
&lt;/head>

&lt;body>
    &lt;div id="mimapa">&lt;/div>
&lt;/body>

&lt;/html></code></pre>



<p class="wp-block-paragraph">A continuación vamos a añadir un poco de JavaScript para inicializar el mapa en una ubicación predefinida. Este código podemos insertarlo en el archivo index.html a continuación del DIV o en un archivo de funciones JavaScript externo.</p>



<pre class="wp-block-code"><code>&lt;script>
    var mymap = L.map('mimapa').setView([37.1698, -3.965], 18);
&lt;/script></code></pre>



<p class="wp-block-paragraph">Utiliza las coordenadas con las que quieras inicializar el mapa, el segundo parámetro «18» corresponde al ZOOM inicial.</p>



<p class="wp-block-paragraph">Ahora tenemos que llamar a las librerías de MapBox para dibujar el mapa:</p>



<pre class="wp-block-code"><code>L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw', {
    maxZoom: 25,
    attribution: 'Datos del mapa de &amp;copy; &lt;a href="https://www.openstreetmap.org/">OpenStreetMap&lt;/a>, ' + '&lt;a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA&lt;/a>, ' + 'Imágenes © &lt;a href="https://www.mapbox.com/">Mapbox&lt;/a>', 
    id: 'mapbox/streets-v11'
}).addTo(mymap);</code></pre>



<p class="wp-block-paragraph">No olvides especificar las atribuciones tal y como se exige en las condiciones y términos de uso.</p>



<pre class="wp-block-code"><code>attribution: 'Datos del mapa de &amp;copy; &lt;a href="https://www.openstreetmap.org/">OpenStreetMap&lt;/a>, ' + '&lt;a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA&lt;/a>, ' + 'Imágenes © &lt;a href="https://www.mapbox.com/">Mapbox&lt;/a></code></pre>



<p class="wp-block-paragraph">Existen varios tipos de mapa en MapBox, puedes consultar en su documentación y utilizar el que prefieras, para el ejemplo hemos utilizado «streets-v11».</p>



<p class="wp-block-paragraph">Con este código ya tenemos inicializado un mapa con una ubicación y zoom predefinidos.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="635" src="https://danisanchez.net/wp-content/uploads/2020/01/002-mapa-predefinido-1024x635.jpg" alt="" class="wp-image-6424" srcset="https://danisanchez.net/wp-content/uploads/2020/01/002-mapa-predefinido-1024x635.jpg 1024w, https://danisanchez.net/wp-content/uploads/2020/01/002-mapa-predefinido-300x186.jpg 300w, https://danisanchez.net/wp-content/uploads/2020/01/002-mapa-predefinido-768x476.jpg 768w, https://danisanchez.net/wp-content/uploads/2020/01/002-mapa-predefinido.jpg 1230w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Añadir un marcador</h2>



<p class="wp-block-paragraph">Vamos a añadir nuestro primer marcador:</p>



<pre class="wp-block-code"><code>var marker = L.marker([37.1698, -3.965]).addTo(mymap);</code></pre>



<p class="wp-block-paragraph">Especifica las coordenadas del marcador.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="635" src="https://danisanchez.net/wp-content/uploads/2020/01/003-nuevo-marcador-1024x635.jpg" alt="" class="wp-image-6425" srcset="https://danisanchez.net/wp-content/uploads/2020/01/003-nuevo-marcador-1024x635.jpg 1024w, https://danisanchez.net/wp-content/uploads/2020/01/003-nuevo-marcador-300x186.jpg 300w, https://danisanchez.net/wp-content/uploads/2020/01/003-nuevo-marcador-768x476.jpg 768w, https://danisanchez.net/wp-content/uploads/2020/01/003-nuevo-marcador.jpg 1230w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">Popups en marcadores</h3>



<p class="wp-block-paragraph">Podemos activar un popup utilizando el método bindPopup, con información al hacer clic en el marcador. La información podemos generarla en HTML con todas las ventajas que conlleva (insertar links, imágenes&#8230;):</p>



<pre class="wp-block-code"><code>marker.bindPopup("&lt;b>Mi ubicación&lt;/b>&lt;br>&lt;a href='#'>Solicita más información&lt;/a>");</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="635" src="https://danisanchez.net/wp-content/uploads/2020/01/004-popup-marcador-1024x635.jpg" alt="" class="wp-image-6426" srcset="https://danisanchez.net/wp-content/uploads/2020/01/004-popup-marcador-1024x635.jpg 1024w, https://danisanchez.net/wp-content/uploads/2020/01/004-popup-marcador-300x186.jpg 300w, https://danisanchez.net/wp-content/uploads/2020/01/004-popup-marcador-768x476.jpg 768w, https://danisanchez.net/wp-content/uploads/2020/01/004-popup-marcador.jpg 1230w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">Personalizar el marcador</h3>



<p class="wp-block-paragraph">Incluso podemos personalizar el tipo de marcador por defecto agregando una imagen.</p>



<pre class="wp-block-code"><code>var marcador = L.icon({
        iconUrl:'images/marcador.png',
        iconSize: [60, 85]
});</code></pre>



<p class="wp-block-paragraph">Y asignarlo a un marcador:</p>



<pre class="wp-block-code"><code>var marker = L.marker([37.1698, -3.965], {icon: marcador}).addTo(mymap);</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="635" src="https://danisanchez.net/wp-content/uploads/2020/01/005-marcador-personalizado-1024x635.jpg" alt="" class="wp-image-6428" srcset="https://danisanchez.net/wp-content/uploads/2020/01/005-marcador-personalizado-1024x635.jpg 1024w, https://danisanchez.net/wp-content/uploads/2020/01/005-marcador-personalizado-300x186.jpg 300w, https://danisanchez.net/wp-content/uploads/2020/01/005-marcador-personalizado-768x476.jpg 768w, https://danisanchez.net/wp-content/uploads/2020/01/005-marcador-personalizado.jpg 1230w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Y recuerda que puedes agregar todos los marcadores que necesites (por ejemplo, extraídos de una base de datos):</p>



<pre class="wp-block-code"><code>var marker2 = L.marker([37.1699, -3.968], {icon: marcador}).addTo(mymap);
var marker3 = L.marker([37.1697, -3.966], {icon: marcador}).addTo(mymap);</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="635" src="https://danisanchez.net/wp-content/uploads/2020/01/006-varios-marcadores-1024x635.jpg" alt="" class="wp-image-6429" srcset="https://danisanchez.net/wp-content/uploads/2020/01/006-varios-marcadores-1024x635.jpg 1024w, https://danisanchez.net/wp-content/uploads/2020/01/006-varios-marcadores-300x186.jpg 300w, https://danisanchez.net/wp-content/uploads/2020/01/006-varios-marcadores-768x476.jpg 768w, https://danisanchez.net/wp-content/uploads/2020/01/006-varios-marcadores.jpg 1230w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Añadir un área (círculo)</h2>



<p class="wp-block-paragraph">Hay casos en los que no nos interesa especificar la ubicación exacta del marcador, si no una zona aproximada (muy habitual por ejemplo en webs inmobiliarias, donde no queremos indicar dónde hay inmuebles vacíos&#8230;).</p>



<pre class="wp-block-code"><code>var circle = L.circle([37.1697, -3.964], {
        color: 'red',
        fillColor: '#f03',
        fillOpacity: 0.5,
        radius: 40
}).addTo(mymap);</code></pre>



<p class="wp-block-paragraph">Entre los parámetros que podemos ajustar al area tenemos: las coordenadas, el color principal, el color del borde, la opacidad y el radio del area establecido en metros.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="948" height="603" src="https://danisanchez.net/wp-content/uploads/2020/01/007-circulo.jpg" alt="" class="wp-image-6432" srcset="https://danisanchez.net/wp-content/uploads/2020/01/007-circulo.jpg 948w, https://danisanchez.net/wp-content/uploads/2020/01/007-circulo-300x191.jpg 300w, https://danisanchez.net/wp-content/uploads/2020/01/007-circulo-768x489.jpg 768w" sizes="auto, (max-width: 948px) 100vw, 948px" /></figure>



<h2 class="wp-block-heading">Añadir polígonos</h2>



<p class="wp-block-paragraph">Asímismo tenemos la posibilidad de crear polígonos para deliminar zonas específicas en el mapa, también muy útil para webs inmobiliarias donde podemos delimitar fincas y parcelas.</p>



<pre class="wp-block-code"><code>var polygon = L.polygon([
        [37.168474, -3.966202],
        [37.167482, -3.966827],
        [37.167602, -3.964477]
]).addTo(mymap);</code></pre>



<p class="wp-block-paragraph">Solo tenemos que especificar las coordenadas de cada punto del polígono.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="951" height="600" src="https://danisanchez.net/wp-content/uploads/2020/01/008-poligono.jpg" alt="" class="wp-image-6434" srcset="https://danisanchez.net/wp-content/uploads/2020/01/008-poligono.jpg 951w, https://danisanchez.net/wp-content/uploads/2020/01/008-poligono-300x189.jpg 300w, https://danisanchez.net/wp-content/uploads/2020/01/008-poligono-768x485.jpg 768w" sizes="auto, (max-width: 951px) 100vw, 951px" /></figure>



<p class="wp-block-paragraph">Con esto ya tenemos para empezar a jugar con los mapas de OpenStreetMap.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Todos estos códigos y más los puedes consultar en la documentación de LeafLet y sacarle todo el partido a la API.</p><cite><a href="https://leafletjs.com/examples.html">https://leafletjs.com/examples.html</a></cite></blockquote>



<p class="wp-block-paragraph">Si te ha gustado, por favor, compártelo en tus redes. Nos vemos en el siguiente post <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/integra-openstreetmap-en-tus-aplicaciones-web-con-leaflet-y-mapbox/feed/</wfw:commentRss>
			<slash:comments>25</slash:comments>
		
		
			</item>
	</channel>
</rss>
