OpenLayers 3动态矢量图层,没有jQuery的bbox策略

时间:2015-07-27 18:47:20

标签: javascript openlayers-3 overpass-api

我正在尝试使用JavaScript和OpenLayers 3创建一个简单的地图,只要地图的边界框发生变化,就可以从Overpass API动态加载OpenStreetMap XML数据。为此,我创建了一个带有矢量图层的地图,该矢量图层的来源是矢量图源。此源的加载策略设置为bbox。我创建了一个加载器函数,只要边界框发生变化就会调用它。但是,我现在无法弄清楚如何实际加载数据并将其添加到地图中。

var vectorSource = new ol.source.Vector({
    format: ol.format.OSMXML(),
    loader: function(extent, resolution, projection) {
        var epsg4326 = ol.proj.transformExtent(extent, projection, 'EPSG:4326');
        var bbox = epsg4326.join(',');
        var url = 'http://overpass-api.de/api/interpreter?data=(node["light_source"](' + bbox + ');way["light_source"](' + bbox + ');relation["light_source"](' + bbox + ');>;);out meta;';

        ?
    },
    strategy: ol.loadingstrategy.bbox
});

var vector = new ol.layer.Vector({
    source: vectorSource
});

var raster = new ol.layer.Tile({
    source: new ol.source.OSM()
});

var map = new ol.Map({
    layers: [raster, vector],
    target: document.getElementById('map'),
    controls: ol.control.defaults(),
    view: new ol.View({
        center: ol.proj.transform([26.69075, 58.3743], 'EPSG:4326', 'EPSG:3857'),
        maxZoom: 19,
        zoom: 18
    })
});

基本上,问题是:我应该把什么放在上面代码中标有问号的地方?到目前为止我发现的例子大多使用jQuery,我在我的项目中没有使用它,所以我正在寻找一些不使用jQuery的东西。我知道OpenLayers 3可以在没有jQuery的情况下从Overpass API加载数据,但是,我发现(和再现)的唯一示例使用固定加载策略在开始时加载所有数据,而不是在边界框更改时动态加载。

1 个答案:

答案 0 :(得分:0)

来自jquery的$ .ajax基本上是javascript xmlHttpRequest对象的帮助器。

你可以在没有jquery的情况下使用它: http://www.w3schools.com/xml/xml_http.asp

你可以找到很多关于如何在谷歌这样做(尝试从openlayers 3首先加载数据) http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp