Source: https://maps.vietmap.vn/docs/vi/map-api/toll-cost/ # Tính phí cầu đường cho xe tải, container Phí cầu đường phụ thuộc vào hạng xe. Trong ví dụ của Route v4, trạm Km 479+200 trên cao tốc Diễn Châu – Bãi Vọt có ba mức giá 59.000đ, 96.000đ và 140.000đ tuỳ hạng xe. Báo giá cước và đối soát chi phí cho xe tải, container cần đúng hạng xe và đúng các trạm trên tuyến. Route v4 trả phí theo từng trạm thu phí trên tuyến, tính cho đúng loại xe trong request. ## Tính phí bằng Route v4 Gọi [Route v4](https://maps.vietmap.vn/docs/vi/map-api/route-version/route-v4/) với điểm đi, điểm đến, loại xe (`vehicle`) và `annotations=toll`. Với `vehicle=truck`, gửi thêm `capacity` là tổng trọng lượng xe tính bằng kg; tham số này bắt buộc với xe tải. Với `vehicle=container`, có thể gửi thêm `container_feet` là chiều dài container tính bằng feet. Các loại xe khác: `car`, `motorcycle`. ```text https://maps.vietmap.vn/api/route/v4?apikey={your-apikey}&point=18.7338,105.6209&point=17.75697,106.12351&vehicle=truck&capacity=2000&annotations=toll ``` Mỗi tuyến trong `paths` có thêm hai trường: ```json "toll_cost": 59000, "tolls": [ { "id": 528, "name": "Trạm Thu Phí Nút Giao Quốc Lộ 46B", "address": "Cao Tốc Diễn Châu Bãi Vọt", "type": "entry", "price": 0 }, { "id": 544, "name": "Trạm Thu Phí Km 479+200", "address": "Cao Tốc Diễn Châu Bãi Vọt", "type": "exit", "price": 59000, "prices": { "523": 140000, "524": 96000, "528": 59000 } } ] ``` - `toll_cost`: tổng phí của tuyến, tính bằng VND, cho loại xe đã gửi. - `tolls`: các trạm trên tuyến. `type` là `entry` ở trạm xe đi vào và `exit` ở trạm xe đi ra, nơi thu tiền. `price` là giá cho loại xe đã gửi; `prices` là giá theo từng hạng xe, nếu có. Khuyến nghị: - **Tính phí theo từng chặng.** Mỗi lần gọi gửi 2 `point`. Với chuyến nhiều điểm dừng, gọi từng chặng rồi cộng `toll_cost`. - **Gửi giờ xuất phát `time`** (ISO-8601, UTC), ví dụ `time=2025-08-01T12:01:00Z`, để Route v4 né đường cấm theo vùng cho đúng loại xe. - Một request 2 điểm tính 1 transaction. Công thức đầy đủ ở [Cách tính tiền](https://maps.vietmap.vn/docs/vi/map-api/console/request-to-transaction/). ## Ví dụ: phí cầu đường của một chuyến Đoạn mã dưới đây tính phí cầu đường cho xe tải tổng trọng lượng 15 tấn, cộng phí theo từng chặng của chuyến. === "JavaScript" ```js // Node.js 18+. Gọi từ server để không lộ API key. const KEY = process.env.VIETMAP_API_KEY; // Phí cầu đường một chặng. from, to: "lat,lng" async function legTolls(from, to) { const params = new URLSearchParams([ ["apikey", KEY], ["point", from], ["point", to], ["vehicle", "truck"], ["capacity", "15000"], ["annotations", "toll"], ]); const res = await fetch(`https://maps.vietmap.vn/api/route/v4?${params}`); if (!res.ok) throw new Error(`Route v4: HTTP ${res.status}`); const data = await res.json(); if (data.code !== "OK") throw new Error(`Route v4: ${data.code}`); const path = data.paths[0]; return { total: path.toll_cost ?? 0, stations: path.tolls ?? [] }; } // Phí cả chuyến: cộng phí từng chặng. points: ["lat,lng", ...] async function tripTolls(points) { const legs = []; for (let i = 0; i + 1 < points.length; i++) { legs.push(await legTolls(points[i], points[i + 1])); } return { total: legs.reduce((sum, leg) => sum + leg.total, 0), stations: legs.flatMap((leg) => leg.stations), }; } const trip = await tripTolls(["18.7338,105.6209", "17.75697,106.12351"]); console.log("Tổng phí:", trip.total, "VND"); ``` === "Python" ```python import os import requests KEY = os.environ["VIETMAP_API_KEY"] def leg_tolls(origin, destination): """Phí cầu đường một chặng. origin, destination: "lat,lng".""" params = [ ("apikey", KEY), ("point", origin), ("point", destination), ("vehicle", "truck"), ("capacity", "15000"), ("annotations", "toll"), ] resp = requests.get("https://maps.vietmap.vn/api/route/v4", params=params, timeout=30) resp.raise_for_status() data = resp.json() if data["code"] != "OK": raise RuntimeError(f"Route v4: {data['code']}") path = data["paths"][0] return path.get("toll_cost", 0), path.get("tolls", []) def trip_tolls(points): """Phí cả chuyến: cộng phí từng chặng. points: ["lat,lng", ...].""" legs = [leg_tolls(a, b) for a, b in zip(points, points[1:])] return sum(total for total, _ in legs), [s for _, stations in legs for s in stations] total, stations = trip_tolls(["18.7338,105.6209", "17.75697,106.12351"]) print("Tổng phí:", total, "VND") ``` === "Prompt cho AI agent" ``` { .text .vm-prompt } Tích hợp tính phí cầu đường của VIETMAP vào dự án của tôi, cho xe tải và container, bằng Route v4. GET https://maps.vietmap.vn/api/route/v4 point=18.7338,105.6209 point=17.75697,106.12351 vehicle=truck capacity=15000 annotations=toll Đọc paths[0].toll_cost (tổng phí, VND) và paths[0].tolls (từng trạm). Yêu cầu: - Gọi API từ server. Đọc API key từ biến môi trường VIETMAP_API_KEY và truyền qua `apikey`, không ghi cứng trong code. - Viết hàm tính phí theo điểm đi, điểm đến; kiểm tra mã HTTP và trả về tổng phí cùng danh sách trạm. - Mỗi lần gọi gửi 2 point; chuyến nhiều điểm dừng thì gọi từng chặng rồi cộng lại. - Đọc tài liệu bên dưới trước. Chỉ dùng tham số và trường dữ liệu có trong tài liệu. Tài liệu: - https://maps.vietmap.vn/docs/vi/map-api/toll-cost/index.txt - https://maps.vietmap.vn/docs/vi/map-api/route-version/route-v4/index.txt - https://maps.vietmap.vn/docs/assets/agents/routing.txt ``` ## API liên quan - [Chỉ đường cho xe tải và container](https://maps.vietmap.vn/docs/vi/map-api/use-cases/truck-routing/) — tuyến đường theo tải trọng, né đường cấm. - [Route v4](https://maps.vietmap.vn/docs/vi/map-api/route-version/route-v4/) — toàn bộ tham số và cấu trúc phản hồi. - [VRP](https://maps.vietmap.vn/docs/vi/map-api/vrp/) — phân đơn cho đội xe trước khi tính phí từng tuyến.