javascript
  • leaflet
  • openstreetmap
  • geojson
  • overpass-api
  • 2016-09-07 4 views 5 likes 
    5

    У меня есть OpenstreetMap с leaflet. Я использую this Плагин для брошюры для запроса с помощью Overpass.Как запросить область пропуска через листовку?

    var opl = new L.OverPassLayer({ 
        query: "(area['name'='Roma']; node(area)['amenity'='drinking_water']);out;", 
    
    
    }); 
    

    Но моя карта ничего не показывает при использовании с плагином.

    Что не так?

    Примечание: мой запрос работает на основе this.

    EDIT:

    Этот запрос работает с плагином, но не на http://overpass-turbo.eu/?!

    var opl = new L.OverPassLayer({ 
    query: "(node(BBOX)['amenity'='drinking_water'];);out;", 
    

    });

    ПОЛНЫЙ ПРИМЕР:

    var attr_osm = 'Map data &copy; <a href="http://openstreetmap.org/">OpenStreetMap</a> contributors', 
    attr_overpass = 'POI via <a href="http://www.overpass-api.de/">Overpass API</a>'; 
    var osm = new L.TileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {opacity: 0.7, attribution: [attr_osm, attr_overpass].join(', ')}); 
    
    var map = new L.Map('map').addLayer(osm).setView(new L.LatLng(49.592041, 8.648164),2); 
    
    //OverPassAPI overlay 
    var opl = new L.OverPassLayer({ 
        query: "(node(BBOX)['amenity'='drinking_water'];);out;", 
    
    
    }); 
    
    map.addLayer(opl); 
    
    +0

    Вы можете видеть какие-либо HTTP-запросы, сделанные для эстакады в консоли вашего браузера? Каков ответ? – kes

    +0

    нет HTTP-запросов – Khan

    +0

    Можете ли вы опубликовать образец полного кода @Khan, который мы могли бы использовать для воссоздания вашей проблемы? Например, вы добавляете opl на карту с помощью 'map.addLayer (opl)' после создания нового слоя? – kes

    ответ

    0

    Я решил проблему с другим plugin.

    я могу использовать эстакаду-турбо запрос:

    var attr_osm = 'Map data &copy; <a href="http://openstreetmap.org/">OpenStreetMap</a> contributors', 
    attr_overpass = 'POI via <a href="http://www.overpass-api.de/">Overpass API</a>'; 
    var osm = new L.TileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {opacity: 0.7, attribution: [attr_osm, attr_overpass].join(', ')}); 
    
    var map = new L.Map('map').addLayer(osm).setView(new L.LatLng(43.592041,2.648164),14); 
    
    
    var opl = new L.OverPassLayer({ 
    query: "node[amenity=drinking_water]({{bbox}});out;",})", 
    }); 
    
    map.addLayer(opl); 
    

    или с настраиваемого круг на карте

    var opl = new L.OverPassLayer({ 
    query: "node[amenity=drinking_water]({{bbox}});out;",})", 
    onSuccess: function(data) { 
    
    
        for(i=0;i<data.elements.length;i++) { 
         e = data.elements[i]; 
    
    
    
         var pos = new L.LatLng(e.lat, e.lon); 
         var color = 'green'; 
         L.circle(pos, 5, { 
         color: color, 
         fillColor: '#fa3', 
         fillOpacity: 1, 
         }).addTo(map); 
    
        } 
        }, 
    }); 
    
    map.addLayer(opl); 
    

    Вы даже можете преобразовать данные, полученные от Путепровод с this к GeoJSON. Можно напрямую нарисовать пути и площадь.

    2

    Ваш уровень масштабирования слишком низкая, вы в основном получение данных для значительной части земли. Как следствие, ваш запрос Overpass истекает, и вы не получите никакого результата.

    Изменить

    new L.LatLng(49.592041, 8.648164),2)

    в

    new L.LatLng(49.592041, 8.648164),14)

    Кроме того, я рекомендовал:

    • добавить параметр [timeout:x] ограничить время выполнения вашего запроса
    • добавьте максимальное количество объектов, которые вы хотите запросить, например. out 100; для макс. 100 узлов.

    Кроме того, вы не можете использовать (BBOX) в турбонаддуфе. Правильный синтаксис для турбонаддува будет ({{bbox}}).

    Смежные вопросы