//Utility functions for map info window function mapit(lat,lon,zoom,id) { var map; //create a new map var centerCoord = new google.maps.LatLng(lat, lon); var mapOptions = { zoom: zoom, center: centerCoord, mapTypeId: google.maps.MapTypeId.TERRAIN, disableDefaultUI: true, navigationControl: true, navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL} }; map = new google.maps.Map(document.getElementById('map-wrapper-'+id), mapOptions); //get the geojson for this map $.ajax({ url: "/projects/data/"+id+"/", dataType: "json", success: function(data, text, request) { draw_poly(data); } //complete: function(xhr, status) {console.log(status); return false; }, }); //draw the polygon function draw_poly(data) { var poly = createPolygons(data.features[0].geometry); for (i=0;i<=poly.length-1;i++) { poly[i].setMap(map); } } } // utility functions to create/remove map container function create_map(obj) { //break up the variable passed from the map link's title element var lat = parseFloat(obj.title.split(',')[0]); var lon = parseFloat(obj.title.split(',')[1]); var zoom= parseInt(obj.title.split(',')[2]); var id= obj.title.split(',')[3]; //create container divs $(obj).parents().eq(3).append('
'); $('#map-container-'+id).append('
'); //deal with the variable height of div.legend //$('#map-container').css({ // bottom: function(index, value) { // return parseFloat($(obj).parent().parent().css("height"))-2; // } // }); mapit(lat,lon,zoom,id); } function remove_map(id) { $(id).remove(); } //function to parse and render polygons for GMaps //# taken from http://friism.com/drawing-geojson-based-polygons-on-google-maps function createPolygons(areajson, bounds){ var coords = areajson.coordinates; var polygons = _(coords).reduce([], function(memo_n, n) { var polygonpaths = _(n).reduce(new google.maps.MVCArray(), function(memo_o, o) { var polygoncords = _(o).reduce(new google.maps.MVCArray(), function(memo_p, p) { var mylatlng = new google.maps.LatLng(p[1], p[0]); if(bounds){ bounds.extend(mylatlng); } memo_p.push(mylatlng); return memo_p; }); memo_o.push(polygoncords); return memo_o; }); var polygon = new google.maps.Polygon({ paths: polygonpaths, strokeColor: "#201a11", strokeOpacity: 0.8, strokeWeight: 2, fillColor: "#201a11", fillOpacity: 0.35 }); memo_n.push(polygon); return memo_n; }); return polygons; } //functions to handle the "more" link // utility functions to create/remove camera info container function get_exif(obj,id) { //$(obj).parents().eq(2).append('
'); $(obj).parents().eq(3).append('
'); $(obj).parents().eq(2).children('.meta').clone().appendTo('#'+id).css('visibility', 'visible'); //deal with the variable height of div.legend $('#exif-container').css({ bottom: function(index, value) { return parseFloat($(obj).parent().parent().css("height"))-14; } }); } function remove_exif(id) { $('#'+id).remove(); } $(document).ready(function(){ //set up click events for map button $('.map-link').click( function() { var more_id = 'more-container-'+$(this).parent().next().children('.more-link').attr('id').split('-')[1]; var id = '#map-container-'+this.title.split(',')[3]; if ($('#'+more_id).is(":visible")){ remove_exif(more_id); } if ($(id).is(":visible")) { remove_map(id); } else { create_map(this); } return false; }); //set up click events for more info button $('.more-link').click( function() { var map_id = '#map-container-'+$(this).parent().prev().children('.map-link').attr('title').split(',')[3]; var id = 'more-container-'+this.id.split('-')[1]; if ($(map_id).is(":visible")){ remove_map(map_id); } if ($('#'+id).is(":visible")) { remove_exif(id); } else { get_exif(this, id); } return false; }); });