OpenStreetMap PyQGIS 오류
Sep 17 2020
파이썬 플러그인 개발에 문제가 있습니다. 레이어 뒤에 OpenStreetMap지도를 표시하려고합니다.지도 만 레이어와 동기화되지 않고 위치를 찾을 수 없습니다.
지도의 지리적 위치가 내 레이어의 지리적 위치와 일치하지 않습니다.
#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")
결과:
답변
1 til_b Sep 17 2020 at 22:26
렌더러 설정에서 대상 CRS를 설정해야합니다. 다음은 나를 위해 작동합니다.
테스트 메모리 계층 만들기
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()
OSM 층, 메모를 추가 https하고 tile.,하지 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')
설정을 정의하십시오.
settings = QgsMapSettings()
settings.setLayers([vlayer,maplayer])
settings.setBackgroundColor(QColor(255, 255, 255))
settings.setOutputSize(QSize(800, 690))
이것이 제가 설정해야하는 것입니다. 그렇지 않으면 OSM 레이어가 렌더링되지 않습니다. 편집 : 분명히 vlayer CRS와 동일해야합니다. 이것은 PyQIS 요리 책의 섹션 10.2 에서도 언급됩니다 .
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")
결과, 올바르게 배치됨
여기에 GIST로 전체 코드가 있습니다 .