考虑到OSM中的Way的ID,我想得到(lat,lon)对的列表。
如果我通过标准API请求方式,我会得到一个节点ID列表:
$ curl 'http://www.openstreetmap.org/api/0.6/way/158602261'
<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.6" ...>
<way id="158602261" visible="true" ...>
<nd ref="295505187"/>
<nd ref="1736599935"/>
<nd ref="295505112"/>
...
</osm>
然后,我可以对每个节点进行后续查询:
$ curl 'http://www.openstreetmap.org/api/0.6/node/295505187'
<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.6" ...>
<node id="295505187" visible="true" ... lat="37.7702484" lon="-122.5107188"/>
</osm>
但这需要许多API请求,路径中每个节点一个。
是否可以使用较少的API调用获取纬度/经度列表?只需一个电话就可以了。
答案 0 :(得分:4)
只需将 / full 附加到网址,例如http://www.openstreetmap.org/api/0.6/way/158602261/full
答案 1 :(得分:2)
我不确定是否可以使用普通的OSM API来完成,但可以使用Overpass API的递归语句来完成:
$ curl 'http://overpass.osm.rambler.ru/cgi/interpreter?data=%5Bout:json%5D;(way(158602261);%3E;);out;'
{
"version": 0.6,
"generator": "Overpass API",
...
"elements": [
{
"type": "node",
"id": 30677708,
"lat": 37.7712040,
"lon": -122.5108280
},
{
"type": "node",
"id": 30677709,
"lat": 37.7730278,
"lon": -122.4715596
},
...
{
"type": "way",
"id": 158602261,
"nodes": [
295505187,
1736599935,
295505112,
295505186,
...
]
}
]
}
答案 2 :(得分:0)
由于您明确要求单路ID的纬度/经度对列表,您可以使用Overpass API CSV输出模式。
[out:csv(::lat,::lon;false)];
way(158602261);>;out;
(页眉线被&#34; false&#34;
压制。)结果:
37.7712040 -122.5108280
37.7730278 -122.4715596
37.7733457 -122.4652858
37.7746245 -122.4547306
37.7664503 -122.4531098
...
Overpass Turbo Link:http://overpass-turbo.eu/s/6NG