Khi bản đồ chưa có biển báo: ước tính giới hạn tốc độ theo Thông tư 31/2019
Cấu trúc dữ liệu OpenMapTiles không chứa thông tin giới hạn tốc độ (maxspeed). Với tile miễn phí, gần như 100% giới hạn tốc độ phải được ước tính — và đây là những chỗ ước tính có thể chưa chính xác.
Cập nhật tháng 10/2026: cách ước tính giới hạn theo cấp đường mô tả trong bài nay mặc định tắt — khi không nguồn nào biết chắc, app để trống góc biển và không cảnh báo vượt tốc, vì thà để trống còn hơn báo sai. Nếu muốn, bạn vẫn bật lại được trong Cài đặt → “Ước tính khi thiếu dữ liệu”. Ngoài ra, app nay đã hỗ trợ đọc OBD-II.
Kế hoạch ban đầu rất đơn giản: đọc thẻ maxspeed từ OpenStreetMap rồi hiển thị. Nhưng kế hoạch đó gặp trở ngại ngay từ bước đầu tiên.
Tile bản đồ công cộng không chứa maxspeed
Cấu trúc dữ liệu OpenMapTiles — chuẩn mà OpenFreeMap và hầu hết nhà cung cấp tile miễn phí sử dụng — không có trường maxspeed trong lớp transportation. Kể cả khi đoạn đường đã được gắn thẻ đầy đủ trong dữ liệu OSM gốc, thông tin đó cũng không được đưa vào tile. Đây không phải do thiếu dữ liệu, mà là chuẩn này chủ động lược bỏ để tile nhẹ hơn.
Thêm vào đó, đường sá Việt Nam trong OSM vốn còn thiếu thẻ maxspeed khá nhiều. Nên ngay cả khi tự dựng tile có chứa thẻ này, phần lớn các con đường vẫn chưa có dữ liệu để đọc.
Ước tính dựa trên quy định
Thông tư 31/2019/TT-BGTVT quy định tốc độ tối đa theo khu vực và loại đường. Với nhóm xe con và xe tải đến 3,5 tấn:
- Trong khu đông dân cư — 60 km/h trên đường đôi hoặc đường một chiều có từ hai làn, 50 km/h trên đường hai chiều hoặc đường một chiều một làn.
- Ngoài khu đông dân cư — 90 km/h trên đường đôi, 80 km/h trên đường hai chiều.
VietnamSpeedRules áp dụng đúng bảng quy định này. Tuy nhiên, để áp dụng được, app cần biết hai thông tin mà bản đồ không ghi rõ.
Ước tính thứ nhất: khu đông dân cư
Trên thực tế, ranh giới khu đông dân cư được xác định bằng biển R.420 và R.421. OSM chưa đánh dấu hai loại biển này một cách đầy đủ. App ước tính dựa trên lớp sử dụng đất landuse của tile — vùng được đánh dấu là đất ở thì được coi là khu đông dân cư. Đây chỉ là cách tính gần đúng, và có thể chưa chính xác ở vùng rìa các thị trấn.
Ước tính thứ hai: mức tối đa theo cấp đường
Nếu hiểu đúng theo câu chữ của quy định, mọi đường hai chiều ngoài khu đông dân cư đều được chạy 80 km/h — kể cả đường làng bê tông rộng ba mét. App không áp dụng như vậy: app giới hạn mức tối đa theo cấp đường trên bản đồ, nên đường nhỏ sẽ có giới hạn thấp hơn mức quy định cho phép.
Đây là lựa chọn có chủ đích. Cảnh báo sớm hơn cần thiết có thể gây hơi phiền; nhưng cảnh báo muộn hơn cần thiết thì sẽ không giúp được bạn đúng vào lúc quan trọng nhất.
Vì sao mọi giá trị ước tính đều có dấu ngã
Trên biển giới hạn, giá trị do app ước tính luôn đi kèm chữ ~ ước tính. Người lái cần phân biệt được 'bản đồ ghi đường này 60' với 'app ước tính đường này 60', vì độ tin cậy của hai thông tin này khác nhau. Nếu bỏ dấu phân biệt đó, app sẽ vô tình trình bày một ước tính như thể đó là thông tin chắc chắn.
Hướng giải quyết lâu dài
Ở V1.5, chúng tôi sẽ tự dựng tile bằng Planetiler với cấu hình riêng có chứa maxspeed. Cách này không bù được phần dữ liệu OSM còn thiếu, nhưng sẽ chuyển những đoạn đường đã có thẻ từ nhóm 'phải ước tính' sang nhóm 'đọc được' — và vì app đã bỏ OBD-II, độ chính xác của cảnh báo tốc độ chính là phần cốt lõi của sản phẩm.