有没有办法为分页的立交查询获得结果?

时间:2019-02-03 15:53:05

标签: openstreetmap overpass-api

假设我要在柏林开餐馆,并且我有这个查询:

[out:json];
area["boundary"="administrative"]["name"="Berlin"] -> .a;
(
    node(area.a)["amenity"="restaurant"];
); out center;

比方说,此结果集太大,无法仅在一个请求中进行超越。我希望能够使用类似SQL的OFFSETLIMIT参数的方法来获取前100个结果(0-99),对其进行处理,然后再获取下100个结果(100-199),依此类推上。

我在API中找不到执行此操作的选项,这有可能吗?如果没有,我应该如何查询我的数据以将其分成较小的集合?

我知道我可以增加内存限制或超时,但是这仍然使我只能处理一个庞大的请求,而不是处理n个小请求,这就是我想要的方式。

1 个答案:

答案 0 :(得分:1)

Overpass API不支持

OFFSET,但是您可以通过out语句中的附加参数来限制查询返回的结果数。以下示例仅返回柏林的100家餐厅:

[out:json];
area["boundary"="administrative"]["name"="Berlin"] -> .a;
(
    node(area.a)["amenity"="restaurant"];
); out center 100;

一种限制整体数据量的方法可能是计算边界框中的对象数量,如果该数量太大,则将边界框分成4部分。通过out count;支持计数。一旦对象数量可行,只需使用out;即可获得一些结果。

node({{bbox}})["amenity"="restaurant"];
out count;