Xuất bản & chia sẻ bản đồ

Agent giúp bạn publish bản đồ lên internet qua WMS/WFS và chia sẻ qua TLGeo Cloud

T
Tác giả TLGeo
Thời gian đọc 7 min read
Đăng tải 2025-01-01

Xuất bản & chia sẻ bản đồ (Publish maps on the Internet)

QGIS cho phép bạn publish bản đồ lên internet theo chuẩn OGC (WMS, WMTS, WFS, WFS-T) thông qua QGIS Server. Ngoài ra, bạn có thể chia sẻ dữ liệu qua TLGeo Cloud (backend Strapi). TLGeo Agent hỗ trợ cả hai hướng.

Tính năng QGIS gốc: https://docs.qgis.org/3.44/en/docs/about/features.html#publish-maps-on-the-internet

⚠️ TODO quan trọng: Tính năng publish chưa có tool riêng trong Agent. Agent sẽ dùng execute_qgis_python_script hoặc bạn cần dùng QGIS UI cho phần lớn tác vụ. Bạn nên xác nhận với team dev.

QGIS Server là gì?

QGIS Server là phần mềm server cho phép publish dự án QGIS của bạn lên web thông qua các giao thức chuẩn OGC:

  • WMS (Web Map Service) — trả về ảnh bản đồ
  • WMTS (Web Map Tile Service) — trả về tile cache
  • WFS (Web Feature Service) — trả về vector
  • WFS-T (WFS Transactional) — cho phép chỉnh sửa
  • WCS (Web Coverage Service) — trả về raster “thô”
  • OAPIF (OGC API - Features) — REST API hiện đại

Cài đặt QGIS Server

QGIS Server thường được cài riêng (không phải plugin của QGIS Desktop).

# Ubuntu/Debian
sudo apt install qgis-server

# Windows: dùng OSGeo4W installer

⚠️ TODO: Link tới hướng dẫn cài đặt chi tiết.

Kết nối tới OGC services

WMS / WMTS Client

QGIS có thể đóng vai client kết nối tới WMS server:

Thêm kết nối WMS tới https://ows.terrestris.de/osm/service
Liệt kê các layer có sẵn trên server WMS
Tải layer "OSM" từ WMS về dự án local

WFS Client

Tương tự cho WFS:

Thêm kết nối WFS tới https://demo.geo-solutions.it/geoserver/wfs
Tải toàn bộ features của layer "regions" từ WFS

Authentication

Nhiều WMS/WFS yêu cầu đăng nhập:

Cấu hình authentication cho server https://secure.tlgeo.vn/wms
- User: admin
- Password: xxx

Cấu hình QGIS Server (Publish)

Để publish dự án QGIS lên web, bạn cần cấu hình QGIS Server.

Tạo project publish-ready

Dự án cần được lưu dưới dạng file .qgs hoặc .qgz.

Lưu dự án hiện tại ra /var/www/qgis-server/projects/my_project.qgs

Cấu hình server properties

Mở Project → Project Properties → QGIS Server:

Cấu hình:
- Service title: "Bản đồ Rừng tỉnh Lâm Đồng"
- Service description: "Dữ liệu rừng cập nhật 2024"
- WMS capabilities: enabled
- WFS capabilities: enabled
- Max width/height: 4096

Cấu hình từng layer

Mở Layer Properties → QGIS Server:

Layer "lo_rung":
- Title: "Lô rừng"
- Abstract: "Dữ liệu lô rừng tỉnh Lâm Đồng 2024"
- Display in WMS: Yes
- Display in WFS: Yes (cho phép tải vector)

Khởi động QGIS Server

# Linux với systemd
sudo systemctl start qgis-server

# Hoặc chạy thủ công
/usr/lib/qgis/bin/qgis_server -d /var/www/qgis-server

Test WMS

Mở browser:

http://localhost:8080/ows?SERVICE=WMS&REQUEST=GetCapabilities

Nếu trả về XML capabilities → server hoạt động.

Test WFS

http://localhost:8080/ows?SERVICE=WFS&REQUEST=GetCapabilities

Workflow publish điển hình

Case 1: Bản đồ công khai cho cộng đồng

Workflow:
1. Chuẩn bị dự án QGIS với các layer cần publish
2. Cấu hình Project Properties → QGIS Server
3. Cấu hình từng layer (title, abstract, CRS)
4. Lưu project vào thư mục QGIS Server
5. Khởi động/restart QGIS Server
6. Test qua URL WMS
7. Chia sẻ URL cho người dùng

