diff options
Diffstat (limited to 'gmap_arcgis.js')
-rw-r--r-- | gmap_arcgis.js | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/gmap_arcgis.js b/gmap_arcgis.js new file mode 100644 index 0000000..0691ad4 --- /dev/null +++ b/gmap_arcgis.js @@ -0,0 +1,137 @@ +// $Id$ + +// Load Google Maps API +google.load("maps", "2.x"); + +// Global variables +var map, mapExtension, gOverlays; + +// Setup custom ISA GMap Overlays (layers and labels) +function gmap_arcgis() { + + // Fallback setting + // TODO: general default settings instead of custom ISA config + var fallback = 'http://isamapas.socioambiental.org:8399/arcgis/rest/services/uc_isa/MapServer'; + var polygons = [ fallback ]; + var labels = [ fallback + '/2' ]; + var fields = new Array(); + var id = 'auto1map'; + + // Get data from Drupal + if (Drupal.settings.gmap_arcgis !== undefined) { + // Get array of polygons + if (Drupal.settings.gmap_arcgis.polygons !== undefined) { + polygons = Drupal.settings.gmap_arcgis.polygons; + } + // Get array of labels + if (Drupal.settings.gmap_arcgis.labels !== undefined) { + labels = Drupal.settings.gmap_arcgis.labels; + } + // Get Map Id + if (Drupal.settings.gmap_arcgis.id !== undefined) { + id = Drupal.settings.gmap_arcgis.id; + } + } + + // Get an existing GMap instance using Drupal GMap Module API + // and add an ArcGIS extension to it + map = Drupal.gmap.getMap(id).map; + mapExtension = new esri.arcgis.gmaps.MapExtension(map); + + for each (var label in labels) { + // TODO: general default settings instead of custom ISA config + fields = ["id_arp", "nome_uc"]; + icon = new GIcon(G_DEFAULT_ICON); + if (label[1] !== undefined) { + // Set custom fields + fields = [ label[1][0], label[1][1] ]; + } + if (label[2] !== undefined) { + // Set label icons + var info = label[2]; + icon.shadow = info[0]; + icon.image = info[1]; + icon.infoSize = new GSize(info[2][0], info[2][1]); + icon.shadowSize = new GSize(info[3][0], info[3][1]); + icon.infoAnchor = new GPoint(info[4][0], info[4][1]); + icon.infoWindowAnchor = new GPoint(info[5][0], info[5][1]); + } + GEvent.addListener(map, "moveend", function() { showLabels(label[0], fields, icon); }); + showLabels(label[0], fields, icon); + } + + for each (var polygon in polygons) { + showPolygons(polygon); + } +} + +// Add labels from a given ArcGIS MapServer Layer +function showLabels(label, fields, icon) { + var bounds = map.getBounds(); + var queryTask = new esri.arcgis.gmaps.QueryTask(label); + var query = new esri.arcgis.gmaps.Query(); + + // clear gOverlays overlays and event listeners + //mapExtension.removeFromMap(gOverlays); + + // set query parameters + query.queryGeometry = bounds; + query.returnGeometry = true; + query.outFields = fields; + + // set the callback + var callback = showLabelsCallback(icon); + + // execute query task + queryTask.execute(query, false, callback); +} + +// Callback for showLabels +function showLabelsCallback(icon) { + return function(fset) { + // JS literal class esri.arcgis.gmaps.MarkerOptions + // TODO: general default settings instead of custom ISA config + var myMarkerOptions = { title:"{nome_uc}", icon:icon }; + + // JS literal class esri.arcgis.gmaps.OverlayOptions + var overlayOptions = { markerOptions:myMarkerOptions }; + + // JS literal class esri.arcgis.gmaps.InfoWindowOptions without tabs + var infoWindowOptions = { + // TODO: general default settings instead of custom ISA config + content:"<h2>{nome_uc}</h2><a href=\"?q=/uc/{id_arp}\">Mais informações sobre esta UC</a>" + }; + + gOverlays = mapExtension.addToMap(fset, overlayOptions, infoWindowOptions); + } +} + +// Add polygons from a given ArcGIS MapServer Layer +function showPolygons(uri) { + polygons = new esri.arcgis.gmaps.DynamicMapServiceLayer(uri, null, 0.45, showPolygonsCallback); +} + +// Callback for showPolygons +function showPolygonsCallback(mapservicelayer, error) { + map.addOverlay(mapservicelayer); +} + +// Add custom marker +function createMarker(point, name, html, icone) { + var icon = new GIcon(); + icon.image = icone; + icon.shadow = "http://maps.google.com/mapfiles/ms/micons/msmarker.shadow.png"; + icon.iconSize = new GSize(12, 20); + icon.shadowSize = new GSize(22, 20); + icon.iconAnchor = new GPoint(6, 20); + icon.infoWindowAnchor = new GPoint(5, 1); + + var marker = new GMarker(point); + GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(html); }); + return marker; +} + +// Add map overlays +$(document).ready(function() { + google.setOnLoadCallback(gmap_arcgis); +}); |