QGIS Python自动制图调用地址API返回200无结果,不知如何导入布局
问题1:API返回<Response 200>但看不到结果数据
你当前代码中调用r.json()仅执行了解析方法,但没有将解析结果赋值给变量存储,print(r)输出的是requests响应对象本身,无法看到具体返回内容。
修改API调用部分代码即可:
# 原API调用部分替换为以下代码 # 用params参数传递请求参数,避免字符串拼接出错 r = requests.get( "https://api-adresse.data.gouv.fr/reverse/", params={"lon": x, "lat": y} ) # 先判断请求状态是否正常 if r.status_code == 200: addr_data = r.json() # 打印完整返回数据,可在QGIS控制台查看结构按需提取字段 print(addr_data) # 提取地址文本,该API返回的有效地址存放在features列表第一项的properties中 if addr_data.get("features"): address_info = addr_data["features"][0]["properties"]["label"] else: address_info = "无匹配地址" else: address_info = f"地址查询失败,错误码:{r.status_code}" print(address_info)
问题2:将API返回信息导入布局
你代码中已经创建了subtitle标签对象,直接把上面提取到的地址信息赋值给该标签即可,修改subtitle部分代码:
# 原Subtitle部分替换为以下代码 subtitle = QgsLayoutItemLabel(layout) # 设置标签内容为API返回的地址信息 subtitle.setText(address_info) subtitle.setFont(QFont("Verdana", 18)) layout.addLayoutItem(subtitle) # 先设置文本再调整尺寸,避免内容显示不全 subtitle.adjustSizeToText() subtitle.attemptMove(QgsLayoutPoint(5, 18, QgsUnitTypes.LayoutMillimeters))
额外注意:你当前代码中
for feat in mylayer.getFeatures():之后的所有逻辑都没有缩进,会导致仅最后一个要素参与循环处理,需要把循环内的所有代码统一缩进一层才能实现批量生成地图的效果。
内容的提问来源于stack exchange,提问作者Allarte
相关产品推荐
相关产品推荐

