如何从OpenStreetMap方式中删除水?

时间:2014-08-13 23:25:41

标签: gis openstreetmap

我想从OpenStreetMap获取旧金山的大纲。有一个relation for SF,但它包含了大量的水,这使得这个城市的居民无法识别:

Outline of SF from OSM

OSM中旧金山有更好的多边形吗?是否有海岸线的方法,如果有,我怎么能找到它们并从行政边界中减去它们?

2 个答案:

答案 0 :(得分:3)

我可以使用osmtogeojsonogr2ogr执行此操作。首先,我抓住旧金山关系的完整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):

SF boundary, snug to the coastline

我不确定Farallon群岛的去向,但这基本上似乎有效!

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

答案 1 :(得分:1)

是的,有coastline方法。例如this way也是关系的一部分,但this way显然不是关系的一部分。因此,我认为机械清除所有水和较小的岛屿是非常具有挑战性的,但并非不可能。我想你必须检索多边形内的所有地图data并运行一些空间查询。

您正在寻找的关系定义了旧金山的行政边界。您正在寻找的关系将是没有水的San Fransisco的陆地(可能没有属于旧金山的较小岛屿)。 OSM中通常不存在这种关系。