Загрузка данных OpenStreetMap в QGIS?

36

В QGIS 1.8 я использовал плагин openstreetmap для запроса данных с сервера или открытия XML-файла .osm, который создал 3 слоя (многоугольники, полилинии и точки) в QGIS.

Это было здорово (дайте или возьмите 64-битную ошибку, которая сильно влияет на только что отображенную область, над которой я работаю), но как мне это сделать в QGIS 2.x?

Я не могу найти обновленную документацию об этом.

В векторном меню я попытался импортировать с серверов osm, я получил файл .osm, но потом я застрял. Есть пункт меню для загрузки XML-файла, но он выдает пространственную базу данных, которая, очевидно, имеет только негеометрические таблицы, когда я пытаюсь добавить его в качестве пространственного слоя. Если я открою таблицу атрибутов, я смогу увидеть идентификаторы узлов, пути и так далее, но я не могу понять, как на самом деле их использовать.

Я также попытался добавить векторный слой из файла .osm XML. Я получаю окно gpsbabel, которое ничего не показывает, и, наконец, сообщение о недействительном источнике данных в QGIS.

Лоран С
источник
2
Том, я написал пошаговую инструкцию для получения данных OSM в QGIS. Надеюсь, что это просто для начинающих. qgistutorials.com/en/docs/downloading_osm_data.html
spatialthoughts
Вот достойный стиль (с хорошими инструкциями по настройке): github.com/yannos/Beautiful_OSM_in_QGIS Он предназначен для PostGIS (не Spatialite).
kontextify
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. - Из обзора
csk

Ответы:

40

Обновление для QGIS 3.x : старый импортер OSM из QGIS 2 был удален в QGIS 3 из-за большого количества неразрешенных ошибок. Плагин QuickOSM также позволяет читать файлы osm raw. Вместо этого вы можете использовать пользовательский слой - Добавить слой - Добавить векторный слой. В этом случае данные OSM открываются с помощью GDAL, как описано в http://gdal.org/drv_osm.html.


В QGIS 2.x есть 3 шага

  1. Получить файл OSM, вы можете получить его с помощью JOSM или путепровода или любого другого источника. Это должен быть действительный xml. Вы также можете скачать его из меню qgis Vector> OpenStreetMap> Download OSM Data , но иногда это не дает результата. Я бы порекомендовал использовать турбо-эстакаду .
  2. Vector> OpenStreetMap> Import Topology from XML , это, как вы сказали, создаст пространственную базу данных с негеометрическими таблицами. Это я считаю топологией.
  3. Наконец, вы можете получить данные с помощью Vector> OpenStreetMap> Export Topology to Spatialite , здесь вам нужно предоставить файл БД, созданный выше, и, как и в qgis 1.8, у вас будет возможность выбрать точки, линии или полигоны . Ниже в разделе экспортируемых тегов вы можете загрузить все теги, содержащиеся в файле, и выбрать только те, которые вам нужны. Это дополнительная функция, чем в 1.8.

Слой добавляется на карту, если вы хотите, чтобы все узлы, таким образом, вы можете повторить шаг 3 с другими параметрами.

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

neogeomat
источник
4
Это невероятно сложно, но это работает. Для ясности, после шага 3 вам все еще нужно добавить слой пространственного объекта, подключиться к созданной вами базе данных и выбрать слои, созданные на шаге 3, чтобы наконец увидеть результат. Спасибо за вашу помощь!
Лоран С
Для меня слои были автоматически созданы и добавлены. Соединение с базой данных было установлено на шаге 2 (если вы не отметили его).
AndreJ
15

Я нашел, что загрузка данных OSM с помощью плагина и прохождение операций импорта и экспорта очень утомительны. Вот почему я написал другое решение: http://anitagraser.com/2014/05/31/a-guide-to-googlemaps-like-maps-with-osm-in-qgis/

Резюме:

