R:如何为ggmap地理编码/ Google Geocode API正确准备国际地址?

时间:2018-04-30 14:21:42

标签: r ggmap geocode

我发现了

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

返回NAs,“400,Bad Request”错误,或者如果有人试图准备如下所示的地址,它甚至会在堪萨斯州的某处返回一些Lat / Lon。

我发现了,

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”,除非这是绝对必要的。在这种情况下,我会有对包含重音符号(“,”等)的许多其他国际地址做出假设。

有什么想法吗?

非常感谢! :)

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

3 个答案:

答案 0 :(得分:0)

使用法国笔记本电脑,我不得不:

  • 使用法语对应汉堡: Hambourg ;
  • ss 替换eszett(ß);
  • 并将街道名称与strasse分开:loc <- "Dradenau strasse 33, 21129 Hambourg"

经过这些更改,请致电 geocode(loc, source = "google", force = TRUE, messaging = TRUE, output = "more") 返回了所需的结果(lon = 9.89992,lat = 53.52478等)

我希望这有帮助!

答案 1 :(得分:0)

这是一个非常棘手的编码问题。您的原始文字不在utf-8中,这正是Google正在寻找的内容。设置编码只是尝试将元数据附加到字符串。这样:

Encoding(loc) <- "UTF-8"

告诉R该字符串是“UTF-8”而R说它不是。您的德语单词可能采用“Latin9”编码,R函数Encoding() has no idea what that is

您可以做的是将编码转换为UTF-8,然后再将其发送到Google。您可以在每次通话之前在带内执行此操作,例如:

loc <- "Dradenaustraße 33, 21129 Hamburg"
utf_encoded <- //some translation algorithm
geocode(utf_encoded, source = "google", force = TRUE, messaging = TRUE, output = "more")

或者您可以尝试创建第二个数据存储(文件,数据库表等),这是通过文件或数据库读取摄取德语文本,通过算法运行它,并输出编码为的等效文本来创建的。 UTF-8通过文件或数据库编写。

无论哪种方式,都有一个字符串转换/翻译包found here。该页面的相关部分看起来是:

  

stri_trans_general(“groß”,“upper”)

     

##“GROSS”

答案 2 :(得分:0)

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

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

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

    • 德国x,y z:53.52480,9.90007 |
    • 33 DRADENAUSTRASSE,Hamburg,Germany信心得分:0.90
  2. https://geocode.xyz/Dradenaustrasse%2033,%2021129%20Hamburg(没有ß)

    • 德国x,y z:53.52480,9.90007 |
    • 33 DRADENAUSTRASSE,Hamburg,Germany信心得分:0.90
  3. https://geocode.xyz/Dradenaustra%2033,%2021129%20Hamburg(拼写错误)

    • 德国x,y z:53.5248,9.90007 |
    • 33DRADENAUSTRAßE,德国汉堡信心分数:0.5
  4. 拼写错误的唯一作用是改变置信度。