将私有shapefile数据与OSM数据合并(合并)


11

背景

Geofabrik下载了Alberta OSM数据,并使其在使用PostgreSQL 9.1,PostGIS 2.0,Mapnik 2.1.0,osm2pgsql,Apache 2,mod_tile,rendered和OpenLayers的专用Linux服务器上运行:

数据使用osm2pgsql以下方式导入:

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

问题

艾伯塔省的OSM数据不完整。给了我一组可以改善OSM数据的shapefile

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

加上用于村庄,市区,市辖区边界等的其他shapefile。我已经使用pgAdmin 插件成功将shapefile导入到PostgreSQL中。该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]]

shapefile数据和OpenStreetMap(OSM)数据都有各自的数据库,但是我相信我想将shapefile数据导入OSM数据库。(这是专用服务器和OSM数据的本地副本; shapefile数据无法合法共享。)

更新#1

需要明确的是,shapefile不包含道路:只有市政边界(绝对不是OSM数据的一部分),城市(其中一些是OSM数据的一部分)和较大城市的城市边界(其中一些可能与OSM数据冲突)。

如何将shapefile数据与OSM数据合并,以使新城市出现在地图上?

注意:我主要关心的是解决重复数据(例如,OSM和采购的shapefile中都列出了Edmonton)。

相关链接

谢谢!


使用osm标签将您的shapefile加载到postgis中-wiki.openstreetmap.org/wiki/Canadian_tagging_guidelines#Naming,然后刷新您的图块服务器应以osm样式数据加载所有新功能。
Mapperz

Answers:


5

介绍

这可能需要大量的手动工作才能检测和删除重复的数据。当您检测并解决重复数据时;您将希望两个源都具有相同的地理格式:shapefile,PostGIS DB或OSM数据。

工作流程

以下工作流基于合并和解析重复数据之前将两个数据源都作为OSM。

有两种方法可以将数据转换为OSM:

一种]

  1. 根据需要将shapefile数据转换为OSM。2013年或更高版本(IIRC 1.10或更高版本)发布的ogr2ogr版本也可以将SHP转换为OSM。还有ogr2osm,你已经注意到:有一对夫妇不同的版本ogr2osm的,不管一个你使用的-我喜欢pnorman的,它是最先进的日期。无论如何,请确保翻译文件与您使用的ogr2osm版本兼容(为简单起见,我链接到的翻译文件应与ogr2osm版本兼容)。请参阅此处作为与pnorman的ogr2osm兼容的翻译文件的示例。

确保转换文件已完整,并且包含shapefile中所需的所有信息。转换文件会将您的shapefile的类型和属性转换为OSM称为“ 标签”(由键和值组成)的标签

1a。运行ogr2osm。

  1. 打开josm下载合并插件

  2. 您的gov数据现在是osm文件。打开josm,然后选择File> open。您的数据位于其中。

  3. 如果您已经将OSM数据本地存储在计算机上,请立即将其打开,它也将作为新层打开。

  4. 合并数据的这两个源一起并解决重复数据被称为混为一谈。运行合并插件并解决所有冲突。

如果JOSM内存不足(例如,使用大文件时),请分离属性的类型并多次完成此工作流程,每次使用不同类型的数据(例如边界和土地用途,高速公路,建筑物),然后最终合并使用osmium或其他工具将osm文件放在一起。

B. JOSM还可以读取shapefile,尽管对SHP的支持并不完美,并且此方法假定shapefile可以完全加载到内存中。

  1. 启动JOSM。
  2. 打开shapefile(例如filename.shp)。
  3. 全选。
  4. 在JOSM中,编辑从SHP导入的属性和属性,并对其进行更改,以使每个属性都对应一个OSM标记。
  5. 另存为OSM格式。
  6. 从A4继续并合并

导入为OSM

如下所示将OpenStreetMap数据导入系统:

  1. 转到包含使用JOSM转换的OpenStreetMap(OSM)文件的目录。
  2. 在数据库中执行以下命令:
    创建扩展hstore;
    osm2pgsql -j -W \
              -d osm filename.osm

-j选项是关键,因为它指示osm2pgsql将标签导入到hstore列中,这将保留基础数据结构,并将所有标签导入数据库。

创建Mapnik图层

要使数据出现在地图上,请添加一个图层和该图层的样式。这可以很简单,如下所示:

  1. 编辑mapnik-stylesheets/osm.xml
  2. 在结束</Map>标记之前插入以下XML代码...

...

<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. &layer-shapefiles;指令之前插入以下XML代码:

...

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

道路匹配器

Roadmatcher是另一个可能有用的工具


OpenJUMP 1.5.1与RoadMatcher 1.4不兼容。可以使用RoadMatcher 1.4的OpenJUMP 1.3.1与PostGIS 2.0不兼容(因为OpenJUMP调用find_extent而不是st_find_extent)。该数据库已安装PostGIS 2.0。
戴夫·贾维斯

JOSM的OpenData插件读取shapefile:wiki.openstreetmap.org/wiki/JOSM/Plugins/OpenData
Dave Jarvis,
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.