有没有可能在R或QGIS中导入.tpk地图文件,并将其用作shapefile?我需要从.tpk地图中提取特定位置的坐标,这些坐标可通过shapefile地图提取。我无法访问ArcGIS。
非常感谢任何指导!
有关.tpk的其他信息,请参见:https://pro.arcgis.com/en/pro-app/latest/help/sharing/overview/tile-package.htm
有没有可能在R或QGIS中导入.tpk地图文件,并将其用作shapefile?我需要从.tpk地图中提取特定位置的坐标,这些坐标可通过shapefile地图提取。我无法访问ArcGIS。
非常感谢任何指导!
有关.tpk的其他信息,请参见:https://pro.arcgis.com/en/pro-app/latest/help/sharing/overview/tile-package.htm
以下是我完成的步骤:
首先使用tpk转换工具将tpk文件转换为mbtiles格式,该工具可从https://github.com/consbio/tpkutils获取。
tpk export mbtiles 04010588800801.tpk 04010588800801.mbtiles
gdalinfo可以显示有关mbtiles文件的一些信息:
$ gdalinfo 04010588800801.mbtiles
Driver: MBTiles/MBTiles
Files: 04010588800801.mbtiles
Size is 23418224, 20166662
...
Metadata:
ZOOM_LEVEL=17
...
minzoom=0
maxzoom=17
...
gdal_translate
命令行或通过gdalUtils
软件包创建一个给定缩放级别的GeoTIFF,使用USE_BOUNDS=NO
将输出限制在只有瓷砖存在的区域内:gdal_translate -oo ZOOM_LEVEL=17 -oo USE_BOUNDS=NO 04010588800801.mbtiles zoom17.tiff
gdalUtils
包:
gdal_translate("04010588800801.mbtiles","z17.tiff",
oo=c("USE_BOUNDS=NO","ZOOM_LEVEL=17"))
> z17 = raster::stack("z17.tiff")
[ignore CRS warnings...]
> plotRGB(z17)
请注意,这是一张高分辨率的图片,因此您无法阅读标签,但如果您放大(或加载到QGIS中并在那里进行交互),则可以阅读标签。以下是在QGIS中对17级别进行极端缩放,显示分辨率限制的示例:
请记住,这只是栅格图像数据,因此如果您想要这些点的坐标,您需要在QGIS中创建一个新图层,并在图像上手动创建一个点数据集。如果这是您想要的,则强烈建议您尝试从供应商获取矢量数据,而不必做所有这些工作!等级13:
等级12:
从.mbtiles
文件中读取的一种更直接的方法。使用stars
包,它允许您传递GDAL选项:
s = stars::read_stars("04010588800801.mbtiles",
options=c("USE_BOUNDS=NO","ZOOM_LEVEL=17"), proxy=FALSE)
rs = as(s,"Raster")
raster::plotRGB(rs)
需要使用proxy=FALSE
,否则在使用as(..,"Raster")
进行转换时,输出会恢复到全球级别17缩放栅格的20166662x23418224维度。可能是stars中的错误。无论如何,这样可以让你获得缩放后的栅格图像,而不必在任何地方使用gdal_translate
。
library(terra); r = rast("04010588800801.mbtiles", opts=c("USE_BOUNDS=NO","ZOOM_LEVEL=17"))
? - Robert Hijmans在@Spacedman的回答基础上,使用他创建的tpk
文件,我使用terra
包展示了一系列缩放级别。
library(terra)
plotm <- function(zoom, e=NULL) {
# read file with GDAL options
r = rast("04010588800801.mbtiles", opts=c("USE_BOUNDS=NO", paste0("ZOOM_LEVEL=",zoom)));
# declare the RGB channels
RGB(r) <- 1:4
plot(r, ext=e)
}
par(mfrow=c(3,3))
x <- lapply(6:14, plotm)
这里使用了一个扩展来稍微放大一点,以便更好地看到最高分辨率下的差异。
par(mfrow=c(2,2))
e <- ext(3935206, 3935662, 1085835, 1086294)
x <- lapply(14:17, plotm, e=e)
原始的tpk
文件在ArcMap中看起来与此相同。