例如,我想知道是否有任何 API 可以查询 OSM 数据;(lon_1, lat_1) 是在陆地上还是在海上?或者是否有可能将一个岛作为一个定义明确的多边形?到目前为止,我看到的唯一用途只是渲染 OSM 数据(生成图块)的工具。
8 回答
我还没用过这些。
但也有 OSM 的cloudmade api。我玩了一下python api。
我不确定,如果他们中的任何一个可以帮助您解决您的特定问题,但您可以搜索附近的海岸线。如果您的点在标记为 natural=coastline的多边形内,则您有一个岛(或大陆)...
您可以使用 CloudMade 的地理编码 API 在 OpenStreetMap 数据中搜索岛屿。默认情况下,API 将返回结果的几何图形,这听起来像是您在寻找的东西。例如,可以通过以下 http 请求找到苏格兰海岸外的 Arran:
http://geocoding.cloudmade.com/BC9A493B41014CAABB98F0471D759707/geocoding/find/Arran,UK.js?results=1
(作为一个巧妙的小技巧,将 .js 更改为 .html 可以预览结果。
有关 API 的更多文档和示例,请访问 developers.cloudmade.com/projects/show/geocoding-http-api 如果您不想使用 http api,则可以使用多种语言的抽象 API - ruby、python、perl和别的。
似乎没有人在这里提到Leaflet API: http:
//leafletjs.com/reference.html
I have used CloudMade OSM extracts but had some problems with them. For example, Norway was clipped too tightly, causing some roads on the west coast to disappear.
I now prefer the overpass API.
Put something like this into the query form at http://www.overpass-api.de/query_form.html
<osm-script timeout="10000" element-limit="1073741824">
<union into="_">
<bbox-query into="_" s="52.3170669250001" n="52.4027433480001" w="4.80527567900009" e="4.97793537400008"/>
<recurse from="_" into="_" type="up"/>
<recurse from="_" into="_" type="down"/>
</union>
<print from="_" limit="" mode="meta" order="id"/>
</osm-script>
Put the bounds of the area you want, in degrees, in the s, n, w and e attributes of the element.
MapQuest 有一组基于 OpenStreetMap 数据的“开放”网络服务 API,具有相当不受限制的条款(即条款与 OSM 的条款密切相关):
当然,javascript api 被称为openlayers。
我找到了一个很棒的 API 来读取 Openstreetmap 数据;地图脚本。这是 MapServer 的接口,可以读取 *.map 和 *.shp 文件。它能够使用空间索引,因此可能非常快。我在 40 毫秒内完成了世界海岸线形状文件的随机多边形查找(检查多边形是否与陆地相交)。
how about http://wiki.openstreetmap.org/wiki/Nominatim? I had used this and setup my own server