2016-05-24 2 views
0

У меня около 9 миллионов записей с широтой и долготой, в дополнение к метке времени в EST. Я хочу использовать широту и долготу для создания соответствующего регионального часового пояса, из которого я тогда хочу настроить все эти времена для соответствующего часового пояса.Использование широты и долготы для генерации часового пояса

Я попытался с помощью GeoNames

data_raw$tz <- mapply(GNtimezone, data$lat,data$lon) 

Тем не менее, это возвращает следующее сообщение об ошибке:

Error in getJson("timezoneJSON", list(lat = lat, lng = lng, radius = 0)) : 
error code 13 from server: ERROR: canceling statement due to statement timeout 

Я пытался использовать метод, описанный в this post.

data$tz_url <- sprintf("https://maps.googleapis.com/maps/api/timezone/%s?location=%s,%s&timestamp=%d&sensor=%s", 
       "xml", 
       data$lat, 
       data$lon, 
       as.numeric(data$time), 
       "false") 

for(i in 1:100){ 
    data$tz[i] <- xmlParse(readLines(data$tz_url[i]), isURL=TRUE)[["string(//time_zone_name)"]] 
} 

С помощью этого метода я могу получить URL-адреса для данных XML. Но когда я пытаюсь вытащить XML-данные в цикле for и добавить часовой пояс к фреймворку данных, он не делает этого для всех записей ... (фактически, только 10 записей за раз с перерывами).

Кто-нибудь знает какие-либо альтернативные методы или пакеты, чтобы получить три символьных часовых пояса (т. Е. EST) примерно для 9 миллионов записей относительно быстро? Ваша помощь очень ценится. Или еще лучше, если у вас есть идеи о том, почему код, который я использовал выше, не работает, я был бы признателен за это.

+0

Если вы ищете generlized часового пояса, считаете ли вы его вычислением по долготе? 360 градусов на 24 часа. Это может быть достаточно близко в зависимости от ваших потребностей. – Dave2e

ответ

2

Список методов преобразования широты и долготы в часовой пояс см. this post. Эти механизмы вернут идентификатор часового пояса IANA/Olson, такой как America/Los_Angeles.

Однако вы, конечно же, не хотите делать 9 миллионов индивидуальных HTTP-вызовов. Вы должны попытаться сгруппировать записи в разные местоположения, чтобы свести к минимуму количество поисковых запросов. Если они действительно случайны, то у вас по-прежнему будет большое количество местоположений, поэтому вам следует рассмотреть автономные механизмы, описанные в предыдущем сообщении (т. Е. Используя шейп-файл tz_world с каким-то geospatial lookup mechanism).

Как только у вас есть идентификатор часового пояса IANA/Olson для местоположения, вы можете использовать функциональные возможности R-зоны (as.POSIXct, format и т. Д.) С каждой соответствующей меткой времени, чтобы получить аббревиатуру.

Однако следует признать, что сами названия самих часовых поясов can be somewhat ambiguous. Они полезны для чтения человеком, но не более того.

+0

Итак, я думаю, что нет никаких идей для tz_world в R? Я видел ваш другой пост, но там нет ничего относительно использования шейп-файла в R. –

+0

Я его не видел. Не означает, что это где-то не там. Вы все еще можете использовать эту технику, вам просто нужно выяснить, как использовать одну из R-геопространственных библиотек, таких как rgdal. –

0

Я написал пакет googleway для доступа к API карт Google. Вам потребуется действующий ключ API (и, для Google, чтобы обрабатывать 9 миллионов звонков вы должны платить за него, как их бесплатно один покрывает только 2500)

library(googleway) 

key <- "your_api_key" 

google_timezone(location = c(-37, 144), 
       key = key) 


$dstOffset 
[1] 0 

$rawOffset 
[1] 36000 

$status 
[1] "OK" 

$timeZoneId 
[1] "Australia/Hobart" 

$timeZoneName 
[1] "Australian Eastern Standard Time" 
Смежные вопросы