如何去除 OpenStreetMap 道路中的水?

dan*_*nvk 5 gis openstreetmap

我想从 OpenStreetMap 获取旧金山的轮廓。与 SF有关系,但它包含大量的水,这会使城市居民无法识别:

OSM 的 SF 概述

OSM 中是否有更好的旧金山多边形?有没有办法找到海岸线?如果有的话,我如何找到它们并将其从行政边界中减去?

dan*_*nvk 4

我能够使用osmtogeojsonogr2ogr来做到这一点。首先,我获取了旧金山关系的完整 OSM XML 并将其转换为 GeoJSON:

$ curl 'http://www.openstreetmap.org/api/0.6/relation/111968/full' > sf.osm
$ osmtogeojson sf.osm > sf.json
Run Code Online (Sandbox Code Playgroud)

然后我使用此脚本删除了非多边形特征:

$ only_polygons.py sf.json > sf.polygons.json
Run Code Online (Sandbox Code Playgroud)

然后我下载了Tordanik 引用的土地多边形文件并运行:

$ ogr2ogr land_polygons.sfbbox.shp -clipsrc -122.56 37.68 -122.27 37.939 land-polygons-complete-4326/land_polygons.shp
$ ogr2ogr -f GeoJSON sf-land.json -clipsrc sf.polygons.json land_polygons.sfbbox.shp
Run Code Online (Sandbox Code Playgroud)

sf-land.json这会生成一个包含旧金山陆地边界的GeoJSON 文件 ( ):

SF 边界,紧邻海岸线

我不确定法拉隆群岛去了哪里,但这似乎基本上有效!

除了第一个命令之外,每个步骤都很快ogr2ogr,该命令将土地多边形剪辑到包含旧金山的边界框。在我的 MacBook Pro 上这大约需要 2 分钟。-clipsrc这种方式比直接将 sf.polygons.json 作为参数传递给第一个命令要快得多。