Giới thiệu dự án

Đại dịch COVID-19 bùng phát đã tạo ra áp lực chưa từng có đối với hệ thống y tế toàn cầu cũng như tại Việt Nam. Tại tâm điểm dịch TP. Hồ Chí Minh — đô thị đặc biệt với diện tích 2.095 km², 19 quận, 5 huyện, dân số trên 7,34 triệu người cùng mạng lưới 56 bệnh viện và 317 trạm y tế — tình hình dịch tễ diễn biến vô cùng phức tạp với hàng nghìn ca nhiễm và nghi nhiễm phân bổ rải rác. Theo thống kê thời điểm bùng dịch tháng 6/2021, toàn thành phố ghi nhận 2.214 ca mắc và nghi mắc (tập trung tại Hóc Môn: 224 ca, Gò Vấp: 173 ca, Tân Phú: 151 ca, TP. Thủ Đức: 140 ca, Bình Thạnh: 112 ca), đi kèm với việc thiết lập 194 khu cách ly tập trung với hơn 37.000 giường bệnh.

Trong bối cảnh áp dụng giãn cách xã hội theo Chỉ thị 15 và Chỉ thị 16/CT-TTg, bài toán đặt ra là: Làm thế nào để người dân và cơ quan quản lý có thể cập nhật, phân tích trực quan tọa độ các ca bệnh (F0), đối tượng tiếp xúc (F1, F2), điểm cách ly, vùng phong tỏa và chỉ dẫn đường đến bệnh viện tiếp nhận chuyên khoa phù hợp trong thời gian thực? Các phương thức báo cáo truyền thống bằng văn bản hoặc bảng tính tĩnh bộc lộ nhiều điểm nghẽn nghiêm trọng: thiếu liên kết dữ liệu không gian, thời gian xử lý và tra cứu chậm trễ, không có khả năng dẫn đường động và gây khó khăn cho việc hoạch định vùng dịch.

Đề tài khóa luận "Xây dựng WebGIS ứng dụng giám sát dịch bệnh COVID" của sinh viên Lê Duy Long (Khoa Hệ thống Thông tin và Viễn thám, Trường Đại học Tài nguyên và Môi trường TP.HCM, dưới sự hướng dẫn của ThS. Báo Văn Tuy) đã giải quyết triệt để bài toán này bằng việc tích hợp Hệ thống Thông tin Địa lý (GIS) trên nền tảng Web hiện đại.

graph TD
    A["Nguồn dữ liệu Dịch tễ & Y tế TP.HCM"] --> B["Cơ sở dữ liệu Microsoft SQL Server"]
    B --> C["Backend ASP.NET Core / C# / Blazor"]
    C <--> D["Google Maps JavaScript API Engine"]
    D --> E["Giao diện WebGIS Trực quan (SPA UI)"]
    E --> F["Người dân: Tra cứu F0/F1, Vùng cách ly, Chỉ đường BV, Khai báo Y tế"]
    E --> G["Quản trị viên: Quản lý CRUD Điểm/Vùng nhiễm, BV, Báo cáo Excel"]

Mục tiêu dự án

  1. Xây dựng cơ sở dữ liệu không gian tích hợp (Spatial Database): Thu thập, chuẩn hóa và lưu trữ toàn bộ dữ liệu địa chỉ, tọa độ (Latitude, Longitude), chuyên khoa bệnh viện, các ca nhiễm/nghi nhiễm, điểm cách ly và vùng phong tỏa (Polygon) trên địa bàn TP. Hồ Chí Minh.
  2. Phát triển hệ thống WebGIS đa chức năng: Xây dựng ứng dụng đơn trang (Single-Page Application - SPA) cho phép người dùng tra cứu trực quan các lớp dữ liệu không gian (Point/Polygon), tìm lộ trình tối ưu đến cơ sở y tế gần nhất và thực hiện khai báo y tế trực tuyến theo chuẩn Bộ Y tế.
  3. Cung cấp công cụ quản trị dữ liệu dịch tễ tập trung: Xây dựng bảng điều khiển (Dashboard) quản trị cho phép thực hiện các thao tác Thêm, Sửa, Xóa (CRUD), lọc dữ liệu dịch tễ theo quận/huyện và trích xuất báo cáo thống kê phục vụ phân tích dịch tễ học.

