Tạo Custom map với KML file

Bản đồ (map object) trong Qlik Sense là một công cụ tuyệt vời để trực quan hóa dữ liệu có yếu tố địa lý. Với khả năng tự động nhận diện tên quốc gia và thành phố từ tập dữ liệu của Data Manager, bạn có thể nhanh chóng tạo các map object đẹp mắt mà không cần quan tâm nhiều đến dữ liệu tọa độ và hình dạng (shape) của các đối tượng địa lý.

Tính năng này đặc biệt hữu dụng khi đối tượng địa lý trong dữ liệu của bạn là tên quốc gia bằng tiếng Anh, hoặc các thành phố lớn như New York, Berlin hay Hà Nội. Qlik Sense sử dụng geonames.org làm nguồn tham chiếu. Nếu tên thành phố trong dữ liệu của bạn được liệt kê trên geonames.org và thành phố có quy mô dân số đủ lớn (khoảng trên 15,000 người), Qlik Sense sẽ tự động tạo ra thông tin địa lý tương ứng.

Vấn đề bắt đầu phát sinh khi bạn cần dùng map object để thể hiện các đối tượng ít phổ biến hơn như xã, huyện, thị trấn, hoặc nhỏ hơn nữa như bản đồ các phòng trong một tòa nhà. Hoặc cũng có thể đơn vị hành chính trong dữ liệu của bạn đủ lớn để được tự động nhận diện bởi Qlik Sense, nhưng bạn lại không đồng ý với cách nhận diện này. Thường gặp nhất là các thành phố trùng tên, như Italia và Ai Cập đều có thành phố tên Alessandria.

Ngoài ra, thông tin địa lý vốn mang tính chính trị và tùy thuộc quan điểm người sử dụng dữ liệu, nên bất đồng về tọa độ hay tên gọi là không thể tránh khỏi. Ví dụ, mình từng có khách hàng là một công ty ở Hong Kong không hài lòng vì Hong Kong được thể hiện là một thành phố của Trung Quốc thay vì là một nước độc lập (!).

Trong những trường hợp này, bạn cần phải tự định nghĩa thông tin về tọa độ, đường đi hoặc hình dạng cho field mang thông tin địa lý trong dữ liệu, tùy thuộc vào lớp bản đồ (map layer) mà bạn định sử dụng. Bài viết sau đây sẽ hướng dẫn cách tạo và sử dụng định dạng dữ liệu phổ biến nhất – file KML.

KML là gì?

KML (Keyhole Markup Language) là một tập hợp ký hiệu dạng XML dùng để mô tả thông tin địa lý dùng cho các bản đồ 2 chiều và 3 chiều trên bề mặt trái đất. KML ban đầu được phát triển để sử dụng trong Google Earth, và dần dần trở thành một chuẩn quốc tế.

File KML chứa số liệu mô tả các đối tượng như điểm đánh dấu tọa độ, đường đi, đa giác, mô hình 3D, tên gọi, v.v có thể được thể hiện trên phần mềm không gian địa lý (geospatial software). Mỗi điểm trong tất cả các loại đối tượng đều có 2 thông tin cơ bản nhất là kinh độ (longitude) và vỹ độ (latitude). Các đối tượng cao cấp hơn có thể chứa thêm thông tin về độ cao (altitude) hay góc nghiêng (tilt).

Dưới đây là nội dung một file KML đơn giản, mô tả đối tượng điểm đánh dấu (Point) của thành phố New York:

 <?xml version="1.0" encoding="UTF-8"?>
 <kml xmlns="http://www.opengis.net/kml/2.2">
 <Document>
 <Placemark>
   <name>New York City</name>
   <description>New York City</description>
   <Point>
     <coordinates>-74.006393,40.714172,0</coordinates>
   </Point>
 </Placemark>
 </Document>
 </kml>

Để tạo ra file KML mô tả chi tiết một đối tượng địa lý, bạn thường phải dùng các phần mềm chuyên dụng như ArcGIS và nắm vững kiến thức về bản đồ học. File KML vì vậy thường do một bộ phận chuyên môn cung cấp, hoặc mua từ các công ty bên ngoài hơn là nhiệm vụ của BI developer. Tuy nhiên, để hiểu căn bản về KML, ta sẽ làm toàn bộ quá trình từ xây dựng file KML đến sử dụng KML trong Qlik Sense ở ví dụ sau đây.

Ví dụ: Ứng dụng theo dõi bán vé sân vận động Mỹ Đình

Phân tích ứng dụng

Giả sử bạn có dữ liệu bán vé của sân vận động Mỹ Đình ở một số trận đấu quốc tế như sau:

Bạn cần thiết kế dashboard theo dõi số ghế bán được, và doanh thu bán vé theo từng khán đài A, B, C, D. Để tăng tính trực quan, bạn muốn có một map object hiển thị các khán đài theo đúng vị trí trên sân. Các khán đài sẽ được tô màu đậm/ nhạt tùy theo doanh số và số ghế bán được.

Mỗi khán đài có hình dáng riêng, nên bạn cần sử dụng layer loại Area trong map object. Dữ liệu KML tương ứng phải ở dạng đa giác (polygon).

Tạo file KML

Ta sẽ sử dụng công cụ online miễn phí của openstreetmap để tạo file KML mô tả các khán đài. Một lý do khác để lựa chọn tool này là vì openstreetmap cũng là bản đồ mặc định trong map object của Qlik Sense, nên sẽ đảm bảo sự tương thích giữa file KML với map background.

Thực hiện các bước sau:

  1. Mở trang http://umap.openstreetmap.fr/en/ , click Create a map
  2. Trong Search a place name searchnhập tên My Dinh để focus bản đồ đến vị trí sân
  3. Zoom bản đồ đến kích thước thích hợp. Trong thanh công cụ bên phải chọn Draw a polygon polygon.
  4. Vẽ đường bao quanh từng khán đài, bắt đầu với khán đài A bên trái
  5. Sau khi vẽ xong, edit polygon vừa tạo. Đặt tên cho polygon là “Khán đài A”
  6. Tiếp tục vẽ các khán đài còn lại và đặt tên tương ứng.
  7. Click Save để lưu bản đồ vừa tạo
  8. Chọn Edit map settings settings> Advanced actions > Download. Chọn định dạng kml, click Download data

Kết quả thu được là một file KML chứa 4 Placemark thuộc kiểu Polygon tương ứng với 4 khán đài của sân.

Load dữ liệu vào ứng dụng

  1. Download file dữ liệu bán vé và file KML mẫu (được tạo trong bước trên) tại VietQlikies Public Share – Blog 23.
  2. Tạo một Qlik Sense app mới. Mở Data Load Editor, tạo một folder connection tới các file vừa download
  3. Click Select data trên folder connection để load từng file. Load file KML hoàn toàn tương tự với file CSV. Bạn có thể bỏ chọn cột Point và Line, chỉ lấy cột Name và Area vì file KML chỉ chứa 4 polygon.

Toàn bộ reload script như sau:

Stadium_Areas:
LOAD
untitled_map.Name as [Khán đài],
untitled_map.Area as Area
FROM [lib://Data/untitled_map.kml]
(kml, Table is [untitled_map]);

Tickets:
LOAD
Ngày,
Trận,
“Giá vé”,
“Khán đài”,
“Số lượng”
FROM [lib://Data/Matches.csv]
(txt, utf8, embedded labels, delimiter is ‘,’, msq);

Tạo bản đồ

  1. Tạo một sheet mới trong app
  2. Tạo một Map Object. Trong Appearance > Legend, chọn Show legend = Off
  3. Trong Map Object > Layers, click Add layer > Area layer. Cấu hình layer mới tạo như sau
    1. Data > Dimension > Add > chọn field [Khán đài]
    2. Location > Location field > sửa [Khán đài] thành [Area]
    3. Colors
      1. Colors = Custom (tắt Auto)
      2. By expression
      3. Expression: =Sum([Số lượng]*[Giá vé])
      4. Bỏ chọn “The expression is a color code”
      5. Color scheme = Sequential gradient
  4. Quay trở lại Map settings , bỏ chọn Auto-zoom. Zoom bản đồ đến vị trí và kích thước ưng ý, click “Set default view”. Với lựa chọn này, góc nhìn trên bản đồ sẽ được khóa tại vị trí bạn chọn. Map object không bị zoom hoặc di chuyển sang vi trí khác khi bạn tương tác với dashboard
  5. Thêm các filter Trận, Giá vé, Khán đài để giúp người sử dụng drill down theo dimension tùy ý.

Sheet mới tạo tương tự như hình bên dưới. Khi người sử dụng lựa chọn trên các filter, 4 area tương ứng với 4 khán đài sẽ được tô màu lại tùy theo color expression đã được định nghĩa trong Area layer.

Bonus: Một số nguồn dữ liệu bản đồ Việt Nam

Các đơn vị hành chính của Việt Nam thường chỉ được tự động nhận diện đến tên nước và các thành phố lớn. Khi cần xây dựng map object chi tiết hơn, bạn có thể tham khảo một số nguồn KML sau:

  • Dữ liệu KML các tỉnh thành Việt Nam: Area layers các tỉnh thành chi tiết đến cấp độ phường, xã. Lưu ý khi bạn download file dạng .kmz, cần đổi tên thành .zip và giải nén để có file KML. Ứng dụng mẫu trong bài viết này minh họa với bản đồ tỉnh Khánh Hòa.
  • Open Development Vietnam: Bản đồ thổ nhưỡng, giao thông, vị trí các thủy điện, ga đường sắt, khu bảo tồn thiên nhiên, v.v tại Việt Nam.

Bạn có thể tải ứng dụng mẫu cùng các data file có liên quan tại

(Link)