必应地图在街道十字路口抛出"Invalid Geocode"错误,它能够从中获取纬度和经度



我目前正在做一个项目,该项目涉及使用NEO4J和必应地图API从数千个地址的集合中计算持续时间矩阵。由于数据是敏感的,我们将使用模拟地址(它实际上产生了与我所描述的相同的问题('72ND&DODGE,OMAHA,NE 68132'表示交叉点地址的格式正在使用它们的密钥和基本url请求发送到Bing Maps API。

首先:问题不在于我的代码(这也是敏感数据(,因为我的代码所做的只是向Bing Maps发送一个上述格式的url字符串和授权密钥,并等待包含旅行持续时间数据的响应。我的问题是,必应地图似乎无法处理或处理街道交叉口来计算与其他位置的距离/持续时间。当我在网络浏览器中将这些地址放入Bing/Google Maps中时,可以以与上述示例完全相同的格式找到和计算这些地址。

我开始我的程序,通过让它找到每个地址的纬度和经度来检查地址是否存在/有效,所以对于示例'72ND&DODGE,OMAHA,NE 68132'它发现:Lat:'41.259690'和Long:'-96.023770'。如果它找不到地址的Lat/Long,那么它会抛出"无效地理代码"错误,但在这种初始化上下文中,这意味着地址不存在,或格式不正确,这是有道理的,也是我在初始化阶段这样做的原因。

然而,如果我使用'72ND&DODGE,OMAHA,NE 68132'对于其他地址之间的任何持续时间计算,它抛出'72ND&多吉,奥马哈,NE 68132'一遍又一遍,尽管它通过了Lat/Long检查,但没有解释原因。我还想指出的是,这个问题并不一致,因为有些交叉点不起作用,而另一些交叉点起作用,但在知道哪些交叉点会起作用或不会起作用方面没有一致性。因此,我最终想知道Bing地图是否无法计算某些地址,无论其格式如何。

在将查询放入URL之前,请确保对其进行编码。特别是当您的查询中有&时,因为它会打断您的查询,以为您只要求72ND,而查询的其余部分是查询字符串参数名称。此处的最佳实践部分对此进行了说明。

在Java中,您可以对查询参数进行如下编码:

String baseURL = "https://dev.virtualearth.net/REST/v1/Locations?key={BingMapsKey}&query=";
// query string
String query = "72ND & DODGE, OMAHA, NE 68132";
// URL encode query string
String encodeStr = URLEncoder.encode(query, StandardCharsets.UTF_8.name());
// final url
String url = baseURL + encodeStr;

以下是查询URL的外观示例:

https://dev.virtualearth.net/REST/v1/Locations?key={BingMapsKey}&query= 72ND%20%26%20DODGE%2C%20OMAHA%2C%20NE%2068132

最新更新