Revision 79f1762d
Added by Andreas Kohlbecker almost 7 years ago
modules/cdm_dataportal/js/map/openlayers_map.js | ||
---|---|---|
334 | 334 |
); |
335 | 335 |
|
336 | 336 |
if(map.addLayer(wmsOverlay)){ |
337 |
// map.setLayerZIndex(wmsOverlay, 100);
|
|
337 |
map.setLayerIndex(wmsOverlay, 100);
|
|
338 | 338 |
wmsOverlay.setVisibility(true); |
339 | 339 |
log("Overlay wms added"); |
340 | 340 |
} else { |
... | ... | |
546 | 546 |
*/ |
547 | 547 |
var createDataLayer = function(mapResponseObj, dataType){ |
548 | 548 |
|
549 |
console.log("creating data layer of type " + dataType); |
|
550 |
|
|
551 |
var dataLayerOptions = { |
|
552 |
isBaseLayer: false, |
|
553 |
displayInLayerSwitcher: true, |
|
554 |
maxExtent: map.maxExtent.clone().transform(new OpenLayers.Projection("EPSG:4326"), map.baseLayer.projection), |
|
555 |
displayOutsideMaxExtent: true |
|
556 |
}; |
|
557 |
|
|
558 |
var layers = []; |
|
559 |
// add additional layers, get them from the mapResponseObj |
|
560 |
if(mapResponseObj !== undefined){ |
|
561 |
if(dataType == "POINT" && mapResponseObj.points_sld !== undefined){ |
|
562 |
var pointLayer; |
|
563 |
// it is a response for an point map |
|
564 |
var geoserverUri; |
|
565 |
if(mapResponseObj.geoserver) { |
|
566 |
geoserverUri = mapResponseObj.geoserver; |
|
567 |
} else { |
|
568 |
// it is an old service which is not providing the corresponding geoserver URI, so we guess it |
|
569 |
geoserverUri = mapserverBaseUrl + "/geoserver/wms"; |
|
570 |
} |
|
571 |
|
|
572 |
//TODO points_sld should be renamed to sld in response + fill path to sld should be given |
|
573 |
pointLayer = new OpenLayers.Layer.WMS( |
|
574 |
'points', |
|
575 |
geoserverUri, |
|
576 |
{ |
|
577 |
layers: 'topp:rest_points', |
|
578 |
transparent:"true", |
|
579 |
format:"image/png" |
|
580 |
}, |
|
581 |
dataLayerOptions |
|
582 |
); |
|
549 |
console.log("creating data layer of type " + dataType); |
|
550 |
|
|
551 |
dataLayerOptions = makeWMSLayerOptions(); |
|
552 |
dataLayerOptions.displayOutsideMaxExtent = true; // move into makeWMSLayerOptions? |
|
553 |
|
|
554 |
var layers = []; |
|
555 |
// add additional layers, get them from the mapResponseObj |
|
556 |
if(mapResponseObj !== undefined){ |
|
557 |
if(dataType === "POINT" && mapResponseObj.points_sld !== undefined){ |
|
558 |
var pointLayer; |
|
559 |
// it is a response for an point map |
|
560 |
var geoserverUri; |
|
561 |
if(mapResponseObj.geoserver) { |
|
562 |
geoserverUri = mapResponseObj.geoserver; |
|
563 |
} else { |
|
564 |
// it is an old service which is not providing the corresponding geoserver URI, so we guess it |
|
565 |
geoserverUri = mapserverBaseUrl + "/geoserver/wms"; |
|
566 |
} |
|
583 | 567 |
|
584 |
var sld = mapResponseObj.points_sld; |
|
585 |
if(sld.indexOf("http://") !== 0){ |
|
586 |
// it is an old servive which is not providing the full sdl URI, so we guess it |
|
587 |
// http://edit.africamuseum.be/synthesys/www/v1/sld/ |
|
588 |
// http://edit.br.fgov.be/synthesys/www/v1/sld/ |
|
589 |
sld = mapserverBaseUrl + "/synthesys/www/v1/sld/" + sld; |
|
590 |
} |
|
591 |
pointLayer.params.SLD = sld; |
|
568 |
//TODO points_sld should be renamed to sld in response + fill path to sld should be given |
|
569 |
pointLayer = new OpenLayers.Layer.WMS( |
|
570 |
'points', |
|
571 |
geoserverUri, |
|
572 |
{ |
|
573 |
layers: 'topp:rest_points', |
|
574 |
transparent:"true", |
|
575 |
format:"image/png" |
|
576 |
}, |
|
577 |
dataLayerOptions |
|
578 |
); |
|
592 | 579 |
|
593 |
layers.push(pointLayer); |
|
594 |
} else { |
|
595 |
// it is a response from for a distribution map |
|
596 |
console.log("start with adding distribution layers :"); |
|
597 |
for ( var i in mapResponseObj.layers) { |
|
598 |
var layerData = mapResponseObj.layers[i]; |
|
599 |
|
|
600 |
console.log(" " + i +" -> " + layerData.tdwg); |
|
601 |
var layer = new OpenLayers.Layer.WMS( |
|
602 |
layerData.tdwg, |
|
603 |
mapResponseObj.geoserver + "/wms", |
|
604 |
{ |
|
605 |
layers: layerByNameMap[layerData.tdwg], |
|
606 |
transparent:"true", |
|
607 |
format:"image/png" |
|
608 |
}, |
|
609 |
dataLayerOptions |
|
610 |
); |
|
611 |
layer.params.SLD = layerData.sld; |
|
612 |
layer.setOpacity(opts.distributionOpacity); |
|
613 |
|
|
614 |
layers.push(layer); |
|
615 |
} |
|
616 |
} |
|
580 |
var sld = mapResponseObj.points_sld; |
|
581 |
if(sld.indexOf("http://") !== 0){ |
|
582 |
// it is an old servive which is not providing the full sdl URI, so we guess it |
|
583 |
// http://edit.africamuseum.be/synthesys/www/v1/sld/ |
|
584 |
// http://edit.br.fgov.be/synthesys/www/v1/sld/ |
|
585 |
sld = mapserverBaseUrl + "/synthesys/www/v1/sld/" + sld; |
|
586 |
} |
|
587 |
pointLayer.params.SLD = sld; |
|
617 | 588 |
|
618 |
if(layers.length > 0) { |
|
619 |
// calculate zoomBounds using the first layer |
|
620 |
if(mapResponseObj.bbox !== undefined){ |
|
621 |
// mapResponseObj.bbox are bounds for the projection of the specific layer |
|
622 |
var newBounds = OpenLayers.Bounds.fromString( mapResponseObj.bbox ); |
|
623 |
newBounds.transform(layers[0].projection, map.getProjectionObject()); |
|
624 |
if(dataBounds !== null){ |
|
625 |
dataBounds.extend(newBounds); |
|
626 |
} else if(newBounds !== undefined){ |
|
627 |
dataBounds = newBounds; |
|
628 |
} |
|
629 |
|
|
630 |
zoomToBounds = dataBounds; |
|
631 |
console.log("data layer zoomToBounds: " + zoomToBounds); |
|
632 |
zoomToClosestLevel = false; |
|
633 |
} |
|
589 |
layers.push(pointLayer); |
|
590 |
} else { |
|
591 |
// it is a response from for a distribution map |
|
592 |
console.log("start with adding distribution layers :"); |
|
593 |
for ( var i in mapResponseObj.layers) { |
|
594 |
var layerData = mapResponseObj.layers[i]; |
|
595 |
|
|
596 |
console.log(" " + i +" -> " + layerData.tdwg); |
|
597 |
var layer = new OpenLayers.Layer.WMS( |
|
598 |
layerData.tdwg, |
|
599 |
mapResponseObj.geoserver + "/wms", |
|
600 |
{ |
|
601 |
layers: layerByNameMap[layerData.tdwg], |
|
602 |
transparent:"true", |
|
603 |
format:"image/png" |
|
604 |
}, |
|
605 |
dataLayerOptions |
|
606 |
); |
|
607 |
layer.params.SLD = layerData.sld; |
|
608 |
layer.setOpacity(opts.distributionOpacity); |
|
609 |
|
|
610 |
layers.push(layer); |
|
611 |
} |
|
612 |
} |
|
613 |
|
|
614 |
if(layers.length > 0) { |
|
615 |
// calculate zoomBounds using the first layer |
|
616 |
if(mapResponseObj.bbox !== undefined){ |
|
617 |
// mapResponseObj.bbox are bounds for the projection of the specific layer |
|
618 |
var newBounds = OpenLayers.Bounds.fromString( mapResponseObj.bbox ); |
|
619 |
newBounds.transform(layers[0].projection, map.getProjectionObject()); |
|
620 |
if(dataBounds !== null){ |
|
621 |
dataBounds.extend(newBounds); |
|
622 |
} else if(newBounds !== undefined){ |
|
623 |
dataBounds = newBounds; |
|
634 | 624 |
} |
635 | 625 |
|
626 |
zoomToBounds = dataBounds; |
|
627 |
console.log("data layer zoomToBounds: " + zoomToBounds); |
|
628 |
zoomToClosestLevel = false; |
|
629 |
} |
|
630 |
} |
|
636 | 631 |
|
637 | 632 |
|
638 |
if(legendImgSrc != null && opts.legendPosition !== undefined && mapResponseObj.legend !== undefined){ |
|
639 |
var legendSrcUrl = mapResponseObj.geoserver + legendImgSrc + mapResponseObj.legend; |
|
640 |
addLegendAsElement(legendSrcUrl); |
|
641 |
//addLegendAsLayer(legendSrcUrl, map); |
|
642 |
} |
|
643 | 633 |
|
644 |
return layers; |
|
634 |
if(legendImgSrc != null && opts.legendPosition !== undefined && mapResponseObj.legend !== undefined){ |
|
635 |
var legendSrcUrl = mapResponseObj.geoserver + legendImgSrc + mapResponseObj.legend; |
|
636 |
addLegendAsElement(legendSrcUrl); |
|
637 |
//addLegendAsLayer(legendSrcUrl, map); |
|
645 | 638 |
} |
646 | 639 |
|
640 |
return layers; |
|
641 |
} |
|
642 |
|
|
647 | 643 |
}; |
648 | 644 |
|
649 | 645 |
/** |
... | ... | |
863 | 859 |
return zoomToBounds; |
864 | 860 |
}; |
865 | 861 |
|
866 |
var log = function(message, addTimeStamp){ |
|
867 |
var timestamp = ''; |
|
868 |
if(addTimeStamp == true){ |
|
869 |
var time = new Date(); |
|
870 |
timestamp = time.getSeconds() + '.' + time.getMilliseconds() + 's'; |
|
871 |
} |
|
872 |
console.log(timestamp + message); |
|
862 |
var log = function(message, addTimeStamp){ |
|
863 |
var timestamp = ''; |
|
864 |
if(addTimeStamp == true){ |
|
865 |
var time = new Date(); |
|
866 |
timestamp = time.getSeconds() + '.' + time.getMilliseconds() + 's'; |
|
867 |
} |
|
868 |
console.log(timestamp + message); |
|
869 |
}; |
|
870 |
|
|
871 |
var makeWMSLayerOptions = function(projection, proj4js_def, maxExtent, units){ |
|
872 |
wmsOptions = { |
|
873 |
isBaseLayer: false, |
|
874 |
displayInLayerSwitcher: true |
|
873 | 875 |
}; |
874 | 876 |
|
875 |
/** |
|
876 |
* Creates a WMS Base layer |
|
877 |
* @param String name |
|
878 |
* A name for the layer |
|
879 |
* @param String url |
|
880 |
* Base url for the WMS (e.g. http://wms.jpl.nasa.gov/wms.cgi) |
|
881 |
* @param Object params |
|
882 |
* An object with key/value pairs representing the GetMap query string parameters and parameter values. |
|
883 |
* @param Object projection |
|
884 |
* A OpenLayers.Projection object |
|
885 |
*/ |
|
886 |
var createWMSLayer= function(name, url, params, projection, proj4js_def, units, maxExtent){ |
|
877 |
if (projection) { |
|
878 |
if (proj4js_def) { |
|
879 |
// in case projection has been defined for the layer and if there is also |
|
880 |
// a Proj4js.defs, add it! |
|
881 |
Proj4js.defs[projection] = proj4js_def; |
|
882 |
} |
|
883 |
wmsOptions.projection = projection; |
|
884 |
if (maxExtent === null) { |
|
885 |
maxExtent = CdmOpenLayers.mapExtends.epsg_4326.clone(); |
|
886 |
maxExtent.transform(CdmOpenLayers.projections.epsg_4326, projection); |
|
887 |
} |
|
888 |
} else { |
|
889 |
// use the projection and maxextent of the base layer |
|
890 |
maxExtent = map.baseLayer.maxExtent; |
|
891 |
} |
|
887 | 892 |
|
888 |
console.log("creating WMS Layer " + name); |
|
893 |
if (maxExtent) { |
|
894 |
wmsOptions.maxExtent = maxExtent; |
|
895 |
} |
|
889 | 896 |
|
890 |
if(projection && proj4js_def){
|
|
891 |
// in case projection has been defined for the layer and if there is also
|
|
892 |
// a Proj4js.defs, add it!
|
|
893 |
Proj4js.defs[projection] = proj4js_def;
|
|
894 |
}
|
|
897 |
if (units) {
|
|
898 |
wmsOptions.units = units;
|
|
899 |
}
|
|
900 |
return wmsOptions;
|
|
901 |
};
|
|
895 | 902 |
|
896 |
if(maxExtent === null){ |
|
897 |
maxExtent = CdmOpenLayers.mapExtends.epsg_4326.clone(); |
|
898 |
maxExtent.transform(CdmOpenLayers.projections.epsg_4326, projection); |
|
899 |
} |
|
903 |
/** |
|
904 |
* Creates a WMS Base layer |
|
905 |
* @param String name |
|
906 |
* A name for the layer |
|
907 |
* @param String url |
|
908 |
* Base url for the WMS (e.g. http://wms.jpl.nasa.gov/wms.cgi) |
|
909 |
* @param Object params |
|
910 |
* An object with key/value pairs representing the GetMap query string parameters and parameter values. |
|
911 |
* @param Object projection |
|
912 |
* A OpenLayers.Projection object |
|
913 |
*/ |
|
914 |
var createWMSLayer= function(name, url, params, projection, proj4js_def, units, maxExtent){ |
|
900 | 915 |
|
901 |
wmsLayer = new OpenLayers.Layer.WMS( |
|
916 |
console.log("creating WMS Layer " + name); |
|
917 |
|
|
918 |
wmsOptions = makeWMSLayerOptions(projection, proj4js_def, maxExtent, units); |
|
919 |
|
|
920 |
wmsLayer = new OpenLayers.Layer.WMS( |
|
902 | 921 |
name, |
903 | 922 |
url, |
904 | 923 |
params, |
905 |
{ |
|
906 |
maxExtent: maxExtent, |
|
907 |
projection: projection, |
|
908 |
units: units, |
|
909 |
isBaseLayer: false, |
|
910 |
displayInLayerSwitcher: true |
|
911 |
} |
|
924 |
wmsOptions |
|
912 | 925 |
); |
913 | 926 |
|
914 | 927 |
if(wmsLayer === null){ |
Also available in: Unified diff
fix #6303 using same projection for overlays as for baselayer