2014-05-06 6 views
8

Ich würde wirklich einige Hilfe/Ideen über ein Problem, das ich mit ggmap und Staubblatt Aquarell habe.ggmap Staubblatt Aquarell Png Fehler

Ich halte die gleiche Fehlermeldung bekommen jedes Mal, wenn ich versuchen, eine Staubblatt Aquarell Karte zu erstellen:

"Error in readPNG(destfile) : file is not in PNG format" 

Hier sind einige Beispiele von einfachen Code, der diesen Fehler zurückgibt:

qmap("new-york", zoom=13, source="stamen", maptype="watercolor") 

oder

get_map(location='Auckland', source="stamen", maptype="watercolor", zoom=13) 

ich bin mit R-Version: [Standard] [64-bit] C: \ Programme \ R \ R-3.0.2 unter Windows 8

Ich weiß, ein paar Leute haben über das gleiche Problem geschrieben - aber nur ein paar - und ich habe keine Erklärungen/Vorschläge gesehen. Ich bin ratlos und frustriert und hoffe wirklich, dass jemand mit mehr Erfahrung als ich auf dieses Problem gestoßen ist (und es gelöst hat). Vielen Dank im Voraus oder jede Hilfe, die Sie zur Verfügung stellen können

Antwort

2

Ich hatte das gleiche Problem. Beachten Sie, wenn Sie

get_map(location='Auckland', source="stamen", maptype="watercolor", zoom=13) 

laufen Sie die URL erhalten (n) für die Fliesen Sie versuchen, in R. zu laden, wenn ich eine der URLs gegeben besuchen, leitet es an einen .jpg, statt ein .png. Daher ist der Fehler korrekt - die gelieferten Kacheln sind nicht im PNG-Format - sie sind JPGs.

Sieht aus wie dies ein Fehler in ggmap ist, der durch eine Änderung in der API von Stamen eingeführt wird. Es scheint, dass Version 2.4 dies angehen wird; Das GitHub-Commit finden Sie hier: https://github.com/dkahle/ggmap/commit/c7c48947360351f2e86ba13d0457aa3894b51d46.

14

Als vorübergehende Lösung können Sie die Änderung selbst vornehmen. Typ

get_stamenmap 

am R-Terminal. Dadurch wird der Code zum Laden der Karten ausgegeben. Sie müssen diesen Code bearbeiten und die Funktion im Namespace ersetzen.

Kopieren Sie den Code in einen Texteditor und durch die erste Zeile zu ändern, wenn eine Funktion wieder machen:

get_stamenmap <- function (bbox = 

Dann müssen Sie Laden JPEG-Dateien wechseln. Suche auf PNG und ändere den Text in jpg. Ich hatte zwei Instanzen, die aussahen wie der Text, den Sie in der Dateierweiterung brauchen, sie waren in Zeile 64 und 71 für mich.

In Zeile 75 gibt es die Funktion readPNG, die Sie in readJPEG ändern müssen.

tile <- readJPEG(destfile) 

Sie werden auch nicht anders realisieren die JPEG-Paket, das heißt Bibliothek (jpeg) seit ggmap ist, um sicherzustellen, müssen geladen werden diese jetzt benötigt. Ich brauchte auch Bibliothek (plyr), aber ich habe nicht herausgefunden, warum - ich tat dies, weil ich eine spätere Fehlermeldung über ldply() bekam, die ich in diesem Paket gefunden habe.

Fügen Sie nun diese "all new" -Funktion wieder in das Terminal ein.Danach müssen Sie die Funktion in dem Paket eingebettet zu überschreiben, die von der lokalen Kopie unterscheiden Sie einfach in das Terminal eingefügt, so müssen Sie dies eingeben:

assignInNamespace("get_stamenmap",get_stamenmap,ns="ggmap") 

Jetzt sollten Sie bereit sein, wieder verwenden QMap . Diese Prozedur funktionierte für mich und war einfacher als das erneute Kompilieren des Pakets mit denselben Änderungen oder das Herunterladen der neuesten Quelle, die diese Korrekturen und Kompilierungen enthält.

+1

Beste .... Stackoverflow ... Antwort .... überhaupt! (Erspart mir viel Zeit). –

1

Eine Alternative, bis die 2.4 in der Bibliothek veröffentlicht wird, ist das Laden der im Repository verfügbaren Funktionen und das Ersetzen der bereits im ggmap-Paket vorhandenen Funktionen (wie Michael antwortete). Ich lud nur den Inhalt von get_stamenmap.R und filedrawer.R (benötigt für url_lookup()) war so gut mit Aquarellkarten zu gehen.