Map
function Map() {
// show fullscreen button if CrossDomain or if "allowfullscreen" attribute added to iframe
if (fruskac.isCrossDomain || fruskac.allowfullscreen) {
util.show(document.getElementById('map_button_fullscreen'));
}
}
Map.prototype = {
Option name | Type | Description |
---|---|---|
data | Object | |
type | string | |
visible | boolean | |
color | string, object |
Add object to map
add: function (data, type, visible, color) {
var self = this;
return new Promise(function (resolve) {
switch (type) {
case TYPE_MARKER:
return self.addMarker(data, visible, color).then(function (marker) {
resolve(marker);
});
break;
case TYPE_TRACK:
return self.addTrack(data, visible, color).then(function (track) {
resolve(track);
});
break;
case TYPE_KML:
return self.addKml(data, visible, color).then(function (kml) {
resolve(kml);
});
break;
}
});
},
Option name | Type | Description |
---|---|---|
data | Object | |
visible | boolean | |
color | string, object |
Add marker to map
addMarker: function (data, visible, color) {
return new Promise(function (resolve) {
var marker = new fruskac.Marker({
position: new google.maps.LatLng(data.lat, data.lng),
title: data.data.title,
icon: data.tag,
data: data.data,
visible: visible
});
if (color) {
if (typeof color === 'string') {
applyStyle('.marker-' + data.tag + ':before', 'background-color', color);
} else {
Object.keys(color).forEach(function (key) {
applyStyle('.marker-' + key + ':before', 'background-color', color[key]);
});
}
}
google.maps.event.addListener(marker, 'click', function () {
marker.animateWobble();
});
resolve(marker);
})
},
Option name | Type | Description |
---|---|---|
data | Object | |
visible | boolean | |
color | string, object |
Add track to map
addTrack: function (data, visible, color) {
var url;
if (typeof data === 'string') {
url = data;
} else {
url = data.url;
}
if (color) {
if (typeof color === 'object') {
color = color[data.tag];
}
}
return new Promise(function (resolve) {
var request = new XMLHttpRequest();
request.open('GET', url, true);
request.onload = function () {
if (request.status >= 200 && request.status < 400) {
var points = [],
regex = new RegExp('<trkpt lat="([^"]+)" lon="([^"]+)">', 'g'),
match;
while (match = regex.exec(request.responseText)) {
points.push(new google.maps.LatLng(match[1], match[2]));
}
var track = new fruskac.Track({
path: points,
color: color
});
track.setVisible(visible);
resolve(track);
}
};
request.send();
});
},
Option name | Type | Description |
---|---|---|
data | Object | |
visible | boolean | |
color | string, object |
Add KML layer to map
addKml: function (data, visible, color) {
return new Promise(function (resolve) {
var kml = new fruskac.Kml(data.url);
if (!visible) {
kml.setMap(null);
}
resolve(kml);
})
},
Option name | Type | Description |
---|---|---|
object | Object | |
value | boolean |
Set visibility on object
setVisible: function (object, value) {
switch (getType(object)) {
case TYPE_MARKER:
object.setVisible(value);
break;
case TYPE_TRACK:
object.setVisible(value);
break;
case TYPE_KML:
object.setMap(value ? gmap : null);
break;
}
},
Option name | Type | Description |
---|---|---|
object | Object |
Focus one object on map, fit bounds
focus: function (object, isFixedLayout) {
var self = this;
switch (getType(object)) {
case TYPE_MARKER:
gmap.setZoom(14);
gmap.panTo(object.position);
var interval = setInterval(function () {
object.animateBounce();
}, 2000);
setTimeout(function () {
object.div.addEventListener('click', function () {
clearInterval(interval);
});
}, 2000);
break;
case TYPE_TRACK:
self.placeMarker(null);
gmap.fitBounds(object.getBounds());
chart.show(object.getPath(), isFixedLayout);
break;
}
},
Option name | Type | Description |
---|---|---|
point | google.maps.LatLng | |
icon | string | |
pulsate | boolean |
Place marker on map
placeMarker: function (point, icon, pulsate) {
var self = this;
if (point) {
if (self.hasOwnProperty('marker')) {
self.marker.setPoint(point);
} else {
self.marker = new fruskac.Marker({
position: point,
visible: true,
pulsate: pulsate,
icon: icon
});
}
if (!gmap.getBounds().contains(point)) {
gmap.panTo(point);
}
} else {
if (self.hasOwnProperty('marker')) {
self.marker.remove();
delete self.marker;
}
}
},
Open a new window using URL parameters from current map
fullscreen: function () {
var params = {
c: gmap.getCenter().lat() + ',' + gmap.getCenter().lng() + ',' + gmap.getZoom(),
f: request.get(PARAMETER_FOCUS),
t: request.get(PARAMETER_TRACK)
};
var url = fruskac.config.fullscreen + '?' + Object.keys(params).map(function (i) {
return params[i] && encodeURIComponent(i) + "=" + encodeURIComponent(params[i]);
}).join('&');
window.open(url, '_blank');
}
};
Option name | Type | Description |
---|---|---|
object | object |
Get type of object
function getType(object) {
if (!object) {
return;
}
if (object.hasOwnProperty('position')) {//marker
return TYPE_MARKER;
} else if (object.hasOwnProperty('strokeColor')) {
return TYPE_TRACK;
} else if (object.hasOwnProperty('suppressInfoWindows')) {
return TYPE_KML;
}
}
function applyStyle(name, property, value) {
if (style[name] === undefined) {
style[name] = {}
}
if (style[name][property] === undefined) {
style[name][property] = value;
sheet.insertRule(name + '{' + property + ':' + value + '}', 0);
}
}
window.fullscreen = function () {
map.fullscreen()
};
return Map;
})();