94
59
function addLayers(map) {
96
var mapnik = new OpenLayers.Layer.TMS( 'OSM Mapnik', 'http://tile.openstreetmap.org/', {type: 'png', getURL: osm_getTileURL, displayOutsideMaxExtent: true, attribution: '<a href="http://www.openstreetmap.org/">OpenStreetMap</a>' } );
63
var mapnik = new OpenLayers.Layer.OSM.Mapnik('OSM Mapnik', {
65
displayOutsideMaxExtent: true,
97
69
map.addLayer(mapnik);
71
var osmarender = new OpenLayers.Layer.OSM.Osmarender('OSM Osmarender', {
73
displayOutsideMaxExtent: true,
77
map.addLayer(osmarender);
81
var googlesat = new OpenLayers.Layer.Google( 'Google Satellite' , {type: G_SATELLITE_MAP, 'sphericalMercator': true } );
82
map.addLayer(googlesat);
86
var yahoosat = new OpenLayers.Layer.Yahoo( 'Yahoo Satellite' , {type: YAHOO_MAP_SAT, 'sphericalMercator': true } );
87
map.addLayer(yahoosat);
102
var format_kml = new OpenLayers.Format.KML({
104
extractAttributes: true,
107
var format_georss = new OpenLayers.Format.GeoRSS();
104
var icon_img = new Image();
109
var featureLayers = new Array();
111
var parser = new OpenLayers.Format.WKT();
112
var geom, featureVec;
114
function addFeature(feature_id, name, feature_class, geom, iconURL) {
115
geom = geom.transform(proj4326, projection_current);
117
icon_img.src = iconURL;
118
width = icon_img.width;
119
height = icon_img.height;
121
height = ((max_w / width) * height);
125
width = ((max_h / height) * width);
128
// Needs to be uniquely instantiated
129
var style_marker = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
130
style_marker.graphicOpacity = 1;
131
style_marker.graphicWidth = width;
132
style_marker.graphicHeight = height;
133
style_marker.graphicXOffset = -(width / 2);
134
style_marker.graphicYOffset = -height;
135
style_marker.externalGraphic = iconURL;
136
// Create Feature Vector
137
var featureVec = new OpenLayers.Feature.Vector(geom, null, style_marker);
138
featureVec.fid = feature_id;
139
featureVec.attributes.name = name;
140
featureVec.attributes.feature_class = feature_class;
144
function loadDetails(url, id, popup) {
149
$('#' + id + '_contentDiv').html(data);
157
// Style Rule For Clusters
158
var style_cluster = new OpenLayers.Style({
159
pointRadius: "${radius}",
160
fillColor: "#8087ff",
162
strokeColor: "#2b2f76",
167
radius: function(feature) {
168
// Size For Unclustered Point
170
// Size For Clustered Point
171
if(feature.cluster) {
172
pix = Math.min(feature.attributes.count, 7) + 4;
178
// Define StyleMap, Using 'style_cluster' rule for 'default' styling intent
179
var featureClusterStyleMap = new OpenLayers.StyleMap({
180
"default": style_cluster,
182
fillColor: "#ffdc33",
183
strokeColor: "#ff9933"
187
var featureLayerTowns = new OpenLayers.Layer.Vector(
190
strategies: [ new OpenLayers.Strategy.Cluster({distance: 5, threshold: 2}) ],
191
styleMap: featureClusterStyleMap
194
featureLayerTowns.setVisibility(false);
195
map.addLayer(featureLayerTowns);
196
featureLayerTowns.events.on({
197
"featureselected": onFeatureSelectTowns,
198
"featureunselected": onFeatureUnselect
200
featureLayers.push(featureLayerTowns);
202
function onFeatureSelectTowns(event) {
203
// unselect any previous selections
204
tooltipUnselect(event);
205
var feature = event.feature;
206
if(feature.cluster) {
208
// Create Empty Array to Contain Feature Names
209
var clusterFeaturesArray = [];
210
// Add Each Feature To Array
211
for (var i = 0; i < feature.cluster.length; i++)
213
var clusterFeaturesArrayName = feature.cluster[i].attributes.name;
214
var clusterFeaturesArrayType = feature.cluster[i].attributes.feature_class;
215
var clusterFeaturesArrayX = feature.cluster[i].geometry.x;
216
var clusterFeaturesArrayY = feature.cluster[i].geometry.y;
217
var clusterFeaturesArrayID = feature.cluster[i].fid;
220
var clusterFeaturesArrayEntry = "<li>" + clusterFeaturesArrayName + "</li>";
222
clusterFeaturesArray.push(clusterFeaturesArrayEntry);
226
var selectedFeature = feature;
227
var id = 'featureLayerTownsPopup';
228
var popup = new OpenLayers.Popup.FramedCloud(
230
feature.geometry.getBounds().getCenterLonLat(),
231
new OpenLayers.Size(200, 200),
232
"Loading...<img src='/eden/static/img/ajax-loader.gif' border=0>",
237
feature.popup = popup;
239
// call AJAX to get the contentHTML
240
var uuid = feature.fid;
241
loadDetails('/eden/gis/location/read.popup?location.id=' + '?location.uid=' + uuid, id, popup);
245
featureLayerTowns.addFeatures(features);
248
// Style Rule For Clusters
249
var style_cluster = new OpenLayers.Style({
250
pointRadius: "${radius}",
251
fillColor: "#8087ff",
253
strokeColor: "#2b2f76",
258
radius: function(feature) {
259
// Size For Unclustered Point
261
// Size For Clustered Point
262
if(feature.cluster) {
263
pix = Math.min(feature.attributes.count, 7) + 4;
269
// Define StyleMap, Using 'style_cluster' rule for 'default' styling intent
270
var featureClusterStyleMap = new OpenLayers.StyleMap({
271
"default": style_cluster,
273
fillColor: "#ffdc33",
274
strokeColor: "#ff9933"
278
var featureLayerTransport = new OpenLayers.Layer.Vector(
281
strategies: [ new OpenLayers.Strategy.Cluster({distance: 5, threshold: 2}) ],
282
styleMap: featureClusterStyleMap
285
featureLayerTransport.setVisibility(false);
286
map.addLayer(featureLayerTransport);
287
featureLayerTransport.events.on({
288
"featureselected": onFeatureSelectTransport,
289
"featureunselected": onFeatureUnselect
291
featureLayers.push(featureLayerTransport);
293
function onFeatureSelectTransport(event) {
294
// unselect any previous selections
295
tooltipUnselect(event);
296
var feature = event.feature;
297
if(feature.cluster) {
299
// Create Empty Array to Contain Feature Names
300
var clusterFeaturesArray = [];
301
// Add Each Feature To Array
302
for (var i = 0; i < feature.cluster.length; i++)
304
var clusterFeaturesArrayName = feature.cluster[i].attributes.name;
305
var clusterFeaturesArrayType = feature.cluster[i].attributes.feature_class;
306
var clusterFeaturesArrayX = feature.cluster[i].geometry.x;
307
var clusterFeaturesArrayY = feature.cluster[i].geometry.y;
308
var clusterFeaturesArrayID = feature.cluster[i].fid;
311
var clusterFeaturesArrayEntry = "<li>" + clusterFeaturesArrayName + "</li>";
313
clusterFeaturesArray.push(clusterFeaturesArrayEntry);
317
var selectedFeature = feature;
318
var id = 'featureLayerTransportPopup';
319
var popup = new OpenLayers.Popup.FramedCloud(
321
feature.geometry.getBounds().getCenterLonLat(),
322
new OpenLayers.Size(200, 200),
323
"Loading...<img src='/eden/static/img/ajax-loader.gif' border=0>",
328
feature.popup = popup;
330
// call AJAX to get the contentHTML
331
var uuid = feature.fid;
332
loadDetails('/eden/gis/location/read.popup?location.id=' + '?location.uid=' + uuid, id, popup);
336
featureLayerTransport.addFeatures(features);
339
// Style Rule For Clusters
340
var style_cluster = new OpenLayers.Style({
341
pointRadius: "${radius}",
342
fillColor: "#8087ff",
344
strokeColor: "#2b2f76",
349
radius: function(feature) {
350
// Size For Unclustered Point
352
// Size For Clustered Point
353
if(feature.cluster) {
354
pix = Math.min(feature.attributes.count, 7) + 4;
360
// Define StyleMap, Using 'style_cluster' rule for 'default' styling intent
361
var featureClusterStyleMap = new OpenLayers.StyleMap({
362
"default": style_cluster,
364
fillColor: "#ffdc33",
365
strokeColor: "#ff9933"
369
var featureLayerProgramme = new OpenLayers.Layer.Vector(
372
strategies: [ new OpenLayers.Strategy.Cluster({distance: 5, threshold: 2}) ],
373
styleMap: featureClusterStyleMap
376
featureLayerProgramme.setVisibility(false);
377
map.addLayer(featureLayerProgramme);
378
featureLayerProgramme.events.on({
379
"featureselected": onFeatureSelectProgramme,
380
"featureunselected": onFeatureUnselect
382
featureLayers.push(featureLayerProgramme);
384
function onFeatureSelectProgramme(event) {
385
// unselect any previous selections
386
tooltipUnselect(event);
387
var feature = event.feature;
388
if(feature.cluster) {
390
// Create Empty Array to Contain Feature Names
391
var clusterFeaturesArray = [];
392
// Add Each Feature To Array
393
for (var i = 0; i < feature.cluster.length; i++)
395
var clusterFeaturesArrayName = feature.cluster[i].attributes.name;
396
var clusterFeaturesArrayType = feature.cluster[i].attributes.feature_class;
397
var clusterFeaturesArrayX = feature.cluster[i].geometry.x;
398
var clusterFeaturesArrayY = feature.cluster[i].geometry.y;
399
var clusterFeaturesArrayID = feature.cluster[i].fid;
402
var clusterFeaturesArrayEntry = "<li>" + clusterFeaturesArrayName + "</li>";
404
clusterFeaturesArray.push(clusterFeaturesArrayEntry);
408
var selectedFeature = feature;
409
var id = 'featureLayerProgrammePopup';
410
var popup = new OpenLayers.Popup.FramedCloud(
412
feature.geometry.getBounds().getCenterLonLat(),
413
new OpenLayers.Size(200, 200),
414
"Loading...<img src='/eden/static/img/ajax-loader.gif' border=0>",
419
feature.popup = popup;
421
// call AJAX to get the contentHTML
422
var uuid = feature.fid;
423
loadDetails('/eden/gis/location/read.popup?location.id=' + '?location.uid=' + uuid, id, popup);
427
featureLayerProgramme.addFeatures(features);
430
// Style Rule For Clusters
431
var style_cluster = new OpenLayers.Style({
432
pointRadius: "${radius}",
433
fillColor: "#8087ff",
435
strokeColor: "#2b2f76",
440
radius: function(feature) {
441
// Size For Unclustered Point
443
// Size For Clustered Point
444
if(feature.cluster) {
445
pix = Math.min(feature.attributes.count, 7) + 4;
451
// Define StyleMap, Using 'style_cluster' rule for 'default' styling intent
452
var featureClusterStyleMap = new OpenLayers.StyleMap({
453
"default": style_cluster,
455
fillColor: "#ffdc33",
456
strokeColor: "#ff9933"
460
var featureLayerHospitals = new OpenLayers.Layer.Vector(
463
strategies: [ new OpenLayers.Strategy.Cluster({distance: 5, threshold: 2}) ],
464
styleMap: featureClusterStyleMap
467
featureLayerHospitals.setVisibility(false);
468
map.addLayer(featureLayerHospitals);
469
featureLayerHospitals.events.on({
470
"featureselected": onFeatureSelectHospitals,
471
"featureunselected": onFeatureUnselect
473
featureLayers.push(featureLayerHospitals);
475
function onFeatureSelectHospitals(event) {
476
// unselect any previous selections
477
tooltipUnselect(event);
478
var feature = event.feature;
479
if(feature.cluster) {
481
// Create Empty Array to Contain Feature Names
482
var clusterFeaturesArray = [];
483
// Add Each Feature To Array
484
for (var i = 0; i < feature.cluster.length; i++)
486
var clusterFeaturesArrayName = feature.cluster[i].attributes.name;
487
var clusterFeaturesArrayType = feature.cluster[i].attributes.feature_class;
488
var clusterFeaturesArrayX = feature.cluster[i].geometry.x;
489
var clusterFeaturesArrayY = feature.cluster[i].geometry.y;
490
var clusterFeaturesArrayID = feature.cluster[i].fid;
493
var clusterFeaturesArrayEntry = "<li>" + clusterFeaturesArrayName + "</li>";
495
clusterFeaturesArray.push(clusterFeaturesArrayEntry);
499
var selectedFeature = feature;
500
var id = 'featureLayerHospitalsPopup';
501
var popup = new OpenLayers.Popup.FramedCloud(
503
feature.geometry.getBounds().getCenterLonLat(),
504
new OpenLayers.Size(200, 200),
505
"Loading...<img src='/eden/static/img/ajax-loader.gif' border=0>",
510
feature.popup = popup;
512
// call AJAX to get the contentHTML
513
var uuid = feature.fid;
514
loadDetails('/eden/gis/location/read.popup?location.id=' + '?location.uid=' + uuid, id, popup);
518
featureLayerHospitals.addFeatures(features);
521
// Style Rule For Clusters
522
var style_cluster = new OpenLayers.Style({
523
pointRadius: "${radius}",
524
fillColor: "#8087ff",
526
strokeColor: "#2b2f76",
531
radius: function(feature) {
532
// Size For Unclustered Point
534
// Size For Clustered Point
535
if(feature.cluster) {
536
pix = Math.min(feature.attributes.count, 7) + 4;
542
// Define StyleMap, Using 'style_cluster' rule for 'default' styling intent
543
var featureClusterStyleMap = new OpenLayers.StyleMap({
544
"default": style_cluster,
546
fillColor: "#ffdc33",
547
strokeColor: "#ff9933"
110
551
var featureLayerOffices = new OpenLayers.Layer.Vector(
113
projection: proj4326,
114
strategies: [ new OpenLayers.Strategy.Fixed(), new OpenLayers.Strategy.Cluster({distance: 5, threshold: 2}) ],
115
protocol: new OpenLayers.Protocol.HTTP({
116
url: '/eden/default/download/gis_cache.file.Offices.kml',
554
strategies: [ new OpenLayers.Strategy.Cluster({distance: 5, threshold: 2}) ],
555
styleMap: featureClusterStyleMap
121
558
featureLayerOffices.setVisibility(false);
122
559
map.addLayer(featureLayerOffices);
123
560
featureLayerOffices.events.on({
124
"featureselected": onKmlFeatureSelectOffices,
125
"featureunselected": onFeatureUnselect
127
allLayers.push(featureLayerOffices);
561
"featureselected": onFeatureSelectOffices,
562
"featureunselected": onFeatureUnselect
564
featureLayers.push(featureLayerOffices);
566
function onFeatureSelectOffices(event) {
567
// unselect any previous selections
568
tooltipUnselect(event);
569
var feature = event.feature;
570
if(feature.cluster) {
572
// Create Empty Array to Contain Feature Names
573
var clusterFeaturesArray = [];
574
// Add Each Feature To Array
575
for (var i = 0; i < feature.cluster.length; i++)
577
var clusterFeaturesArrayName = feature.cluster[i].attributes.name;
578
var clusterFeaturesArrayType = feature.cluster[i].attributes.feature_class;
579
var clusterFeaturesArrayX = feature.cluster[i].geometry.x;
580
var clusterFeaturesArrayY = feature.cluster[i].geometry.y;
581
var clusterFeaturesArrayID = feature.cluster[i].fid;
584
var clusterFeaturesArrayEntry = "<li>" + clusterFeaturesArrayName + "</li>";
586
clusterFeaturesArray.push(clusterFeaturesArrayEntry);
590
var selectedFeature = feature;
591
var id = 'featureLayerOfficesPopup';
592
var popup = new OpenLayers.Popup.FramedCloud(
594
feature.geometry.getBounds().getCenterLonLat(),
595
new OpenLayers.Size(200, 200),
596
"Loading...<img src='/eden/static/img/ajax-loader.gif' border=0>",
601
feature.popup = popup;
603
// call AJAX to get the contentHTML
604
var uuid = feature.fid;
605
loadDetails('/eden/gis/location/read.popup?location.id=' + '?location.uid=' + uuid, id, popup);
609
featureLayerOffices.addFeatures(features);
612
// Style Rule For Clusters
613
var style_cluster = new OpenLayers.Style({
614
pointRadius: "${radius}",
615
fillColor: "#8087ff",
617
strokeColor: "#2b2f76",
622
radius: function(feature) {
623
// Size For Unclustered Point
625
// Size For Clustered Point
626
if(feature.cluster) {
627
pix = Math.min(feature.attributes.count, 7) + 4;
633
// Define StyleMap, Using 'style_cluster' rule for 'default' styling intent
634
var featureClusterStyleMap = new OpenLayers.StyleMap({
635
"default": style_cluster,
637
fillColor: "#ffdc33",
638
strokeColor: "#ff9933"
642
var featureLayerPeople = new OpenLayers.Layer.Vector(
645
strategies: [ new OpenLayers.Strategy.Cluster({distance: 5, threshold: 2}) ],
646
styleMap: featureClusterStyleMap
649
featureLayerPeople.setVisibility(false);
650
map.addLayer(featureLayerPeople);
651
featureLayerPeople.events.on({
652
"featureselected": onFeatureSelectPeople,
653
"featureunselected": onFeatureUnselect
655
featureLayers.push(featureLayerPeople);
657
function onFeatureSelectPeople(event) {
658
// unselect any previous selections
659
tooltipUnselect(event);
660
var feature = event.feature;
661
if(feature.cluster) {
663
// Create Empty Array to Contain Feature Names
664
var clusterFeaturesArray = [];
665
// Add Each Feature To Array
666
for (var i = 0; i < feature.cluster.length; i++)
668
var clusterFeaturesArrayName = feature.cluster[i].attributes.name;
669
var clusterFeaturesArrayType = feature.cluster[i].attributes.feature_class;
670
var clusterFeaturesArrayX = feature.cluster[i].geometry.x;
671
var clusterFeaturesArrayY = feature.cluster[i].geometry.y;
672
var clusterFeaturesArrayID = feature.cluster[i].fid;
675
var clusterFeaturesArrayEntry = "<li>" + clusterFeaturesArrayName + "</li>";
677
clusterFeaturesArray.push(clusterFeaturesArrayEntry);
681
var selectedFeature = feature;
682
var id = 'featureLayerPeoplePopup';
683
var popup = new OpenLayers.Popup.FramedCloud(
685
feature.geometry.getBounds().getCenterLonLat(),
686
new OpenLayers.Size(200, 200),
687
"Loading...<img src='/eden/static/img/ajax-loader.gif' border=0>",
692
feature.popup = popup;
694
// call AJAX to get the contentHTML
695
var uuid = feature.fid;
696
loadDetails('/eden/gis/location/read.popup?location.id=' + '?location.uid=' + uuid, id, popup);
700
featureLayerPeople.addFeatures(features);
703
// Style Rule For Clusters
704
var style_cluster = new OpenLayers.Style({
705
pointRadius: "${radius}",
706
fillColor: "#8087ff",
708
strokeColor: "#2b2f76",
713
radius: function(feature) {
714
// Size For Unclustered Point
716
// Size For Clustered Point
717
if(feature.cluster) {
718
pix = Math.min(feature.attributes.count, 7) + 4;
724
// Define StyleMap, Using 'style_cluster' rule for 'default' styling intent
725
var featureClusterStyleMap = new OpenLayers.StyleMap({
726
"default": style_cluster,
728
fillColor: "#ffdc33",
729
strokeColor: "#ff9933"
733
var featureLayerProjects = new OpenLayers.Layer.Vector(
736
strategies: [ new OpenLayers.Strategy.Cluster({distance: 5, threshold: 2}) ],
737
styleMap: featureClusterStyleMap
740
featureLayerProjects.setVisibility(false);
741
map.addLayer(featureLayerProjects);
742
featureLayerProjects.events.on({
743
"featureselected": onFeatureSelectProjects,
744
"featureunselected": onFeatureUnselect
746
featureLayers.push(featureLayerProjects);
748
function onFeatureSelectProjects(event) {
749
// unselect any previous selections
750
tooltipUnselect(event);
751
var feature = event.feature;
752
if(feature.cluster) {
754
// Create Empty Array to Contain Feature Names
755
var clusterFeaturesArray = [];
756
// Add Each Feature To Array
757
for (var i = 0; i < feature.cluster.length; i++)
759
var clusterFeaturesArrayName = feature.cluster[i].attributes.name;
760
var clusterFeaturesArrayType = feature.cluster[i].attributes.feature_class;
761
var clusterFeaturesArrayX = feature.cluster[i].geometry.x;
762
var clusterFeaturesArrayY = feature.cluster[i].geometry.y;
763
var clusterFeaturesArrayID = feature.cluster[i].fid;
766
var clusterFeaturesArrayEntry = "<li>" + clusterFeaturesArrayName + "</li>";
768
clusterFeaturesArray.push(clusterFeaturesArrayEntry);
772
var selectedFeature = feature;
773
var id = 'featureLayerProjectsPopup';
774
var popup = new OpenLayers.Popup.FramedCloud(
776
feature.geometry.getBounds().getCenterLonLat(),
777
new OpenLayers.Size(200, 200),
778
"Loading...<img src='/eden/static/img/ajax-loader.gif' border=0>",
783
feature.popup = popup;
785
// call AJAX to get the contentHTML
786
var uuid = feature.fid;
787
loadDetails('/eden/gis/location/read.popup?location.id=' + '?location.uid=' + uuid, id, popup);
791
featureLayerProjects.addFeatures(features);
794
// Style Rule For Clusters
795
var style_cluster = new OpenLayers.Style({
796
pointRadius: "${radius}",
797
fillColor: "#8087ff",
799
strokeColor: "#2b2f76",
804
radius: function(feature) {
805
// Size For Unclustered Point
807
// Size For Clustered Point
808
if(feature.cluster) {
809
pix = Math.min(feature.attributes.count, 7) + 4;
815
// Define StyleMap, Using 'style_cluster' rule for 'default' styling intent
816
var featureClusterStyleMap = new OpenLayers.StyleMap({
817
"default": style_cluster,
819
fillColor: "#ffdc33",
820
strokeColor: "#ff9933"
824
var featureLayerVehicles = new OpenLayers.Layer.Vector(
827
strategies: [ new OpenLayers.Strategy.Cluster({distance: 5, threshold: 2}) ],
828
styleMap: featureClusterStyleMap
831
featureLayerVehicles.setVisibility(false);
832
map.addLayer(featureLayerVehicles);
833
featureLayerVehicles.events.on({
834
"featureselected": onFeatureSelectVehicles,
835
"featureunselected": onFeatureUnselect
837
featureLayers.push(featureLayerVehicles);
839
function onFeatureSelectVehicles(event) {
840
// unselect any previous selections
841
tooltipUnselect(event);
842
var feature = event.feature;
843
if(feature.cluster) {
845
// Create Empty Array to Contain Feature Names
846
var clusterFeaturesArray = [];
847
// Add Each Feature To Array
848
for (var i = 0; i < feature.cluster.length; i++)
850
var clusterFeaturesArrayName = feature.cluster[i].attributes.name;
851
var clusterFeaturesArrayType = feature.cluster[i].attributes.feature_class;
852
var clusterFeaturesArrayX = feature.cluster[i].geometry.x;
853
var clusterFeaturesArrayY = feature.cluster[i].geometry.y;
854
var clusterFeaturesArrayID = feature.cluster[i].fid;
857
var clusterFeaturesArrayEntry = "<li>" + clusterFeaturesArrayName + "</li>";
859
clusterFeaturesArray.push(clusterFeaturesArrayEntry);
863
var selectedFeature = feature;
864
var id = 'featureLayerVehiclesPopup';
865
var popup = new OpenLayers.Popup.FramedCloud(
867
feature.geometry.getBounds().getCenterLonLat(),
868
new OpenLayers.Size(200, 200),
869
"Loading...<img src='/eden/static/img/ajax-loader.gif' border=0>",
874
feature.popup = popup;
876
// call AJAX to get the contentHTML
877
var uuid = feature.fid;
878
loadDetails('/eden/gis/location/read.popup?location.id=' + '?location.uid=' + uuid, id, popup);
882
featureLayerVehicles.addFeatures(features);
884
allLayers = allLayers.concat(featureLayers);
130
var georssLayers = new Array();
132
function onGeorssFeatureSelect(event) {
133
// unselect any previous selections
134
tooltipUnselect(event);
135
var feature = event.feature;
136
var selectedFeature = feature;
137
if (undefined == feature.attributes.description) {
138
var popup = new OpenLayers.Popup.FramedCloud("chicken",
139
feature.geometry.getBounds().getCenterLonLat(),
140
new OpenLayers.Size(200,200),
141
"<h2>" + feature.attributes.title + "</h2>",
142
null, true, onPopupClose);
144
var popup = new OpenLayers.Popup.FramedCloud("chicken",
145
feature.geometry.getBounds().getCenterLonLat(),
146
new OpenLayers.Size(200,200),
147
"<h2>" + feature.attributes.title + "</h2>" + feature.attributes.description,
148
null, true, onPopupClose);
150
feature.popup = popup;
151
popup.feature = feature;
155
function addGeorssLayerEarthquakes() {
156
var iconURL = "/eden/default/download/gis_marker.image.Geo_Earth_Quake_Epicenter.png";
157
var style_marker = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
158
style_marker.graphicOpacity = 1;
159
var icon_img = new Image();
160
icon_img.src = iconURL;
161
var width = icon_img.width;
162
var height = icon_img.height;
164
height = ((max_w / width) * height);
168
width = ((max_h / height) * width);
171
style_marker.graphicWidth = width;
172
style_marker.graphicHeight = height;
173
style_marker.graphicXOffset = -(width / 2);
174
style_marker.graphicYOffset = -height;
175
style_marker.externalGraphic = iconURL;
176
var georssLayerEarthquakes = new OpenLayers.Layer.Vector( "Earthquakes", {
177
projection: proj4326,
178
strategies: [ new OpenLayers.Strategy.Fixed(), new OpenLayers.Strategy.Cluster({distance: 5, threshold: 2}) ],
180
protocol: new OpenLayers.Protocol.HTTP({
181
url: "/eden/default/download/gis_cache.file.Earthquakes.rss",
182
format: format_georss
185
georssLayerEarthquakes.setVisibility(false);
187
map.addLayer(georssLayerEarthquakes);
188
georssLayers.push(georssLayerEarthquakes);
189
georssLayerEarthquakes.events.on({ "featureselected": onGeorssFeatureSelect, "featureunselected": onFeatureUnselect });
191
addGeorssLayerEarthquakes()
193
function addGeorssLayerVolcanoes() {
194
var iconURL = "/eden/default/download/gis_marker.image.Geo_Volcanic_Threat.png";
195
var style_marker = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
196
style_marker.graphicOpacity = 1;
197
var icon_img = new Image();
198
icon_img.src = iconURL;
199
var width = icon_img.width;
200
var height = icon_img.height;
202
height = ((max_w / width) * height);
206
width = ((max_h / height) * width);
209
style_marker.graphicWidth = width;
210
style_marker.graphicHeight = height;
211
style_marker.graphicXOffset = -(width / 2);
212
style_marker.graphicYOffset = -height;
213
style_marker.externalGraphic = iconURL;
214
var georssLayerVolcanoes = new OpenLayers.Layer.Vector( "Volcanoes", {
215
projection: proj4326,
216
strategies: [ new OpenLayers.Strategy.Fixed(), new OpenLayers.Strategy.Cluster({distance: 5, threshold: 2}) ],
218
protocol: new OpenLayers.Protocol.HTTP({
219
url: "/eden/default/download/gis_cache.file.Volcanoes.rss",
220
format: format_georss
223
georssLayerVolcanoes.setVisibility(false);
225
map.addLayer(georssLayerVolcanoes);
226
georssLayers.push(georssLayerVolcanoes);
227
georssLayerVolcanoes.events.on({ "featureselected": onGeorssFeatureSelect, "featureunselected": onFeatureUnselect });
229
addGeorssLayerVolcanoes()
231
allLayers = allLayers.concat(georssLayers);
234
function loadDetails(url, id) {
238
$('#' + id).html(data);
245
function onKmlFeatureSelectOffices(event) {
246
// unselect any previous selections
247
tooltipUnselect(event);
248
var feature = event.feature;
249
var selectedFeature = feature;
250
var id = 'featureLayerOffices' + '_' + Math.floor(Math.random()*1001)
251
var popup = new OpenLayers.Popup.FramedCloud(
253
feature.geometry.getBounds().getCenterLonLat(),
254
new OpenLayers.Size(400, 400),
255
"<div style='height: 400px; width: 400px; overflow: auto;'>Loading...<img src='/eden/static/img/ajax-loader.gif' border=0></div>",
260
feature.popup = popup;
262
// call AJAX to get the data
263
var uuid = feature.attributes.styleUrl.replace(new RegExp('^[#"]+', 'g'), '');
264
loadDetails('/eden/gis/location' + '?location.uid=' + uuid, id);
269
898
function osm_getTileURL(bounds) {
270
899
var res = this.map.getResolution();
271
900
var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
383
1024
highlightControl.activate();
384
1025
popupControl.activate();
386
var mapPanel = new GeoExt.MapPanel({
1029
mapPanel = new GeoExt.MapPanel({
387
1030
region: 'center',
391
1034
xtype: 'gx_mappanel',
395
1039
tbar: new Ext.Toolbar()
398
var layerTreeBase = new GeoExt.tree.BaseLayerContainer({
1045
toolbar = mapPanel.getTopToolbar();
1047
// OpenLayers controls
1050
var measureSymbolizers = {
1053
graphicName: 'circle',
1058
strokeColor: '#f5902e'
1063
strokeColor: '#f5902e',
1064
strokeDashstyle: 'dash'
1069
strokeColor: '#f5902e',
1074
var styleMeasure = new OpenLayers.Style();
1075
styleMeasure.addRules([
1076
new OpenLayers.Rule({symbolizer: measureSymbolizers})
1078
var styleMapMeasure = new OpenLayers.StyleMap({'default': styleMeasure});
1080
var length = new OpenLayers.Control.Measure(
1081
OpenLayers.Handler.Path, {
1085
layerOptions: {styleMap: styleMapMeasure}
1090
'measure': function(evt) {
1091
alert('The length is ' + evt.measure.toFixed(2) + ' ' + evt.units);
1094
var area = new OpenLayers.Control.Measure(
1095
OpenLayers.Handler.Polygon, {
1099
layerOptions: {styleMap: styleMapMeasure}
1104
'measure': function(evt) {
1105
alert('The area is ' + evt.measure.toFixed(2) + ' ' + evt.units + '2');
1110
// Controls for Draft Features
1111
// - interferes with Feature Layers!
1112
//var selectControl = new OpenLayers.Control.SelectFeature(featuresLayer, {
1113
// onSelect: onFeatureSelect,
1114
// onUnselect: onFeatureUnselect,
1120
//var removeControl = new OpenLayers.Control.RemoveFeature(featuresLayer,
1121
// {onDone: function(feature) {console.log(feature)}
1124
var nav = new OpenLayers.Control.NavigationHistory();
1127
var zoomfull = new GeoExt.Action({
1128
control: new OpenLayers.Control.ZoomToMaxExtent(),
1130
iconCls: 'zoomfull',
1132
tooltip: 'Zoom to maximum map extent'
1135
var zoomout = new GeoExt.Action({
1136
control: new OpenLayers.Control.ZoomBox({ out: true }),
1140
tooltip: 'Zoom Out: click in the map or use the left mouse button and drag to create a rectangle',
1141
toggleGroup: 'controls'
1144
var zoomin = new GeoExt.Action({
1145
control: new OpenLayers.Control.ZoomBox(),
1149
tooltip: 'Zoom In: click in the map or use the left mouse button and drag to create a rectangle',
1150
toggleGroup: 'controls'
1153
var pan = new GeoExt.Action({
1154
control: new OpenLayers.Control.Navigation(),
1158
tooltip: 'Pan Map: keep the left mouse button pressed and drag the map',
1159
toggleGroup: 'controls',
1160
allowDepress: false,
1164
// 1st of these 2 to get activated cannot be deselected!
1165
var lengthButton = new GeoExt.Action({
1168
iconCls: 'measure-off',
1170
tooltip: 'Measure Length: Click the points along the path & end with a double-click',
1171
toggleGroup: 'controls',
1176
var areaButton = new GeoExt.Action({
1179
iconCls: 'measure-area',
1181
tooltip: 'Measure Area: Click the points around the polygon & end with a double-click',
1182
toggleGroup: 'controls',
1189
var selectButton = new GeoExt.Action({
1190
//control: selectControl,
1192
iconCls: 'searchclick',
1194
tooltip: 'Query Feature',
1195
toggleGroup: 'controls',
1199
//var pointButton = new GeoExt.Action({
1200
// control: new OpenLayers.Control.DrawFeature(featuresLayer, OpenLayers.Handler.Point),
1202
// iconCls: 'drawpoint-off',
1203
// tooltip: 'Add Point',
1204
// toggleGroup: 'controls'
1207
//var lineButton = new GeoExt.Action({
1208
// control: new OpenLayers.Control.DrawFeature(featuresLayer, OpenLayers.Handler.Path),
1210
// iconCls: 'drawline-off',
1211
// tooltip: 'Add Line',
1212
// toggleGroup: 'controls'
1215
//var polygonButton = new GeoExt.Action({
1216
// control: new OpenLayers.Control.DrawFeature(featuresLayer, OpenLayers.Handler.Polygon),
1218
// iconCls: 'drawpolygon-off',
1219
// tooltip: 'Add Polygon',
1220
// toggleGroup: 'controls'
1223
//var dragButton = new GeoExt.Action({
1224
// control: new OpenLayers.Control.DragFeature(featuresLayer),
1226
// iconCls: 'movefeature',
1227
// tooltip: 'Move Feature: Drag feature to desired location',
1228
// toggleGroup: 'controls'
1231
//var resizeButton = new GeoExt.Action({
1232
// control: new OpenLayers.Control.ModifyFeature(featuresLayer, { mode: OpenLayers.Control.ModifyFeature.RESIZE }),
1234
// iconCls: 'resizefeature',
1235
// tooltip: 'Resize Feature: Select the feature you wish to resize & then Drag the associated dot to your desired size',
1236
// toggleGroup: 'controls'
1239
//var rotateButton = new GeoExt.Action({
1240
// control: new OpenLayers.Control.ModifyFeature(featuresLayer, { mode: OpenLayers.Control.ModifyFeature.ROTATE }),
1242
// iconCls: 'rotatefeature',
1243
// tooltip: 'Rotate Feature: Select the feature you wish to rotate & then Drag the associated dot to rotate to your desired location',
1244
// toggleGroup: 'controls'
1247
//var modifyButton = new GeoExt.Action({
1248
// control: new OpenLayers.Control.ModifyFeature(featuresLayer),
1250
// iconCls: 'modifyfeature',
1251
// tooltip: 'Modify Feature: Select the feature you wish to deform & then Drag one of the dots to deform the feature in your chosen manner',
1252
// toggleGroup: 'controls'
1255
//var removeButton = new GeoExt.Action({
1256
// control: removeControl,
1258
// iconCls: 'removefeature',
1259
// tooltip: 'Remove Feature: Select the feature you wish to remove & press the delete key',
1260
// toggleGroup: 'controls'
1263
var navPreviousButton = new Ext.Toolbar.Button({
1265
tooltip: 'Previous View',
1266
handler: nav.previous.trigger
1269
var navNextButton = new Ext.Toolbar.Button({
1271
tooltip: 'Next View',
1272
handler: nav.next.trigger
1275
var saveButton = new Ext.Toolbar.Button({
1278
tooltip: 'Save: Default Lat, Lon & Zoom for the Viewport',
1279
handler: function saveViewport(map) {
1280
// Read current settings from map
1281
var lonlat = map.getCenter();
1282
var zoom_current = map.getZoom();
1283
// Convert back to LonLat for saving
1284
//var proj4326 = new OpenLayers.Projection('EPSG:4326');
1285
lonlat.transform(map.getProjectionObject(), proj4326);
1286
//alert('Latitude': ' + lat);
1287
// Use AJAX to send back
1288
var url = '/eden/gis/config/1.json/update';
1292
// Add to Map & Toolbar
1293
toolbar.add(zoomfull);
1294
toolbar.add(zoomout);
1295
toolbar.add(zoomin);
1297
toolbar.addSeparator();
1299
toolbar.add(lengthButton);
1300
toolbar.add(areaButton);
1301
toolbar.addSeparator();
1304
//toolbar.add(selectButton);
1305
//toolbar.add(pointButton);
1306
//toolbar.add(lineButton);
1307
//toolbar.add(polygonButton);
1308
//toolbar.add(dragButton);
1309
//toolbar.add(resizeButton);
1310
//toolbar.add(rotateButton);
1311
//toolbar.add(modifyButton);
1312
//toolbar.add(removeButton);
1313
//toolbar.addSeparator();
1315
map.addControl(nav);
1317
toolbar.addButton(navPreviousButton);
1318
toolbar.addButton(navNextButton);
1319
toolbar.addSeparator();
1321
toolbar.addButton(saveButton);
1325
var mapSearch = new GeoExt.ux.geonames.GeoNamesSearchCombo({
1330
var searchCombo = new Ext.Panel({
1331
title: 'Search Geonames',
1337
collapseMode: 'mini',
1339
html: 'Geonames.org search requires Internet connectivity!',
1342
items: [ mapSearch ]
1347
var layerTreeBase = {
399
1348
text: 'Base Layers',
400
layerStore: mapPanel.layers,
405
var layerTreeFeaturesInternal = new GeoExt.tree.OverlayLayerContainer({
1349
nodeType: 'gx_baselayercontainer',
1350
layerStore: mapPanel.layers,
1355
var layerTreeFeaturesExternal = {
1356
text: 'External Features',
1357
nodeType: 'gx_overlaylayercontainer',
1358
layerStore: mapPanel.layers,
1363
var layerTreeFeaturesInternal = {
406
1364
//text: 'Internal Features',
407
1365
text: 'Overlays',
1366
nodeType: 'gx_overlaylayercontainer',
408
1367
layerStore: mapPanel.layers,
413
var root = new Ext.tree.AsyncTreeNode({
415
loader: new GeoExt.tree.WMSCapabilitiesLoader({
416
url: OpenLayers.ProxyHost + 'http%3A//preview.grid.unep.ch%3A8080/geoserver/ows%3Fservice%3DWMS%26request%3DGetCapabilities',
417
layerOptions: {buffer: 0, singleTile: true, ratio: 1},
418
layerParams: {'TRANSPARENT': 'TRUE'},
419
// customize the createNode method to add a checkbox to nodes
420
createNode: function(attr) {
421
attr.checked = attr.leaf ? false : undefined;
422
return GeoExt.tree.WMSCapabilitiesLoader.prototype.createNode.apply(this, [attr]);
426
wmsBrowser = new Ext.tree.TreePanel({
434
collapseMode: 'mini',
437
// Add layers to the map when checked, remove when unchecked.
438
// Note that this does not take care of maintaining the layer
440
'checkchange': function(node, checked) {
441
if (checked === true) {
442
mapPanel.map.addLayer(node.attributes.layer);
444
mapPanel.map.removeLayer(node.attributes.layer);
451
layerTree = new Ext.tree.TreePanel({
1374
var layerTree = new Ext.tree.TreePanel({
452
1375
id: 'treepanel',
1377
loader: new Ext.tree.TreeLoader({applyLoader: false}),
454
1378
root: new Ext.tree.AsyncTreeNode({
1382
//layerTreeFeaturesExternal,
458
1383
layerTreeFeaturesInternal
459
//layerTreeFeaturesExternal
462
1386
rootVisible: false,