Case 2: Bản đồ nội bộ cho team

Workflow:
1. Tương tự Case 1, nhưng:
2. Cấu hình authentication (chỉ user trong team mới truy cập)
3. Sử dụng HTTPS (Let's Encrypt)
4. Có thể dùng VPN nếu cần bảo mật cao

Case 3: WFS-T cho phép chỉnh sửa từ web

Workflow:
1. Cấu hình WFS-T capabilities
2. Cấu hình transaction logs
3. Cấu hình backup tự động
4. Test chỉnh sửa qua web client

Tích hợp với TLGeo Cloud (Strapi)

TLGeo Cloud là backend chính của hệ sinh TLGeo, cho phép:

  • Quản lý user và tổ chức
  • Lưu trữ dữ liệu lớn
  • Chia sẻ dự án giữa các thành viên
  • Phân quyền theo license tier (BASIC / PRO / GOD)

Upload dữ liệu lên TLGeo Cloud

Upload layer "lo_rung" lên TLGeo Cloud

Sync dữ liệu

Đồng bộ layer "lo_rung" giữa Agent local và TLGeo Cloud

Chia sẻ dự án với thành viên

Chia sẻ dự án "khaosat_rung_2024" với user "colleague@tlgeo.vn"

Cấu hình license tier

TODO: Liệt kê các tier và giới hạn:

  • BASIC: Tối đa 3 dự án
  • PRO: 30 dự án/tháng
  • GOD: Không giới hạn

Bảo mật khi publish

Checklist bảo mật

  • HTTPS: Dùng Let’s Encrypt hoặc chứng chỉ SSL
  • Authentication: Yêu cầu đăng nhập cho dữ liệu nhạy cảm
  • Rate limiting: Giới hạn số request/phút
  • CORS: Cấu hình CORS đúng cho web client
  • Logging: Ghi log truy cập để audit
  • Backup: Backup dữ liệu thường xuyên

Cấu hình CORS

TODO: Hướng dẫn cấu hình CORS cho QGIS Server.

HTTPS với Nginx reverse proxy

server {
    listen 443 ssl;
    server_name gis.example.com;
    
    ssl_certificate /etc/letsencrypt/live/gis.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/gis.example.com/privkey.pem;
    
    location /qgis/ {
        proxy_pass http://localhost:8080/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Sử dụng dịch vụ từ client

Web client (JavaScript)

Dùng thư viện OpenLayers hoặc Leaflet:

// OpenLayers example
import 'ol/ol.css';
import Map from 'ol/Map';
import TileLayer from 'ol/layer/Tile';
import OSM from 'ol/source/OSM';

const map = new Map({
    target: 'map',
    layers: [
        new TileLayer({
            source: new OSM({
                url: 'https://gis.example.com/qgis/ows?SERVICE=WMS&...'
            })
        })
    ],
    view: new View({
        center: [0, 0],
        zoom: 2
    })
});

Mobile client (Geocollect)

Geocollect mobile có thể sync với dữ liệu từ TLGeo Cloud:

Trong Geocollect: Sync → Cloud → Chọn dự án → Tải về

Performance tuning

Tile cache

Bật tile cache cho WMS để tăng tốc độ

Spatial index

Tạo spatial index cho tất cả layer vector

Giới hạn extent

Giới hạn extent của WMS để tránh request quá lớn

Lỗi thường gặp & cách xử lý

LỗiNguyên nhânCách xử lý
”Service not found”URL saiKiểm tra URL QGIS Server
”Permission denied”Không có quyền truy cập filechmod cho user qgis-server
”Layer not visible in WMS”Layer bị tắt WMSBật “Display in WMS” trong Layer Properties
”CORS error”CORS chưa cấu hìnhTODO: Cấu hình CORS
”Slow response”Server yếu hoặc dữ liệu lớnBật cache, dùng tile
”SSL certificate error”Cert hết hạn hoặc saiRenew Let’s Encrypt

TODO cần bạn xác nhận

  • TLGeo Cloud backend URL config?
  • Có hỗ trợ setup QGIS Server qua Agent không? (hay dùng UI/Docker)
  • Có cần Authentication provider riêng (OAuth, JWT)?
  • Caching strategy nào phù hợp?

Liên kết