以往我們認識的地圖類型的網站大家應該想到的都是 google map,但由於 google map api 不斷漲價的緣故,所以最近也不少人開始去使用其他免費的開源的程式,像這個 leaflet.js 就是幫我們快速建立地圖互動功能的工具。
要使用的話就先照官方文件將 css 與 js 讀入
https://unpkg.com/[email protected]/dist/leaflet.css
https://unpkg.com/[email protected]/dist/leaflet.js
接下來建立一個地圖,可以設定 id="map",並替他設定樣式(主要是高度不然會看不到)。
接下來像這樣建立地圖就好了:
// 建立 Leaflet 地圖 var map = L.map('map'); // 設定經緯度座標 map.setView(new L.LatLng(25.040199, 121.511901), 12); // 設定圖資來源 var osmUrl='https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; var osm = new L.TileLayer(osmUrl, {minZoom: 8, maxZoom: 16}); map.addLayer(osm);
圖資可以自己選擇,如果不想用上述的 openstreetmap 的圖資,也可以使用 mapbox 的服務。
只要註冊 mapbox 的帳號後,可以透過以下方式建立 mapbox 樣式的地圖:
L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}', { attribution: 'Map data © OpenStreetMap contributors, CC-BY-SA, Imagery © Mapbox', maxZoom: 18, id: 'mapbox/streets-v11', tileSize: 512, zoomOffset: -1, accessToken: 'your.mapbox.access.token' }).addTo(mymap);
結果如下:
在地圖上建立 marker:
var marker = L.marker([25.040199, 121.511901]).addTo(map); marker.bindPopup("總統府").openPopup();
結果:
使用迴圈可以跑出複數的點:
for( $i=0; $i<schools.length; $i++){ L.marker([schools[$i]["lat"], schools[$i]["lng"]]).addTo(map) .bindPopup(schools[$i]["name"]) .openPopup(); }