(mở trong tab mới)gmap cloud
Tư vấn giải phápLiên hệ
Bắt đầuCơ bản3 phút đọcCó mã mẫu

Năm phút đầu tiên với GMap Cloud: gọi API và hiện bản đồ

Bài này đi từ con số 0 đến một bản đồ có đánh dấu địa điểm. Bạn chỉ cần trình duyệt hoặc terminal; không cần đăng ký.

· GMap Cloud

Khóa API

Mọi yêu cầu cần khóa trong header x-api-key hoặc tham số x-api-key. Để thử, dùng khóa demo công khai bên dưới; khóa này có giới hạn lưu lượng. Khi đưa vào vận hành, GMap cấp khóa riêng cho ứng dụng của bạn.

Khóa demo
public-gmap-cloud-x-api-key-demo

Gọi API đầu tiên

Tìm một địa điểm theo tên. Kết quả là GeoJSON FeatureCollection.

cURL
curl --get 'https://cloud.gmap.vn/api/idunn/v1/search' \
  --header 'x-api-key: public-gmap-cloud-x-api-key-demo' \
  --data-urlencode 'q=Chợ Hàn Đà Nẵng' \
  --data 'lang=vi'
JavaScript
const KEY = 'public-gmap-cloud-x-api-key-demo';
const url = new URL('https://cloud.gmap.vn/api/idunn/v1/search');
url.search = new URLSearchParams({ q: 'Chợ Hàn Đà Nẵng', lang: 'vi', 'x-api-key': KEY });

const { features } = await fetch(url).then((response) => response.json());
const [lon, lat] = features[0].geometry.coordinates;
console.log(features[0].properties.geocoding.label, lat, lon);
// Chợ Hàn Đà Nẵng, Phường Hải Châu, Thành phố Đà Nẵng, Việt Nam 16.0682606 108.224093

GeoJSON đặt kinh độ trước vĩ độ: coordinates = [kinh độ, vĩ độ]. Đây là lỗi hay gặp nhất khi mới tích hợp.

Hiện địa điểm trên bản đồ

Bản đồ nền của GMap là style MapLibre có sẵn font, sprite và lớp địa điểm. Dán đoạn mã sau vào một tệp HTML rồi mở bằng trình duyệt.

HTML
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@4.7.1/dist/maplibre-gl.css">
<script src="https://unpkg.com/maplibre-gl@4.7.1/dist/maplibre-gl.js"></script>
<div id="map" style="height: 420px"></div>
<script>
  const KEY = 'public-gmap-cloud-x-api-key-demo';
  const map = new maplibregl.Map({
    container: 'map',
    style: `https://cloud.gmap.vn/api/tiles/style/basemap?x-api-key=${KEY}`,
    center: [108.224093, 16.0682606],
    zoom: 15,
  });
  new maplibregl.Marker()
    .setLngLat([108.224093, 16.0682606])
    .setPopup(new maplibregl.Popup().setText('Chợ Hàn Đà Nẵng'))
    .addTo(map);
</script>

Lỗi thường gặp

Dấu hiệuNguyên nhânCách xử lý
HTTP 401, "No API key found in request"Thiếu hoặc sai khóa APIThêm header x-api-key hoặc tham số x-api-key
HTTP 429Vượt giới hạn lưu lượng của khóaChờ theo header RateLimit-Reset rồi thử lại; dùng khóa riêng khi vận hành
Điểm hiện sai chỗ (thường ở biển)Đảo vĩ độ và kinh độGeoJSON là [kinh độ, vĩ độ]; MapLibre setLngLat cũng vậy
Không có kết quảNội dung tìm quá ngắn hoặc thiếu ngữ cảnhThêm tên phường, tỉnh; hoặc tra cứu ngược bằng tọa độ

Mỗi phản hồi có các header X-RateLimit-Remaining-Second, -Minute, -Hour cho biết số lượt còn lại. Xử lý 401 và 429 ngay từ đầu:

JavaScript
const response = await fetch(url);
if (response.status === 401) throw new Error('Missing or invalid API key');
if (response.status === 429) {
  const wait = Number(response.headers.get('RateLimit-Reset') ?? 1);
  // Retry after the reset window instead of hammering the API.
  await new Promise((resolve) => setTimeout(resolve, wait * 1000));
}
const data = await response.json();

Tiếp theo

  • Làm ô nhập địa chỉ có gợi ý cho trang đặt hàng.
  • Đối chiếu địa chỉ cũ và mới sau sáp nhập.
  • Chọn kho gần nhất hoặc vẽ vùng giao hàng bằng API tuyến đường.