Revision 2bbc28c8
Added by Andreas Kohlbecker over 10 years ago
7.x/modules/cdm_dataportal/includes/maps.inc | ||
---|---|---|
78 | 78 |
} |
79 | 79 |
|
80 | 80 |
/** |
81 |
* |
|
81 |
* @param $map_settings |
|
82 |
* The map settings array as retrieved by e.g. get_array_variable_merged(CDM_MAP_DISTRIBUTION, CDM_MAP_DISTRIBUTION_DEFAULT); |
|
82 | 83 |
* @param array $event_listeners |
83 | 84 |
* An associative array of with OpenLayers.Map event names as key and corresponding js callbacks. |
84 | 85 |
* In addition to the event names '#execute' as key is also allowed. |
... | ... | |
92 | 93 |
* force execution of the given callback after registration of the event handlers |
93 | 94 |
* see http://dev.openlayers.org/apidocs/files/OpenLayers/Map-js.html#OpenLayers.Map.events for more |
94 | 95 |
*/ |
95 |
function _add_js_openlayers_map(array $event_listeners = array()) { |
|
96 |
function _add_js_openlayers_map($map_settings, array $event_listeners = array()) {
|
|
96 | 97 |
|
97 | 98 |
_add_js_openlayers(); |
98 | 99 |
|
99 |
$map_settings = get_array_variable_merged(CDM_MAP_DISTRIBUTION, CDM_MAP_DISTRIBUTION_DEFAULT);
|
|
100 |
$baseLayers = $map_settings['openlayers']['base_layers']; |
|
100 |
$edit_map_service = get_edit_map_service_settings();
|
|
101 |
|
|
101 | 102 |
$gmap_api_key = variable_get('gmap_api_key', 'ABQIAAAAFho6eHAcUOTHLmH9IYHAeBRi_j0U6kJrkFvY4-OX2XYmEAa76BTsyMmEq-tn6nFNtD2UdEGvfhvoCQ'); |
102 | 103 |
|
103 | 104 |
drupal_add_js(drupal_get_path('module', 'cdm_dataportal') . '/js/map/openlayers_map.js'); |
104 | 105 |
drupal_add_js(drupal_get_path('module', 'cdm_dataportal') . '/js/map/openlayers_layers.js'); |
105 | 106 |
|
106 |
|
|
107 |
if (!is_array($baseLayers) || count($baseLayers) == 0) { |
|
108 |
$baseLayers = array( |
|
109 |
'metacarta_vmap0' => 'Metacarta Vmap0', |
|
110 |
'PREFERRED' => 'metacarta_vmap0', |
|
111 |
); |
|
112 |
} |
|
113 |
$layerNames = ''; |
|
114 |
foreach ($baseLayers as $layerName => $layerLabel) { |
|
115 |
if ($layerName == 'PREFERRED') { |
|
116 |
$preferredLayer = $baseLayers['PREFERRED']; |
|
107 |
$cdm_openlayers_options = array( |
|
108 |
'legendPosition' => '3', |
|
109 |
'boundingBox' => "'" . $map_settings['bbox'] . "'", |
|
110 |
'distributionOpacity' => "'" . $map_settings['distribution_opacity'] . "'", |
|
111 |
'legendOpacity' => "'" . $map_settings['legend']['opacity'] . "'", |
|
112 |
'showLayerSwitcher' => $map_settings['openlayers']['show_layer_switcher'] == 1, |
|
113 |
'displayOutsideMaxExtent' => $map_settings['openlayers']['display_outside_max_extent'] == 1 |
|
114 |
// if no baseLayerNames or defaultBaseLayerName are not defined |
|
115 |
// the defaults in cdm_openlayers.js will be used |
|
116 |
); |
|
117 |
|
|
118 |
// --- setting the base layer options |
|
119 |
if (is_array($map_settings['openlayers']['base_layers']) && count($map_settings['openlayers']['base_layers']) > 0) { |
|
120 |
|
|
121 |
$layer_names = $map_settings['openlayers']['base_layers']; |
|
122 |
|
|
123 |
if(isset($layer_names['PREFERRED'])){ |
|
124 |
$cdm_openlayers_options['defaultBaseLayerName'] = $layer_names['PREFERRED']; |
|
125 |
unset($layer_names['PREFERRED']); |
|
117 | 126 |
} |
118 |
else { |
|
119 |
$layerNames .= ($layerNames ? ', ' : '') . "'$layerName'"; |
|
127 |
|
|
128 |
$cdm_openlayers_options['baseLayerNames'] = array_values($layer_names); |
|
129 |
|
|
130 |
if (isset($layer_names['gmap']) || isset($layer_names['gsat']) || isset($layer_names['ghyb'])) { |
|
131 |
// gmaps version 2 (needs api key) |
|
132 |
drupal_add_js('http://maps.google.com/maps?file=api&v=2&key=' . $gmap_api_key . '', array('type' => 'external')); |
|
133 |
// gmaps version 3 (does not need api key) |
|
134 |
// drupal_add_js('http://maps.google.com/maps?file=api&v=3&sensor=false', array('type' => 'external')); |
|
135 |
drupal_add_js('http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.1', array('type' => 'external')); |
|
120 | 136 |
} |
121 |
} |
|
122 | 137 |
|
123 |
if (isset($baseLayers['gmap']) || isset($baseLayers['gsat']) || isset($baseLayers['ghyb'])) { |
|
124 |
// gmaps version 2 (needs api key) |
|
125 |
drupal_add_js('http://maps.google.com/maps?file=api&v=2&key=' . $gmap_api_key . '', array('type' => 'external')); |
|
126 |
// gmaps version 3 (does not need api key) |
|
127 |
// drupal_add_js('http://maps.google.com/maps?file=api&v=3&sensor=false', array('type' => 'external')); |
|
128 |
drupal_add_js('http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.1', array('type' => 'external')); |
|
129 | 138 |
} |
130 | 139 |
|
140 |
// --- custom wms base layer |
|
141 |
$map_settings['openlayers']['custom_wms_base_layer']['params'] = json_decode($map_settings['openlayers']['custom_wms_base_layer']['params']); |
|
142 |
$cdm_openlayers_options['customWMSBaseLayerData'] = $map_settings['openlayers']['custom_wms_base_layer']; |
|
143 |
|
|
144 |
// --- eventhandlers |
|
131 | 145 |
$event_listeners_js = ''; |
132 | 146 |
$execute_handler = ''; |
133 | 147 |
foreach($event_listeners as $event=>$js_callback){ |
... | ... | |
138 | 152 |
} |
139 | 153 |
} |
140 | 154 |
|
141 |
$edit_map_service = get_edit_map_service_settings(); |
|
155 |
// // combine keys and values |
|
156 |
// foreach($cdm_openlayers_options as $key=>&$val){ |
|
157 |
// $val = $key . ": " . $val; |
|
158 |
// }; |
|
159 |
|
|
142 | 160 |
// window.onload - is executed when the document and images etc is fully loaded |
143 | 161 |
// Query(document).ready - is executed much earlier, when the DOM is loaded |
144 | 162 |
drupal_add_js(" |
... | ... | |
147 | 165 |
var map_container = jQuery('#openlayers_map').cdm_openlayers_map( |
148 | 166 |
'" . $edit_map_service['base_uri'] . "', |
149 | 167 |
'" . $edit_map_service['version'] . "', |
150 |
{ |
|
151 |
legendPosition: 3, |
|
152 |
boundingBox: '" . $map_settings['bbox'] . "', |
|
153 |
distributionOpacity: '" . $map_settings['distribution_opacity'] . "', |
|
154 |
legendOpacity: '" . $map_settings['legend']['opacity'] . "', |
|
155 |
showLayerSwitcher: " . ($map_settings['openlayers']['show_layer_switcher'] ? 'true' : 'false') . ", |
|
156 |
baseLayerNames: [" . $layerNames . "], |
|
157 |
defaultBaseLayerName: '" . $preferredLayer . "' |
|
158 |
} |
|
168 |
" . json_encode($cdm_openlayers_options) . " |
|
159 | 169 |
); |
160 | 170 |
map_container.each(function(){ |
161 | 171 |
this.cdmOpenlayersMap.registerEvents({" . $event_listeners_js . "}); |
... | ... | |
195 | 205 |
*/ |
196 | 206 |
function get_openlayers_map($width, $height, $bounding_box = FALSE, $occurrenceQuery = FALSE, $distributionQuery = FALSE, $legendFormatQuery = FALSE, $map_caption = FALSE, array $event_listeners = array()) { |
197 | 207 |
|
198 |
_add_js_openlayers_map($event_listeners); |
|
199 |
|
|
200 | 208 |
$map_settings = get_array_variable_merged(CDM_MAP_DISTRIBUTION, CDM_MAP_DISTRIBUTION_DEFAULT); |
201 | 209 |
|
210 |
_add_js_openlayers_map($map_settings, $event_listeners); |
|
211 |
|
|
202 | 212 |
$out = '<div id="openlayers">'; |
203 | 213 |
$out .= '<div id="openlayers_map" class="smallmap"'; |
204 | 214 |
if($width) { |
7.x/modules/cdm_dataportal/js/map/openlayers_layers.js | ||
---|---|---|
97 | 97 |
return new OpenLayers.Layer.OSM(); |
98 | 98 |
|
99 | 99 |
case 'mapquest_open': |
100 |
baselayer = new OpenLayers.Layer.XYZ( |
|
100 |
// see http://developer.mapquest.com/web/products/open/map |
|
101 |
return new OpenLayers.Layer.XYZ( |
|
101 | 102 |
"MapQuest", |
102 | 103 |
[ |
103 | 104 |
"http://otile1.mqcdn.com/tiles/1.0.0/map/${z}/${x}/${y}.png", |
... | ... | |
106 | 107 |
"http://otile4.mqcdn.com/tiles/1.0.0/map/${z}/${x}/${y}.png" |
107 | 108 |
], |
108 | 109 |
{ |
110 |
// If using the MapQuest-OSM tiles, OpenStreetMap must be given credit for the data |
|
109 | 111 |
attribution: "Data, imagery and map information provided by <a href='http://www.mapquest.com/' target='_blank'>MapQuest</a>, <a href='http://www.openstreetmap.org/' target='_blank'>Open Street Map</a> and contributors, <a href='http://creativecommons.org/licenses/by-sa/2.0/' target='_blank'>CC-BY-SA</a> <img src='http://developer.mapquest.com/content/osm/mq_logo.png' border='0'>", |
110 | 112 |
transitionEffect: "resize" |
111 | 113 |
} |
112 | 114 |
); |
113 | 115 |
|
114 | 116 |
case 'mapquest_sat': |
115 |
baselayer = new OpenLayers.Layer.XYZ( |
|
117 |
// see http://developer.mapquest.com/web/products/open/map |
|
118 |
return new OpenLayers.Layer.XYZ( |
|
116 | 119 |
"MapQuest Sattelite", |
117 | 120 |
[ |
118 |
"http://otile1.mqcdn.com/tiles/1.0.0/map/${z}/${x}/${y}.png",
|
|
119 |
"http://otile2.mqcdn.com/tiles/1.0.0/map/${z}/${x}/${y}.png",
|
|
120 |
"http://otile3.mqcdn.com/tiles/1.0.0/map/${z}/${x}/${y}.png",
|
|
121 |
"http://otile4.mqcdn.com/tiles/1.0.0/map/${z}/${x}/${y}.png"
|
|
121 |
"http://otile1.mqcdn.com/tiles/1.0.0/sat/${z}/${x}/${y}.png",
|
|
122 |
"http://otile2.mqcdn.com/tiles/1.0.0/sat/${z}/${x}/${y}.png",
|
|
123 |
"http://otile3.mqcdn.com/tiles/1.0.0/sat/${z}/${x}/${y}.png",
|
|
124 |
"http://otile4.mqcdn.com/tiles/1.0.0/sat/${z}/${x}/${y}.png"
|
|
122 | 125 |
], |
123 | 126 |
{ |
127 |
// If using the MapQuest-OSM tiles, OpenStreetMap must be given credit for the data |
|
124 | 128 |
attribution: "Data, imagery and map information provided by <a href='http://www.mapquest.com/' target='_blank'>MapQuest</a>, <a href='http://www.openstreetmap.org/' target='_blank'>Open Street Map</a> and contributors, <a href='http://creativecommons.org/licenses/by-sa/2.0/' target='_blank'>CC-BY-SA</a> <img src='http://developer.mapquest.com/content/osm/mq_logo.png' border='0'>", |
125 | 129 |
transitionEffect: "resize" |
126 | 130 |
} |
7.x/modules/cdm_dataportal/js/map/openlayers_map.js | ||
---|---|---|
35 | 35 |
* the maxExtent if the aspect ratio of the map and of the baselayer |
36 | 36 |
* are not equal |
37 | 37 |
*/ |
38 |
displayOutsideMaxExtent: true,
|
|
38 |
displayOutsideMaxExtent: false,
|
|
39 | 39 |
customWMSBaseLayerData: { |
40 |
name: "Euro+Med",
|
|
41 |
url: "http://edit.africamuseum.be/geoserver/topp/wms",
|
|
42 |
params: {layers: "topp:em_tiny_jan2003", format:"image/png", tiled: true},
|
|
43 |
projection: "EPSG:7777777",
|
|
44 |
maxExtent: "-1600072.75, -1800000, 5600000, 5850093",
|
|
45 |
unit: 'm'
|
|
40 |
name: null,
|
|
41 |
url: null,
|
|
42 |
params: null,
|
|
43 |
projection: null,
|
|
44 |
max_extent: null,
|
|
45 |
units: null
|
|
46 | 46 |
} |
47 |
// customWMSBaseLayerData: { |
|
48 |
// name: "Euro+Med", |
|
49 |
// url: "http://edit.africamuseum.be/geoserver/topp/wms", |
|
50 |
// params: {layers: "topp:em_tiny_jan2003", format:"image/png", tiled: true}, |
|
51 |
// projection: "EPSG:7777777", |
|
52 |
// maxExtent: "-1600072.75, -1800000, 5600000, 5850093", |
|
53 |
// units: 'm' |
|
54 |
// } |
|
47 | 55 |
}; |
48 | 56 |
})(jQuery); |
49 | 57 |
|
... | ... | |
87 | 95 |
* @param mapElement |
88 | 96 |
* @param mapserverBaseUrl |
89 | 97 |
* @param mapserverVersion |
90 |
* @param options
|
|
98 |
* @param opts |
|
91 | 99 |
* @returns |
92 | 100 |
*/ |
93 |
window.CdmOpenLayers.Map = function(mapElement, mapserverBaseUrl, mapserverVersion, options){
|
|
101 |
window.CdmOpenLayers.Map = function(mapElement, mapserverBaseUrl, mapserverVersion, opts){ |
|
94 | 102 |
|
95 | 103 |
var mapServicePath = '/edit_wp5'; |
96 | 104 |
|
... | ... | |
99 | 107 |
console = { log: function() { } }; |
100 | 108 |
} |
101 | 109 |
|
110 |
// sanitize given options |
|
111 |
try { |
|
112 |
opts.customWMSBaseLayerData.max_extent = OpenLayers.Bounds.fromString(opts.customWMSBaseLayerData.max_extent); |
|
113 |
} catch(e){ |
|
114 |
opts.customWMSBaseLayerData.max_extent = null; |
|
115 |
} |
|
116 |
|
|
102 | 117 |
|
103 | 118 |
var legendImgSrc = null; |
104 | 119 |
|
... | ... | |
138 | 153 |
*/ |
139 | 154 |
this.init = function(){ // public function |
140 | 155 |
|
141 |
createLayers(options.baseLayerNames, options.defaultBaseLayerName, options.customWMSBaseLayerData);
|
|
156 |
createLayers(opts.baseLayerNames, opts.defaultBaseLayerName, opts.customWMSBaseLayerData);
|
|
142 | 157 |
|
143 | 158 |
initMap(); |
144 | 159 |
|
... | ... | |
148 | 163 |
|
149 | 164 |
if(distributionQuery !== undefined){ |
150 | 165 |
if(typeof legendPosition == 'number'){ |
151 |
distributionQuery = mergeQueryStrings(distributionQuery, 'legend=1&mlp=' + options.legendPosition);
|
|
166 |
distributionQuery = mergeQueryStrings(distributionQuery, 'legend=1&mlp=' + opts.legendPosition); |
|
152 | 167 |
} |
153 | 168 |
|
154 | 169 |
distributionQuery = mergeQueryStrings(distributionQuery, 'callback=?'); |
... | ... | |
172 | 187 |
var occurrenceQuery = mapElement.attr('occurrenceQuery'); |
173 | 188 |
if(occurrenceQuery !== undefined){ |
174 | 189 |
// if(typeof legendPosition == 'number'){ |
175 |
// occurrenceQuery = mergeQueryStrings(distributionQuery, 'legend=1&mlp=' + options.legendPosition);
|
|
190 |
// occurrenceQuery = mergeQueryStrings(distributionQuery, 'legend=1&mlp=' + opts.legendPosition); |
|
176 | 191 |
// } |
177 | 192 |
|
178 | 193 |
occurrenceQuery = mergeQueryStrings(occurrenceQuery, 'callback=?'); |
... | ... | |
215 | 230 |
|
216 | 231 |
/** |
217 | 232 |
* Prints info on the current map into the jQuery element |
218 |
* as set in the options (options.infoElement)
|
|
233 |
* as set in the options (opts.infoElement) |
|
219 | 234 |
* public function |
220 | 235 |
* |
221 | 236 |
* @param jQuery $element |
... | ... | |
227 | 242 |
|
228 | 243 |
var info = "<dl>"; |
229 | 244 |
info += "<dt>zoom:<dt><dd>" + map.getZoom() + "</dd>"; |
230 |
info += "<dt>map resolution:<dt><dd>" + map.getResolution() + "</dd>"; |
|
231 |
info += "<dt>map max resolution:<dt><dd>" + map.getMaxResolution() + "</dd>"; |
|
232 |
info += "<dt>map scale:<dt><dd>" + map.getScale() + "</dd>"; |
|
233 |
info += "<dt>map extent bbox:<dt><dd>" + map.getExtent().toBBOX() + " (" + mapExtendDegree.toBBOX() + ")</dd>"; |
|
234 |
info += "<dt>map maxExtent bbox:<dt><dd>" + map.getMaxExtent().toBBOX() + "</dd>"; |
|
235 |
info += "<dt>baselayer projection:<dt><dd>" + map.baseLayer.projection.getCode() + "</dd>"; |
|
245 |
if(opts.debug){ |
|
246 |
info += "<dt>map resolution:<dt><dd>" + map.getResolution() + "</dd>"; |
|
247 |
info += "<dt>map max resolution:<dt><dd>" + map.getMaxResolution() + "</dd>"; |
|
248 |
info += "<dt>map scale:<dt><dd>" + map.getScale() + "</dd>"; |
|
249 |
info += "<dt>map extent bbox:<dt><dd>" + map.getExtent().toBBOX() + " (" + mapExtendDegree.toBBOX() + ")</dd>"; |
|
250 |
info += "<dt>map maxExtent bbox:<dt><dd>" + map.getMaxExtent().toBBOX() + "</dd>"; |
|
251 |
info += "<dt>baselayer projection:<dt><dd>" + map.baseLayer.projection.getCode() + "</dd>"; |
|
252 |
} else { |
|
253 |
info += "<dt>bbox:<dt><dd>" + mapExtendDegree.toBBOX() + "</dd>"; |
|
254 |
} |
|
236 | 255 |
info += "</dl>"; |
237 | 256 |
|
238 | 257 |
if(infoElement == null){ |
... | ... | |
248 | 267 |
var initMap = function(){ |
249 | 268 |
|
250 | 269 |
|
251 |
if(options.showLayerSwitcher === true){
|
|
270 |
if(opts.showLayerSwitcher === true){ |
|
252 | 271 |
defaultControls.push(new OpenLayers.Control.LayerSwitcher({'ascending':false})); |
253 | 272 |
} |
254 | 273 |
|
... | ... | |
256 | 275 |
var maxResolution = null; |
257 | 276 |
// gmaps has no maxExtent at this point, need to check for null |
258 | 277 |
if(defaultBaseLayer.maxExtent != null){ |
259 |
maxResolution = Math[(options.displayOutsideMaxExtent ? 'max' : 'min')](
|
|
278 |
maxResolution = Math[(opts.displayOutsideMaxExtent ? 'max' : 'min')]( |
|
260 | 279 |
defaultBaseLayer.maxExtent.getWidth() / mapWidth, |
261 | 280 |
defaultBaseLayer.maxExtent.getHeight() / mapHeight |
262 | 281 |
); |
... | ... | |
289 | 308 |
// fractional tiles are not supported by XYZ layers like OSM so this option would |
290 | 309 |
// however break the tile retrieval for OSM (e.g.: tile for frational zoom level |
291 | 310 |
// 1.2933333333333332 = http://b.tile.openstreetmap.org/1.2933333333333332/1/0.png) |
292 |
// fractionalZoom: 1,
|
|
311 |
fractionalZoom: defaultBaseLayer.CLASS_NAME != "OpenLayers.Layer.OSM" && defaultBaseLayer.CLASS_NAME != "OpenLayers.Layer.XYZ",
|
|
293 | 312 |
|
294 |
eventListeners: options.eventListeners
|
|
313 |
eventListeners: opts.eventListeners |
|
295 | 314 |
|
296 | 315 |
} |
297 | 316 |
); |
... | ... | |
301 | 320 |
map.setBaseLayer(defaultBaseLayer); |
302 | 321 |
|
303 | 322 |
// calculate the bounds to zoom to |
304 |
zoomToBounds = zoomToBoundsFor(options.boundingBox, defaultBaseLayer);
|
|
323 |
zoomToBounds = zoomToBoundsFor(opts.boundingBox, defaultBaseLayer); |
|
305 | 324 |
zoomToBounds = cropBoundsToAspectRatio(zoomToBounds, map.getSize().w / map.getSize().h); |
306 | 325 |
console.log("zoomToBounds: " + zoomToBounds); |
307 | 326 |
|
... | ... | |
309 | 328 |
map.zoomToExtent(zoomToBounds, true); |
310 | 329 |
|
311 | 330 |
// readjust if the zoom level is out side of the min max |
312 |
// if(map.getZoom() > options.maxZoom){
|
|
313 |
// map.zoomTo(options.maxZoom);
|
|
314 |
// } else if(map.getZoom() < options.minZoom){
|
|
315 |
// map.zoomTo(options.minZoom);
|
|
331 |
// if(map.getZoom() > opts.maxZoom){ |
|
332 |
// map.zoomTo(opts.maxZoom); |
|
333 |
// } else if(map.getZoom() < opts.minZoom){ |
|
334 |
// map.zoomTo(opts.minZoom); |
|
316 | 335 |
// } |
317 | 336 |
|
318 | 337 |
}; |
... | ... | |
366 | 385 |
{layers: layerByNameMap[layerData.tdwg] ,transparent:"true", format:"image/png"}, |
367 | 386 |
dataLayerOptions ); |
368 | 387 |
layer.params.SLD = layerData.sld; |
369 |
layer.setOpacity(options.distributionOpacity);
|
|
388 |
layer.setOpacity(opts.distributionOpacity); |
|
370 | 389 |
map.addLayers([layer]); |
371 | 390 |
|
372 | 391 |
} |
... | ... | |
384 | 403 |
} |
385 | 404 |
map.zoomToExtent(dataBounds, false); |
386 | 405 |
|
387 |
if(map.getZoom() > options.maxZoom){
|
|
388 |
map.zoomTo(options.maxZoom);
|
|
389 |
} else if(map.getZoom() < options.minZoom){
|
|
390 |
map.zoomTo(options.minZoom);
|
|
406 |
if(map.getZoom() > opts.maxZoom){ |
|
407 |
map.zoomTo(opts.maxZoom); |
|
408 |
} else if(map.getZoom() < opts.minZoom){ |
|
409 |
map.zoomTo(opts.minZoom); |
|
391 | 410 |
} |
392 | 411 |
} |
393 | 412 |
|
394 | 413 |
|
395 |
if(options.legendPosition !== undefined && mapResponseObj.legend !== undefined){
|
|
414 |
if(opts.legendPosition !== undefined && mapResponseObj.legend !== undefined){ |
|
396 | 415 |
var legendSrcUrl = mapResponseObj.geoserver + legendImgSrc + mapResponseObj.legend; |
397 | 416 |
addLegendAsElement(legendSrcUrl); |
398 | 417 |
//addLegendAsLayer(legendSrcUrl, map); |
... | ... | |
407 | 426 |
var addLegendAsElement= function(legendSrcUrl){ |
408 | 427 |
|
409 | 428 |
mapElement.after('<div class="openlayers_legend"><img src="' + legendSrcUrl + '"></div>'); |
410 |
mapElement.next('.openlayers_legend').css('opacity', options.legendOpacity).find('img').load(function () {
|
|
429 |
mapElement.next('.openlayers_legend').css('opacity', opts.legendOpacity).find('img').load(function () { |
|
411 | 430 |
jQuery(this).parent() |
412 | 431 |
.css('position', 'relative') |
413 | 432 |
.css('z-index', '1002') |
... | ... | |
423 | 442 |
|
424 | 443 |
// 1. download imge to find height and width |
425 | 444 |
mapElement.after('<div class="openlayers_legend"><img src="' + legendSrcUrl + '"></div>'); |
426 |
mapElement.next('.openlayers_legend').css('display', 'none').css('opacity', options.legendOpacity).find('img').load(function () {
|
|
445 |
mapElement.next('.openlayers_legend').css('display', 'none').css('opacity', opts.legendOpacity).find('img').load(function () { |
|
427 | 446 |
|
428 | 447 |
w = mapElement.next('.openlayers_legend').find('img').width(); |
429 | 448 |
h = mapElement.next('.openlayers_legend').find('img').height(); |
... | ... | |
471 | 490 |
* |
472 | 491 |
*/ |
473 | 492 |
var createLayers = function( baseLayerNames, defaultBaseLayerName, customWMSBaseLayerData){ |
474 |
var i = 0; |
|
475 |
for(; i < baseLayerNames.length; i++) { |
|
476 |
baseLayers[i] = window.CdmOpenLayers.getLayerByName(baseLayerNames[i]); |
|
493 |
|
|
494 |
for(var i = 0; i < baseLayerNames.length; i++) { |
|
495 |
// create the layer |
|
496 |
if (baseLayerNames[i] == "custom_wms_base_layer_1"){ |
|
497 |
baseLayers[i] = createWMSBaseLayer( |
|
498 |
customWMSBaseLayerData.name, |
|
499 |
customWMSBaseLayerData.url, |
|
500 |
customWMSBaseLayerData.params, |
|
501 |
customWMSBaseLayerData.projection, |
|
502 |
customWMSBaseLayerData.units, |
|
503 |
customWMSBaseLayerData.max_extent |
|
504 |
); |
|
505 |
} else { |
|
506 |
baseLayers[i] = window.CdmOpenLayers.getLayerByName(baseLayerNames[i]); |
|
507 |
} |
|
508 |
// set default baselayer |
|
477 | 509 |
if(baseLayerNames[i] == defaultBaseLayerName){ |
478 | 510 |
defaultBaseLayer = baseLayers[i]; |
479 | 511 |
} |
480 |
} |
|
481 |
if(false && customWMSBaseLayerData){ |
|
482 |
var wmsLayer = createWMSBaseLayer( |
|
483 |
customWMSBaseLayerData.name, |
|
484 |
customWMSBaseLayerData.url, |
|
485 |
customWMSBaseLayerData.params, |
|
486 |
customWMSBaseLayerData.projection, |
|
487 |
customWMSBaseLayerData.unit, |
|
488 |
OpenLayers.Bounds.fromString(customWMSBaseLayerData.maxExtent) |
|
489 |
); |
|
490 |
// FIXME remove HACK (customWMSBaseLayerData as default) |
|
491 |
baseLayers[i++] = wmsLayer; |
|
492 |
defaultBaseLayer = wmsLayer; |
|
512 |
|
|
493 | 513 |
} |
494 | 514 |
}; |
495 | 515 |
|
... | ... | |
609 | 629 |
* @param Object projection |
610 | 630 |
* A OpenLayers.Projection object |
611 | 631 |
*/ |
612 |
var createWMSBaseLayer= function(name, url, params, projection, unit, maxExtent){ |
|
632 |
var createWMSBaseLayer= function(name, url, params, projection, units, maxExtent){
|
|
613 | 633 |
|
614 | 634 |
if(maxExtent == null){ |
615 | 635 |
maxExtent = CdmOpenLayers.mapExtends.epsg_4326.clone(); |
... | ... | |
623 | 643 |
{ |
624 | 644 |
maxExtent: maxExtent, |
625 | 645 |
projection: projection, |
626 |
unit: unit,
|
|
646 |
units: units,
|
|
627 | 647 |
isBaseLayer: true, |
628 | 648 |
displayInLayerSwitcher: true |
629 | 649 |
} |
7.x/modules/cdm_dataportal/settings.php | ||
---|---|---|
261 | 261 |
// it is sufficient to define the preferred layer, |
262 | 262 |
// since it will automatically be enabled: |
263 | 263 |
'PREFERRED' => 'osgeo_vmap0'), |
264 |
'show_layer_switcher' => TRUE |
|
264 |
'custom_wms_base_layer' => array( |
|
265 |
'name' => NULL, |
|
266 |
'url' => NULL, |
|
267 |
'params' => NULL, |
|
268 |
'projection' => NULL, |
|
269 |
'max_extent' => NULL, |
|
270 |
'units' => NULL |
|
271 |
), |
|
272 |
'show_layer_switcher' => TRUE, |
|
273 |
'display_outside_max_extent' => FALSE |
|
265 | 274 |
), |
266 | 275 |
'legend' => array( |
267 | 276 |
'show' => TRUE, |
... | ... | |
1605 | 1614 |
'#title' => t('Map preview'), |
1606 | 1615 |
'#collapsible' => FALSE, |
1607 | 1616 |
'#description' => 'The preview of the map' |
1608 |
. ($dummy_distribution_query != null ? ' may not be accurate in case if image maps, please check the map display in the taxon pages.': '.') |
|
1617 |
. ($dummy_distribution_query != null ? |
|
1618 |
' may not be accurate in case if image maps, please check the map display in the taxon pages.': |
|
1619 |
'.<br/>Hold down Strg and drag with your mouse to select a bbox to zoom to. <br/>The bbox of the visisble area of the map is always displayed below the map.') |
|
1609 | 1620 |
); |
1610 | 1621 |
$form['map_preview']['map'] = compose_map(NULL, $dummy_distribution_query, NULL, |
1611 | 1622 |
array( |
... | ... | |
1701 | 1712 |
'#default_value' => $map_distribution['bbox'], |
1702 | 1713 |
'#description' => t('The bounding box defines the area to be initially displayed in maps. |
1703 | 1714 |
Use "-180,-90,180,90" for the whole world. Leave <strong>empty</strong> |
1704 |
to let the map <strong>automatically zoom</strong> to the bounds enclosing the shown data.'), |
|
1715 |
to let the map <strong>automatically zoom</strong> to the bounds enclosing the shown data.</p> |
|
1716 |
<strong>TIP: </strong>You can use the map preview above to choose a bbox from the map. Maybe you need to change the map type to OpeLayers. |
|
1717 |
Hold down Strg and drag with your mouse to select a bbox to zoom to. The bbox of the visisble area of the map is always displayed |
|
1718 |
below the map from where you can copy the bbox string.</p>'), |
|
1705 | 1719 |
); |
1706 | 1720 |
|
1707 | 1721 |
$form[CDM_MAP_DISTRIBUTION]['show_labels'] = array( |
... | ... | |
1795 | 1809 |
'#description' => '', |
1796 | 1810 |
); |
1797 | 1811 |
|
1812 |
|
|
1813 |
$form[CDM_MAP_DISTRIBUTION]['openlayers']['display_outside_max_extent'] = array( |
|
1814 |
'#type' => 'checkbox', |
|
1815 |
'#title' => 'Display outside max extent', |
|
1816 |
'#default_value' => $map_distribution['openlayers']['display_outside_max_extent'], |
|
1817 |
'#description' => t('Allows the map to display parts of the layers which are outside |
|
1818 |
the max extent if the aspect ratio of the map and of the baselayer |
|
1819 |
are not equal.'), |
|
1820 |
); |
|
1821 |
|
|
1822 |
$form[CDM_MAP_DISTRIBUTION]['openlayers']['show_layer_switcher'] = array( |
|
1823 |
'#type' => 'checkbox', |
|
1824 |
'#title' => 'Show Layer Switcher', |
|
1825 |
'#default_value' => $map_distribution['openlayers']['show_layer_switcher'], |
|
1826 |
'#description' => 'The Layer Switcher control displays a table of contents |
|
1827 |
for the map. This allows the user interface to switch between |
|
1828 |
base layers and to show or hide overlays. By default the switcher is |
|
1829 |
shown minimized on the right edge of the map, the user may expand it |
|
1830 |
by clicking on the handle.', |
|
1831 |
); |
|
1832 |
|
|
1798 | 1833 |
if (!$open_layers_is_enabled) { |
1799 | 1834 |
$form[CDM_MAP_DISTRIBUTION]['openlayers']['#description'] = '<div class="messages warning">' |
1800 | 1835 |
. 'The Openlayers viewer is currently not enabled! (see section Maps settings above )</div>' |
... | ... | |
1812 | 1847 |
// 'edit-vmap0_world_basic' => 'EDIT Vmap0', |
1813 | 1848 |
'edit-etopo1' => "ETOPO1 Global Relief Model", |
1814 | 1849 |
'mapnik' => 'OpenStreetMap', |
1815 |
'osmarender' => 'OpenStreetMap (Tiles@home)', |
|
1850 |
'mapquest_open' => "MapQuest", |
|
1851 |
'mapquest_sat' => "MapQuest Sattelite", |
|
1852 |
// 'osmarender' => 'OpenStreetMap (Tiles@home)', |
|
1816 | 1853 |
'gmap' => 'Google Streets', |
1817 | 1854 |
'gsat' => 'Google Satellite', |
1818 | 1855 |
'ghyb' => 'Google Hybrid', |
... | ... | |
1822 | 1859 |
// 'yahoo' => 'Yahoo Street', |
1823 | 1860 |
// 'yahoosat' => 'Yahoo Satellite', |
1824 | 1861 |
// 'yahoohyb' => 'Yahoo Hybrid', |
1862 |
'custom_wms_base_layer_1' => 'Custom WMS base layer (needs to be manually configured below!)', |
|
1825 | 1863 |
); |
1826 | 1864 |
|
1827 | 1865 |
$form[CDM_MAP_DISTRIBUTION]['openlayers']['base_layers'] = array( |
... | ... | |
1832 | 1870 |
'#description' => 'Choose the baselayer layer you prefer to use as map background in the OpenLayers dynamic mapviewer.', |
1833 | 1871 |
); |
1834 | 1872 |
|
1835 |
// cdm_dataportal_geoservice_showLayerSwitcher |
|
1836 |
$form[CDM_MAP_DISTRIBUTION]['openlayers']['show_layer_switcher'] = array( |
|
1837 |
'#type' => 'checkbox', |
|
1838 |
'#title' => 'Show Layer Switcher', |
|
1839 |
'#default_value' => $map_distribution['openlayers']['show_layer_switcher'], |
|
1840 |
'#description' => 'The Layer Switcher control displays a table of contents |
|
1841 |
for the map. This allows the user interface to switch between |
|
1842 |
base layers and to show or hide overlays. By default the switcher is |
|
1843 |
shown minimized on the right edge of the map, the user may expand it |
|
1844 |
by clicking on the handle.', |
|
1873 |
$form[CDM_MAP_DISTRIBUTION]['openlayers']['custom_wms_base_layer'] = array( |
|
1874 |
'#type' => 'fieldset', |
|
1875 |
'#title' => 'Custom WMS base layer', |
|
1876 |
'#tree' => TRUE, |
|
1877 |
'#collapsible' => FALSE, |
|
1878 |
'#collapsed' => FALSE, |
|
1879 |
'#description' => 'Here you an define a custom wms layer as additional base layer.', |
|
1880 |
); |
|
1881 |
|
|
1882 |
$form[CDM_MAP_DISTRIBUTION]['openlayers']['custom_wms_base_layer']['name'] = array( |
|
1883 |
'#type' => 'textfield', |
|
1884 |
'#title' => 'Layer name', |
|
1885 |
// Only line color by now. |
|
1886 |
'#default_value' => $map_distribution['openlayers']['custom_wms_base_layer']['name'], |
|
1887 |
'#description' => 'A arbitrary name for the layer.', |
|
1888 |
); |
|
1889 |
$form[CDM_MAP_DISTRIBUTION]['openlayers']['custom_wms_base_layer']['url'] = array( |
|
1890 |
'#type' => 'textfield', |
|
1891 |
'#title' => 'WMS url', |
|
1892 |
// Only line color by now. |
|
1893 |
'#default_value' => $map_distribution['openlayers']['custom_wms_base_layer']['url'], |
|
1894 |
'#description' => 'Base url for the WMS (e.g. http://wms.jpl.nasa.gov/wms.cgi)' |
|
1895 |
); |
|
1896 |
$form[CDM_MAP_DISTRIBUTION]['openlayers']['custom_wms_base_layer']['params'] = array( |
|
1897 |
'#type' => 'textarea', |
|
1898 |
'#title' => 'WMS parameters', |
|
1899 |
'#element_validate' => array('form_element_validate_json'), |
|
1900 |
// Only line color by now. |
|
1901 |
'#default_value' => $map_distribution['openlayers']['custom_wms_base_layer']['params'], |
|
1902 |
'#description' => 'An javasript object with key/value pairs representing the GetMap query string parameters and parameter values, entered in valid JSON.' |
|
1903 |
); |
|
1904 |
$form[CDM_MAP_DISTRIBUTION]['openlayers']['custom_wms_base_layer']['projection'] = array( |
|
1905 |
'#type' => 'textfield', |
|
1906 |
'#title' => 'Projection', |
|
1907 |
// Only line color by now. |
|
1908 |
'#default_value' => $map_distribution['openlayers']['custom_wms_base_layer']['projection'], |
|
1909 |
'#description' => 'The desired projection for the layer (e.g. EPSG:4326, EPSG:900913, EPSG:3857)' |
|
1910 |
); |
|
1911 |
$form[CDM_MAP_DISTRIBUTION]['openlayers']['custom_wms_base_layer']['max_extent'] = array( |
|
1912 |
'#type' => 'textfield', |
|
1913 |
'#title' => 'Maximum extent', |
|
1914 |
// Only line color by now. |
|
1915 |
'#default_value' => $map_distribution['openlayers']['custom_wms_base_layer']['max_extent'], |
|
1916 |
'#description' => 'The maximum extent of the map as boundin box in the units of the map.' |
|
1917 |
); |
|
1918 |
$form[CDM_MAP_DISTRIBUTION]['openlayers']['custom_wms_base_layer']['units'] = array( |
|
1919 |
'#type' => 'textfield', |
|
1920 |
'#title' => 'Units', |
|
1921 |
'#default_value' => $map_distribution['openlayers']['custom_wms_base_layer']['units'], |
|
1922 |
'#description' => 'The layer map units. Defaults to null. Possible values are ‘degrees’ (or ‘dd’), ‘m’, ‘ft’, ‘km’, ‘mi’, ‘inches’. Normally taken from the projection. Only required if both map and layers do not define a projection, or if they define a projection which does not define units.' |
|
1845 | 1923 |
); |
1846 | 1924 |
|
1847 | 1925 |
/* |
... | ... | |
2325 | 2403 |
* Form submission handler for textareas and textfields containing JSON. |
2326 | 2404 |
* |
2327 | 2405 |
* The contained JSON will be converted into an php array |
2328 |
* or object and will be stores in the variables as such.
|
|
2406 |
* or object and will be stored in the variables as such.
|
|
2329 | 2407 |
* |
2330 | 2408 |
* @see http://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#submit |
2331 | 2409 |
* |
7.x/modules/cdm_dataportal/theme/cdm_dataportal.descriptions.theme | ||
---|---|---|
1081 | 1081 |
); |
1082 | 1082 |
|
1083 | 1083 |
// Query cdm server for map service uri parameters. |
1084 |
$map_data_parameters = cdm_ws_get(CDM_WS_GEOSERVICE_DISTRIBUTIONMAP, $taxon->uuid);
|
|
1085 |
$out .= "<!-- map_data_parameters:" . print_r($map_data_parameters, TRUE) . " -->";
|
|
1086 |
$query_string = $map_data_parameters->String;
|
|
1084 |
$query_string = cdm_ws_get(CDM_WS_GEOSERVICE_DISTRIBUTIONMAP, $taxon->uuid);
|
|
1085 |
$query_string = $query_string->String;
|
|
1086 |
$out .= "<!-- map_data_parameters:" . print_r($query_string, TRUE) . " -->";
|
|
1087 | 1087 |
if (!$query_string) { |
1088 | 1088 |
// The $query_string is empty if there are no distribution areas defined. |
1089 | 1089 |
return; |
1090 | 1090 |
} |
1091 | 1091 |
|
1092 |
// Some cleaning of the URI paramters, TODO is this still needed? |
|
1093 |
$query_string = str_replace('%3A', ":", $query_string); |
|
1094 |
|
|
1095 | 1092 |
/* ------ choose the display mode, either openlayers or static image ------ */ |
1096 | 1093 |
|
1097 | 1094 |
$map_settings = get_array_variable_merged(CDM_MAP_DISTRIBUTION, CDM_MAP_DISTRIBUTION_DEFAULT); |
Also available in: Unified diff
adding support for custom wms and solving some bugs