2016-05-24 16 views
0

Ich habe etwa 9 Millionen Datensätze mit Längen- und Breitengrad, zusätzlich zum Zeitstempel in EST. Ich möchte die Breite und Länge verwenden, um die entsprechende regionale Zeitzone zu erzeugen, von der ich dann alle diese Zeiten für die relevante Zeitzone anpassen möchte.Verwenden von Längen- und Breitengrad zum Generieren der Zeitzone

I hat versucht GeoNames

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

Jedoch verwenden, dies gibt die folgenden Fehler:

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

hat ich versucht, ein Verfahren, in this post beschrieben zu verwenden.

Mit dieser Methode kann ich die URLs für die XML-Daten abrufen. Aber wenn ich versuche, die XML-Daten in eine for-Schleife zu ziehen und die Zeitzone an den Datenrahmen anzuhängen, tut es das nicht für alle Datensätze ... (tatsächlich nur zeitweise nur 10 Datensätze).

Kennt jemand alternative Methoden oder Pakete, um die dreistellige Zeitzone (d. H. EST) für etwa 9 Millionen Datensätze relativ schnell zu erhalten? Deine Hilfe ist sehr Willkommen. Oder besser, wenn Sie Ideen haben, warum der Code, den ich oben verwendet habe, nicht funktioniert, würde ich das auch schätzen.

+0

Wenn Sie einen generlized Zeitzone suchen, Denken Sie darüber nach, es aus der Länge zu berechnen? 360 Grad von 24 Stunden. Es könnte nahe genug sein, abhängig von Ihren Bedürfnissen. – Dave2e

Antwort

2

Eine Liste der Methoden zum Konvertieren von Breiten- und Längengrad in Zeitzone finden Sie unter this post. Diese Mechanismen geben den IANA/Olson-Zeitzonenbezeichner zurück, z. B. .

Allerdings wollen Sie sicherlich nicht 9 Millionen einzelne HTTP-Aufrufe machen. Sie sollten versuchen, die Datensätze an bestimmten Speicherorten zu gruppieren, um die Anzahl der Suchvorgänge zu minimieren. Wenn sie wirklich zufällig sind, haben Sie immer noch eine große Anzahl von Speicherorten, daher sollten Sie die im vorherigen Post beschriebenen Offline-Mechanismen in Betracht ziehen (d. H. Das Shapefile tz_world mit einer Art geospatial lookup mechanism verwenden).

Sobald Sie die IANA/Olson-Zeitzonenkennung für den Standort haben, können Sie die Zeitzonenfunktionalität von R (as.POSIXct, format usw.) mit jedem entsprechenden Zeitstempel verwenden, um die Abkürzung zu erhalten.

Allerdings, erkennen Sie diese Zeitzone Abkürzungen selbst can be somewhat ambiguous. Sie sind nützlich für die menschliche Lesbarkeit, aber nicht viel anderes.

+0

Also ich denke, es gibt keine Ideen für tz_world in R? Ich habe deinen anderen Post gesehen, aber da ist nichts in Bezug auf die Verwendung des Shapefiles in R. –

+0

Ich habe noch keinen gesehen. Bedeutet nicht, dass es nicht irgendwo da draußen ist. Sie können diese Technik immer noch verwenden, Sie müssen nur herausfinden, wie Sie eine der R-Geospatial-Bibliotheken wie rgdal verwenden. –

0

Ich habe das Paket googleway geschrieben, um auf Google Maps API zuzugreifen. Sie werden einen gültigen API-Schlüssel benötigen (und für Google 9.000.000 Anrufe bearbeiten Sie dafür bezahlen müssen, werden als ihre einzige Freies deckt 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"