как добавить местоположение пользователя динамически в bing map api

#javascript #api #bing-maps #reverse-geocoding #geocode

Вопрос:

Я использую API карт Bing и в этом я указываю местоположение (широту и долготу) вручную в функции GetMap для обратного геокодирования, чтобы я мог получить имя адреса

 function GetMap() {
    map = new Microsoft.Maps.Map('#myMap', {
        credentials: 'AslSzT37W6m8TEyrfWNFWOi-yLdclSoXdv0j',
        center: new Microsoft.Maps.Location( 22.6589, 78.5589), #manually putting latamp;Log
        
    });
    //Make a request to reverse geocode the center of the map.
    reverseGeocode();
}
 

Теперь вместо того, чтобы указывать местоположение вручную в функции GetMap, я определяю местоположение пользователя с помощью кода ниже, который возвращает широту и долготу

 //Request the user's location
navigator.geolocation.getCurrentPosition(function (position) {
var loc = new Microsoft.Maps.Location(
    position.coords.latitude,
    position.coords.longitude);

// Add a pushpin at the user's location.
var pin = new Microsoft.Maps.Pushpin(loc);
map.entities.push(pin);
        
//Center the map on the user's location.
map.setView({ center: loc, zoom: 15 });

//printing users location name in console
console.log(loc);
});
 

Теперь я хочу поместить широту и долготу этого пользователя в функцию GetMap

     center: new Microsoft.Maps.Location( 22.0365682, 78.9255313), # want to put User's Logamp;Lat dynamically
 

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

Ответ №1:

Сначала я запрашиваю у пользователя местоположение и беру местоположение пользователя (широту и долготу) в переменной x и y и передаю аргумент x и y в функцию getmap.

     let map, searchManager;
    let directionsManager;

    // Requesting User location and generation of user's latitude and longitude
    if(navigator.geolocation){  
        navigator.geolocation.getCurrentPosition(showPosition) 
        
        }
        function showPosition(position){
            var x =  position.coords.latitude;
            var y =  position.coords.longitude;
            GetMap(x,y);
        }
 

В функции Getmap я беру аргументы x и y (широта и долгота) и центрирую их на карте.
Также в функции getmap вызывается функция reverseGeocode() для преобразования широты и долготы в имя адреса.

 // Display the map and taking latitude and longitude to center the map
function GetMap(x,y) {
            map = new Microsoft.Maps.Map('#myMap', {
                credentials: 'Your credentials',
                center: new Microsoft.Maps.Location( x, y),
                zoom: 13
            });

        reverseGeocode();
}
 

Определение функции обратного геокода, а также оповещение пользователя о его адресе и печать адреса в консоли.

 // Reverse the geocode(latitude and longitude)
        function reverseGeocode() {
            //If search manager is not defined, load the search module.
            if (!searchManager) {
                //Create an instance of the search manager and call the reverseGeocode function again.
                Microsoft.Maps.loadModule('Microsoft.Maps.Search', function () {
                    searchManager = new Microsoft.Maps.Search.SearchManager(map);
                    reverseGeocode();
                });
            } else {
                var searchRequest = {
                    location: map.getCenter(),
                    callback: function (r) {
                        //Tell the user the name of the result.
                        alert(r.name);
                        console.log(r.name);
                    },
                    errorCallback: function (e) {
                        //If there is an error, alert the user about it.
                        alert("Unable to reverse geocode location.");
                    }
                };
    
                //Make the reverse geocode request.
                searchManager.reverseGeocode(searchRequest);
            }
        }