Changeset 74569 in spip-zone


Ignore:
Timestamp:
Aug 4, 2013, 10:02:34 AM (6 years ago)
Author:
jean-marc.viglino@…
Message:

{ADD} Ajout du zoom client sur les couches du Geoportail

Location:
_plugins_/spip_geoportail
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/spip_geoportail/action/geoportail_config.php

    r73640 r74569  
    5454                        ecrire_metas();
    5555                }
    56                
    5756                // Modif le fournisseur par defaut
    5857                if (isset($_POST['provider']))
     
    6160                        ecrire_metas();
    6261                }
     62                // Zoom client
     63                if (isset($_POST['setzclient']))
     64                {       // Services
     65                        ecrire_meta('geoportail_zclient',isset($_POST['zclient']));
     66                        ecrire_metas();
     67                }
     68               
    6369                // Type de popup
    6470                if (isset($_POST['setpopup']))
  • _plugins_/spip_geoportail/exec/geoportail_config_options.php

    r73640 r74569  
    7676                $geoportail_popup = $GLOBALS['meta']['geoportail_popup'];
    7777                $ghover = ($GLOBALS['meta']['geoportail_hover'])?"CHECKED":"";
     78                $zclient = ($GLOBALS['meta']['geoportail_zclient'])?"CHECKED":"";
    7879
    7980                if ($geoportail_popup=='spip') $geoportail_popup = 'SpipPopup';
     
    9495                                ._T('geoportail:geoportail_zone')." : "
    9596                                .geoportail_popup_zone('zone', $gzone, 'fondl')
    96                                 ."<input type='submit' name='provider' class='fondo' style='margin-left:1em;' value='"._T('bouton_valider')."' />"
     97                                ."<input type='submit' name='provider' class='fondo' style='margin-left:2em;' value='"._T('bouton_valider')."' />"
     98                                ."</p>"
     99                        .fin_cadre_relief(true)
     100                        .debut_cadre_relief("loupe-plus.gif",true,"", _T('geoportail:zoom_client'))
     101                                . _T('geoportail:zoom_client_info')."<br/>"
     102                                ."<p>"
     103                                ."<input type='checkbox' name='zclient' id='zclient' $zclient><label for=zclient>"._T('geoportail:zclient')."</label>"
     104                                ."<input type='submit' name='setzclient' class='fondo' style='margin-left:2em;' value='"._T('bouton_valider')."' />"
    97105                                ."</p>"
    98106                        .fin_cadre_relief(true)
  • _plugins_/spip_geoportail/geoportail_pipelines.php

    r64928 r74569  
    2828        $repop = dirname(find_in_path('img/cloud-popup-relative.png'));
    2929        $repop = "jQuery.geoportail.imgPath = '$repop/';";
     30        // Zoom client
     31        $zclient = "spipGeoportail.zoomClient = ".($GLOBALS['meta']['geoportail_zclient']?'true':'false').";";
    3032
    3133        $flux .=
     
    4648."\n".$popup
    4749."\n".$repop
     50."\n".$zclient
    4851.'
    4952</script>';
  • _plugins_/spip_geoportail/js/geoportail.js

    r74304 r74569  
    7575                        onContractsComplete: function(){ spipGeoportail.initMap();}
    7676                });
     77        },
     78       
     79        /** Gestion du Zoom client sur les layers geoportail
     80        *       @param viewer : la carte (mapX)
     81        *       @param layers : tableau de layers, RegExp ou nom du layer a traiter
     82        */
     83        setZoomClient: function (viewer, layers)
     84        {       var layers2zoom;
     85                if (typeof(layers) == "string") layers2zoom = viewer.getMap().getLayersByName(layers);
     86                else if (layers instanceof RegExp) layers2zoom = viewer.getMap().getLayersByName(layers);
     87                else if (layers instanceof Array) layers2zoom = layers;
     88                else layers2zoom = [layers];
     89                // Niveau de zoom => 20
     90                for (var l=0; l<layers2zoom.length; l++)
     91                {       var r = layers2zoom[l].resolutions[20];
     92                        layers2zoom[l].minResolution = r; //0.14929107086948493;
     93                        // Penser aux aggregats
     94                        if (layers2zoom[l].aggregate && layers2zoom[l].aggregate.minResolution > r)
     95                        layers2zoom[l].aggregate.minResolution = r;
     96                }
     97                Geoportal.Layer.WMTS.prototype.moveTo = function(bounds, zoomChanged, dragging)
     98                {       if (zoomChanged || !this.matrix)
     99                        {       this.updateMatrixProperties();
     100                                //>>>> Correction
     101                                if (this.resample)
     102                                {       var z = (this.map.zoom < this.minZoomLevel ? this.minZoomLevel : this.maxZoomLevel);
     103                                        var dr = this.resolutions[z] / this.resolutions[this.map.zoom]
     104                                        this.tileSize.h = Math.round(this.tileSize.h * dr);
     105                                        this.tileSize.w = Math.round(this.tileSize.w * dr);
     106                                        if (this.forceRedrawTimer) return;
     107                                }
     108                                //<<<< Correction
     109                        }
     110                        return Geoportal.Layer.Grid.prototype.moveTo.apply(this, arguments);
     111                }
     112                // Cas de l'ortho => detection des zones HR/LR
     113                ortho = viewer.getMap().getLayersByName("ORTHOIMAGERY.ORTHOPHOTOS").pop();
     114                ortho.onLoadError = function()
     115                {       this.isLoadError = true;
     116                        if (this.map.zoom > 18) return OpenLayers.Util.getImagesLocation()+'blank.gif';
     117                        else return Geoportal.Util.getImagesLocation()+'nodata.jpg';
     118                }
     119                ortho.events.register("moveend", ortho, function(e)
     120                        {       // Switch to normal mode (HR)
     121                                if (e.zoomChanged && this.map.zoom < 19)
     122                                {      this.maxZoomLevel = 19;
     123                                }
     124                        });
     125                ortho.events.register("loadend", ortho, function(e)
     126                        {       // Switch to resample mode (LR)
     127                                if (this.isLoadError && this.map.zoom > 18 && this.maxZoomLevel != 18)
     128                                {       this.maxZoomLevel = 18;
     129                                        this.redraw();
     130                                }
     131                                this.isLoadError = false;
     132                        });
    77133        },
    78134       
     
    10431099                                                }
    10441100                                        }
     1101                                        // Gestion du zoom client (couches orthos, maps et roads)
     1102                                        if (this.zoomClient) this.setZoomClient(map,/(ORTHOIMAGERY\.ORTHOPHOTOS|GEOGRAPHICALGRIDSYSTEMS\.MAPS|TRANSPORTNETWORKS\.ROADS)/);
    10451103                       
    10461104                                break;
  • _plugins_/spip_geoportail/lang/geoportail_fr.php

    r74261 r74569  
    3232                                                Dans certains cas, pour s\'affranchir d\'effets de bords ou lors de d&eacute;boguage, il peut &ecirc;tre pr&eacute;f&eacute;rable d\'utiliser une version de l\'API en local.
    3333                                                <br/>Pour cela, placez les ressources de l\'API (<i>GeoportalExtended.js, etc.</i>) dans le dossier /js de votre squelette.',
     34
     35'zoom_client'                   => 'Zoom Client',
     36'zoom_client_info'              => 'Le technique du zoom client permet d\'afficher les tuiles du G&eacute;oportail aux r&eacute;solutions non suport&eacute;es par le service.
     37                                                        Il est alors possible d\'afficher les couches cartes et photo du G&eacute;oportail jusqu\'au zoom "Maison".
     38                                                        <br/><i>Attention : cette technique est exp&eacute;rimentale, si vous constatez des probl&egrave;mes &agrave; l\'affichage des couches, d&eacute;activez cette option.</i>',
     39'zclient'                               => 'Activer le zoom client',
    3440
    3541'geoportail_services'   => 'Ajouter un menu G&eacute;oservices.',
Note: See TracChangeset for help on using the changeset viewer.