我想根据纬度和经度从Google Earth获取高程数据,但我无法做到这一点。我不知道我做错了什么,但我的代码如下所示。
def getElevation(locations,sensor="true", **elvtn_args):
elvtn_args.update({
'locations': locations,
'sensor': sensor
})
url = ELEVATION_BASE_URL
params = urllib.parse.urlencode(elvtn_args)
baseurl = url +"?"+ params;
req = urllib.request.urlopen(str(baseurl));
response = simplejson.load(req);
得到的错误是:
Traceback (most recent call last):
File "D:GISArctoolsElevationChart - Copy.py", line 85, in <module>
getElevation(pathStr)
File "D:GISArctoolsElevationChart - Copy.py", line 45, in getElevation
response = simplejson.load(req);
File "C:Python32libjson__init__.py", line 262, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "C:Python32libjson__init__.py", line 307, in loads
return _default_decoder.decode(s)
File "C:Python32libjsondecoder.py", line 351, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: can't use a string pattern on a bytes-like object
感谢您的帮助。
帖子有点晚,但最近遇到了同样的问题。下面的解决方案对我很有效。基本就是Lennart说的。
from urllib import request
import json
req = request.urlopen('https://someurl.net/api')
encoding = req.headers.get_content_charset()
obj = json.loads(req.read().decode(encoding))
在Python 3中,二进制数据(例如http请求的原始响应)存储在bytes对象中。Json/simplejson需要字符串。解决方案是用适当的编码将字节数据解码为字符串数据,您可以在header中找到。
你找到编码:
encoding = req.headers.get_content_charset()
然后通过:
使内容成为字符串:body = req.readall().decode(encoding)
这个主体可以传递给json加载器。
(另外,请停止将响应称为"req"。这让人很困惑,听起来像是请求,其实不是。)