messenger_logo
Liên hệ qua Messenger
SciEco

Bản đồ hóa hướng chụp ảnh với dấu mốc định hướng trên r và leaflet

I
IEFPA
Ngày viết: 19/06/2026

Việc hiển thị các tọa độ địa lý trên bản đồ tương tác là một kỹ thuật quen thuộc đối với các nhà phân tích dữ liệu không gian. Bằng cách sử dụng công cụ dòng lệnh exiftool, chúng ta có thể dễ dàng trích xuất toàn bộ thông tin định vị toàn cầu từ một thư mục chứa ảnh định dạng JPG và xuất ra tệp CSV để xử lý.

Tuy nhiên, bên cạnh vĩ độ và kinh độ, các thiết bị di động hiện đại còn ghi lại một thông số cực kỳ thú vị là hướng của ống kính camera tại thời điểm bấm máy, được lưu trữ trong thẻ siêu dữ liệu GPSImgDirection. Việc thể hiện được hướng nhìn này trên bản đồ bằng các biểu tượng có khả năng xoay tự động sẽ giúp trực quan hóa hành trình một cách sinh động và chính xác hơn nhiều. Bài viết này sẽ hướng dẫn cách hiện thực hóa ý tưởng đó bằng thư viện leaflet trong môi trường R.

Chuẩn bị dữ liệu từ siêu dữ liệu ảnh chụp

Bước đầu tiên là trích xuất các thông tin định vị từ ảnh chụp. Công cụ exiftool tỏ ra cực kỳ hiệu quả cho tác vụ này. Bạn có thể mở cửa sổ dòng lệnh và chạy cú pháp sau để quét toàn bộ thư mục ảnh và lưu kết quả vào tệp CSV.

bash

exiftool '-*GPS*' -ext jpg -csv . > outfile.csv

end

Tệp kết quả thu được sẽ chứa các cột thông tin quan trọng như vĩ độ, kinh độ, thời gian chụp, sai số định vị và đặc biệt là góc hướng của camera so với hướng bắc thực tế.

Xử lý và làm sạch dữ liệu tọa độ trong R

Dữ liệu thô từ điện thoại di động thường có định dạng chuỗi chứa ký tự đơn vị độ phút giây hoặc ký hiệu đặc thù. Do đó, chúng ta cần tiến hành làm sạch và chuyển đổi chúng về định dạng số thực để các thư viện bản đồ có thể nhận diện được.

Đoạn mã dưới đây sử dụng các công cụ xử lý chuỗi và chuyển đổi tọa độ để chuẩn hóa dữ liệu đầu vào.

1library(readr)
2library(dplyr)
3library(stringr)
4library(sf)
5library(sp)
6library(leaflet)
7# Đọc dữ liệu từ tệp kết quả của exiftool
8outfile <- read_csv("outfile.csv")
9# Tiền xử lý và chuẩn hóa dữ liệu tọa độ
10dataset <- outfile %>% 
11  mutate(GPSLatitude = str_replace(GPSLatitude, " deg", "d"), 
12         GPSLatitude = GPSLatitude %>% 
13           char2dms() %>% 
14           as.numeric(), 
15         GPSLongitude = str_replace(GPSLongitude, " deg", "d"), 
16         GPSLongitude = GPSLongitude %>% 
17           char2dms() %>% 
18           as.numeric(),
19         GPSHPositioningError = str_replace(GPSHPositioningError, " m", ""),
20         GPSHPositioningError = GPSHPositioningError %>% 
21           as.numeric()) %>% 
22  select(latitude = GPSLatitude, 
23         longitude = GPSLongitude, 
24         GPSTimeStamp, 
25         GPSImgDirection, 
26         GPSHPositioningError)

Tạo bản đồ và xoay biểu tượng theo hướng chụp

Điểm mấu chốt để hiển thị hướng chụp là việc sử dụng các biểu tượng có khả năng xoay góc. Thư viện leaflet hỗ trợ việc này thông qua hàm awesomeIcons bằng cách gán giá trị góc xoay của biểu tượng tương ứng với giá trị lưu trong cột GPSImgDirection.

Chúng ta sẽ chọn một biểu tượng mũi tên chỉ thẳng lên trên, đại diện cho góc không độ tức là hướng bắc. Khi áp dụng thuộc tính xoay góc, biểu tượng sẽ tự động quay theo đúng hướng camera thực tế.

1# Khởi tạo danh sách các biểu tượng có góc xoay tương ứng với hướng ảnh
2icons <- awesomeIcons(iconRotate = dataset$GPSImgDirection,
3                      icon = "long-arrow-up",
4                      library = "fa",
5                      markerColor = "white", 
6                      squareMarker = TRUE)
7# Khởi tạo bản đồ tương tác và thêm các điểm mốc định hướng
8map <- leaflet(data = dataset) %>%
9  addProviderTiles(provider = providers$CartoDB.Positron) %>%
10  addAwesomeMarkers(icon = icons, label = ~GPSTimeStamp)
11# Hiển thị bản đồ
12map

