You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 22:22:48