Openstreetmap: вбудовування карти у веб-сторінку (наприклад, Карти Google)


96

Чи є спосіб вбудувати / змішати OpenStreetMap на вашій сторінці (наприклад, як працює API Карт Google )?

Мені потрібно показати карту всередині моєї сторінки з деякими маркерами і дозволити перетягування / масштабування, можливо, маршрутизацію. Я підозрюю, що для цього буде якийсь API Javascript, але, здається, я не можу його знайти.

Пошук дає мені API для доступу до необроблених картографічних даних , але, схоже, це більше стосується редагування карт; крім того, робота з цим була б важким завданням для AJAX.

Відповіді:


72

Вам потрібно використовувати деякі матеріали JavaScript, щоб показати свою карту. OpenLayers - це вибір номер один для цього.

Є приклад за адресою http://wiki.openstreetmap.org/wiki/OpenLayers_Simple_Example та щось більш просунуте на

http://wiki.openstreetmap.org/wiki/OpenLayers_Marker

і

http://wiki.openstreetmap.org/wiki/Openlayers_POI_layer_example


32

Зараз існує також брошура , яка створена з урахуванням мобільних пристроїв.

Існує Краткий посібник для листівки. Окрім основних функцій, таких як маркери, він також підтримує маршрутизацію за допомогою зовнішньої служби.

Для простої карти встановити IMHO простіше і швидше, ніж OpenLayers, але повністю налаштовується та налаштовується для більш складних застосувань.


25

Проста демонстрація OSM Slippy Map / Приклад

Клацніть на "Запустити фрагмент коду", щоб побачити вбудовану малу карту OpenStreetMap з маркером на ній. Це було створено в Leaflet .

Код

// 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>

Характеристики

  • Використовує OpenStreetMaps.
  • Центрирує карту до цільового GPS.
  • Розміщує маркер на цільовому GPS.
  • Листівка використовує лише як залежність.

Примітка:

Я використовував CDN-версію брошури тут, але ви можете завантажити файли, щоб ви могли обслуговувати та включати їх із власного хосту.


Я використав ваш код у функції javascript, і це працює як шарм. Але знову ж таки, запускаючи цю функцію, збільшує карту osm і руйнує все. Будь-яке рішення?
0x48piraj

2
@ 0x48piraj Будь ласка, створіть jsfiddle, щоб продемонструвати проблему, або навіть краще: задайте нове запитання за допомогою коду, яке показує, що не так.
totymedli

Це прекрасно. Дуже дякую! Хоча одне питання: у var target = L.latLng()вас чітко визначені координати. Будь-який шанс показати, як реалізувати випадок, коли координати кількох крапок зберігаються всередині структури JSON? Дякую!
Лукас Аймаретто,

1
Це використовується лише для виду, де повинен знаходитися центр карти. Ви додаєте маркери за допомогою L.marker(target).addTo(map);простої петлі до своєї структури, створюєте стільки L.latLng()s, скільки вам потрібно, і передаєте їх L.marker().
totymedli

6

Погляньте на mapstraction . Це може надати вам більшу гнучкість у наданні карт на основі google, osm, yahoo тощо, однак ваш код не доведеться змінювати.


їх веб-сайт, здається, не працює.
maddrag0n

1
Це працює, але лише без піддомену "www": mapstraction.com .. саме те, що я шукав, дякую за це!
Девід

mapstraction не підтримується вже майже 10 років :)
Джуліан Ф. Вайнерт,

5

Я б також подивився на інструменти розробника CloudMade . Вони пропонують чудово оформлений базовий сервіс OSM, плагін OpenLayers і навіть власний легкий, дуже швидкий клієнт зіставлення JavaScript. Вони також розміщують власну службу маршрутизації, яку ви вказали як можливу вимогу. Вони мають чудову документацію та приклади.


4

Ви можете використовувати OpenLayers (js API для карт).

На їхній сторінці є приклад, який показує, як вставляти плитки OSM.

Редагувати: Нове посилання на приклади OpenLayers


Це те, що я шукав, велике спасибі. Однак я можу прийняти лише одну відповідь, тому вона переходить до більш детальної.
Пісквор вийшов з будівлі

3
Посилання мертве.
totymedli

2

Якщо ви просто хочете вбудувати карту OSM на веб-сторінку, найпростіший спосіб - це отримати код iframe безпосередньо з веб-сайту OSM:

  1. Перейдіть до потрібної карти на https://www.openstreetmap.org
  2. Праворуч натисніть піктограму "Поділитися", а потім натисніть "HTML"
  3. Скопіюйте отриманий код iframe безпосередньо на свою веб-сторінку. Це повинно виглядати так:

<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>

Якщо ви хочете зробити щось більш докладно, див. Вікі OSM " Розгортання власної Slippy Map ".


0

Існує простий спосіб це зробити, якщо ви боїтесь Javascript ... Я все ще вчусь. Open Street робить простий плагін Wordpress, який ви можете налаштувати. Додати плагін віджета OSM.

Це буде наповнювачем, доки я не з’ясую свою змішану версію Python Java, використовуючи файли рядків TIGER для обкладинки з Бюро перепису населення.


Мене, мене набагато більше турбує Wordpress, ніж JS, але це питання думки. Дякую :)
Пісквор вийшов з будівлі

До речі, TIGER призначений лише для США.
Пісквор вийшов з будівлі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.