Trang chủ QGIS Lập trình Python QGIS - PyQGIS Bài 10: Đặt và tải lại nguồn dữ liệu bản đồ cơ...

Bài 10: Đặt và tải lại nguồn dữ liệu bản đồ cơ sở (Basemap)

- Quảng cáo -

Bài 1: Bắt đầu với lập trình Python QGIS
Bài 2: Thêm lớp Vector
Bài 3: Thêm lớp Raster
Bài 4: Làm việc với lớp Vector
Bài 5: Cách thêm/xóa trường và cập nhật giá trị thuộc tính
Bài 6: Thêm dữ liệu CSV
Bài 7: Drawing Marker
Bài 8: Vẽ Polyline và Polygon
Bài 9: Animate GPS Track
Bài 10: Đặt và tải lại nguồn dữ liệu bản đồ cơ sở (Basemap)

Trong bài viết này, chúng tôi sẽ chuyển sang thảo luận thêm về Data Provider cụ thể về cách đặt nguồn dữ liệu lớp, tải lại và thêm nó vào Canvas bản đồ của QGIS.

Giả sử chúng ta có ba bản đồ cơ sở (OSM, Strava Heatmap và Stamen Terrain). Chúng tôi muốn tạo một chức năng để thêm và thay đổi sơ đồ cơ sở. Vì vậy, chúng ta có thể gọi hàm để đặt một sơ đồ cơ sở khác mà không cần thêm một lớp mới.

Có một số bước phải được thực hiện. Đầu tiên, chúng tôi bắt đầu ba biến cho mỗi sơ đồ cơ sở như sau:

#URL ADDRESS
osm="url=http://a.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png&zmax=19&zmin=0&type=xyz"
strava="url=https://heatmap-external-b.strava.com/tiles/all/bluered/{z}/{x}/{y}.png&zmax=19&zmin=0&type=xyz"
stamen="url=http://a.tile.stamen.com/terrain/{z}/{x}/{y}.png&zmax=20&zmin=0&type=xyz"

Sau đó, chúng tôi tạo một danh sách cho URL và tạo một danh sách cho tên lớp.

#INITIATE LIST FOR URL AND LAYER NAME
layer_list=[osm,strava,stamen] 
layer_name=["OSM","Strava Heatmap","Stamen Terrain"]

Tiếp theo, chúng tôi thêm một sơ đồ cơ sở ban đầu vào khung vẽ bản đồ QGIS.

#ADD INITIAL BASEMAP
uri=url_list[0] #OSM 
basemap_layer=QgsRasterLayer(uri,"basemap",'wms')
QgsProject.instance().addMapLayer(basemap_layer)

Bây giờ chúng ta tạo một hàm được gọi là change_basemap với một đối số tên của tên lớp. Trong chức năng này, chúng tôi thực hiện một số bước như: lấy chỉ mục của url dựa trên tên lớp. Đặt url của lớp bản đồ cơ sở với url mới. Tải lại nó và làm mới bản đồ canvas.

Để thiết lập url sơ đồ cơ sở mới và tải lại nó, chúng tôi đang sử dụng phương thức setDataSourceUri từ lớp QssDataProvider. Sau đó, chúng tôi nạp lại (repaint) lại lớp raster bản đồ cơ sở bằng phương thức triggerRepaint và tải lại nó. Để xem sơ đồ cơ sở mới, chúng ta phải làm mới khung vẽ bản đồ bằng phương thức refresh từ lớp iface. Các chức năng cơ sở thay đổi hoàn toàn như sau.

#FUNCTION TO CHANGE BASEMAP
def change_basemap(name):
    #GET URL INDEX BASED ON LAYER NAME
    index=layer_name.index(name)
    uri=url_list[index]

    #SET DATASOURCE AND RELOAD DATA
    basemap_layer.dataProvider().setDataSourceUri(uri)
    basemap_layer.dataProvider().reloadData()
    basemap_layer.triggerRepaint()
    basemap_layer.reload()
    
    #REFRESH QGIS MAP CANVAS
    iface.mapCanvas().refresh()

Mã code hoàn chỉnh như dưới đây.

#URL ADDRESS
osm="url=http://a.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png&zmax=19&zmin=0&type=xyz"
strava="url=https://heatmap-external-b.strava.com/tiles/all/bluered/{z}/{x}/{y}.png&zmax=19&zmin=0&type=xyz"
stamen="url=http://a.tile.stamen.com/terrain/{z}/{x}/{y}.png&zmax=20&zmin=0&type=xyz"

#INITIATE LIST FOR URL AND LAYER NAME
url_list=[osm,strava,stamen]
layer_name=["OSM","Strava Heatmap","Stamen Terrain"]

#ADD INITIAL BASEMAP
uri=url_list[0] #OSM 
basemap_layer=QgsRasterLayer(uri,"basemap",'wms')
QgsProject.instance().addMapLayer(basemap_layer)

#FUNCTION TO CHANGE BASEMAP
def change_basemap(name):
    #GET URL INDEX BASED ON LAYER NAME
    index=layer_name.index(name)
    uri=url_list[index]

    #SET DATASOURCE AND RELOAD DATA
    basemap_layer.dataProvider().setDataSourceUri(uri)
    basemap_layer.dataProvider().reloadData()
    basemap_layer.triggerRepaint()
    basemap_layer.reload()
    
    #REFRESH QGIS MAP CANVAS
    iface.mapCanvas().refresh()

Lưu mã và chạy nó. Sơ đồ cơ sở OSM sẽ được thêm vào khung bản đồ của QGIS. Để thay đổi nó, hãy nhập vào Python Console change_basemap (“Strava Heatmap”) để thay đổi sơ đồ cơ sở thành sơ đồ nhiệt Strava hoặc change_basemap(“Stamen Terrain”) để thay đổi nó thành sơ đồ địa hình Strava.

Trên đây là tất cả các hướng dẫn về cách đặt nguồn dữ liệu cho sơ đồ cơ sở xyz, tải lại và xem nó trong QGIS.

Bình luận bằng Facebook Comments

MẠNG XÃ HỘI

1,010ThíchThích
435Đăng kýĐăng Ký

TOOL PXTmap.com

BÀI VIẾT LIÊN QUAN

Bài 14: Viết kịch bản xử lý

Trong các bài trước, chúng tôi đã đề cập đến cách chạy các công cụ Processing cũng như cách xâu chuỗi các...

Bài 13: Tạo các hàm để tải các lớp GeoPackage

Hiện tại chúng ta đã từng sử dụng GeoPackages. Ví dụ: trong Tải một lớp vectơ, chúng tôi đã giới thiệu cách...

Bài 12: Sử dụng biểu thức để tính giá trị

Trong các bài trước đây, chúng tôi đã đề cập đến cách tạo các lớp vectơ, cách thêm các trường vào bảng...

Bài 11: Quản lý các lớp dự án (đổi tên và loại bỏ)

Trong các bài trước, chúng tôi đã đề cập đến việc thêm các lớp từ các tệp cũng như tạo các lớp...

Bài 10: Công cụ chuỗi xử lý (Chaining Processing)

Trong Bài 7: Chạy công cụ xử lý (Processing), chúng ta đã khám phá những điều cơ bản của việc chạy các...