установить границы на карте листовки в соответствии с уровнем масштабирования карты - PullRequest
0 голосов
/ 24 января 2020

Я работаю над разветвленным приложением OSM / leaflet / overpass API, у которого объявлены собственные максимальные границы. Таким образом, любой запрос на API-интерфейс Overpass ограничивается объявленными границами

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]);

Запрос на API-интерфейс Overpass выполняется

...
    else queryBbox += '[bbox:' + [mapBounds.south, mapBounds.west, mapBounds.north, mapBounds.east].join(',') + ']';
...

Необходимо изменить ограничивающий прямоугольник (mapBounds), чтобы разрешить перемещайтесь по всему миру и устанавливайте их как bbox, поэтому запросы на API-интерфейс Overpass относятся только к этой области карты.

, поэтому я выполнил

else queryBbox += '[bbox:' + map.getBounds().toBBoxString() + ']';

Но я не могу заставить его работать. Эстакада не дает результатов

сложение:

тем временем я приблизился, я попытался посмотреть, что происходит на консоли MoveEnd

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 голосов
/ 25 января 2020

я смог исправить мою проблему, читая (ближе) к документации Leaflet.

toBBoxString () Возвращает строку с координатами ограничивающего прямоугольника в формате 'southwest_lng, southwest_lat, northeast_lng, northeast_lat' , Полезно для отправки запросов веб-службам, которые возвращают геоданные.

https://leafletjs.com/reference-1.6.0.html#latlngbounds -tobboxstring

Но факт в том, что Overpass API не возвращает ответы в формате Geo JSON ... так что мой взлом с toBBoxString () не был подходящим, иначе я получил ложные ответы. Вместо этого этот работал нормально, все запросы теперь успешны

0 голосов
/ 25 января 2020

Ваш URL неверен, он должен выглядеть следующим образом: 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, а затем выполните 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.
}
...