【问题标题】:How can I remove water from OpenStreetMap ways?如何从 OpenStreetMap 方式中去除水?
【发布时间】:2014-08-13 23:25:41
【问题描述】:

我想从 OpenStreetMap 获取旧金山的轮廓。有一个relation for SF,但它包含大量的水,这会使城市居民无法辨认:

在 OSM 中旧金山有更好的多边形吗?海岸线有没有办法,如果有,我怎样才能找到它们并将它们从行政边界中减去?

【问题讨论】:

    标签: gis openstreetmap


    【解决方案1】:

    我可以使用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),其中包含旧金山的陆地边界:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 2015-08-16
      • 2021-11-14
      • 1970-01-01
      • 2015-11-14
      • 2018-04-02
      • 2017-01-05
      相关资源
      最近更新 更多