// $Id$ function gmapArcgis(config) { return { config: config, map: config.map, deforestation: [], getConfig: function() { return config; }, // Show all defined polygons showPolygons: function(polygons) { for (j = 0; j < polygons.length; j++) { this.showPolygon(polygons[j]); } }, // Hide all defined polygons hidePolygons: function(polygons) { for (j = 0; j < polygons.length; j++) { polygons[j].overlay.setOpacity(0); unblockUI(); } }, // Add polygons from a given ArcGIS MapServer Layer showPolygon: function(params) { var defaultOpacity = (params.opacity != undefined) ? params.opacity : 0.55; if (typeof params.overlay != 'undefined') { params.overlay.setOpacity(defaultOpacity); this.unblockUI(); return; } uri = params['uri']; layers = params['layers']; params.overlay = new gmaps.ags.MapOverlay(uri, { exportOptions: { layerIds: layers, layerOption: 'show', } }); params.overlay.setMap(map); params.overlay.setOpacity(defaultOpacity); if (params.callback == undefined) { // Default callback: remove the blockUI once the layer is shown google.maps.event.addListener(params.overlay.getMapService(), 'update', function() { unblockUI(); }); } else { google.maps.event.addListener(params.overlay.getMapService(), 'update', function() { params.callback(map, params) ; unblockUI(); }); } }, // Add a KML to the map showKML: function(params) { params.overlay = new google.maps.KmlLayer(params.uri); params.overlay.setMap(map); }, // Add a KML layer into the map addKML: function(params) { if (typeof params.overlay != 'undefined') { params.overlay.setOpacity(params.opacity); unblockUI(); return params.overlay; } if (params.overlayTime != undefined) { this.showOverlay(params.overlayTime); } this.showKML(params); return params.overlay; }, // Add a layer to the map addLayers: function(params) { if (typeof params.overlay != 'undefined') { params.overlay.setOpacity(params.opacity); unblockUI(); return params.overlay; } if (params.overlayTime != undefined) { this.showOverlay(params.overlayTime); } // TODO: support for clickable polygons this.showPolygon(params); return params.overlay; }, // Add makers to the map addMarkers: function(params) { var bounds = map.getBounds(); if (params.overlay != undefined) { this.toggleMarkers(params); return; } else { params.overlay = []; } if (params.overlayTime != undefined) { this.showOverlay(params.overlayTime); } // Query parameters var query = { returnGeometry: true, // TODO //queryGeometry: bounds, where: (params.where != undefined) ? params.where : '1=1', outFields: params.fields, }; var layer = new gmaps.ags.Layer(params.uri); // Execute query layer.query(query, processResultSet); // Configure infoWindow params.infowindow = new google.maps.InfoWindow({ content: '', }); // Process results function processResultSet(fset) { var fs = fset.features; for (var i = 0, c = fs.length; i < c; i++) { fset = fs[i]; params.overlay[i] = {}; params.overlay[i].marker = new google.maps.Marker({ title: (params.title != undefined) ? fset.attributes[params.title] : fset.attributes.nome, icon: params.icon, position: fset.geometry[0].getPosition(), map: map, }); // Use a closure so marker data remains available to the listeners params.overlay[i].addListener = function() { var marker = params.overlay[i].marker; var infowindow = params.infowindow; var content = params.content; var attributes = fset.attributes; google.maps.event.addListener(marker, 'click', function() { infowindow.setContent(content(attributes)); infowindow.open(map, marker); }); }; // Execute params.overlay[i].addListener(); } this.unblockUI(); } }, // UI unblocker wrapper unblockUI: function() { jQuery.unblockUI(); }, // UI blocker wrapper blockUI: function() { jQuery.blockUI(); }, toggleKML: function(params) { // TODO return; }, toggleLayers: function(params) { params.overlay.setOpacity(0); }, // Toggle marker visibility toggleMarkers: function(params, raw) { markers = (raw == true) ? params : params.overlay; for (i=0; i < markers.length; i++) { if (markers[i].marker.getVisible()) { markers[i].marker.setVisible(false); } else { markers[i].marker.setVisible(true); } } }, showOverlay: function(t) { if ($.browser.msie === false) { message = this.config.overlayMessage; if (t == false) { $.blockUI({ message: message }); } else { $.blockUI({ message: message, timeout: t }); } } }, // Change a element in the map changeElement: function(map, params, page, callback) { if (config[params] == undefined || config[params]['showOn'] == undefined) { return; } if (jQuery.inArray(page, config[params]['showOn']) != -1) { this[callback](map, config[params]); } }, // Display deforestation deforestationUpdate: function(layer) { var defaultOpacity = 0.45; if (this.deforestation[layer] == undefined) { this.deforestation[layer] = this.addLayers({ uri: URL_ARCGIS_DESMATAMENTO, opacity: defaultOpacity, layers: [layer], overlayTime: 3000, callback: updateDeforestationOpacity, }); } else { updateDeforestationOpacity(map, { layers: [layer] }); } function updateDeforestationOpacity(map, params) { for (var i in this.deforestation) { if (params.layers[0] == i) { this.deforestation[i].setOpacity(0.45); } else { this.deforestation[i].setOpacity(0); } } // The second and all subsequent layers shall be intialized without opacity. defaultOpacity = 0; } }, } };