Необработанные файлы OSM могут быть довольно большими. Вот почему определенно предпочтительнее загружать сжатый двоичный формат .pbf вместо формата XML .osm. В качестве источника загрузки я бы порекомендовал Geofabrik .

Для первого этапа предварительной обработки: извлекая интересующую область, мы можем использовать Осмос:

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 конвертируется в пространственный.

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

В QGIS мы можем загружать точки, линии и мультиполигоны, используя Добавить слой SpatiaLite. Когда мы загружаем таблицы пространственных объектов, возникают некоторые проблемы:

  • Здесь нет сухопутного полигона. Вместо этого есть особенности линии береговой линии.
  • Большинство речных полигонов отсутствуют. Вместо этого есть особенности линии берега реки.

Создание пропущенных речных полигонов не имеет большого значения:

  1. выберите все линии, где водный путь = берег реки.
  2. используйте инструмент Polygonize из набора инструментов обработки, чтобы автоматически создавать полигоны из областей, окруженных выбранными линиями берега реки. (Обратите внимание, что Обработка по умолчанию работает только для выбранных функций, но этот параметр можно изменить в настройках Обработки.)

Создание наземного полигона (или морского полигона, если вы предпочитаете это по какой-то причине) немного сложнее, так как большую часть времени береговая линия не будет закрыта по той простой причине, что мы часто вырезаем кусок земли из основного континента. , Поэтому, прежде чем мы сможем использовать инструменты Polygonize, мы должны закрыть область. Чтобы сделать это, я предлагаю сначала выбрать береговую линию, используя "other_tags" LIKE '% "natural" => "coastline"%', создать новый слой из этого выделения (сохранить выделение как…) и отредактировать его (не забудьте чтобы включить привязку!), чтобы добавить линии, чтобы закрыть область. Тогда полигонизируйте.

Подземье
источник
Если у вас достаточно надежный компьютер и вы хотите, чтобы этап ogr2ogr завершился до следующего ледникового периода, добавьте --config OGR_SQLITE_SYNCHRONOUS OFF.
scruss
6

Если вам не нравится плагин, извлеките необходимые данные OSM с помощью Overpass API и добавьте результат в QGIS с помощью Add Vector Layer(включающего All filesфильтра).

QGIS 2.0 использует импортер OSM из ogr2ogr из GDAL 1.10, который хорошо работает.

Поддержка отношений, кажется, лучше, чем плагин в настоящее время.

Просто убедитесь, что вы загружаете пути и отношения полностью , то есть все узлы путей и все члены отношений со всеми их узлами.

Andrej
источник
4

Вы знаете, вам не нужно помещать данные в SpatialLite. Вы можете просто:

  1. Загрузите данные (Vector> OpenStreetMap> Download Data, создайте файл .osm)
  2. Загрузите данные (файл .osm) как векторный слой (Layer> Add Vector Layer). После того, как вы выберете файл, он спросит вас, какие слои вы хотите добавить (поскольку GDAL создает отдельные файлы для каждого типа: Point, Line, MultiLine, MultiPolygon, GeomCollection). Выберите то, что вы хотите, и загрузите его.
neuhausr
источник
Это работает в некотором роде, но не похоже, чтобы разделить слои на основе тегов. Таким образом, в основном дороги и реки оказываются в одном слое Line, который не очень полезен, если вы хотите провести анализ полученных данных.
Лоран С
Из вашего вопроса не было ясно, что вы делали с данными после их импорта. Конечно, вы можете выбрать любые функции из данных в QGIS. Как упоминалось выше, если вы знаете, что вам нужны только определенные данные (и это не слишком большая область), загрузка данных с помощью Overpass, вероятно, будет лучше, поскольку вы можете предварительно выбрать только определенные функции. Я считаю Overpass Turbo удобным для пользователя способом разработки запросов. Вот пример всех дорог в габаритах: overpass-turbo.eu/s/2VX
neuhausr