有没有办法在您的页面中嵌入/混搭 OpenStreetMap(就像Google Maps API的工作方式一样)?
我需要在我的页面内显示一个带有一些标记的地图,并允许拖动/缩放,也许是路由。我怀疑会有一些 Javascript API 用于此,但我似乎找不到它。
搜索为我提供了访问原始地图数据的 API,但这似乎更适用于地图编辑;此外,对于 AJAX 来说,使用它将是一项繁重的任务。
有没有办法在您的页面中嵌入/混搭 OpenStreetMap(就像Google Maps API的工作方式一样)?
我需要在我的页面内显示一个带有一些标记的地图,并允许拖动/缩放,也许是路由。我怀疑会有一些 Javascript API 用于此,但我似乎找不到它。
搜索为我提供了访问原始地图数据的 API,但这似乎更适用于地图编辑;此外,对于 AJAX 来说,使用它将是一项繁重的任务。
你需要使用一些 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
单击“运行代码片段”以查看带有标记的嵌入式 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 layer to the Leaflet map.
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '© <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>
笔记:
我在这里使用了Leaflet的 CDN 版本,但您可以下载文件,以便从您自己的主机上提供和包含它们。
如果只想在网页上嵌入 OSM 地图,最简单的方法是直接从 OSM 网站获取 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&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 wiki “部署你自己的 Slippy Map ”。
看看maptraction。这可以让您更灵活地提供基于 google、osm、yahoo 等的地图,但是您的代码不必更改。
我还会看看CloudMade 的开发者工具。他们提供了一个样式精美的 OSM 基础地图服务、一个 OpenLayers 插件,甚至还有他们自己的轻量级、非常快速的 JavaScript 映射客户端。他们还托管自己的路由服务,您提到这是可能的要求。他们有很好的文档和示例。
如果你害怕 Javascript,有一个简单的方法可以做到这一点……我还在学习。Open Street 制作了一个简单的 Wordpress 插件,您可以对其进行自定义。添加 OSM 小部件插件。
这将是一个填充物,直到我使用人口普查局的隐蔽 TIGER 行文件找出我的 Python Java 组合。
使用Leaflet,就这么简单(运行代码):
var mymap = L.map('mapid').setView([51.505, -0.09], 13)
// add the OpenStreetMap tiles
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
{ subdomains: ['a', 'b', 'c'] })
.addTo(mymap)
#mapid { height: 280px; }
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css"/>
<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
<div id="mapid"></div>