假设我想在柏林找到餐馆,我有这个查询:
[out:json];
area["boundary"="administrative"]["name"="Berlin"] -> .a;
(
node(area.a)["amenity"="restaurant"];
); out center;
假设此结果集太大,无法仅在一个请求中提取以覆盖。我希望能够使用 SQL 的 OFFSET
和 LIMIT
参数来获取前 100 个结果 (0-99),处理它们,然后得到下一个 100 个结果 (100-199) 等等。
我在 API 中找不到执行此操作的选项,这完全可能吗?如果没有,我应该如何查询我的数据以将其分成更小的集合?
我知道我可以增加内存限制或超时,但这仍然让我处理一个庞大的请求,而不是在 n 个小请求上,这就是我想这样做的方式。
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;