2011-12-21 2 views
10

Sto usando esimo nuova versione delle API (v7), e vorrei aggiungere una puntina da disegno su clic del mouse ...Come ottenere lat/lon di un clic del mouse con Bing Maps AJAX Control v7

var mapSettings = { 
    'credentials': 'myCredentials', 
    'mapTypeId': Microsoft.Maps.MapTypeId.road, 
    'enableSearchLogo': false, 
    'showMapTypeSelector': false, 
    'showScalebar': false 
}; 

var $map = $('#map'); 
var map = new Microsoft.Maps.Map($map.get(0), mapSettings); 
Microsoft.Maps.Events.addHandler(map, 'click', function (e) { 
    var latitude = ? 
    var longitude = ? 
    var location = new Microsoft.Maps.Location(latitude, longitude); 
    var pushpin = new Microsoft.Maps.Pushpin(location, { 
     'draggable': true 
    }); 
    map.entites.push(pushpin); 
}); 

Come vedi, sono bloccato all'interno del click-handler: come ottengo la latitudine & longitudine del clic?

+0

per coloro che si chiedono, in Bing Maps v8, la posizione si trova proprio al di fuori del parametro callback (e). 'e.location n {latitude: 39.29711299974974, longitudine: -111.57935390625, altitudine: 0, altitudeReference: -1}' – RyBolt

risposta

17

Ok, inchiodato. Ecco il pezzo di codice che ti interessa:

if (e.targetType == "map") { 
    var point = new Microsoft.Maps.Point(e.getX(), e.getY()); 
    var loc = e.target.tryPixelToLocation(point); 
    var location = new Microsoft.Maps.Location(loc.latitude, loc.longitude); 
    ...... 
} 

e.target.getLocation() funziona solo quando il bersaglio è una puntina da disegno, infobox, ecc Il click sulla mappa reale è diversa.

+0

no ... sry 'Tipo non rilevatoErrore: Impossibile chiamare il metodo 'getLocation' di undefined' –

+0

Ho aggiornato la risposta a usa 'e.target' invece di' e.entity'. Vedi se funziona. Non posso testare questo adesso. – talereader

+0

no ... sry ... 'Uncaught TypeError: Object # non ha alcun metodo 'getLocation'' –