我有一个PostgreSql存储过程,它返回用json_build_object函数创建的geojson特性集合。这个web服务在OpenLayers中打开得很好,但是,当我尝试在QGIS中打开它时,使用数据源管理器->矢量->协议->geojson,我得到以下错误:
无效的数据源:[myurl]/rpc/wod_geojson不是有效或可识别的数据源。
返回的geojson如下所示:
{
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"id": 1,
"geometry": {
"type": "Point",
"coordinates": [0.0, 0.0]
},
"properties": {
"num": 1,
"lib": "bla"
}
}, {
"type": "Feature",
"id": 2,
"geometry": {
"type": "Point",
"coordinates": [1.0, 1.0]
},
"properties": {
"num": 2,
"lib": "blabla"
}
}, {
"type": "Feature",
"id": 3,
"geometry": {
"type": "Point",
"coordinates": [2.0, 2.0]
},
"properties": {
"num": 3,
"lib": "blablabla"
}
}
]
}
我错过了什么?
PostGrest响应标头:
Content-Range 0-0/*
Content-Type application/geo+json
Date Wed, 09 Feb 2022 11:02:26 GMT
Server postgrest/9.0.0
Transfer-Encoding chunked
Vary Accept-Encoding
编辑时间:奇怪的是,我可以使用Python:在QGIS中打开web服务
myLayer= QgsVectorLayer('[myurl]/rpc/wod_geojson', 'myLayer', 'ogr')
QgsProject.instance().addMapLayers([myLayer])
我也遇到过同样的问题,但我在PostgREST和最终客户端之间使用了NodeJS服务器。我观察了流量,注意到QGIS数据源管理器在请求标头中包含Accepts: 'text/plain, application/json'
。事实证明PostgRest对text/plain
请求的响应不同。因此,在我的代理服务器中,我现在覆盖这个请求头,以强制类型为application/json
。