Python 使用 bbox 的 wfs 请求导致请求中出现不需要的字符 url
Python wfs request with bbox results in undesired characters in the request url
我使用 python 库“请求”发出 WFS 请求。其中一个参数是一个边界框,其坐标由 4 个变量给出。问题是最后的 url 在 bbox 坐标周围有一些额外的字符导致错误的请求。知道这些字符是如何出现的以及如何摆脱它们吗?
示例坐标:
(136226.446, 456092.217, 136726.446, 456592.217)
我的代码:
coords= (bbx_min_x, bbx_min_y, bbx_max_x, bbx_max_y)
url = 'https://geodata.nationaalgeoregister.nl/bag/wfs/v1_1?'
params = {'bbox' : '{}'.format(coords), 'service' : 'WFS' , 'typeName' : 'bag:pand' , 'version' : '2.0.0' , 'startIndex' : 0, 'request' : 'GetFeature', 'outputFormat' : 'json'}
exp = Request('GET', url, params=params).prepare().url
结果url(来自print(exp)
):
https://geodata.nationaalgeoregister.nl/bag/wfs/v1_1?bbox=%28136226.446%2C+456092.217%2C+136726.446%2C+456592.217%29&service=WFS&typeName=bag%3Apand&version=2.0.0&startIndex=0&request=GetFeature&outputFormat=json
我找到了解决方案。为了理解这个问题,我需要找出 URL 编码(参见 here)。
在我的代码中,bbox 坐标被解析为一个元组。
在 url 编码中,虽然左括号是用字符 %28 编码的,但将我的边界框的 X 下坐标从 136226.446
更改为 28136226.446
。这导致了错误的边界框。
为了解决这个问题,我分别给出了每个坐标:
'bbox' : "{0},{1},{2},{3}".format(bbx_min_x,bbx_min_y, bbx_max_x,bbx_max_y)
我使用 python 库“请求”发出 WFS 请求。其中一个参数是一个边界框,其坐标由 4 个变量给出。问题是最后的 url 在 bbox 坐标周围有一些额外的字符导致错误的请求。知道这些字符是如何出现的以及如何摆脱它们吗?
示例坐标:
(136226.446, 456092.217, 136726.446, 456592.217)
我的代码:
coords= (bbx_min_x, bbx_min_y, bbx_max_x, bbx_max_y)
url = 'https://geodata.nationaalgeoregister.nl/bag/wfs/v1_1?'
params = {'bbox' : '{}'.format(coords), 'service' : 'WFS' , 'typeName' : 'bag:pand' , 'version' : '2.0.0' , 'startIndex' : 0, 'request' : 'GetFeature', 'outputFormat' : 'json'}
exp = Request('GET', url, params=params).prepare().url
结果url(来自print(exp)
):
https://geodata.nationaalgeoregister.nl/bag/wfs/v1_1?bbox=%28136226.446%2C+456092.217%2C+136726.446%2C+456592.217%29&service=WFS&typeName=bag%3Apand&version=2.0.0&startIndex=0&request=GetFeature&outputFormat=json
我找到了解决方案。为了理解这个问题,我需要找出 URL 编码(参见 here)。 在我的代码中,bbox 坐标被解析为一个元组。
在 url 编码中,虽然左括号是用字符 %28 编码的,但将我的边界框的 X 下坐标从 136226.446
更改为 28136226.446
。这导致了错误的边界框。
为了解决这个问题,我分别给出了每个坐标:
'bbox' : "{0},{1},{2},{3}".format(bbx_min_x,bbx_min_y, bbx_max_x,bbx_max_y)