首页 > 解决方案 > R:如何正确地为 ggmap 地理编码/谷歌地理编码 API 准备一个国际地址?

问题描述

我发现

loc <- "Dradenaustraße 33, 21129 Hamburg"
library(ggmap)
geocode(loc, source = "google", force = TRUE, messaging = TRUE, output = "more")

返回 NA,“400,错误请求”错误,或者如果尝试准备如下所示的地址,它甚至会返回堪萨斯州某处的纬度/经度。

我发现,

loc <- "Dradenaustraße 33, 21129 Hamburg"
Encoding(loc) <- "UTF-8"
loc <- URLencode(loc, reserved = TRUE)

返回

Warning message:
In strsplit(URL, "") : input string 1 is invalid UTF-8

并且 loc 之后将是 NA 。

顺便提一句。以下适用于地理编码,即它返回正确的地址和纬度/经度:

loc <- "Dradenaustrasse 33, 21129 Hamburg" #manually reformatted
loc <- "Dradenaustraee 33, 21129 Hamburg" #misspelled

以下拼写错误的地址与最初的正常拼写有相同的问题:

loc <- "Dradenaustraée 33, 21129 Hamburg" #misspelled

我正在调用具有数千个类似上述地址的地址的地理编码 api,并且不想重新格式化它们(即用“ss”替换“ß”,除非这是绝对必要的。在这种情况下,我将不得不做出假设关于许多其他包含重音符号(`、´ 等)的国际地址。

有任何想法吗?

非常感谢!:)

编辑指出我正在寻找一种可任意适用于国际地址的解决方案,并且不需要特定于域的已知知识和手动重新格式化地址。

标签: rggmapgeocode

解决方案


您不必担心以某种方式将您的输入发送到 API。

对我来说,您输入的所有变体都适用于 Geocode.xyz:

  1. https://geocode.xyz/Dradenaustra%C3%9Fe%2033,%2021129%20Hamburg(带ß)

    • 德国 x,yz: 53.52480,9.90007 |
    • 33 DRADENAUSTRASSE,德国汉堡 置信度:0.90
  2. https://geocode.xyz/Dradenaustrasse%2033,%2021129%20Hamburg(不含ß)

    • 德国 x,yz: 53.52480,9.90007 |
    • 33 DRADENAUSTRASSE,德国汉堡 置信度:0.90
  3. https://geocode.xyz/Dradenaustra%2033,%2021129%20Hamburg(拼写错误)

    • 德国 x,yz: 53.5248,9.90007 |
    • 33 DRADENAUSTRAßE,德国汉堡 置信度:0.5

拼写错误的唯一作用是更改置信度分数。


推荐阅读