# Matrix API — Vietmap API Playground

> Tính toán ma trận khoảng cách giữa nhiều điểm, phù hợp cho các ứng dụng logistics và giao hàng (tìm tài xế gần nhất, tìm đường đi ngắn nhất/nhanh nhất giữa nhiều điểm).

Matrix API (Distance Matrix API) tính thời gian và quãng đường giữa nhiều điểm xuất phát và nhiều điểm đến trong một lần gọi, thay vì gọi Route cho từng cặp. Có thể chỉ định riêng danh sách điểm xuất phát (sources) và điểm đến (destinations) để chỉ tính những cặp cần thiết. Kết quả là đầu vào cho bài toán điều phối: ghép tài xế gần khách nhất, chọn kho phục vụ từng đơn, hay làm dữ liệu cho thuật toán tối ưu riêng.

Dùng để làm gì:
- Tìm tài xế gần khách nhất trong app gọi xe.
- Chọn kho giao hàng cho từng đơn.
- Lọc cửa hàng trong phạm vi thời gian di chuyển.
- Dữ liệu đầu vào cho thuật toán xếp tuyến tự viết.

- Trang tương tác: https://tools.vietmap.vn/playground/matrix
- Endpoint: `GET /api/matrix/v4` trên `https://maps.vietmap.vn` (giữ /api/matrix?api-version=1.1 để đối chiếu)
- Tài liệu chính thức: https://maps.vietmap.vn/docs/map-api/matrix-version/matrix-v4/
- API key: mọi request cần tham số `apikey`. Code mẫu dùng `YOUR_API_KEY` làm chỗ giữ key — khi tích hợp, đọc key từ biến môi trường (ví dụ `VIETMAP_API_KEY`). Lấy key tại https://maps.vietmap.vn/console-v2/consumers
- Mã lỗi: `401` sai API key · `403` key bị giới hạn domain/IP · `423` API chưa bật cho consumer của key, hoặc hết credit (phản hồi có "exceeded credit") · `429` vượt giới hạn tần suất.

## Code mẫu

_Đây là request ví dụ với tham số mẫu; mở trang tương tác để đổi tham số và chạy thật._

### cURL

```bash
curl 'https://maps.vietmap.vn/api/matrix/v4?apikey=YOUR_API_KEY&point=10.776889,106.700806&point=10.818,106.6585&points_encoded=true&vehicle=car&sources=all&destinations=all&annotation=duration'
```

### JavaScript

```javascript
// Khi đưa vào sản phẩm, đọc key từ biến môi trường thay vì ghi cứng.
const API_KEY = "YOUR_API_KEY";

const params = new URLSearchParams([
  ["apikey", API_KEY],
  ["point", "10.776889,106.700806"],
  ["point", "10.818,106.6585"],
  ["points_encoded", "true"],
  ["vehicle", "car"],
  ["sources", "all"],
  ["destinations", "all"],
  ["annotation", "duration"],
]);

const response = await fetch(`https://maps.vietmap.vn/api/matrix/v4?${params}`);
if (!response.ok) {
  throw new Error(`Vietmap ${response.status}: ${await response.text()}`);
}
const data = await response.json();
console.log(data);
```

### Python

```python
import requests

# Khi đưa vào sản phẩm, đọc key từ biến môi trường thay vì ghi cứng.
API_KEY = "YOUR_API_KEY"

params = [
    ("apikey", API_KEY),
    ("point", "10.776889,106.700806"),
    ("point", "10.818,106.6585"),
    ("points_encoded", "true"),
    ("vehicle", "car"),
    ("sources", "all"),
    ("destinations", "all"),
    ("annotation", "duration"),
]

response = requests.get("https://maps.vietmap.vn/api/matrix/v4", params=params, timeout=30)
response.raise_for_status()
print(response.json())
```

### URL

```text
https://maps.vietmap.vn/api/matrix/v4?apikey=YOUR_API_KEY&point=10.776889,106.700806&point=10.818,106.6585&points_encoded=true&vehicle=car&sources=all&destinations=all&annotation=duration
```

## AI prompt

Prompt soạn sẵn để giao cho trợ lý lập trình (ChatGPT, Claude, Copilot…) viết code tích hợp API này:

````text
Tôi cần tích hợp Matrix API v4 của Vietmap vào ứng dụng của mình.

Tài liệu chính thức: https://maps.vietmap.vn/docs/map-api/matrix-version/matrix-v4/

Đây là một request mẫu đã chạy được trên Vietmap API Playground:

GET https://maps.vietmap.vn/api/matrix/v4?apikey=YOUR_API_KEY&point=10.776889,106.700806&point=10.818,106.6585&points_encoded=true&vehicle=car&sources=all&destinations=all&annotation=duration

Tham số đang dùng:
- point = 10.776889,106.700806
- point = 10.818,106.6585
- points_encoded = true
- vehicle = car
- sources = all
- destinations = all
- annotation = duration

Hãy viết code bằng [ngôn ngữ / framework của tôi] để gọi API này, với các yêu cầu:
1. Đọc API key từ biến môi trường VIETMAP_API_KEY, không ghi cứng trong code.
2. Truyền tham số qua query string đúng như request mẫu; tham số lặp lại (như `point`) phải giữ nguyên thứ tự.
3. Xử lý lỗi theo mã HTTP của Vietmap:
   - 401: API key sai hoặc đã bị thu hồi.
   - 403: key bị giới hạn theo domain / IP không khớp.
   - 423: API chưa được bật cho consumer của key, HOẶC tài khoản hết credit — phân biệt bằng nội dung phản hồi (có cụm "exceeded credit" là hết credit).
   - 429: vượt giới hạn tần suất — thử lại với backoff tăng dần.
4. Đặt timeout cho request, và định nghĩa kiểu dữ liệu (type / interface / dataclass) cho phản hồi.

Nếu không chắc tên một trường, tra trong tài liệu ở link trên thay vì đoán.
````

## Mở lại đúng request này trong Playground

https://tools.vietmap.vn/playground/matrix?point=10.776889,106.700806&point=10.818,106.6585&version=v4&vehicle=car&annotation=duration
