2017-08-30 1 views
0

Ich versuche, ein GeoTiff aus einer Flugblattkarte zu erstellen. Ich habe versucht, online Antworten darauf zu finden, aber keine von ihnen scheint für mich zu funktionieren. Ich bin ziemlich neu mit der Verwendung von R. Die Geodaten sind eine 2000 * 10-Matrix, wo der Titel, die Länge und Breite gefunden wird. Hier ist mein Code:Erstellen eines GeoTiffs aus der Flugblattkarte

install.packages('leaflet') 
install.packages('rgdal') 
install.packages('raster') 
install.packages('sp') 


library(leaflet) 
library(raster) 
library(rgdal) 
library(raster) 
library(sp) 


sites <- data.frame(Name=(geodata[,2]),Long=(geodata[,10]),Lati=(geodata[,9])) 

ma <- leaflet() 
ma <- addTiles(ma) 
ma <- addMarkers(ma, lng=sites$Long, lat=sites$Lati, popup=sites$Name) 
ma 

rast <- writeRaster(ma, filename="Worldmap.tif", format="GTiff") 

Es ist der letzte Schritt „writeRaster“, das nicht funktioniert. Die Fehlermeldung, die ich bekomme, sieht so aus:

Error in (function (classes, fdef, mtable) : 
unable to find an inherited method for function 'writeRaster' 
for signature '"leaflet", "character"' 

Irgendeine Idee wo der Fehler sein könnte?

Antwort

1

Leaflet basiert auf einer JavaScript-Bibliothek und erzeugt dynamische Web-Maps.

Es gibt keine direkte Methode zum Speichern einer dynamischen Karte als statische Karte, wie Geotiff oder Png. Wenn Sie es nicht automatisch machen müssen, können Sie das Bild einfach in RStudio exportieren, was Ihnen die Möglichkeit gibt, als PNG, JPEG oder BMP zu speichern.

Ansonsten gibt es einige Abhilfen, wo Sie die Broschüre Karte als HTML-Datei speichern und dann kratzen die Informationen mit der Bibliothek webshot oder mapview zum Beispiel einer Bilddatei, wie png zu erstellen. Webshot und Mapview können Sie Dateien als PNG, PDF oder JPEG speichern.

library(leaflet) 
rand_lng = function(n = 10) rnorm(n, -93.65, .01) 
rand_lat = function(n = 10) rnorm(n, 42.0285, .01) 
ma <- addMarkers(ma, lng=rand_lng(50), lat=rand_lat(50), popup="a") 

## With webshot and htmlwidgets:  
library(webshot) 
saveWidget(ma, "temp.html", selfcontained = FALSE) 
webshot("temp.html", file = "Rplot.png", cliprect = "viewport") 

## With mapview 
library(mapview) 
mapshot(ma, file = "Rplot.png", remove_url = TRUE) 

einen Blick auf this aswell nehmen.

Wenn Sie wirklich GeoTiff benötigen, müssten Sie das Bild erneut in R laden, es in ein Raster konvertieren und dann als GeoTiff speichern. Hier ist ein kurzes Beispiel. Sie müssen Ihren Umfang anpassen und ein Referenzsystem hinzufügen. Und vielleicht kontrollieren Sie die Werte des Rasters, da ich nicht genau weiß, wie die Bilddaten in die Matrix geladen werden. Es scheint, dass mit dieser Konvertierung viele Informationen verloren gehen.

library(png) 
library(raster) 
img <- readPNG("pathto/staticImage.png") 

img[img==1]=NA 
ar2mat <- matrix(img, nrow = nrow(img), ncol = ncol(img)) 
## Define the extent 
rast = raster(ar2mat, xmn=0, xmx=1, ymn=0, ymx=1) 
## Define the spatial reference system 
proj4string(rast) <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs") 

plot(rast); extent(rast) 
writeRaster(rast, "pathto/png2tif.tif", format="GTiff", overwrite=TRUE) 
Verwandte Themen