aboutsummaryrefslogtreecommitdiff
path: root/gmap_arcgis.js
blob: 8dd44814c66617d9c458c6622576108c16738dc5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// $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
  var fallback = 'http://mapserver.fqdn/rest/services/app/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) {
    fields = ["id", "name"];
    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);
});