根据地图缩放级别在传单地图上设置边界

时间:2020-01-24 20:41:08

标签: javascript leaflet geocoding

我正在研究一个分叉的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;

2 个答案:

答案 0 :(得分:0)

您的网址是错误的,看起来应该像这样:https://overpass-api.de/api/interpreter?data=[out:json];out%20skel%20qt;node[tourism=attraction];&bbox=0.427393913269043,50.84410451978967,0.5097913742065431,50.85710981721644;

您是自行构建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() + ']';

我希望在我投票支持我之前,有人可能会有一个更优雅的解决方案