我想从 OpenStreetMap 获取旧金山的轮廓。有一个 relation for SF ,但它包含大量的水,这会使城市居民无法辨认:
在 OSM 中,旧金山有更好的多边形吗?海岸线有没有办法,如果有,我如何找到它们并从行政边界中减去它们?
最佳答案
我可以使用 osmtogeojson 做到这一点和 ogr2ogr .首先,我获取了旧金山关系的完整 OSM XML 并将其转换为 GeoJSON:
$ curl 'http://www.openstreetmap.org/api/0.6/relation/111968/full' > sf.osm
$ osmtogeojson sf.osm > sf.json
然后我使用 this script 删除了非多边形特征:
$ only_polygons.py sf.json > sf.polygons.json
然后我下载了land polygons file 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
这将生成一个带有旧金山陆地边界的 GeoJSON 文件 (
sf-land.json
):我不确定法拉隆群岛去了哪里,但这基本上似乎有效!
除了第一个
ogr2ogr
之外,每一步都很快。命令,它将陆地多边形剪辑到包含旧金山的边界框。这在我的 MacBook Pro 上花了大约 2 分钟。这种方式比将 sf.polygons.json 直接作为 -clipsrc
传递要快得多。第一个命令的参数。
关于gis - 如何从 OpenStreetMap 方式中去除水?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25297811/