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 模块。
我正在尝试调用 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 模块。