У меня есть маленький R-код, который берет название города, которое я ему подаю, а затем вводит его в тип URL-запроса, который Google Maps может понять, а затем он дает мне координаты широты и долготы. Имена моего города на иврите!
Когда я использую "url encode" на этом сайте, а затем помещаю вывод в свой код, все работает хорошо. Но потом я подумал: зачем мне использовать этот сайт, когда я могу кодировать его по R в том же коде.
Так что я попробовал это, и apperantly - URLencode
и все пакеты, которые я нашел в Интернете кодируют иначе, чем веб - сайт я уже упоминал. Например: я хочу кодировать название имени иврита: צפת
вывод с веб-сайта:
%D7%A6%D7%A4%D7%AA
.
вывод из URLencode
:
%F6%F4%FA
Как я могу получить первую кодировку, которую использует веб-сайт? (Я пытался использовать RCurl
и urltools
, все безрезультатно..)
Код R это (я нашел его на этом сайте):
getGeoCode <- function(gcStr)
{
library("RJSONIO") # Load Library
gcStr <- gsub(' ','%20',gcStr) # Encode URL Parameters
# Open Connection
connectStr <- paste('http://maps.google.com/maps/api/geocode/json?sensor=false&address=',gcStr, sep="")
con <- url(connectStr)
data.json <- fromJSON(paste(readLines(con), collapse=""))
close(con)
# Flatten the received JSON
data.json <- unlist(data.json)
lat <- data.json["results.geometry.location.lat"]
lng <- data.json["results.geometry.location.lng"]
gcodes <- c(lat, lng)
names(gcodes) <- c("Lat", "Lng")
return (gcodes)
}
Итак, мне удалось найти ответ на мою проблему - мне пришлось изменить свой язык на "английский", потому что он был на "иврите". Sys.setlocale("LC_ALL","English")
Я не вижу проблему, которую вы описываете с помощью URLencode()
:
location <- "צפת"
URLencode(location)
# [1] "%D7%A6%D7%A4%D7%AA"
И используя мой пакет googleway
запрос Google работает
library(googleway)
apiKey <- ""
res <- google_geocode(address = location, key = apiKey)
res$results$formatted_address
# [1] "Safed, Israel"
res$results$address_components
# [[1]]
# long_name short_name types
# 1 Safed Safed locality, political
# 2 Tzfat Tzfat administrative_area_level_2, political
# 3 North District North District administrative_area_level_1, political
# 4 Israel IL country, political
res$results$geometry$location
# lat lng
# 1 32.96465 35.496
Sys.setlocale("LC_ALL","English")