Sau khi thực thi đoạn mã trên, một bản đồ tương tác sẽ được tạo ra với các điểm mốc hình mũi tên tự động xoay theo hướng chụp thực tế của từng bức ảnh, mang lại cái nhìn trực quan và chân thực về góc quan sát của người chụp tại thực địa.

✨ Khả năng kết hợp siêu dữ liệu hướng chụp của ảnh với bản đồ tương tác mở ra những phương pháp phân tích không gian vô cùng độc đáo. Thay vì chỉ biết bức ảnh được chụp ở tọa độ nào, giờ đây bạn có thể tái dựng lại chính xác góc nhìn và hành trình di chuyển thực tế của người chụp, tạo ra các báo cáo trực quan sinh động cho các chuyến khảo sát thực địa hoặc phân tích dữ liệu hành trình du lịch.

Câu hỏi tư duy dành cho bạn

1. Trong trường hợp dữ liệu có những điểm chụp bị sai số định vị quá lớn do mất tín hiệu định vị toàn cầu, bạn sẽ viết thêm điều kiện lọc dữ liệu trong R như thế nào dựa trên trường thông tin sai số vị trí trước khi đưa lên bản đồ?

2. Hãy thử đề xuất giải pháp thay đổi màu sắc của các mũi tên trên bản đồ dựa trên các khoảng thời gian khác nhau trong ngày để thể hiện tiến trình thời gian của hành trình.


Bài viết khác
Trong giới khoa học dữ liệu, cuộc tranh luận giữa việc sử dụng Python hay R chưa bao giờ kết thúc. Python sở hữu thế mạnh vượt trội về khả năng tích hợp hệ thống, xử lý học sâu và xây dựng ứng dụng thực tế. Trong khi đó, R lại là ông vua trong lĩnh vực phân tích thống kê chuyên sâu, dự báo chuỗi thời gian và sở hữu các gói thư viện được thiết kế tối ưu bởi cộng đồng các nhà thống kê học. Thay vì phải đau đầu lựa chọn một trong hai ngôn ngữ, việc kết hợp sức mạnh của cả hai ngay trong một quy trình làm việc là giải pháp tối ưu nhất. Thư viện rtopy chính là cầu nối hiện đại giúp bạn thực hiện điều này một cách mượt mà. Bài viết này sẽ giới thiệu những cải tiến mới nhất của thư viện rtopy, giúp việc chuyển dịch và gọi mã nguồn R từ Python trở nên đơn giản hơn bao giờ hết. Cài đặt các công cụ cần thiết Để bắt đầu, bạn cần cài đặt thư viện rtopy trong môi trường Python và một số gói thư viện R phổ biến phục vụ cho việc tính toán thống kê và học máy.
Trong lĩnh vực phân tích tài chính, việc dự báo giá trị tương lai của cổ phiếu luôn là một thách thức lớn do tính chất biến động liên tục và khó lường của thị trường. Dự báo điểm đơn thuần thường không cung cấp đủ thông tin cho các nhà đầu tư và nhà quản lý rủi ro, bởi vì nó bỏ qua mức độ bất định xung quanh dự báo đó. Để giải quyết vấn đề này, dự báo xác suất đã trở thành một công cụ quan trọng, giúp cung cấp cả giá trị kỳ vọng lẫn khoảng tin cậy của dự báo. Bài viết này sẽ hướng dẫn cách kết hợp một mô hình dự báo xu hướng trung bình bất kỳ với mô hình GARCH(1,1) để nắm bắt cả giá trị trung bình có điều kiện lẫn phương sai có điều kiện của tỷ suất sinh lời chứng khoán. Phương pháp này giúp tạo ra các khoảng dự báo xác suất động, phản ánh chân thực mức độ biến động của thị trường theo thời gian. Phương pháp tiếp cận linh hoạt trong dự báo tài chính Mô hình hóa chuỗi thời gian tài chính thường đòi hỏi phải giải quyết hai thành phần chính: xu hướng trung bình và cấu trúc biến động của sai số. Các mô hình truyền thống thường giả định phương sai của sai số là không đổi, điều này hoàn toàn không phù hợp với thực tế thị trường chứng khoán, nơi thường xuyên xảy ra hiện tượng cụm biến động.
SciEco
Science for Economics
Định hướng đào tạo phân tích dữ liệu, xây dựng chính sách, tối ưu hoá danh mục tài chính cá nhân và dự báo thị trường.
Liên hệ
Địa chỉ: Số 60, ngõ 41, Phố Thái Hà, Trung Liệt, Đống Đa, Hà Nội (Google Map)
Email: science.for.economics@gmail.com
Hotline: 03.57.94.7680 (Mrs. Hà)
Mạng xã hội