up 
après avoir cherché un long moment j'ai une solution. Elle ne s'appliquera pas forcément pour Arcgis ou Qgis mais en openlayer (v3 dans le code ci dessous) :
l'adresse qui génère la légende dynamique pour la la couche normalisée SCAN_H_GEOL50 est
"http://infoterre.brgm.fr/services/custoLegend?SRS=EPSG:2154&TYPE=legende&FORMAT=json &LAYER=harm_s_fgeol_vue&BBOX=" où BBOX est l'extension de la vue et la réponse est en json.
dès qu'on a résolu le problème de l'appel cross domain (chez moi avec un petit plugin jquery jquery.xdomainajax.js)
il est possible de faire une fonction javascript qui parse le json en retour ( a adapter) :
Code HTML:
<div id="dyntoolbox">
<ul id="dynlegende" ></ul>
</div>
Code:
function getGeolLegend() {
var zoom = lorview1.getZoom(); // on recupere le zoom de la carte
if (zoom > 11 ) { // la couche ne s'affiche qu'a une certaine échelle
container2.style.display = 'block'; // le div qui contient la légende apparait
$('#dynlegende').children().remove(); // vidage préalable de la liste de légende dans le div : la liste est dynamique en fonction de la position
var ext0 = lorview1.calculateExtent(map.getSize()); // on récupère l'extension actuelle
var ext = ol.proj.transformExtent(ext0, 'EPSG:3857', proj4326); // petite reproj car le serveur BRGM ne répond pas en 3857
var bbox = ext[0] + "," + ext[1] + "," + ext[2] + "," + ext[3]; // génération de la chaine bbox
var url = "http://infoterre.brgm.fr/services/custoLegend?SRS=EPSG:4326&TYPE=legende&FORMAT=json&LAYER=harm_s_fgeol_vue&BBOX=" + bbox;
$.ajax({ //xmlhttprequest qui ne répond pas en en "json" .... pas grave on le récupère en html
url: url,
type: 'GET',
dataType: "html",
success: function (data) {
var leg0 = $(data.responseText)[5].innerHTML; // on récupère le <p> du body qui nous intéresse
var legParse = JSON.parse(leg0); // c'est du json
$('#dynlegende').append("<li>" + legParse[0].carte + "</li>"); // ajout du titre projet
jQuery.each(legParse[0].formations, function (i, val) { // pour chaque "formation on ajoute une ligne avec l'image et le texte
$('#dynlegende').append("<li><table><tr><td><img src=" + val.motif + " style=\"width:30px;height:30px\"</img></td><td><label>" + val.description + "</label><td></tr></table></li>");
});
},
error: function (jqXHR, textStatus, errorThrown) {
// error_fn(jqXHR, textStatus, errorThrown);
}
});
}
else {
container2.style.display = 'none';
}
on appelle la fonction sur un moveend (prévoir un scroll dans le div car la légende peut être assez conséquente )
voilà, en espérant que ça sera utile à quelqu'un
Liens sociaux