Skip to content

使用 GDAL 工具创建地理空间 PDF (Geospatial PDF)

来源: https://spatialthoughts.com/2015/10/25/geopdf-gdal/

GeoPDF 是一种独特的数据格式,它将 PDF 的便携性带入了地理空间数据。GeoPDF 文档可以展示栅格和矢量数据,并保留地理参考信息。对于非 GIS 人员来说,这是一种无需 GIS 软件即可使用 GIS 数据的有用格式。虽然 GeoPDF 是一种专有格式,但我们在开放的 Geospatial PDF 格式中有一个非常接近的替代方案。GDAL 从 1.10 版本开始增加了对创建 Geospatial PDF 文档的支持。在这篇文章中,我将展示如何创建一个包含多个矢量图层的 GeoPDF 文档。

获取工具

Windows

OsGeo4W 是在 Windows 上安装 GDAL 的最佳方式。默认安装会提供支持 PDF 格式的 GDAL 工具。你可以通过安装中包含的 OsGeo4W Shell 使用 GDAL 工具。

Mac

KyngChaos 为 Mac 提供了一个方便的 GDAL 安装程序。你还需要安装额外的 GeoPDF 插件 以启用对 PDF 格式的支持。

安装完成后,将 GDAL 库的路径添加到你的 .bash_profile 文件中,以便能够从终端轻松使用命令。启动终端并输入以下命令。

echo 'export PATH=/Library/Frameworks/GDAL.framework/Programs:$PATH' >> ~/.bash_profile
source ~/.bash_profile

Linux

安装说明因发行版而异。在 Ubuntu 上,你可以安装 gdal-bin 包。

sudo apt-get install gdal-bin

验证 GDAL 安装

如果你已经安装了 GDAL,或者刚刚安装好,请在终端中运行以下命令,以验证你的 GDAL 安装是否正常工作并支持 GeoPDF 格式。

gdalinfo --formats | grep -i pdf

如果你在输出中看到 Geospatial PDF —— 那么你已经准备好了。如果你没有得到任何输出或收到错误,说明你的安装配置不正确。

获取数据

在这个例子中,我选择使用 MapZen 的 OpenStreetMap Metro Extracts。下载你选择城市的 Shapefile (OSM2PGSQL SHP 格式)。本例中我使用的是班加罗尔市(Bangalore)的提取数据。将下载的文件解压到计算机上的一个文件夹中。

步骤

从一堆 Shapefile 创建 GeoPDF 文件的过程只需要运行一个 gdal_translate 命令。但我们需要准备数据并找出正确的命令行选项。所以请跟随下面的步骤来理解如何得出最终的命令 —— 或者直接滚动到底部查看最终的命令行。

latuviitta.org 有一份 全面的概述,介绍了通过 GDAL 创建 GeoPDF 的所有可用选项。以下步骤是该指南的改编和简化版本。

  • 第一步是创建一个 .vrt 文件,用于容纳我们想要在 PDF 中包含的所有矢量图层。如果你只需要 PDF 中的单个图层,你可以跳过创建 .vrt 文件,直接引用该图层代替 VRT。注意 VRT 文件中的 <SrcSQL> 标签。这是为了过滤掉所有 'name' 字段为空的要素。你可以省略它或根据你的数据集进行修改。将此文件命名为 osm.vrt 并将其保存在与数据相同的文件夹中。
<OGRVRTDataSource>
    <OGRVRTLayer name="roads">
        <SrcDataSource>bengaluru_india_osm_line.shp</SrcDataSource>
        <SrcLayer>bengaluru_india_osm_line</SrcLayer>
        <SrcSQL dialect="sqlite">SELECT name, highway, geometry from bengaluru_india_osm_line where name is not NULL</SrcSQL>
        <GeometryType>wkbLineString</GeometryType>
        <LayerSRS>WGS84</LayerSRS>
    </OGRVRTLayer>
    <OGRVRTLayer name="pois">
        <SrcDataSource>bengaluru_india_osm_point.shp</SrcDataSource>
        <SrcLayer>bengaluru_india_osm_point</SrcLayer>
        <SrcSQL dialect="sqlite">SELECT name, geometry from bengaluru_india_osm_point where name is not NULL</SrcSQL>
        <GeometryType>wkbPoint</GeometryType>
        <LayerSRS>WGS84</LayerSRS>
    </OGRVRTLayer>
