是否在QGIS中加载OpenStreetMap数据?


36

在QGIS 1.8中,我使用openstreetmap插件从服务器请求数据,或打开一个.osm XML文件,该文件在QGIS中产生了3层(多边形,折线和点)。

这很棒(给出或接受严重影响我正在处理的新映射区域的64位错误),但是如何在QGIS 2.x中做到这一点?

我找不到有关它的任何更新文档。

在向量菜单中,我尝试从osm服务器导入,得到一个.osm文件,但随后被卡住了。有一个用于加载XML文件的菜单选项,但它会生成一个spacespaceite db,当我尝试将其添加为Spaceiteite图层时,显然只有非几何表。如果打开属性表,则可以看到节点ID,方式等,但无法弄清楚如何实际使用它们。

我还尝试过从.osm XML文件中添加矢量层。我得到一个gpsbabel窗口,该窗口什么也不显示,最后在QGIS中显示一条无效的数据源消息。


2
汤姆,我写了一个分步说明,以在QGIS中获取OSM数据。希望对于初学者来说,这很简单。qgistutorials.com/en/docs/downloading_osm_data.html
spatialthoughts

这是一个不错的样式(带有不错的设置说明):github.com/yannos/Beautiful_OSM_in_QGIS它用于PostGIS(不是Spatialite)。
kontextify

尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。- 来自点评
csk

Answers:


40

QGIS 3.x的更新:由于许多未解决的错误,QGIS 2中删除了来自QGIS 2的旧OSM导入程序。QuickOSM插件还可以读取osm原始文件。您可以改用用户图层-添加图层-添加矢量图层。在这种情况下,如http://gdal.org/drv_osm.html所述,将使用GDAL打开OSM数据。


QGIS 2.x中,涉及3个步骤

  1. 获取OSM文件,您可以使用josm或立交桥或任何其他来源获取它。它必须是有效的xml。您也可以从qgis Vector> OpenStreetMap> Download OSM Data菜单下载它,但是有时它不会给出结果。我建议使用天桥turbo
  2. 如您所说,从矢量> OpenStreetMap>从XML导入拓扑,这将产生一个具有非几何表的spacespaceite数据库。我认为这是拓扑。
  3. 最后,您可以通过“ 向量”>“ OpenStreetMap”>“将拓扑导出到Spatialite”来获取数据,这里您需要提供上面制作的db文件,就像在qgis 1.8中一样,您可以选择点,线或多边形。在“ 导出的标签”部分的下方,您可以加载文件中包含的所有标签,并仅选择所需的标签。这是1.8版中的附加功能。

如果需要所有节点,则将图层添加到地图,然后使用其他选项重复步骤3。

http://wiki.openstreetmap.org/wiki/QGIS#QGIS2_OpenStreetMap_Vectors


4
感觉非常复杂,但是确实可以。为了清楚起见,在第3步之后,您仍然需要添加spacespaceite图层,连接到创建的db,然后选择在第3步中创建的图层以最终查看结果。谢谢你的帮助!
洛朗S

对我来说,图层是自动创建和添加的。在第2步中建立了到数据库的连接(除非您取消选中它)。
AndreJ 2013年

15

我发现使用插件下载OSM数据并进行导入和导出动作非常繁琐。这就是为什么我写了一个不同的解决方案的原因:http : //anitagraser.com/2014/05/31/a-guide-to-googlemaps-like-maps-with-osm-in-qgis/

摘要:

原始OSM文件可能非常庞大。因此,绝对推荐下载压缩的二进制.pbf格式而不是XML .osm格式。作为下载源,我建议使用Geofabrik

对于第一个预处理步骤:提取感兴趣的区域,我们可以使用Osmosis:

C:\Users\anita_000\Geodata\OSM_Noirmoutier>..\bin\osmosis.bat --read-pbf pays-de-la-loire-latest.osm.pbf --bounding-box left=-2.59 bottom=46.58 right=-1.44 top=47.07 --write-xml noirmoutier.osm

虽然QGIS也可以加载.osm文件,但我发现,如果将.osm文件转换为spacespaceite,性能和对属性的访问将大大提高。

C:\Users\anita_000\Geodata\OSM_Noirmoutier>ogr2ogr -f "SQLite" -dsco SPATIALITE=YES noirmoutier.db noirmoutier.osm

在QGIS中,我们可以使用“添加SpatiaLite图层”来加载点,线和多边形。加载spacespaceite表时,存在一些问题:

  • 没有陆地多边形。而是有“海岸线”线要素。
  • 大多数河流多边形都丢失了。而是有“ riverbank”线路功能。

创建丢失的河流多边形并不重要:

  1. 选择waterway = riverbank的所有线。
  2. 使用处理工具箱中的“多边形”工具可根据所选河岸线所包围的区域自动创建多边形。(请注意,默认情况下,“处理”仅对所选功能起作用,但是可以在“处理”设置中更改此设置。)

创建陆地多边形(或由于某些原因而更喜欢海多边形)的过程要复杂一些,因为大多数情况下海岸线不会关闭,原因很简单,我们经常在主要大陆上砍一块土地。因此,在使用多边形工具之前,我们必须关闭该区域。为此,我建议您首先使用“ other_tags”(例如“%” natural” =>“ coastline”%')选择海岸线,然后从该选择中创建一个新图层(将选择另存为…)并进行编辑(不要忘记)以启用捕捉!)以添加线条以关闭该区域。然后多边形化。


如果您运行的是相当可靠的计算机,并且希望ogr2ogr阶段在下一个冰河世纪之前完成,请添加--config OGR_SQLITE_SYNCHRONOUS OFF
2014年

6

如果您不喜欢该插件,请使用Overpass API提取所需的OSM数据,然后使用Add Vector Layer(启用All files筛选器)将结果添加到QGIS 。

QGIS 2.0使用GDAL 1.10的ogr2ogr OSM导入程序,该程序做得很好。

目前,关系支持似乎比插件更好。

只要确保您完全下载了方法和关系,即方法的所有节点以及关系的所有成员及其所有节点。


4

您知道,您不需要将数据放入SpatialLite。您可以:

  1. 下载数据(“向量”>“ OpenStreetMap”>“下载数据”,创建一个.osm文件)
  2. 将数据(.osm文件)作为矢量层加载(“图层”>“添加矢量层”)。选择文件后,它将询问您要添加的图层(因为GDAL为每种类型制作单独的文件:点,线,多线,多多边形,GeomCollection)。选择所需的内容并加载它。

这可以以某种方式起作用,但是似乎不能基于标签来分离图层。因此,基本上道路和河流最终位于同一线层中,如果您想对结果数据进行分析,这并没有太大帮助。
洛朗S

从您的问题尚不清楚,一旦导入数据,您将如何处理数据。当然,您可以从QGIS中的数据中选择所需的功能。如上所述,如果您知道只需要某些数据(并且不是很大的区域),那么使用Overpass下载数据可能会更好,因为您可以预选某些功能。我发现Overpass Turbo是开发查询的一种用户友好方式。:这是在边框中的所有高速公路的例子overpass-turbo.eu/s/2VX
neuhausr
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.