搜索和下载OpenStreetMap数据(QGIS3)

对于任何GIS任务而言,获取高质量数据都是必不可少的。免费和开放许可数据的一个绝佳资源是 OpenStreetMap(OSM)。OSM数据库包含所有类型的地图数据-街道,本地数据,建筑物多边形,管理边界等。可以通过 QuickOSM 插件以QGIS中的GIS格式访问OSM数据。本教程说明了搜索,下载和使用此插件的过程。

内容说明

我们将从OpenStreetMap数据库中提取伦敦所有酒吧和酒馆的位置,并将其保存为矢量层。

你还会学到这些

  • 如何合并多个矢量层。

操作流程

  1. 从QGIS官方插件存储库中搜索并安装 QuickOSM 插件。有关下载插件的说明,请参见 使用附加元件。请注意,在编写本教程时,此插件被标记为 Experimental,因此请确保在 Plugins 对话框的 Settings 选项卡中选中 也显示实验性插件。才能安装它。

../../_images/140.png
  1. 安装完成后,从 Vector-> QuickOSM-> QuickOSM … 启动插件。

../../_images/227.png
  1. Quick query 标签中,您可以设置过滤器以选择子集。OSM数据库中地图要素的属性存储为 标签。 标签用键和值表示。关键字是主题,值是特定形式。请参阅 本页,以获得各种功能标签的完整列表。酒吧使用标签 amenity:bar 表示,酒馆使用标签 amenity:pub 表示。我们将首先提取条。从下拉菜单中选择 amenity 作为 Key

../../_images/319.png
  1. 下拉菜单中选择 酒吧

../../_images/49.png
  1. 输入 London 作为 In 来将搜索限制在城市范围内。

../../_images/510.png
  1. 展开 Advanced 部分。在OSM数据模型中,要素是使用 节点,方式和关系 来表示的。由于我们对点要素感兴趣,因此只能选择 节点。点击 Run query

../../_images/610.png
  1. 使用 Overpass API 查询OpenStreetMap数据库的插件,并将数据转换为QGIS矢量层。

../../_images/710.png
  1. 查询完成后,切换到QGIS主窗口。您会看到一个新的名为 amenity_bar_london 的图层添加到了 Layers 面板中。画布将显示提取的条的位置。

../../_images/810.png
  1. 切换回 QuickOSM 窗口,并编辑查询以选择 pub 作为 Value。点击 Run query

../../_images/910.png
  1. 这次,插件将从OSM数据库中获取所有标记有 amenity:pub 的点。

../../_images/1010.png
  1. 查询完成后,新图层 amenity_pub_london 将添加到 Layers 面板。现在,我们有2个矢量层。这些是临时内存层,当我们退出QGIS后会丢失。让我们将它们合并到单个矢量层并将其保存到磁盘。转到 Processing ‣ Toolbox

../../_images/1113.png
  1. 搜索并找到 Vector general ‣ Merge vector layers 工具。双击以启动它。

../../_images/1211.png
  1. Merge Vector Layers 对话框中,单击 Input layers 旁边的 按钮。选择 amenity_bar_londonamenity_pub_london 层。点击 OK

../../_images/1310.png
  1. 点击 Merged 旁边的 按钮,然后选择 Save to GeoPackage

../../_images/148.png
  1. 浏览到要保存数据的目录,并将输出命名为 longon.gpkg

../../_images/158.png
  1. 输入 bars_and_pubs 作为 Layer name 名称。

../../_images/167.png
  1. 单击 Run 以执行合并过程。

../../_images/178.png
  1. 处理完成后,您将在 Layers 面板中看到一个新层 bars_and_pubs。您将看到该层是前两层中所有要素的并集。右键单击 bars_and_pubs 层,然后选择 Open Attribute Table

../../_images/187.png
  1. Attribute Table 中,您将看到该图层同时包含发布和酒吧便利设施类型以及这些场所的名称和其他属性。

../../_images/197.png
  1. 我们已经达到了提取伦敦酒吧和酒馆位置的目的。我们必须执行2个单独的查询才能获取相关数据并将其合并。这对我们的任务很好,但是在您可能需要执行复杂查询以为项目获取正确的数据集的情况下,您可能会遇到这种情况。幸运的是,QuickOSM插件提供了一种编写和执行自定义查询的方法。让我们看看如何为手头的任务编写一个单例查询。切换到 QuickOSM 窗口,然后单击 Show query

../../_images/206.png
  1. 插件将切换到 Query 标签。Overpass query 部分将显示根据用户输入构造的查询。此字段是可编辑的,并且可以输入任何查询。查询的格式为 天桥查询语言(QL)。 出于我们的目的,选择<query> … </ query> XML标记之间的部分并复制它。

../../_images/2111.png
  1. 将其粘贴到现有查询部分之后,并将值从 pub 更改为 bar。 以下是完整的查询,它将在单个查询中从两个标签中获取值。点击 Run query

<osm-script output="xml" timeout="25">
<id-query {{geocodeArea:London}} into="area_0"/>
<union>
    <query type="node">
        <has-kv k="amenity" v="pub"/>
        <area-query from="area_0"/>
    </query>
    <query type="node">
        <has-kv k="amenity" v="bar"/>
        <area-query from="area_0"/>
    </query>
</union>
<union>
    <item/>
    <recurse type="down"/>
</union>
<print mode="body"/>
</osm-script>
../../_images/228.png
  1. 查询完成后,您会看到一个新层 OsmQuery 已添加到 Layers 面板中。 该层包含代表伦敦的酒吧和酒馆的点。

../../_images/234.png