</OGRVRTDataSource>
  • GeoPDF 是一种可以在顶部叠加矢量的栅格格式。所以我们需要一个栅格图层作为底图。如果你有该区域的一些卫星图像或扫描的栅格图,你可以将其用作底图层,或者我们可以为矢量图层的范围创建一个空栅格。ogrtindex 命令从给定的输入图层创建一个边界框多边形。然后 gdal_rasterize 命令用给定的值填充此多边形并创建一个栅格。-tr 选项指定栅格的像素分辨率(以度为单位)。你可以调整它以获得所需的输出尺寸。cd 到你解压矢量图层的目录并运行以下命令。
cd Users\Ujaval\Downloads\bengaluru_india.osm2pgsql-shapefiles

ogrtindex -accept _different_schemas extent.shp osm.vrt

gdal_rasterize -burn 255 -ot Byte -tr 0.0001 0.0001 extent.shp bangalore.tif

  • 现在我们可以将空的 bangalore.tif 栅格转换为 PDF —— 叠加来自 osm.vrt 文件的矢量图层。
gdal_translate -of PDF -a_srs EPSG:4326 bangalore.tif bangalore.pdf -co OGR_DATASOURCE=osm.vrt -co OGR_DISPLAY_FIELD="name"

  • 转换完成后,你可以在任何 PDF 查看器中打开生成的 bangalore.pdf 文件。在 Adobe Acrobat 查看器中打开它,你可以看到地# 使用 GDAL 工具创建地理空间 PDF (Geospatial PDF)

来源: https://spatialthoughts.com/2015/10/25/geopdf-gdal/

GeoPDF 是一种独特的数据格式,它将 PDF 的便携性带入了地理空间数据。GeoPDF 文档可以展示栅格和矢量数据,并保留地理参考信息。对于非 GIS 人员来说,这是一种无需 GIS 软件即可使用 GIS 数据的有用格式。虽然 GeoPDF 是一种专有格式,但我们在开放的 Geospatial PDF 格式中有一个非常接近的替代方案。GDAL 从 1.10 版本开始增加了对创建 Geospatial PDF 文档的支持。在这篇文章中,我将展示如何创建一个包含多个矢量图层的 GeoPDF 文档。

获取工具

Windows

OsGeo4W 是在 Windows 上安装 GDAL 的最佳方式。默认安装会提供支持 PDF 格式的 GDAL 工具。你可以通过安装中包含的 OsGeo4W Shell 使用 GDAL 工具。

Mac

KyngChaos 为 Mac 提供了一个方便的 GDAL 安装程序。你还需要安装额外的 GeoPDF 插件 以启用对 PDF 格式的支持。

安装完成后,将 GDAL 库的路径添加到你的 .bash_profile 文件中,以便能够从终端轻松使用命令。启动终端并输入以下命令。

echo 'export PATH=/Library/Frameworks/GDAL.framework/Programs:$PATH' >> ~/.bash_profile
source ~/.bash_profile

Linux

安装说明因发行版而异。在 Ubuntu 上,你可以安装 gdal-bin 包。

sudo apt-get install gdal-bin

验证 GDAL 安装

如果你已经安装了 GDAL,或者刚刚安装好,请在终端中运行以下命令,以验证你的 GDAL 安装是否正常工作并支持 GeoPDF 格式。

gdalinfo --formats | grep -i pdf

如果你在输出中看到 Geospatial PDF —— 那么你已经准备好了。如果你没有得到任何输出或收到错误,说明你的安装配置不正确。

获取数据

在这个例子中,我选择使用 MapZen 的 OpenStreetMap Metro Extracts。下载你选择城市的 Shapefile (OSM2PGSQL SHP 格式)。本例中我使用的是班加罗尔市(Bangalore)的提取数据。将下载的文件解压到计算机上的一个文件夹中。

步骤

从一堆 Shapefile 创建 GeoPDF 文件的过程只需要运行一个 gdal_translate 命令。但我们需要准备数据并找出正确的命令行选项。所以请跟随下面的步骤来理解如何得出最终的命令 —— 或者直接滚动到底部查看最终的命令行。

