我发现了
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”,除非这是绝对必要的。在这种情况下,我会有对包含重音符号(“,”等)的许多其他国际地址做出假设。
有什么想法吗?
非常感谢! :)
编辑指出我正在寻找一种任意处理国际地址的解决方案,并且不需要特定于域的知识和手动重新格式化地址。
答案 0 :(得分:0)
使用法国笔记本电脑,我不得不:
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:
https://geocode.xyz/Dradenaustra%C3%9Fe%2033,%2021129%20Hamburg(与ß)
https://geocode.xyz/Dradenaustrasse%2033,%2021129%20Hamburg(没有ß)
https://geocode.xyz/Dradenaustra%2033,%2021129%20Hamburg(拼写错误)
拼写错误的唯一作用是改变置信度。