Объединять (объединять) личные данные шейп-файла с данными OSM

11

Фон

Загрузил данные Alberta OSM из Geofabrik и запустил их на частном сервере Linux с использованием PostgreSQL 9.1, PostGIS 2.0, Mapnik 2.1.0, osm2pgsql, Apache 2, mod_tile, renderd и OpenLayers:

Данные были импортированы osm2pgsqlследующим образом:

osm2pgsql -W -K -S /usr/local/share/osm2pgsql/default.style -d osm alberta.osm.bz2

проблема

Данные OSM для Альберты неполны. Мне дали набор шейп-файлов, которые улучшают данные OSM:

City.dbf, City.prj, City.sbn, City.sbx, City.shp, City.shp.xml, City.shx

Плюс дополнительные шейп-файлы для деревень, городских районов, границ муниципального района и так далее. Я успешно импортировал шейп-файлы в PostgreSQL с помощью плагина pgAdmin . City.prjФайл описывает его проекцию следующим образом :

GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]

Данные шейп-файлов и данные OpenStreetMap (OSM) имеют свою собственную базу данных, но я считаю, что хочу импортировать данные шейп-файлов в базу данных OSM. (Это частный сервер и локальная копия данных OSM; данные шейп-файла не могут быть легально переданы.)

Обновление № 1

Чтобы было ясно, шейп-файлы не содержат дорог: только границы муниципалитетов (которые определенно не являются частью данных OSM), города (некоторые из которых являются частью данных OSM) и границы городов для крупных городов (некоторые из которых могут конфликт с данными OSM).

Вопрос

Как объединить данные шейп-файла с данными OSM, чтобы новые города появлялись на карте?

Примечание. Моя основная задача - устранить дубликаты данных (например, Edmonton указан как в OSM, так и в заготовленных шейп-файлах).

Ссылки по теме

Спасибо!

Дейв Джарвис
источник
Загрузите ваши шейп-файлы в postgis, используя теги osm - wiki.openstreetmap.org/wiki/Canadian_tagging_guidelines#Naming, а затем обновите ваш сервер плиток, чтобы загрузить все новые функции в виде данных в стиле osm.
Mapperz

Ответы:

5

Вступление

Это, вероятно, потребует значительного количества ручной работы для обнаружения и удаления дублированных данных. Когда вы обнаруживаете и разрешаете дублирующиеся данные; вам нужно, чтобы оба источника были в одном и том же географическом формате: шейп-файл, базы данных PostGIS или данные OSM.

Workflow

Следующий рабочий процесс основан на использовании обоих источников данных в качестве OSM перед объединением и разрешением дублирующих данных.

Есть несколько вариантов конвертации данных в OSM:

A]

  1. Преобразуйте данные шейп-файла в OSM так, как вам нравится. Версии ogr2ogr, выпущенные в 2013 году или позже (версия 1.10 или выше, IIRC), также могут конвертировать SHP в OSM. Есть также, ogr2osmкак вы заметили: есть несколько разных версий ogr2osm, независимо от того, какую вы используете - я предпочитаю pnorman , она самая современная. Неважно, что, убедитесь, что файлы перевода совместимы с версией ogr2osm, которую вы используете (для простоты, те, с которыми я ссылался, должны быть совместимы с версией ogr2osm). Смотрите здесь как примеры для файлов перевода, которые совместимы с ogr2osm pnorman.

Убедитесь, что файл перевода содержит всю информацию, которую вы хотите получить в своем шейп-файле. Файл перевода преобразует ваши типы и атрибуты шейп-файла в то, что OSM называет тегами , которые состоят из ключей и значений.

1a. запустить ogr2osm.

  1. Откройте JOSM , скачайте плагин Conflation

  2. Ваши данные gov теперь являются файлом osm. Откройте josm, File> open. Ваши данные будут в виде слоя.

  3. Если у вас уже есть данные OSM, хранящиеся локально на вашем компьютере, откройте их в josm, они также откроются как новый слой.

  4. Объединение этих двух источников данных вместе и устранение дублирующих данных называется объединением . Запустите плагин conflation и разрешите все конфликты.

Если в JOSM не хватает памяти (например, при использовании больших файлов), разделите типы атрибутов и выполните этот рабочий процесс несколько раз, каждый из которых имеет различный тип данных (например, границы и виды использования земли; шоссе; здания), а затем, наконец, объедините файлы OSM вместе, используя осмий или другой инструмент.

B. JOSM также может читать шейп-файлы, хотя поддержка SHP не идеальна, и этот метод предполагает, что шейп-файл может быть загружен полностью в память ...

  1. Запустите JOSM.
  2. Откройте шейп-файл (например, filename.shp).
  3. Выбрать все.
  4. В JOSM измените атрибуты и свойства, которые были импортированы из SHP, и измените их так, чтобы каждый атрибут соответствовал тегу OSM.
  5. Сохранить как формат OSM.
  6. Продолжить с А4 и сопоставить

Импортировать как OSM

Импортируйте данные OpenStreetMap в систему следующим образом:

  1. Перейдите в каталог, содержащий файлы OpenStreetMap (OSM), преобразованные с помощью JOSM.
  2. Выполните следующие команды в базе данных:
    СОЗДАТЬ РАСШИРЕНИЕ hstore;
    osm2pgsql -j -W \
              -d osm filename.osm

Параметр -jявляется ключевым, так как он инструктирует osm2pgsql импортировать теги в hstoreстолбец, сохраняя базовую структуру данных и импортируя все теги в базу данных.

Создать слой Mapnik

Чтобы данные отображались на карте, добавьте слой и стиль для этого слоя. Это может быть так просто:

  1. Редактировать mapnik-stylesheets/osm.xml.
  2. Вставьте следующий XML-код перед закрывающим </Map>тегом ...

...

<Layer name="prefix_zone" status="on" srs="&osm2pgsql_projection;">
  <StyleName>zones</StyleName>
  <Datasource>
    <Parameter name="table">
    (select way from prefix_line order by tags desc, z_order) as zones
    </Parameter>
    &datasource-settings;
  </Datasource>
</Layer>

Создать стиль Mapnik

Продолжая из предыдущего раздела:

  1. Найдите последний </Style>тег (около строки 3350).
  2. Вставьте следующий XML-код перед &layer-shapefiles;директивой:

...

<Style name="zones">
  <Rule>
    &maxscale_zoom1;
    &minscale_zoom19;
    <LineSymbolizer stroke="#0065BD" stroke-width="2.5" />
  </Rule>
</Style>

Roadmatcher

Roadmatcher это еще один инструмент, который может быть полезным

Будет.
источник
OpenJUMP 1.5.1 не совместим с RoadMatcher 1.4. OpenJUMP 1.3.1, который может использовать RoadMatcher 1.4, не совместим с PostGIS 2.0 (потому что OpenJUMP вызывает, find_extentа не st_find_extent). В базе данных установлен PostGIS 2.0.
Дэйв Джарвис
Плагин JOSM OpenData считывает шейп-файлы: wiki.openstreetmap.org/wiki/JOSM/Plugins/OpenData
Дейв Джарвис,