当使用'st'指定街道地址时,地理编码API返回ZERO_RESULTS

时间:2013-08-01 10:24:36

标签: google-geocoding-api

使用'st'查询返回零结果: http://maps.googleapis.com/maps/api/geocode/json?client=client_id&sensor=false&address=100+main+st%2CAtlanta%2CGA%2CUSA&language=en&signature=sing

{
"results" : [],
"status" : "ZERO_RESULTS"
}

此查询返回地址: http://maps.googleapis.com/maps/api/geocode/json?client=client_id&sensor=false&address=100+main%2CAtlanta%2CGA%2CUSA&language=en&signature=sign

{
"results" : [ *********** ],
"status" : "OK"
}

这种行为的原因是什么? 搜索字符串'100 Main St,Atlanta,GA'在maps.google.com

中运行良好

1 个答案:

答案 0 :(得分:1)

这里有两个问题。

第一。你问的是一个不存在的地址;这将极大地影响api为您匹配结果的能力。

第二。正如评论中提到的那样,“st”有一些含糊之处等。

最终,您的查询将与结果中的每个条目都有一些“相关性得分”,并且只会给出高于某个内部阈值的结果。

此匹配阈值受上述两个问题的影响。

100 Main St,Atlanta,GA不是真实的,并且没有解决到某个位置。据我所知,它甚至不适用于maps.google.com

当匹配位置(真实与否)时,您输入的文本将很重要。 例如你得到结果的第二个例子实际上是在乔治亚州的Forest Hills。 而且无论出于什么原因,这都是b / c,缺少“st”可以让它匹配得足以让谷歌尽可能地提出建议。使用“st”或“street”,分辨率阈值不是很好,而且你得到的结果为“零结果”。

使用一个真实的地址,比如说:546 main st,你会注意到'','st','street'仍然很重要(它仍会影响匹配的阈值),但不那么重要。

以下是一些例子:

curl -s 'http://maps.googleapis.com/maps/api/geocode/json?address=546+main,+Atlanta,+GA&sensor=false' | grep formatted | grep 546
         "formatted_address" : "546 Main Street Northeast, Atlanta, GA 30324, USA",
curl -s 'http://maps.googleapis.com/maps/api/geocode/json?address=546+main+st,+Atlanta,+GA&sensor=false' | grep formatted | grep 546
         "formatted_address" : "546 Main Street Northeast, Atlanta, GA 30324, USA",
curl -s 'http://maps.googleapis.com/maps/api/geocode/json?address=546+main+street,+Atlanta,+GA&sensor=false' | grep formatted | grep 546
         "formatted_address" : "546 Main Street Northeast, Atlanta, GA 30324, USA",

现在,结果的顺序和多样性确实有所不同,如果你放弃“| grep”的东西,你可以很容易地观察到,但你可以清楚地看到,在所有情况下,对于这个特定地址,你将获得可行的结果。 对于“每个”真实地址,这可能不是真的,但我认为你可以合理地期望得到一个可行的结果,如果你在一个真正的地址之后,文字不是过于模糊,正如上面的评论所说的那样