Open potrykus opened 4 weeks ago
Related discussion: https://github.com/r-tmap/tmap/issues/383
Thanks. Avenza is an app for mobile use of geo-referenced PDFs (including in a disconnected back-country hiking use case.) They are an end-user platform for US Bureau of Land Management final products https://www.blm.gov/maps/georeferenced-PDFs (expand "How to download and use"). Right now those two major players might be georeferencing maps manually, and may be locked into an old ArcGIS workflow: Avenza-ready Google Earth imagery georeferenced PDF in QGIS. (QGIS is a GIS system that cannot compete with ArcGIS for feature-completeness.)
Given this technological state, tmap georeferenced output would be a powerful and potentially widely-consumed application of the R sf + tmap architecture.
Thx for this input @potrykus
Just tested, and it is already possible in sf
:
library(sf)
library(tmap)
data(World)
st_write(World, "World.pdf", driver = "PDF")
So now the question is how replace the sf plotting mechanism with tmap. Any ideas @edzer or @tim-salabim ?
If someone could help me with the gdal
part, I am happy to implement the other part (passing on the map coordinates of the reference objects).
So now the question is how replace the sf plotting mechanism with tmap.
st_write()
only writes data, it doesn't plot: there are no visual elements passed on to it (colors, symbols, line properties etc). If you want to create a GeoPDF from a tmap plot, you'd have to add the geo elements to R's pdf driver - I'd guess these are offset & scale for x and y axes, and a coordinate reference system.
Can I use st_write
for that purpose? E.g. like this:
tm = tm_shape(World) + tm_poygons()
tmap_save(tm, "World.pdf")
#within tmap_save:
pdf(file)
print(tm)
dev.off()
sf::st_write(?, "World.pdf", offset = , scale = , crs = )
Is so, do you know via which of its arguments these can be passed on (...
, dataset_options
, layer_options
, ... ?
I think st_write()
does offset, scale and CRS by itself, as it is an OGR (GDAL) driver; it however takes an sf
object, not a tmap
object.
I cannot add much here, as mapshot
does only simple pdf rendering via png screenshots of the html. The only thing I found is
https://gdal.org/en/latest/drivers/vector/pdf.html#feature-style-support
Oh, yes, and there's the raster driver too: https://gdal.org/en/latest/drivers/raster/pdf.html#raster-pdf
Oh, yes, and there's the raster driver too: https://gdal.org/en/latest/drivers/raster/pdf.html#raster-pdf
Yes, but if I understand that correctly, outpu can either be RGB(A) or not. In case it's not I guess it'll be greyscale?
tmap produces PDFs wih clean vector data. Shouldn't tmap automatically georeference that output - i.e. make its output geo-enabled? Here is a python overview: https://gis.stackexchange.com/questions/49646/is-it-possible-to-georeference-an-existing-un-georeferenced-pdf. This is what I found for the R raster package: https://rpubs.com/Rubio-Polania/1123497.