iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0

Map Matching API 是 Mapbox 提供的一個工具,專門用來將 GPS 軌跡對應到實際的道路網絡上。它可將有些不精確的 GPS 訊號匹配到道路,生成更準確的路徑軌跡。這個 API 對於需要處理 GPS 追蹤數據的應用,如導航、物流管理或車隊追蹤,特別有用。

實現

和昨天的Directions API一樣基於HTTP的服務,需要去對他發出請求

https://api.mapbox.com/matching/v5/{profile}/{coordinates}

profile

表示路徑的類型,有四種選擇
mapbox/driving:駕車時間、距離等。
mapbox/walking:步行路徑。
mapbox/cycling:騎行路徑。
mapbox/driving-traffic:基於實時交通數據的駕車路徑。

coordinates

座標,是以{經度},{緯度}座標對組成的半分號分隔的列表,用來標識要匹配的路徑點。

範例

const url = 'https://api.mapbox.com/directions/v5/mapbox/driving/-117.17305194350584, 32.72409116155937;-117.17288,32.71225?geometries=geojson&access_token=pk.eyJ1IjoieTk3MjEzaDUzIiwiYSI6ImNtMW0wcXFwbzBiOXMyaXF1MHY0dnhqYXEifQ.zzBAlo4dnId23vSJdfqjbg';

    fetch(url)
    .then(response => response.json())
    .then(data => {
        if (data.code !== 'Ok') {
        throw new Error(`Directions API Error: ${data.message}`);
        }

        const routeDistance = data.routes[0].distance;
        console.log(`Route distance: ${routeDistance} meters`);

        const routeGeometry = data.routes[0].geometry;
        const coordinates = routeGeometry.coordinates;

        map.on('load', () => {
        map.addSource('route', {
            'type': 'geojson',
            'data': {
                'type': 'Feature',
                'properties': {},
                'geometry': routeGeometry
            }
        });

        map.addLayer({
            'id': 'route',
            'type': 'line',
            'source': 'route',
            'layout': {
                'line-join': 'round',
                'line-cap': 'round'
            },
            'paint': {
                'line-color': '#ff7e5f',
                'line-width': 6
            }
        });

        const startMarker = new mapboxgl.Marker({ color: 'green' })
            .setLngLat(coordinates[0]) // 起點
            .addTo(map);

        const endMarker = new mapboxgl.Marker({ color: 'red' })
            .setLngLat(coordinates[coordinates.length - 1]) // 終點
            .addTo(map);
        });
    })
    .catch(error => {
        console.error('Fetch error:', error);
    });

結果
https://ithelp.ithome.com.tw/upload/images/20240929/20161223AAuHUn43nr.pnghttps://ithelp.ithome.com.tw/upload/images/20240929/201612234oNOvMcLJN.png


上一篇
Day20:mapbox Navigation SDK
下一篇
Day22:Mapbox Optimization API
系列文
深入前端地圖框架技術探索30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言