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_scripthoặ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ỗi | Nguyên nhân | Cách xử lý |
|---|---|---|
| ”Service not found” | URL sai | Kiểm tra URL QGIS Server |
| ”Permission denied” | Không có quyền truy cập file | chmod cho user qgis-server |
| ”Layer not visible in WMS” | Layer bị tắt WMS | Bật “Display in WMS” trong Layer Properties |
| ”CORS error” | CORS chưa cấu hình | TODO: Cấu hình CORS |
| ”Slow response” | Server yếu hoặc dữ liệu lớn | Bật cache, dùng tile |
| ”SSL certificate error” | Cert hết hạn hoặc sai | Renew 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
- Bài 4: Xem dữ liệu — Kết nối WMS/WFS
- Bài 7: Phân tích dữ liệu — Xuất kết quả
- Bài 9: Tương tác với Plugins
- Bài 14: Khắc phục sự cố