Project

General

Profile

« Previous | Next » 

Revision 79f1762d

Added by Andreas Kohlbecker almost 7 years ago

fix #6303 using same projection for overlays as for baselayer

View differences:

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