latuviitta.org 有一份 全面的概述,介绍了通过 GDAL 创建 GeoPDF 的所有可用选项。以下步骤是该指南的改编和简化版本。

  • 第一步是创建一个 .vrt 文件,用于容纳我们想要在 PDF 中包含的所有矢量图层。如果你只需要 PDF 中的单个图层,你可以跳过创建 .vrt 文件,直接引用该图层代替 VRT。注意 VRT 文件中的 <SrcSQL> 标签。这是为了过滤掉所有 'name' 字段为空的要素。你可以省略它或根据你的数据集进行修改。将此文件命名为 osm.vrt 并将其保存在与数据相同的文件夹中。
<OGRVRTDataSource>
    <OGRVRTLayer name="roads">
        <SrcDataSource>bengaluru_india_osm_line.shp</SrcDataSource>
        <SrcLayer>bengaluru_india_osm_line</SrcLayer>
        <SrcSQL dialect="sqlite">SELECT name, highway, geometry from bengaluru_india_osm_line where name is not NULL</SrcSQL>
        <GeometryType>wkbLineString</GeometryType>
        <LayerSRS>WGS84</LayerSRS>
    </OGRVRTLayer>
    <OGRVRTLayer name="pois">
        <SrcDataSource>bengaluru_india_osm_point.shp</SrcDataSource>
        <SrcLayer>bengaluru_india_osm_point</SrcLayer>
        <SrcSQL dialect="sqlite">SELECT name, geometry from bengaluru_india_osm_point where name is not NULL</SrcSQL>
        <GeometryType>wkbPoint</GeometryType>
        <LayerSRS>WGS84</LayerSRS>
    </OGRVRTLayer>
</OGRVRTDataSource>
  • GeoPDF 是一种可以在顶部叠加矢量的栅格格式。所以我们需要一个栅格图层作为底图。如果你有该区域的一些卫星图像或扫描的栅格图,你可以将其用作底图层,或者我们可以为矢量图层的范围创建一个空栅格。ogrtindex 命令从给定的输入图层创建一个边界框多边形。然后 gdal_rasterize 命令用给定的值填充此多边形并创建一个栅格。-tr 选项指定栅格的像素分辨率(以度为单位)。你可以调整它以获得所需的输出尺寸。cd 到你解压矢量图层的目录并运行以下命令。
cd Users\Ujaval\Downloads\bengaluru_india.osm2pgsql-shapefiles

ogrtindex -accept _different_schemas extent.shp osm.vrt

gdal_rasterize -burn 255 -ot Byte -tr 0.0001 0.0001 extent.shp bangalore.tif

  • 现在我们可以将空的 bangalore.tif 栅格转换为 PDF —— 叠加来自 osm.vrt 文件的矢量图层。
gdal_translate -of PDF -a_srs EPSG:4326 bangalore.tif bangalore.pdf -co OGR_DATASOURCE=osm.vrt -co OGR_DISPLAY_FIELD="name"

  • 转换完成后,你可以在任何 PDF 查看器中打开生成的 bangalore.pdf 文件。在 Adobe Acrobat 查看器中打开它,你可以看到地图数据图层。你可以在图层面板中浏览要素,搜索任何属性值并缩放/平移地图。

  • GeoPDF 文件的另一个流行用途是使用诸如 Avenza PDF Maps 之类的程序将其用作离线底图。在手机上的 Avenza Maps 中加载 bangalore.pdf 文件,你可以使用 GPS 查看当前位置或在顶部追踪 GPS 路线。搜索功能也可以在 PDF 中的各个图层间工作。

你可以下载示例 bangalore.pdf Geospatial PDF 格式文件来亲自探索该格式。图数据图层。你可以在图层面板中浏览要素,搜索任何属性值并缩放/平移地图。

  • GeoPDF 文件的另一个流行用途是使用诸如 Avenza PDF Maps 之类的程序将其用作离线底图。在手机上的 Avenza Maps 中加载 bangalore.pdf 文件,你可以使用 GPS 查看当前位置或在顶部追踪 GPS 路线。搜索功能也可以在 PDF 中的各个图层间工作。

你可以下载示例 bangalore.pdf Geospatial PDF 格式文件来亲自探索该格式。