Bản đồ isochrone là một polygon trả lời một câu hỏi nghe có vẻ đơn giản: từ đây tôi có thể đến đâu trong X phút? Vẽ một isochrone 15 phút lái xe quanh một quán cà phê và bạn có vùng phục vụ thực tế của nó. Vẽ một isochrone 30 phút đi bộ quanh một ga metro và bạn có phạm vi tiếp cận của người đi bộ. Mọi tính năng "near me", mọi nghiên cứu vùng phục vụ cửa hàng, mọi bộ lọc bất động sản theo thời gian đi làm đều xây dựng trên ý tưởng này.
Bài viết này giải thích isochrone thực sự là gì, cách tính isochrone trên mạng lưới đường, nơi chúng xuất hiện trong các hệ thống production và những cạm bẫy khiến team mất thời gian và tiền bạc.
Isochrone thực sự là gì
Từ này bắt nguồn từ tiếng Hy Lạp isos (bằng nhau) và chronos (thời gian): một đường cong mà tại đó thời gian di chuyển bằng nhau. Trong bản đồ học hiện đại, isochrone là một polygon (hoặc tập polygon lồng nhau) đại diện cho mọi vị trí có thể đến từ một điểm gốc trong một giới hạn thời gian được chọn, ứng với một phương tiện đã chọn.
Hai điều khiến isochrone khác với một vùng đệm đơn thuần. Thứ nhất, nó được tính trên mạng lưới đường, không phải trên mặt phẳng. Sông, cao tốc, núi và đường một chiều đều làm méo hình dạng. Thứ hai, nó nhận biết phương tiện: isochrone 20 phút lái xe, 20 phút đạp xe và 20 phút đi bộ từ cùng một điểm là ba polygon hoàn toàn khác nhau.
Đầu ra hầu như luôn là GeoJSON, với hình học Polygon hoặc MultiPolygon cùng các thuộc tính chứa ngưỡng thời gian và phương tiện. Đó là thứ map ở front-end render và là thứ database không gian của bạn truy vấn.
Cách tính isochrone
Cách tiếp cận ngây thơ là chạy một thuật toán tìm đường ngắn nhất từ điểm gốc và dừng khi tổng thời gian di chuyển chạm ngưỡng. Trong thực tế, cách đó quá chậm khi mở rộng quy mô, nên các hệ thống production dùng đồ thị mạng lưới đường được tính trước và các thuật toán tìm kiếm có gia tốc.
Đồ thị đường được dựng một lần từ một nguồn như OpenStreetMap hoặc một tập dữ liệu đường thương mại: mỗi giao lộ trở thành một nút, mỗi đoạn đường trở thành một cạnh có trọng số là thời gian di chuyển cho từng phương tiện. Từ một điểm gốc, một thuật toán tìm kiếm trên đồ thị (Dijkstra, A*, hoặc biến thể hai chiều) lan ra ngoài, mở rộng nút chưa thăm có chi phí thấp nhất trước, cho đến khi cạn ngân sách thời gian. Tập các nút đã đạt tới cộng với các cạnh đạt tới một phần xác định ranh giới.
Các engine hiện đại dùng contraction hierarchies hoặc các kỹ thuật liên quan để tăng tốc. Đồ thị được tiền xử lý thành một hệ thống phân cấp trong đó các cạnh tắt nhảy qua các nút ít quan trọng hơn, nên một truy vấn vốn phải chạm tới hàng triệu cạnh có thể được trả lời trong vài mili giây. Các nút có thể đến được sau đó được bọc thành một polygon, thường bằng concave hull hoặc alpha-shape để đường viền ôm sát phạm vi đường thực thay vì phình ra vùng trống.
Kết quả là một polygon GeoJSON bạn có thể stream thẳng vào bản đồ Leaflet, Mapbox GL hoặc MapLibre, hoặc nạp vào PostGIS để spatial join.
Isochrone xuất hiện ở đâu
Isochrone đang âm thầm vận hành rất nhiều tính năng sản phẩm nhận biết vị trí.
- Vùng phục vụ cửa hàng và địa điểm: nhà bán lẻ vẽ isochrone thời gian lái xe quanh mỗi địa điểm để ước tính dân số mà họ phục vụ hợp lý, sau đó phủ dữ liệu điều tra dân số hoặc chi tiêu để định cỡ thị trường
- Lập kế hoạch tầm hoạt động EV: isochrone nhận biết pin cho thấy xe điện có thể chạy bao xa với lượng pin còn lại, có tính đến độ cao, tốc độ và mức tiêu thụ
- Bộ lọc thời gian đi làm cho bất động sản: "tìm cho tôi mọi căn hộ trong phạm vi đi làm 30 phút từ văn phòng này" là một isochrone giao với bảng tin đăng bất động sản
- Phân tích khả năng tiếp cận y tế: các nhà hoạch định so sánh isochrone quanh bệnh viện và phòng khám với lưới dân số để tìm khu vực thiếu dịch vụ
- Vùng dịch vụ logistics: courier, đội field-service và nền tảng giao hàng theo yêu cầu dùng isochrone để xác định họ sẽ chấp nhận đơn nào từ một kho cho trước
- Quy hoạch đô thị và transit: nghiên cứu thành phố 15 phút, kế hoạch vùng phục vụ ga và kiểm toán khả năng tiếp cận đều chạy trên isochrone đa phương tiện
Trong mỗi trường hợp, isochrone là bộ lọc không gian. Nó biến một câu hỏi mơ hồ ("gần đến mức nào là đủ gần?") thành một polygon bạn có thể giao cắt, render và lập luận trên đó.
Cạm bẫy trong production
Isochrone trông dễ trong demo và trở nên khó hơn trong production.
Sai phương tiện. Isochrone lái xe dùng tốc độ cao tốc và bỏ qua hạn chế đường một chiều cho người đi bộ. Isochrone đi bộ dùng các lối đi bộ và đường tắt mà ô tô không dùng được. Trộn hai loại là nguồn gốc phổ biến nhất của các bug "polygon trông sai". Hãy luôn truyền phương tiện rõ ràng và hiển thị nó trên UI.
Thời điểm trong ngày và lưu lượng giao thông. 15 phút lái xe lúc 03:00 phủ vùng rộng hơn nhiều so với 15 phút lái xe lúc 17:30. Nếu use case của bạn nhận biết giờ đi làm (bộ lọc bất động sản, giờ mở cửa, dispatch), hãy truyền departure_time và dùng engine nhận biết giao thông. Isochrone tĩnh nói dối về giờ cao điểm.
Ghép nối đa phương tiện. Hành trình thực kết hợp nhiều phương tiện: đi bộ tới metro, đi hai trạm, đi bộ tới đích. Isochrone đơn phương tiện ngây thơ bỏ qua hoàn toàn điều này. Isochrone đa phương tiện thật sự cần lịch trình transit và một đồ thị nối các cạnh đi bộ và transit, phức tạp hơn nhiều so với chỉ lái xe.
Đơn giản hóa vùng phủ. Một số engine làm mượt polygon mạnh tay để trông đẹp, điều này âm thầm phóng đại vùng phủ bằng cách bao gồm khu vực không có đường nào thực sự đến được. Với những quyết định quan trọng (mở cửa hàng, chấp nhận vùng giao hàng), hãy kiểm tra ranh giới thô thay vì tin vào hình dạng được render.
Kích thước polygon ở quy mô lớn. Isochrone thời lượng dài (60, 90 phút) có thể có hàng chục nghìn đỉnh. Hãy đơn giản hóa trước khi gửi cho trình duyệt, hoặc render phía server, nếu không bản đồ sẽ giật.
Isochrone trong MapAtlas
MapAtlas Isochrone API trả về polygon thời gian lái xe, đi bộ, đạp xe và lái xe nhận biết giao thông dưới dạng GeoJSON, hỗ trợ nhiều ngưỡng thời gian trong một request và đầu vào thời điểm khởi hành cho kết quả nhận biết giao thông. Polygon được tính trên đồ thị đường được cập nhật liên tục và trả về dưới dạng mà thư viện bản đồ của bạn có thể render mà không cần xử lý thêm.
Với những workflow cần cả polygon vùng có thể đến và thời gian di chuyển từng cặp, Isochrone API đi kèm với Distance Matrix API để một workflow duy nhất có thể trả lời "tôi có thể đến đâu trong 20 phút?" và "xếp hạng các ứng viên này theo thời gian lái xe" trong cùng một pipeline.
Cuối cùng thì isochrone chỉ là một polygon. Nhưng đó là polygon biến thời gian di chuyển thành một hình dạng mà ứng dụng của bạn có thể lọc, render và lập luận, và đó là sự khác biệt giữa một tính năng nhận biết giờ đi làm thật sự và một vòng tròn vẽ quanh một pin.
Câu hỏi thường gặp
Bản đồ isochrone là gì?
Bản đồ isochrone là một polygon, hoặc một tập polygon lồng nhau, hiển thị mọi vị trí có thể đến được từ một điểm xuất phát trong một khoảng thời gian di chuyển nhất định. Ví dụ một isochrone 15 phút lái xe quanh một cửa hàng sẽ vẽ ra hình dạng trên bản đồ chứa mọi đoạn đường mà khách hàng có thể tới trong 15 phút hoặc ít hơn. Hình dạng này hầu như không bao giờ là hình tròn vì mạng lưới đường thực có sông, đường cao tốc, ngõ cụt và đường một chiều.
Isochrone khác gì so với bán kính?
Bán kính là vùng đệm đường thẳng vẽ bằng compa: mọi điểm bên trong cùng cách tâm một khoảng theo đường chim bay. Isochrone là vùng đệm thời gian di chuyển được tính trên mạng lưới đường thực: mọi điểm bên trong đều đến được trong cùng số phút. Bán kính 10 km và isochrone 10 phút lái xe gần như không bao giờ trùng nhau vì địa hình, đường cao tốc và lưu lượng giao thông làm méo hình dạng.
Một isochrone API trả về cái gì?
Một isochrone API trả về một hoặc nhiều polygon dưới dạng GeoJSON, mỗi polygon được gắn ngưỡng thời gian di chuyển mà nó đại diện (ví dụ 5, 10, 15 phút). Polygon được tính trên đồ thị đường cho một phương tiện đã chọn (lái xe, đi bộ, đạp xe, transit) và có thể được trả về cho một thời điểm khởi hành cụ thể khi tính cả lưu lượng giao thông. Bạn có thể đưa thẳng GeoJSON đó lên bản đồ hoặc dùng làm bộ lọc không gian trong PostGIS.
Tại sao isochrone trông gồ ghề như vậy?
Isochrone được suy ra từ đồ thị các đoạn đường, không phải từ một bề mặt liên tục. Biên polygon được nội suy từ các nút xa nhất có thể đến trong giới hạn thời gian, nên các cạnh bám theo hình học đường. Có thể tạo hình mượt hơn bằng concave hull hoặc alpha shape, nhưng đường viền hơi gồ ghề lại trung thực hơn: nó cho thấy mạng lưới thực sự dừng ở đâu, chứ không phải nơi một hàm làm mượt tưởng tượng ra.

