87 lines
2.8 KiB
JavaScript
87 lines
2.8 KiB
JavaScript
Ext.define('Ext.BingMap', {
|
|
extend: 'Ext.Map',
|
|
xtype : 'bingmap',
|
|
requires: ['Ext.util.Geolocation'],
|
|
|
|
// @private
|
|
initMap: function() {
|
|
var map = this.getMap();
|
|
if(!map) {
|
|
var me = this,
|
|
element = me.mapContainer,
|
|
mapOptions = me.getMapOptions(),
|
|
event;
|
|
|
|
var MM = Microsoft.Maps;
|
|
var key = "AokX-S2lieXTaXG8pvEw3i2AKYuStBMK8RsUu6BDJ6hrL5AYv0IfQqM9zc-BAA-v";
|
|
//TODO Investigate why does merge lead to exception in Bing
|
|
mapOptions = Ext.merge({
|
|
credentials: key,
|
|
mapTypeId: "r",
|
|
zoom: 12
|
|
}, mapOptions);
|
|
|
|
// This is done separately from the above merge so we don't have to instantiate
|
|
// a new LatLng if we don't need to
|
|
if (!mapOptions.center) {
|
|
mapOptions.center = new MM.Location(37.381592, -122.135672); // Palo Alto
|
|
}
|
|
|
|
if (element.dom.firstChild) {
|
|
Ext.fly(element.dom.firstChild).destroy();
|
|
}
|
|
|
|
MM.loadModule('Microsoft.Maps.Overlays.Style', { callback: function () {
|
|
me.setMap(new MM.Map(element.dom,mapOptions));
|
|
if(mapOptions.callback){
|
|
mapOptions.callback();
|
|
}
|
|
}
|
|
});
|
|
|
|
map = me.getMap();
|
|
}
|
|
|
|
//Track zoomLevel and mapType changes
|
|
// event = MM.event;
|
|
//TODO Investigate how to add listeners in Bing
|
|
// event.addListener(map, 'zoom_changed', Ext.bind(me.onZoomChange, me));
|
|
// event.addListener(map, 'maptypeid_changed', Ext.bind(me.onTypeChange, me));
|
|
// event.addListener(map, 'center_changed', Ext.bind(me.onCenterChange, me));
|
|
|
|
me.fireEvent('maprender', me, map);
|
|
},
|
|
setMapCenter: function(coordinates) {
|
|
var me = this,
|
|
map = me.getMap(),
|
|
MM = Microsoft.Maps;
|
|
|
|
if (!me.isPainted()) {
|
|
me.un('painted', 'setMapCenter', this);
|
|
me.on('painted', 'setMapCenter', this, { delay: 150, single: true, args: [coordinates] });
|
|
return;
|
|
}
|
|
coordinates = coordinates || new MM.Location(37.381592, -122.135672);
|
|
|
|
if (coordinates && !(coordinates instanceof MM.Location) && 'longitude' in coordinates) {
|
|
coordinates = new MM.Location(coordinates.latitude, coordinates.longitude);
|
|
}
|
|
|
|
if (!map) {
|
|
me.initMap();
|
|
map = me.getMap();
|
|
}
|
|
|
|
if (map && coordinates instanceof MM.Location) {
|
|
map.updateMapPosition(coordinates);
|
|
}
|
|
else {
|
|
this.options = Ext.apply(this.getMapOptions(), {
|
|
center: coordinates
|
|
});
|
|
}
|
|
}
|
|
}, function() {
|
|
|
|
});
|