Phạm vi và Giới hạn hệ thống

  • Phạm vi không gian: Toàn bộ địa bàn Thành phố Hồ Chí Minh gồm 19 quận, 5 huyện và thành phố Thủ Đức.
  • Phạm vi chức năng: Trực quan hóa điểm dịch tễ (F0), nghi nhiễm (F1/F2), điểm cách ly tập trung, vùng phong tỏa cách ly (Polygon), định vị người dùng (Geolocation), dẫn đường (Directions Service), biểu đồ dịch tễ học và quản trị danh mục.
  • Giới hạn: Ứng dụng phụ thuộc vào kết nối Internet và hạn ngạch (quota) của dịch vụ bản đồ thương mại Google Maps API.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Trước khi triển khai WebGIS chuyên dụng, việc quản lý và giám sát dịch bệnh chủ yếu dựa vào các bảng tin tổng hợp hoặc bản đồ tĩnh PDF, gây ra độ trễ thông tin lớn và sai sót trong quá trình tổng hợp thủ công.

Tiêu chí so sánh Bảng tin văn bản / Cổng thông tin tĩnh Bản đồ ảnh tĩnh / Dashboard cơ bản Hệ thống WebGIS COVID-19 (Đề tài)
Trực quan hóa không gian Không có (chỉ có danh sách text) Trung bình (ảnh tĩnh, không tương tác) Cao (Tương tác động Point & Polygon đa tầng)
Độ trễ cập nhật dữ liệu Thủ công, từ 12 - 24 giờ Thủ công, định kỳ theo đợt Thời gian thực (Real-time qua SQL Server)
Hỗ trợ điều hướng y tế Không hỗ trợ Không hỗ trợ Tích hợp Google Directions API tìm tuyến đường tối ưu
Khai báo y tế tích hợp GIS Rời rạc qua form giấy/app ngoài Không hỗ trợ mapping ngay Lưu dữ liệu và ánh xạ vị trí nguy cơ tức thì
Quản trị dữ liệu không gian Phân tán, dễ trùng lặp Hạn chế, khó phân lớp Chuẩn hóa quan hệ RDBMS với Lat/Long định danh

Ma trận phân loại yêu cầu người dùng (MoSCoW)

  • Must have (Bắt buộc có):
    • Hiển thị trực quan điểm F0, F1 (Point) và vùng cách ly (Polygon) qua checkbox phân lớp.
    • Định vị tọa độ người dùng và chỉ đường đến bệnh viện tiếp nhận phù hợp.
    • Quản trị viên thực hiện đầy đủ CRUD bệnh viện, ca bệnh, điểm/vùng phong tỏa.
  • Should have (Nên có):
    • Biểu đồ (Chart) thống kê ca nhiễm/nghi nhiễm trực quan theo từng quận/huyện.
    • Form khai báo y tế người đi từ vùng dịch chuẩn mẫu Bộ Y tế.
  • Could have (Có thể có):
    • Xuất báo cáo dữ liệu dịch tễ ra định dạng Microsoft Excel bằng thư viện EPPlus.
    • Tích hợp lưu trữ cấu hình cục bộ qua Blazored.LocalStorage.
  • Won't have (Chưa triển khai trong giai đoạn này):
    • Phân tích dự báo lây lan bằng mô hình AI/Machine Learning không gian.

Thiết kế hệ thống

Hệ thống được xây dựng theo mô hình kiến trúc phân lớp hướng đối tượng (OOP) kết hợp kiến trúc MVC (Model-View-Controller) trên nền tảng Web Blazor hiện đại.

classDiagram
    class BenhVien {
        +int Auto_ID
        +string Ten_Benh_Vien
        +int Chuyen_Khoa
        +string SDT
        +string Email
        +bool Deleted
        +DateTime Created
    }
    class DiaChi {
        +int Auto_ID
        +int Quan_ID
        +string Dia_Chi
        +string Lat
        +string Lng
        +bool Deleted
    }
    class NguoiNhiemBenh {
        +int Auto_ID
        +string Ten_Nguoi_Nhiem
        +DateTime Ngay_Sinh
        +string SDT
        +int ID_Loai_Benh
        +int ID_Phan_Loai_Nhiem
        +bool Xac_Nhan
        +bool Deleted
    }
    class VungCachLy {
        +int Auto_ID
        +string Ten_Vung
        +string Polygon_Coordinates
        +bool Deleted
    }
    class Quan {
        +int Auto_ID
        +string Ten_Quan
        +bool Deleted
    }
    BenhVien "1" -- "*" DiaChi : "Liên kết qua DiaChi_BenhVien"
    NguoiNhiemBenh "1" -- "*" DiaChi : "Liên kết qua DiaChi_NguoiNhiem"
    Quan "1" -- "*" DiaChi : "Thuộc quận"

Technology Stack và Phiên bản công nghệ

  • Môi trường phát triển tích hợp (IDE): Microsoft Visual Studio 2019 (v16.10+) hỗ trợ C# .NET Core.
  • Framework nền tảng: ASP.NET Core 5.0 / Blazor WebAssembly & Server (Single-Page Application).
  • Hệ quản trị cơ sở dữ liệu: Microsoft SQL Server 2019.
  • Thư viện giao diện & tiện ích:
    • DevExpress UI Controls for Blazor: Cung cấp Data Grid, Pivot, Chart hiệu năng cao.
    • Blazored.LocalStorage: Quản lý lưu trữ trạng thái người dùng tại trình duyệt.
    • Microsoft.Data.SqlClient (hoặc System.Data.SqlClient): Thực thi kết nối và truy vấn CSDL.
    • EPPlus (v4.5.3.3): Xử lý trích xuất và nhập dữ liệu file Excel tốc độ cao.
  • Dịch vụ Bản đồ (Mapping Engine): Google Maps JavaScript API v3, Google Directions API, Google Geocoding API.
  • Quản lý mã nguồn: Git & GitHub repository.

Thiết kế Cơ sở dữ liệu Không gian (Relational Spatial Schema)

Hệ thống chuẩn hóa cơ sở dữ liệu quan hệ với 12 bảng thực thể chính. Cấu trúc bảng tối ưu hóa lưu trữ thuộc tính không gian và liên kết quan hệ chặt chẽ:

-- DDL Định nghĩa Bảng Bệnh Viện và Bảng Địa Chỉ Không Gian
CREATE TABLE Benh_Vien (
    Auto_ID INT IDENTITY(1,1) PRIMARY KEY,
    Ten_Benh_Vien NVARCHAR(300) NOT NULL UNIQUE,
    Chuyen_Khoa INT NOT NULL,
    SDT VARCHAR(200) UNIQUE,
    Email VARCHAR(200) UNIQUE,
    Deleted BIT DEFAULT 0,
    Created DATETIME DEFAULT GETDATE(),
    Created_By NVARCHAR(200),
    Last_Updated DATETIME,
    Last_Updated_By NVARCHAR(200)
);

CREATE TABLE Dia_Chi (
    Auto_ID INT IDENTITY(1,1) PRIMARY KEY,
    Quan_ID INT NOT NULL,
    Dia_Chi NVARCHAR(200) NOT NULL,
    Lat NVARCHAR(200) NOT NULL,
    Lng NVARCHAR(200) NOT NULL,
    Deleted BIT DEFAULT 0,
    Created DATETIME DEFAULT GETDATE(),
    Created_By NVARCHAR(200),
    CONSTRAINT FK_DiaChi_Quan FOREIGN KEY (Quan_ID) REFERENCES Quan(Auto_ID)
);

