我正在研究一个分叉的OSM / leaflet / overpass API应用程序,该应用程序声明了自己的最大范围。 这样,对Overpass API的任何请求都将限制在声明的范围内
var mapBounds = { south: 50.8025, west: 0.3724, north: 50.8785, east: 0.5290 };
var LBounds = L.latLngBounds([mapBounds.south, mapBounds.west], [mapBounds.north, mapBounds.east]);
对Overpass API的查询已完成
...
else queryBbox += '[bbox:' + [mapBounds.south, mapBounds.west, mapBounds.north, mapBounds.east].join(',') + ']';
...
需要更改边界框(mapBounds)以允许在全球范围内导航,并将其设置为bbox,所以对Overpass API的请求仅适用于该地图区域。
我已经完成了
else queryBbox += '[bbox:' + map.getBounds().toBBoxString() + ']';
但是我无法使其工作..天桥没有返回结果
添加:
与此同时,我试图查看onMoveEnd发生了什么事情
onMoveEnd: function () {
console.log(queryBbox);
控制台记录似乎返回坐标:
[out:json][bbox:0.38512229919433594,50.82990293001779,0.549917221069336,50.86404449323755];(nwr[tourism=museum];);out tags center qt 250;
但是它们是相反的
进行比较:这就是原始查询的样子
[out:json][bbox:50.8025,0.3724,50.8785,0.529];(nwr[tourism=museum];);out tags center qt 250;
答案 0 :(得分:0)
您是自行构建URL还是通过库构建URL?如果使用库,请检查是否定义了错误。
要创建自己的请求,请创建url,然后发出http请求:
function getOverpassData(){
var bbox = map.getBounds().toBBoxString();
var _url = "https://overpass-api.de/api/interpreter?data=[out:json];out%20skel%20qt;node[tourism=attraction];";
var bboxurl = _url+"&bbox="+bbox;
console.log(bboxurl);
// And then use $.ajax(bboxurl) or the normal js http request to get data.
}
答案 1 :(得分:0)
在阅读(更近)Leaflet文档时,我能够解决我的问题。
toBBoxString()返回带有边界框坐标的字符串。 “ southwest_lng,southwest_lat,northeast_lng,northeast_lat”格式。 对于将请求发送到返回地理数据的Web服务很有用。
https://leafletjs.com/reference-1.6.0.html#latlngbounds-tobboxstring
但是事实是,Overpass API不会以GeoJSON格式返回响应...因此,我对toBBoxString()的攻击不合适,这就是为什么我得到错误响应的原因。 取而代之的是,这个程序运行良好,现在所有请求都成功了
else queryBbox += '[bbox:' + map.getBounds().getSouth() +',' + map.getBounds().getWest() +',' + map.getBounds().getNorth() +',' + map.getBounds().getEast() + ']';
我希望在我投票支持我之前,有人可能会有一个更优雅的解决方案