使用Wolfram API在Python中获取多经纬度点间导航路线报错求助
问题:Python调用Wolfram API获取多点导航路线报错
问题背景
在Wolfram Notebook中可正常获取多点间导航路线,但用Python调用Wolfram API时始终报错。
可正常运行的Wolfram Notebook代码
td = TravelDirections[{GeoPosition[{40.7128, -74.0060}], GeoPosition[{25.7617, -80.1918}], GeoPosition[{19.4326, -99.1332}]}, TravelMethod ->"Biking"] GeoGraphics[Style[Line[td], Thick, Red]] td["Dataset"][All, {"Description", "Distance"}]
这段代码能正常返回连接各点的地图图像及导航路线列表。
报错的Python代码
import wolframalpha import requests wolfram_key="MY KEY" client = wolframalpha.Client(wolfram_key) td = client.query('TravelDirections[{GeoPosition[{40.7128, -74.0060}], GeoPosition[{19.4326, -99.1332}]}, TravelMethod ->"Walking"]') map = client.query('GeoGraphics[Style[Line[td], Thick, Red]]') direct = client.query('td["Dataset"][All, {"Description", "Distance"}]') print(direct)
错误返回信息
{'@success': False, '@error': 'false', '@xml:space': 'preserve', '@numpods': '0' , '@datatypes': '', '@timedout': '', '@timedoutpods': '', '@timing': '3.37700000 00000002', '@parsetiming': '1.319', '@parsetimedout': 'false', '@recalculate': ' ', '@id': '', '@parseidserver': '18', '@host': 'https://www6b3.wolframalpha.com' , '@server': '18', '@related': '', '@version': '2.6', '@inputstring': 'td["Dataset"][All, {"Description", "Distance"}]', 'didyoumeans': {'@count': '1', 'didyoumean': {'@score': '0.379067', '@level': 'medium', '#text': 'All Description Distance'}}}
问题原因及解决方案
核心问题
Wolfram Alpha API的每次query调用都是独立会话,无法像Notebook那样保留变量td的上下文。后续调用map和direct时,API无法识别td这个变量,导致解析失败。
修正后的Python代码示例
import wolframalpha wolfram_key="MY KEY" client = wolframalpha.Client(wolfram_key) # 合并为单个自包含查询,直接获取路线的数据集信息 query_str = 'TravelDirections[{GeoPosition[{40.7128, -74.0060}], GeoPosition[{19.4326, -99.1332}]}, TravelMethod ->"Walking"]["Dataset"][All, {"Description", "Distance"}]' direct = client.query(query_str) # 解析并打印路线信息 for pod in direct.pods: for subpod in pod.subpods: print(subpod.plaintext) # 单独发起地图查询,完整写出TravelDirections表达式(不能用td变量) map_query_str = 'GeoGraphics[Style[Line[TravelDirections[{GeoPosition[{40.7128, -74.0060}], GeoPosition[{19.4326, -99.1332}]}, TravelMethod ->"Walking"]], Thick, Red]]' map_result = client.query(map_query_str) # 提取地图图像URL for pod in map_result.pods: for subpod in pod.subpods: if hasattr(subpod, 'img'): print("地图图像URL:", subpod.img.src)
关键说明
- 每次
client.query()都是独立请求,API不会保存之前的变量,所有表达式必须是自包含的,不能引用之前查询中的变量。 - 解析返回结果时,需要遍历
pods和subpods节点来获取实际内容,不能直接打印整个结果对象。
内容的提问来源于stack exchange,提问作者Modest_coder
相关产品推荐
相关产品推荐