CREATE TABLE Nguoi_Nhiem_Benh (
    Auto_ID INT IDENTITY(1,1) PRIMARY KEY,
    Ten_Nguoi_Nhiem NVARCHAR(200) NOT NULL,
    Ngay_Sinh DATE NOT NULL,
    SDT VARCHAR(200),
    Email VARCHAR(200),
    ID_Loai_Benh INT NOT NULL,
    ID_Phan_Loai_Nhiem INT NOT NULL,
    Xac_Nhan BIT NOT NULL, -- True: F0 (Nhiễm), False: F1/F2 (Nghi nhiễm)
    Ghi_Chu NVARCHAR(MAX),
    Deleted BIT DEFAULT 0,
    Created DATETIME DEFAULT GETDATE()
);

Phương pháp nghiên cứu và Triển khai (Methodology)

Dự án áp dụng phương pháp phát triển phần mềm lặp kết hợp mô hình quy trình kỹ thuật GIS (GIS Engineering Workflow):

gantt
    title Lộ trình Nghiên cứu & Xây dựng Hệ thống WebGIS COVID-19
    dateFormat  YYYY-MM-DD
    section Giai đoạn Khảo sát
    Khảo sát yêu cầu dịch tễ & Số liệu y tế TP.HCM :done, des1, 2021-01-10, 2021-02-05
    Phân tích nghiệp vụ & Nghiên cứu lý thuyết WebGIS :done, des2, 2021-02-06, 2021-02-25
    section Thiết kế & Xây dựng CSDL
    Thiết kế lược đồ ERD & Lập trình CSDL SQL Server :done, dev1, 2021-02-26, 2021-03-20
    Thu thập, tiền xử lý & Chuyển đổi tọa độ WGS84 :done, dev2, 2021-03-21, 2021-04-05
    section Lập trình WebGIS
    Xây dựng Blazor Web Core & Tích hợp DevExpress :done, dev3, 2021-04-06, 2021-04-25
    Tích hợp Google Maps API (Point/Polygon/Routing) :done, dev4, 2021-04-26, 2021-05-15
    section Đánh giá & Hoàn thiện
    Kiểm thử chức năng, tối ưu truy vấn & Triển khai :done, test1, 2021-05-16, 2021-05-30

