Return 来自 searchManager.geocode 回调的位置

Return location from searchManager.geocode callback

我正在尝试调用 searchManager.geocode 函数和 return 要存储在数组中的位置对象。

我是 javascript 新手,所以我认为这可能是一个对 javacript 来说比 bing 地图更基础的问题,但是...

我正在使用此演示作为我的模板来试验 Bing 地图搜索: https://www.bing.com/api/maps/sdk/mapcontrol/isdk/searchbyaddress

示例如下:

var map = new Microsoft.Maps.Map(document.getElementById('myMap'), {
    /* No need to set credentials if already passed in URL */
    center: new Microsoft.Maps.Location(47.624527, -122.355255),
    zoom: 8 });
Microsoft.Maps.loadModule('Microsoft.Maps.Search', function () {
    var searchManager = new Microsoft.Maps.Search.SearchManager(map);
    var requestOptions = {
        bounds: map.getBounds(),
        where: 'Seattle',
        callback: function (answer, userData) {
            map.setView({ bounds: answer.results[0].bestView });
            map.entities.push(new Microsoft.Maps.Pushpin(answer.results[0].location));
        }
    };
    searchManager.geocode(requestOptions);
});

我想做的实际上不是在回调函数中做任何工作,而是简单地 return 位置 (`answer.results[0]') 这样我就可以制作一个系列像这样的电话:

locations.push(geocodeAddress("address 1, city, state"));
locations.push(geocodeAddress("address 2, city, state"));

locations 数组稍后将用于地图边界、添加图钉等。

由于地理编码功能是异步功能,您不能要求它立即 return 某些内容供以后使用。但是,您可以做的是直接在回调函数中将位置推送到数组:

var map = new Microsoft.Maps.Map(document.getElementById('myMap'), {
    /* No need to set credentials if already passed in URL */
    center: new Microsoft.Maps.Location(47.624527, -122.355255),
    zoom: 8 });
var locations = []; 
Microsoft.Maps.loadModule('Microsoft.Maps.Search', function () {
    var searchManager = new Microsoft.Maps.Search.SearchManager(map);
    var requestOptions = {
        bounds: map.getBounds(),
        where: 'Seattle',
        callback: function (answer, userData) {
            locations.push(answer.results[0].location);
        }
    };
    searchManager.geocode(requestOptions);
});

你以后的调用将在下面,因为推送到数组已经处理好了:

geocodeAddress("address 1, city, state");
geocodeAddress("address 2, city, state");

当然,在使用位置数组之前,您仍然需要一些机制来跟踪所有地理编码调用是否已完成(可能通过每个回调中的计数器)。此外,尽管重复使用,您只需要加载一次 Microsoft.Maps.Search 模块。