1

我有一个托管在地理服务器上的 wms 图层,用于使用 OpenLayers 在 Web 地图应用程序上显示。我将使用代理 URL 获取地图图像,该代理 URL 向 Geoserver 发送请求并返回 wms 图层图像作为响应。但是,我不能在 pyqgis 中使用相同的 URL 来加载图层作为 QGIS 中的栅格图层。我可以使用 QgsRasterLater 函数成功加载我的 localhost GeoServer 数据,但由于我的远程服务器的 GeoServer 只能通过代理 URL 访问,我得到一个无效的图层响应。

加载本地主机层的功能(成功运行):

urlWithParams = "crs=EPSG:4326&format=image/png&layers=roads&styles=roads&url=http://localhost:7080/geoserver/demo_workspace/ows"
        rlayer = QgsRasterLayer(urlWithParams, 'roads', 'wms')
        print(rlayer.results())
        if not rlayer.isValid():
            print("Layer failed to load!")
        else:
            QgsProject.instance().addMapLayer(rlayer)

加载受代理保护的远程 GeoServer 层的功能(不工作):

情况1:

urlWithParams = "SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=demo_worksapce:layer1&CRS=EPSG:3857&TILED=true&WIDTH=256&HEIGHT=256&STYLES=&BBOX=8844681.416934315,1408887.3053523675,8922952.933898335,1487158.822316388&url=https://demo.com:2080/api/v1/proxy/image"
        rlayer = QgsRasterLayer(urlWithParams, 'roads', 'wms')
        print(rlayer.isValid())
        if not rlayer.isValid():
            print("Layer failed to load!")
        else:
           QgsProject.instance().addMapLayer(rlayer)

案例二:

urlWithParams = "FORMAT=image/png&LAYERS=demo_worksapce:layer1&CRS=EPSG:3857&STYLES=&url=https://demo.com:2080/api/v1/proxy/image"
        rlayer = QgsRasterLayer(urlWithParams, 'roads', 'wms')
        print(rlayer.isValid())
        if not rlayer.isValid():
            print("Layer failed to load!")
        else:
           QgsProject.instance().addMapLayer(rlayer)
4

0 回答 0