Quản trị rủi ro và Đảm bảo chất lượng (QA)

  • Rủi ro tính chính xác của tọa độ (Geocoding Inaccuracy): Tọa độ địa chỉ thu thập từ văn bản y tế có thể bị sai lệch. Giải pháp: Đối soát chéo qua công cụ Google Earth kết hợp chuẩn Geocoding API nhằm chuẩn hóa kinh độ (Longitude) và vĩ độ (Latitude) theo hệ quy chiếu chuẩn WGS84.
  • Rủi ro nghẽn luồng xử lý bản đồ khi dữ liệu lớn: Sử dụng kỹ thuật lập trình bất đồng bộ (async/await trong C#) và phân trang dữ liệu dạng Grid/Cluster trên giao diện để giải phóng luồng giao diện người dùng (UI Thread).

Implementation và kết quả

Quá trình phát triển và Thuật toán cốt lõi

Ứng dụng tận dụng cơ chế JavaScript Interop (JSInterop) của Blazor để kết nối hai chiều giữa mã nguồn C# nghiệp vụ và thư viện Google Maps API trên Client-side.

1. Thuật toán kết nối cơ sở dữ liệu và chuyển đổi dữ liệu không gian

Sử dụng mô hình bất đồng bộ trong C# (Microsoft.Data.SqlClient) để truy vấn danh sách điểm dịch tễ và truyền tải lên bản đồ:

// Service truy vấn dữ liệu địa chỉ dịch tễ bất đồng bộ trong C#
public async Task<List<DiemDichTeModel>> GetDanhSachDiemDichTeAsync()
{
    var danhSach = new List<DiemDichTeModel>();
    using (SqlConnection conn = new SqlConnection(_connectionString))
    {
        await conn.OpenAsync();
        string query = @"SELECT n.Ten_Nguoi_Nhiem, n.Xac_Nhan, d.Dia_Chi, d.Lat, d.Lng 
                         FROM Nguoi_Nhiem_Benh n
                         INNER JOIN Dia_Chi_Nguoi_Nhiem dn ON n.Auto_ID = dn.Nguoi_Nhiem_ID
                         INNER JOIN Dia_Chi d ON dn.Dia_Chi_ID = d.Auto_ID
                         WHERE n.Deleted = 0 AND d.Deleted = 0";
        using (SqlCommand cmd = new SqlCommand(query, conn))
        {
            using (SqlDataReader reader = await cmd.ExecuteReaderAsync())
            {
                while (await reader.ReadAsync())
                {
                    danhSach.Add(new DiemDichTeModel
                    {
                        TenNguoiNhiem = reader["Ten_Nguoi_Nhiem"].ToString(),
                        XacNhan = Convert.ToBoolean(reader["Xac_Nhan"]),
                        DiaChi = reader["Dia_Chi"].ToString(),
                        Latitude = double.Parse(reader["Lat"].ToString()),
                        Longitude = double.Parse(reader["Lng"].ToString())
                    });
                }
            }
        }
    }
    return danhSach;
}

2. Kỹ thuật hiển thị Point / Polygon và Dẫn đường tối ưu (Directions Routing)

Trên giao diện Web, JavaScript nhận cấu trúc JSON từ C# để khởi tạo bản đồ, vẽ Marker điểm F0/F1 và dựng Polygon khu vực cách ly:

// Google Maps JavaScript API Wrapper for WebGIS COVID
let map;
let markers = [];
let polygonOverlay;
let directionsService;
let directionsRenderer;

function initializeMap(defaultLat, defaultLng) {
    const centerPoint = new google.maps.LatLng(defaultLat, defaultLng);
    map = new google.maps.Map(document.getElementById("mapCanvas"), {
        zoom: 12,
        center: centerPoint,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    });
    directionsService = new google.maps.DirectionsService();
    directionsRenderer = new google.maps.DirectionsRenderer();
    directionsRenderer.setMap(map);
    directionsRenderer.setPanel(document.getElementById("directionsPanel"));
}

function renderEpidemicPoints(pointsJson) {
    const points = JSON.parse(pointsJson);
    points.forEach(p => {
        const marker = new google.maps.Marker({
            position: { lat: p.Latitude, lng: p.Longitude },
            map: map,
            title: p.TenNguoiNhiem,
            icon: p.XacNhan ? 'icons/marker-f0-red.png' : 'icons/marker-f1-yellow.png'
        });
        const infoWindow = new google.maps.InfoWindow({
            content: `<b>${p.TenNguoiNhiem}</b><br/>Địa chỉ: ${p.DiaChi}<br/>Tình trạng: ${p.XacNhan ? 'F0 Xác nhận' : 'Nghi nhiễm'}`
        });
        marker.addListener('click', () => infoWindow.open(map, marker));
        markers.push(marker);
    });
}

function calculateAndDisplayRoute(originLat, originLng, destLat, destLng) {
    directionsService.route({
        origin: new google.maps.LatLng(originLat, originLng),
        destination: new google.maps.LatLng(destLat, destLng),
        travelMode: google.maps.TravelMode.DRIVING
    }, (response, status) => {
        if (status === "OK") {
            directionsRenderer.setDirections(response);
        } else {
            console.error("Lỗi tính toán tuyến đường: " + status);
        }
    });
}

Kiểm thử và Đánh giá hiệu năng

Hệ thống đã trải qua các kịch bản kiểm thử chức năng (Functional Testing) và kiểm thử hiệu năng (Performance Benchmarking) trên môi trường thử nghiệm với dữ liệu giả lập và dữ liệu thực tế tại TP.HCM.

Kịch bản kiểm thử (Test Scenario) Kích thước dữ liệu mẫu Thời gian phản hồi trung bình Tỷ lệ thành công (%) Đánh giá
Tải và khởi tạo bản đồ nền Google Maps Bán kính toàn TP.HCM 320 ms 100% Đạt chuẩn SPA
Hiển thị 2.000 điểm Marker (F0, F1, Bệnh viện) 2.000 điểm không gian 450 ms 99.8% Mượt mà, không giật lag
Dựng 50 vùng Polygon cách ly phức tạp 50 đa giác (500 đỉnh tọa độ) 210 ms 100% Độ chính xác cao
Tính toán tuyến đường dẫn đến bệnh viện gần nhất Tuyến đường 15 km 480 ms 100% Chỉ dẫn chi tiết từng chặng
Thêm/Sửa/Xóa dữ liệu danh mục qua DevExpress Grid 100 bản ghi/phiên 120 ms 100% Cập nhật tức thì CSDL

Kết quả đạt được

  1. Về mặt chức năng người dùng:

    • 100% người dùng có thể kích hoạt lớp lọc dữ liệu không gian theo nhu cầu (chỉ xem F0, chỉ xem bệnh viện, chỉ xem vùng phong tỏa).
    • Tích hợp thành công module tìm kiếm theo địa chỉ và tự động định vị vị trí hiện tại (GPS Geolocation).
    • Chức năng khai báo người đi từ vùng dịch lưu trữ trực tiếp vào cơ sở dữ liệu và tự động hiển thị dưới dạng điểm nghi ngờ dịch tễ để cơ quan y tế xác minh.
    • Module Chart trực quan hóa số ca nhiễm và nghi nhiễm theo từng quận/huyện dựa trên thư viện đồ thị tích hợp.
  2. Về mặt quản trị hệ thống:

    • Hệ thống trang Admin hoàn chỉnh cho phép quản lý chi tiết: Bệnh viện, Khoa khám bệnh, Địa chỉ, Danh mục Quận/Huyện, Người nhiễm/Nghi nhiễm, Điểm cách ly và Vùng phong tỏa.
    • Cơ chế Soft-Delete (xóa mềm qua cờ Deleted) đảm bảo toàn vẹn dữ liệu lịch sử phục vụ công tác thống kê dịch tễ học lâu dài.

Đổi mới và đóng góp

  1. Ứng dụng Single-Page Application (SPA) với Blazor WebAssembly/Server: Thay vì sử dụng mô hình Web cổ điển gây tải lại trang liên tục, việc ứng dụng Blazor kết hợp C# trên cả Client và Server giúp giảm 45% lưu lượng mạng trao đổi, loại bỏ hiện tượng nhấp nháy bản đồ khi thao tác lọc lớp dữ liệu.

  2. Cơ chế mô hình hóa đa hình không gian (Point & Polygon Integration): Hệ thống không chỉ dừng lại ở việc ghim vị trí (Point Marker) mà còn tích hợp mô hình hóa đa giác (Polygon Coordinates), cho phép khoanh vùng chính xác các khu phố, con hẻm, phường xã bị phong tỏa y tế theo Chỉ thị 16.

  3. Cầu nối tối ưu giữa GIS và Quản trị Y tế đô thị: Tạo ra một quy trình khép kín: Khai báo dịch tễ -> Tự động ánh xạ tọa độ không gian -> Phân tích mật độ ca bệnh theo quận -> Điều phối chỉ dẫn đến bệnh viện chuyên khoa gần nhất.


Ứng dụng thực tế và triển khai

Tình huống ứng dụng thực tế (Real-World Use Cases)

  • Tình huống 1 - Người dân trong vùng nghi nhiễm: Người dân truy cập WebGIS, bật định vị GPS để kiểm tra xung quanh bán kính 1-3 km có điểm phong tỏa hoặc ca F0 nào không. Khi có triệu chứng, người dùng chọn chuyên khoa hô hấp, hệ thống lập tức vẽ lộ trình ngắn nhất đến Bệnh viện Dã chiến hoặc Bệnh viện quận có khoa khám tương ứng.
  • Tình huống 2 - Cán bộ y tế quận/huyện: Tiếp nhận danh sách khai báo y tế mới, kiểm tra tọa độ hiển thị trên bản đồ số, cập nhật trạng thái từ Xac_Nhan = false (nghi nhiễm) sang Xac_Nhan = true (F0) chỉ bằng một cú nhấp chuột trên bảng quản trị DevExpress.

Yêu cầu hệ thống và Triển khai (System Requirements)

graph LR
    subgraph Client
        Browser["Trình duyệt Web (Chrome 88+, Edge, Firefox)"]
    end
    subgraph Web_Server
        IIS[".NET Core Runtime 5.0 Hosting / IIS 10"]
        BlazorApp["WebGIS COVID Application"]
    end
    subgraph Database_Server
        MSSQL["MS SQL Server 2016 / 2019"]
    end
    subgraph Cloud_Service
        GMap["Google Maps Cloud Platform"]
    end
    Browser <--> IIS
    IIS --- BlazorApp
    BlazorApp <--> MSSQL
    BlazorApp <--> GMap
  • Cấu hình máy chủ triển khai (Server Requirements):
    • CPU: 4 Cores (tối thiểu 2.4 GHz).
    • RAM: 8 GB (khuyến nghị 16 GB).
    • Hệ điều hành: Windows Server 2016/2019/2022 với Internet Information Services (IIS 10) hoặc Linux Ubuntu Server 20.04 LTS chạy Kestrel Reverse Proxy qua NGINX.
    • Môi trường thực thi: .NET Core Runtime 5.0+.
  • Cấu hình máy trạm người dùng (Client):
    • Trình duyệt Web hiện đại hỗ trợ HTML5, WebAssembly và JavaScript ES6 (Google Chrome, Microsoft Edge, Mozilla Firefox, Safari).

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  1. Phụ thuộc API bên thứ ba: Sử dụng nền tảng Google Maps API phát sinh chi phí khi số lượng request tra cứu tăng đột biến trong đợt dịch cao điểm.
  2. Xử lý tọa độ Polygon thủ công: Việc nhập tọa độ đa giác cho vùng cách ly vẫn đòi hỏi người quản trị có kiến thức định dạng tọa độ chuỗi (Latitude/Longitude array).

Hướng phát triển mở rộng

  • Chuyển đổi sang nền tảng GIS mã nguồn mở: Nghiên cứu tích hợp GeoServer, PostGIS và Leaflet / OpenLayers để hoàn toàn làm chủ công nghệ và tối ưu chi phí vận hành máy chủ.
  • Tích hợp mô hình AI phân tích vùng nguy cơ: Ứng dụng thuật toán phân cụm không gian (Spatial Clustering - DBSCAN, K-Means) và Bản đồ nhiệt (Heatmap) để dự báo trước các ổ dịch tiềm ẩn.
  • Mở rộng giám sát các dịch bệnh truyền nhiễm khác: Tái cấu trúc mô hình dữ liệu để sẵn sàng áp dụng cho dịch Sốt xuất huyết, Cúm mùa, Đậu mùa khỉ hoặc giám sát ô nhiễm môi trường đô thị.

Đối tượng hưởng lợi

  • Người dân đô thị: Nắm bắt tức thì bản đồ dịch tễ xung quanh khu vực sinh sống, chủ động phòng ngừa lây nhiễm và tiếp cận nhanh chóng cơ sở y tế khi cần trợ giúp.
  • Cán bộ quản lý Y tế & Chính quyền địa phương: Sở hữu công cụ số hóa trực quan thay thế báo cáo giấy tờ, hỗ trợ ra quyết định khoanh vùng cách ly chính xác, giảm thiểu thiệt hại kinh tế.
  • Lập trình viên và Sinh viên ngành CNTT/GIS: Cung cấp tài liệu tham khảo chi tiết về kiến trúc tích hợp C# ASP.NET Core Blazor với Google Maps API, mô hình thiết kế CSDL không gian trên SQL Server.

Câu hỏi thường gặp (FAQ)

1. Hệ thống WebGIS này yêu cầu cấu hình máy chủ như thế nào để vận hành ổn định?

Để phục vụ khoảng 1.000 - 5.000 người truy cập đồng thời, máy chủ cần trang bị tối thiểu 4 vCPU, 8 GB RAM, cài đặt .NET Core Runtime 5.0, IIS Server (hoặc NGINX trên Linux) và Microsoft SQL Server 2019 Standard. Băng thông mạng tối thiểu đạt 100 Mbps.

2. Làm thế nào để hệ thống xử lý khi có hàng nghìn điểm dịch tễ mà không làm chậm trình duyệt?

Hệ thống sử dụng kỹ thuật bất đồng bộ (async/await) ở Backend kết hợp phân trang dữ liệu (Pagination) tại giao diện quản trị DevExpress. Đối với hiển thị bản đồ, các điểm Marker được tải động theo phạm vi khung nhìn (Bounding Box Bounds) của người dùng thay vì tải toàn bộ CSDL cùng lúc.

3. Hệ thống có thể tích hợp với các cơ sở dữ liệu y tế quốc gia hiện có không?

Hoàn toàn có thể. Do được thiết kế theo kiến trúc chuẩn phân lớp trên ASP.NET Core, hệ thống dễ dàng mở rộng các RESTful API endpoints hoặc kết nối qua định dạng JSON/XML để đồng bộ dữ liệu với Cổng thông tin Tiêm chủng Quốc gia hoặc Hệ thống Quản lý Bệnh viện (HIS).

4. Chi phí duy trì hệ thống ước tính bao gồm những khoản nào?

Chi phí chính gồm: Chi phí thuê máy chủ Cloud VPS/Server (khoảng 500.000 - 1.500.000 VNĐ/tháng), tên miền và chứng chỉ SSL (khoảng 300.000 VNĐ/năm), và hạn ngạch sử dụng Google Maps API (được miễn phí 200 USD hàng tháng từ Google Cloud).

5. Dữ liệu khai báo y tế của người dùng có được bảo mật không?

Hệ thống lưu trữ dữ liệu tập trung trên SQL Server với cơ chế phân quyền tài khoản chặt chẽ. Thông tin nhạy cảm của người khai báo chỉ phục vụ mục đích truy vết dịch tễ nội bộ của quản trị viên và không hiển thị công khai trên bản đồ phía người dùng thông thường.


Kết luận

Đề tài khóa luận "Xây dựng WebGIS ứng dụng giám sát dịch bệnh COVID" của tác giả Lê Duy Long là một công trình nghiên cứu ứng dụng có giá trị thực tiễn và tính thời sự cao. Bằng việc kết hợp nhuần nhuyễn giữa công nghệ web hiện đại (ASP.NET Core Blazor, C#, DevExpress) và nền tảng thông tin địa lý (Google Maps API, SQL Server), đề tài đã giải quyết trọn vẹn bài toán trực quan hóa dữ liệu dịch tễ, giám sát vùng cách ly và điều phối chỉ dẫn y tế tại Thành phố Hồ Chí Minh.

Giải pháp không chỉ chứng minh tính khả thi về mặt kỹ thuật mà còn mở ra tiềm năng ứng dụng rộng lớn cho ngành y tế dự phòng và quản trị đô thị thông minh trong kỷ nguyên số hóa. Đây là tài liệu tham khảo chất lượng cao cho các kỹ sư phần mềm, chuyên gia GIS và các nhà quản lý y tế trong việc xây dựng các hệ thống phản ứng nhanh trước các tình huống khẩn cấp cộng đồng.