OpenStreetMap PyQGIS lỗi
Tôi gặp sự cố khi phát triển plugin python, tôi đang cố hiển thị bản đồ OpenStreetMap đằng sau các lớp, chỉ có bản đồ không được đồng bộ hóa với các lớp, nó không thể tìm thấy nó hoặc thậm chí cả vị trí.
Vị trí địa lý của bản đồ không tương ứng với vị trí của các lớp của tôi.
#Vlayer is defined above the code / Vlayer est définie au-dessus du code
urlWithParams = 'type=xyz&url=http://a.tile.openstreetmap.org/%7Bz%7D/%7Bx%7D/%7By%7D.png&zmax=19&zmin=0&crs=EPSG3857'
maplayer = QgsRasterLayer(urlWithParams, 'OpenStreetMap', 'wms')
settings = QgsMapSettings()
settings.setLayers([vlayer,maplayer])
settings.setBackgroundColor(QColor(255, 255, 255))
settings.setOutputSize(QSize(800, 690))
settings.setExtent(vlayer.extent())
render = QgsMapRendererParallelJob(settings)
render.start()
render.waitForFinished()
img = render.renderedImage()
img.save(QgsApplication.qgisSettingsDirPath()+"python/plugins/nro_print/img/render.png", "png")
kết quả:
Trả lời
Bạn cần đặt CRS đích trên cài đặt trình kết xuất. Những điều sau đây phù hợp với tôi.
Tạo một lớp bộ nhớ thử nghiệm
vlayer = QgsVectorLayer('Point?crs=epsg:4647&field=ID:integer(3)&field=value:double','test',"memory")
mypts = [QgsPointXY(32500000,5700000),
QgsPointXY(32500010,5700010),
QgsPointXY(32500010,5700060),
QgsPointXY(32500040,5700090)
]
for p in mypts:
pt = QgsGeometry.fromPointXY(p)
f = QgsFeature(vlayer.fields())
f.setGeometry(pt)
vlayer.dataProvider().addFeatures([f])
vlayer.updateExtents()
Thêm lớp OSM, lưu ý httpsvà tile., không a.tile..
urlWithParams = 'type=xyz&url=https://tile.openstreetmap.org/%7Bz%7D/%7Bx%7D/%7By%7D.png&zmax=19&zmin=0&crs=EPSG3857'
maplayer = QgsRasterLayer(urlWithParams, 'OpenStreetMap', 'wms')
Xác định các cài đặt, đây là của bạn.
settings = QgsMapSettings()
settings.setLayers([vlayer,maplayer])
settings.setBackgroundColor(QColor(255, 255, 255))
settings.setOutputSize(QSize(800, 690))
Đây là những gì tôi cần thiết lập, nếu không lớp OSM sẽ không hiển thị. chỉnh sửa: Rõ ràng, nó cần phải giống như CRS vlayer. Điều này cũng được đề cập trong phần 10.2 của sách nấu ăn PyQIS .
settings.setDestinationCrs(vlayer.crs())
settings.setExtent(vlayer.extent().buffered(30))
render = QgsMapRendererParallelJob(settings)
render.start()
render.waitForFinished()
img = render.renderedImage()
img.save("c:/temp/render.png", "png")
Kết quả, được đặt chính xác
Mã đầy đủ ở đây dưới dạng GIST .