Skip to content

Instantly share code, notes, and snippets.

@wilg
Created July 22, 2012 19:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wilg/3160737 to your computer and use it in GitHub Desktop.
Save wilg/3160737 to your computer and use it in GitHub Desktop.
(function() {
var Rect, rectForOverlay, updateMarkers;
jQuery(function() {
var map, options;
if (!($("#module-location-map").length > 0)) {
return;
}
window.overlays = [];
options = {
center: new google.maps.LatLng(34.1626653, -118.2518423),
zoom: 3,
mapTypeId: "Watercolor",
panControl: true,
panControlOptions: {
position: google.maps.ControlPosition.TOP_RIGHT
},
zoomControl: true,
zoomControlOptions: {
style: google.maps.ZoomControlStyle.LARGE,
position: google.maps.ControlPosition.TOP_RIGHT
},
streetViewControl: false,
mapTypeControlOptions: {
mapTypeIds: []
}
};
map = new google.maps.Map(document.getElementById("module-location-map"), options);
map.mapTypes.set("Toner", new google.maps.StamenMapType("toner"));
map.mapTypes.set("Terrain", new google.maps.StamenMapType("terrain"));
map.mapTypes.set("Watercolor", new google.maps.StamenMapType("watercolor"));
$('a[target$="_blank"]').hide();
return updateMarkers(map);
});
Rect = (function() {
function Rect(left, right, top, bottom) {
this.left = left;
this.right = right;
this.top = top;
this.bottom = bottom;
}
Rect.prototype.intersects = function(r2) {
return !(r2.left > this.right || r2.right < this.left || r2.top > this.bottom || r2.bottom < this.top);
};
return Rect;
})();
window.coalesceOverlays = function() {
var comparisonOverlay, comparison_overlay_id, intersections, key, masterOverlay, overlay, overlay_id, overlays, overlaysHash, slave, slave_id, value, view, _i, _j, _k, _l, _len, _len1, _len2, _len3, _ref, _results;
overlays = window.overlays;
overlaysHash = {};
for (_i = 0, _len = overlays.length; _i < _len; _i++) {
overlay = overlays[_i];
overlaysHash[overlay.user_id()] = overlay;
}
intersections = {};
for (_j = 0, _len1 = overlays.length; _j < _len1; _j++) {
overlay = overlays[_j];
view = $(overlay.div_);
_ref = _.without(overlays, overlay);
for (_k = 0, _len2 = _ref.length; _k < _len2; _k++) {
comparisonOverlay = _ref[_k];
if (rectForOverlay(overlay).intersects(rectForOverlay(comparisonOverlay))) {
overlay_id = overlay.user_id();
comparison_overlay_id = comparisonOverlay.user_id();
if (intersections[overlay_id] != null) {
intersections[overlay_id].push(comparison_overlay_id);
} else {
intersections[overlay_id] = [comparison_overlay_id];
}
if (intersections[comparison_overlay_id] != null) {
intersections[comparison_overlay_id].push(overlay_id);
} else {
intersections[comparison_overlay_id] = [overlay_id];
}
}
}
}
for (key in intersections) {
value = intersections[key];
intersections[key] = _.uniq(value);
}
_results = [];
for (key in intersections) {
value = intersections[key];
masterOverlay = overlaysHash[key];
for (_l = 0, _len3 = value.length; _l < _len3; _l++) {
slave_id = value[_l];
slave = overlaysHash[slave_id];
masterOverlay.coalesceWithOverlay(slave);
slave.hide();
delete intersections[slave_id];
}
_results.push(delete intersections[key]);
}
return _results;
};
rectForOverlay = function(overlay) {
var b, l, r, rect, t, view;
view = $(overlay.div_);
l = view.position().left;
t = view.position().top;
r = l + view.width();
b = t + view.height();
return rect = new Rect(l, r, t, b);
};
updateMarkers = function(map) {
var url;
console.log("update4234reweMarkers");
url = $("#module-location").data("marker-url");
$.getJSON(url, function(data) {
var bounds, ll, overlay, person, user, _i, _j, _k, _len, _len1, _len2, _ref, _results;
bounds = new google.maps.LatLngBounds();
for (_i = 0, _len = data.length; _i < _len; _i++) {
user = data[_i];
ll = new google.maps.LatLng(user.latitude.latitude, user.latitude.longitude);
bounds.extend(ll);
}
map.fitBounds(bounds);
if (map.getZoom() > 15) {
map.setZoom(15);
}
map.panBy(100, 0);
_ref = window.overlays;
for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
overlay = _ref[_j];
overlay.setMap(null);
}
window.overlays = [];
_results = [];
for (_k = 0, _len2 = data.length; _k < _len2; _k++) {
user = data[_k];
person = user.latitude;
ll = new google.maps.LatLng(person.latitude, person.longitude);
_results.push(window.overlays.push(new TxtOverlay(ll, person.marker, "google-map-html-overlay", map)));
}
return _results;
});
return window.setTimeout(function() {
return updateMarkers(map);
}, 10000);
};
}).call(this);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment