【发布时间】:2014-08-13 23:25:41
【问题描述】:
我想从 OpenStreetMap 获取旧金山的轮廓。有一个relation for SF,但它包含大量的水,这会使城市居民无法辨认:
在 OSM 中旧金山有更好的多边形吗?海岸线有没有办法,如果有,我怎样才能找到它们并将它们从行政边界中减去?
【问题讨论】:
标签: gis openstreetmap
我想从 OpenStreetMap 获取旧金山的轮廓。有一个relation for SF,但它包含大量的水,这会使城市居民无法辨认:
在 OSM 中旧金山有更好的多边形吗?海岸线有没有办法,如果有,我怎样才能找到它们并将它们从行政边界中减去?
【问题讨论】:
标签: gis openstreetmap
我可以使用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
然后我下载了 Tordanik 引用的land polygons file 并运行:
$ 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 参数传递给第一个命令要快得多。
【讨论】:
【讨论】: