Skip to main content

Mapbox API 教學與應用

1. 什麼是 Mapbox?​

Mapbox 是一個提供 地圖服務與空間資料 API 的平台,能夠在網站或 App 中嵌入互動式地圖,並支援 自訂樣式、定位、路線規劃、地理編碼(地址轉座標)、資料視覺化 等功能。
它類似 Google Maps API,但更強調 客製化與前端整合。

2. 基本使用步驟​

(1) 註冊並取得 Token​

  1. 前往 Mapbox 官網

  2. 建立 Access Token(建議限制 URL 或 Domain)

  3. 在專案中設定環境變數,例如:

    VITE_MAPBOX_TOKEN=your_mapbox_access_token

(2) 安裝 SDK​

在前端 React / Vite 專案中:

npm install mapbox-gl

(3) 初始化地圖​

在 React 中建立一個地圖元件:

import { useEffect, useRef } from "react";
import mapboxgl from "mapbox-gl";

mapboxgl.accessToken = import.meta.env.VITE_MAPBOX_TOKEN;

export default function Map() {
const mapContainer = useRef(null);
const map = useRef(null);

useEffect(() => {
if (map.current) return; // 避免重複初始化

map.current = new mapboxgl.Map({
container: mapContainer.current,
style: "mapbox://styles/mapbox/streets-v11", // 地圖樣式
center: [121.5654, 25.0330], // 台北座標
zoom: 12
});

// 加入縮放工具
map.current.addControl(new mapboxgl.NavigationControl());
}, []);

return <div ref={mapContainer} style={{ width: "100%", height: "500px" }} />;
}

3. 常見應用案例​

(1) 加入標記 (Marker)​

new mapboxgl.Marker()
.setLngLat([121.5654, 25.0330]) // 台北 101
.setPopup(new mapboxgl.Popup().setText("台北 101"))
.addTo(map.current);

(2) 更換地圖樣式​

Mapbox 提供多種預設樣式:

  • mapbox://styles/mapbox/streets-v11

  • mapbox://styles/mapbox/outdoors-v11

  • mapbox://styles/mapbox/satellite-v9

也可以在 Mapbox Studio 自製地圖樣式。

(3) 路線規劃 (Directions API)​

安裝 SDK:

npm install @mapbox/mapbox-gl-directions

使用:

import MapboxDirections from "@mapbox/mapbox-gl-directions/dist/mapbox-gl-directions";

map.current.addControl(
new MapboxDirections({
accessToken: mapboxgl.accessToken
}),
"top-left"
);

👉 就能輸入起點/終點,顯示路線。

(4) 地理編碼 (地址 ↔ 座標)​

使用 Mapbox Geocoding API

範例:將地址轉換成座標

fetch(`https://api.mapbox.com/geocoding/v5/mapbox.places/台北101.json?access_token=${mapboxgl.accessToken}`)
.then(res => res.json())
.then(data => {
console.log(data.features[0].center); // [121.5645, 25.0339]
});

(5) 地理資料視覺化​

可以透過 GeoJSON 在地圖上繪製資料:

map.current.on("load", () => {
map.current.addSource("points", {
type: "geojson",
data: {
type: "FeatureCollection",
features: [
{
type: "Feature",
geometry: { type: "Point", coordinates: [121.5654, 25.0330] },
properties: { title: "台北 101" }
}
]
}
});

map.current.addLayer({
id: "points-layer",
type: "circle",
source: "points",
paint: {
"circle-radius": 8,
"circle-color": "#FF5733"
}
});
});

4. 應用場景舉例​

  • 計程車/外送平台 → 即時定位 + 路線導航

  • 不動產網站 → 地圖篩選房屋、視覺化社區數據

  • 旅遊網站 → 標記景點、客製化地圖風格

  • 數據儀表板 → 將地理數據 (人口、銷售、流量) 視覺化