Openstreetmap: incrustación del mapa en la página web (como Google Maps)


96

¿Hay alguna forma de insertar / mezclar OpenStreetMap en su página (como funciona la API de Google Maps )?

Necesito mostrar un mapa dentro de mi página con algunos marcadores y permitir arrastrar / hacer zoom, tal vez enrutar. Sospecho que habría alguna API de Javascript para esto, pero parece que no puedo encontrarla.

La búsqueda me da una API para acceder a datos de mapas sin procesar , pero eso parece ser más para la edición de mapas; además, trabajar con eso sería una tarea pesada para AJAX.

Respuestas:



32

Ahora también está Leaflet , que se creó pensando en los dispositivos móviles.

Hay una Guía de inicio rápido para el folleto. Además de las funciones básicas como los marcadores, con los complementos también admite el enrutamiento mediante un servicio externo.

Para un mapa simple, en mi humilde opinión es más fácil y rápido de configurar que OpenLayers, pero completamente configurable y modificable para usos más complejos.


25

Demostración / ejemplo simple de mapa deslizante de OSM

Haga clic en "Ejecutar fragmento de código" para ver un mapa deslizante de OpenStreetMap incrustado con un marcador en él. Esto fue creado con Leaflet .

Código

// Where you want to render the map.
var element = document.getElementById('osm-map');

// Height has to be set. You can do this in CSS too.
element.style = 'height:300px;';

// Create Leaflet map on map element.
var map = L.map(element);

// Add OSM tile leayer to the Leaflet map.
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
    attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);

// Target's GPS coordinates.
var target = L.latLng('47.50737', '19.04611');

// Set map's center to target with zoom 14.
map.setView(target, 14);

// Place a marker on the same location.
L.marker(target).addTo(map);
<script src="https://unpkg.com/leaflet@1.6.0/dist/leaflet.js"></script>
<link href="https://unpkg.com/leaflet@1.6.0/dist/leaflet.css" rel="stylesheet"/>
<div id="osm-map"></div>

Especificaciones

  • Utiliza OpenStreetMaps.
  • Centra el mapa en el GPS de destino.
  • Coloca un marcador en el GPS de destino.
  • Solo usa Leaflet como dependencia.

Nota:

Usé la versión CDN de Leaflet aquí, pero puede descargar los archivos para que pueda servirlos e incluirlos desde su propio host.


Usé su código en una función de javascript y funciona como un encanto. Pero nuevamente, al activar esa función, se agranda el mapa osm y se destruye todo. Alguna solución ?
0x48piraj

2
@ 0x48piraj Por favor cree un jsfiddle para demostrar el problema, o mejor aún: haga una nueva pregunta con su código que muestre cuál es el problema.
totymedli

Esto es hermoso. ¡Muchas gracias! Sin embargo, una pregunta: var target = L.latLng()define claramente las coordenadas. ¿Alguna posibilidad de mostrar cómo implementar el caso en el que las coordenadas de varios puntos se almacenan dentro de una estructura JSON? ¡Gracias!
Lucas Aimaretto

1
Eso se usa solo para la vista donde debe ubicarse el centro del mapa. Agrega los marcadores con L.marker(target).addTo(map);Just loop your structure y crea tantos L.latLng()mensajes de correo electrónico como necesite y se los pasa L.marker().
Totymedli

6

Eche un vistazo a mapstraction . Esto puede brindarle más flexibilidad para proporcionar mapas basados ​​en google, osm, yahoo, etc., sin embargo, su código no tendrá que cambiar.


su sitio web parece estar caído.
maddrag0n

1
Funciona, pero solo sin el subdominio "www": mapstraction.com ... exactamente lo que busqué, ¡gracias por eso!
David

Mapstraction no se mantiene desde hace casi 10 años :)
Julian F. Weinert

5

También echaría un vistazo a las herramientas de desarrollo de CloudMade . Ofrecen un servicio de mapas base OSM bellamente diseñado, un complemento OpenLayers e incluso su propio cliente de mapas JavaScript ligero y muy rápido. También albergan su propio servicio de enrutamiento, que mencionó como un posible requisito. Tienen gran documentación y ejemplos.



2

Si solo desea incrustar un mapa de OSM en una página web, la forma más sencilla es obtener el código iframe directamente del sitio web de OSM:

  1. Navegue hasta el mapa que desee en https://www.openstreetmap.org
  2. En el lado derecho, haga clic en el icono "Compartir", luego haga clic en "HTML"
  3. Copie el código iframe resultante directamente en su página web. Debe tener un aspecto como este:

<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" 
src="https://www.openstreetmap.org/export/embed.html?bbox=-62.04673002474011%2C16.95487694424327%2C-61.60521696321666%2C17.196751341562923&amp;layer=mapnik" 
style="border: 1px solid black"></iframe>
<br/><small><a href="https://www.openstreetmap.org/#map=12/17.0759/-61.8260">View Larger Map</a></small>

Si desea hacer algo más elaborado, consulte la wiki de OSM " Implementación de su propio mapa deslizante ".


0

Hay una forma sencilla de hacerlo si le temes a Javascript ... todavía estoy aprendiendo. Open Street crea un complemento de Wordpress simple que puede personalizar. Agregue el complemento OSM Widget.

Esto será un relleno hasta que descubra mi concotión Python Java usando archivos de línea TIGER de coverter de la Oficina del Censo.


Yo estoy mucho más preocupado por Wordpress que por JS, pero eso es una cuestión de opinión. Gracias :)
Piskvor salió del edificio el

Por cierto, TIGER es solo para EE. UU.
Piskvor salió del edificio el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.