【问题标题】:Google geo-coding returns different results if URL is encoded versus if it is not如果 URL 已编码与未编码,Google 地理编码会返回不同的结果
【发布时间】:2013-08-08 07:35:30
【问题描述】:

url https://maps.googleapis.com/maps/api/geocode/json?address=75019&sensor=false&components=postal_code:75019|country:US 的结果与 url https://maps.googleapis.com/maps/api/geocode/json?address=75019&sensor=false&components%3Dpostal_code:75019|country:US 的结果不同

这两个 url 的唯一区别是“components”后面的“=”字符是在第二个 url 中编码的 url。结果是第二个网址:我得到了 2 个结果,一个是巴黎的,一个是德克萨斯的,这是不可取的。我只想要国家=美国的结果。我们在生产中使用第二个 url,但希望我们从第一个 url 获得结果。

问题是即使过滤器清楚地提到国家为美国,为什么我得到一个来自法国的地址?

任何解决方案或见解?诊断正确吗?

【问题讨论】:

    标签: geocoding google-geocoder google-geocoding-api


    【解决方案1】:

    没有在第二个 URL 中将国家/地区指定为美国:

    第二个 url 给 google 一个名为“components%3Dpostal_code:75019|country:US”的参数,没有内容,而第一个给 google 一个名为“components”的参数,内容为“postal_code:75019|country:US” " - = 符号作为参数名称和值之间的分隔符很重要。如果您对其进行 url 编码,则不再考虑用于此目的。

    因此,如果等号表示参数名称与其值之间的分隔,则不应对等号进行 URL 编码……这意味着您必须更改生产代码以生成第一个 URL。第二个只是不代表你想要表达的东西。

    由于您不使用任何其他 url 编码字符(至少不在上面显示的链接中),因此在将请求发送到 google 之前,它也可以在某处进行单独的 Url 解码步骤(如果您绝对可以'不要更改生产代码)。

    【讨论】:

    • 有道理。我们应该只对 values 进行编码,而不是别的。
    猜你喜欢
    • 2013-06-14
    • 2012-03-06
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多