IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IGN API Géoportail Discussion :

Tuiles Bing avec Geoportail


Sujet :

IGN API Géoportail

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Tuiles Bing avec Geoportail
    Bonjour,
    J'essaie d'afficher les photos satellites de Bing comme une couche parmi d'autres, avec l'API GeoportalExtended 1.3.

    J'y arrive avec OpenLayers (mais sans les couches IGN), pas avec Geoportal. Avec OpenLayers, je fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    // basé sur:
    // http://wiki.openstreetmap.org/wiki/O...ensive_example
    // http://openlayers.org/dev/examples/bing.html
    <script src="http://www.openlayers.org/api/OpenLayers.js"></script>
    <script src="bing-tiles.js"></script>
    <script type="text/javascript" src="http://www.openstreetmap.org/openlayers/OpenStreetMap.js"></script>
    <script type="text/javascript" src="util.js"></script>
        <script>
          function init() {
            map = new OpenLayers.Map("basicMap");
    // puis je definis ma couche OSM
    // puis:
    var apiKey = "maclé";
    var aerial = new OpenLayers.Layer.Bing({
        key: apiKey,
        type: "Aerial" 
    });
    map.addLayers([Osm,aerial]);
    }
    </script>
    J'arrive à afficher le nom de la couche bing dans la liste des couches avec l'API Geoportail, mais les images ne s'affichent pas.
    J'arrive à faire fonctionner une couche OSM, mais pas à l'adapter pour Bing.
    L'exemple pour OSM utilise une fonction particulière (si j'ai bien compris, elle redimensionne voire reprojette les tuiles). Extrait basé sur http://depot.ign.fr/geoportail/api/t...bmercator.html :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     function getOSM(nativeWebMercator) {
            // See OpenLayers spherical-mercator.html :
            // In order to keep resolutions, projection, numZoomLevels,
            // maxResolution and maxExtent are set for each layer.
            if (!nativeWebMercator) {
                var osm= new Geoportal.Layer.Grid(
                    "OpenStreetMap",
    Mes tuiles OSM ont les mêmes dimensions et coordonnés des coins des tuiles Bing. J'imagine donc qu'il faut créer une fonction similaire pour Bing mais le chemin des tuiles Bing n'a rien à voire avec ${z}/${x}/${y}.png

    Comment faire?
    D'avance merci!
    Mayeul Kauffmann

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Inspire-toi de la carte n°3 qui est en Web Mercator et les flux Géoportail sont reprojetés, tu pourras ainsi utiliser le même code (cas natif) qu'OpenLayers.

    Attention: tah.openstreetmap.org a fermé ... les exemples API Géoportail utilisant Tiles@Home n'affichent donc plus les données OSM. On remplacera par les services Mapnik.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci! Ça marche à moitié. Si j'utilise l'exemple tel quel,je peux rajouter une seule couche, nécessairement de base, avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var aerial = new OpenLayers.Layer.Bing({
        key: apiKey,
        type: "Aerial"
    });
          _v0.getMap().addLayers([aerial]); 
    _v0.getMap().setBaseLayer(aerial,_v0.getMap().getCenter(),aerial.getZoomForResolution(_v0.getMap().resolution,true));
    Par contre, je n'arrive pas à ajouter deux couche (Bing + tuiles de type OSM), en particulier des couches qui ne soit pas base layer, même avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    osmarender0.setIsBaseLayer(false);
    et sans utiliser setBaseLayer.
    ce code affiche juste le nom de la couche dans le selecteur de couche mais fait disparaître les tuiles.
    SI je définis 2 fois setBaseLayer, la première s'affiche puis est recoouverte par la secondes.
    Dois-je quand-meme definir le centre et le zoom? Comment?
    Merci!

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Par défaut, les couches OpenLayers.Layer.Bing sont des baseLayer (hérité d'OpenLayers.Layer.XYZ) ...

    As-tu essayé dans la seconde couche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var secondeBing= new OpenLayers.Layer.Bin({
        baseLayer:false
        ...
    });

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour le conseil.
    J'ai fait pas mal d'essais, dont ceci. J'ai essayé avec isBaseLayer: false qui me semble être le nom correct du paramètre.
    Le résultat est le même qu'avec ce que je mentionnais plus haut:
    aerial.setIsBaseLayer(false);
    Au mieux j'ai une base layer, pas d'overlay web(pseudo-)mercator, je voudrais deux overlay "webmercator".
    Je n'ai pas réussi à savoir si je dois transposer les paramètres 2 et 3 de setBaseLayer:
    _v0.getMap().setBaseLayer(osm_mayeul,_v0.getMap().getCenter(),osm_mayeul.getZoomForResolution(_v0.getMap().resolution,true));

    Ou bien je n'appelle pas les bonnes librairies javscript/ou pas dans le bon ordre? Pourtant j'arrive à avoir soit Bing, soit ma couche OSM. Dans certains essais, la "base layer" a même son entrée dans la liste des couches et peut être masquée; dans d'autres, après certaines opérations à la souris, le nom de cette même couche devient gris et impossible de l'afficher.
    Au contraire ces fragments de code marchent à merveille dans l'implémentation OL non surchargée (mais sans les couches géoportail).
    Le contexte d'utilisation est la randonnée alpine transfrontalière (ViaAlpina), d'où le besoin d'avoir ces diverses couches.
    J'ai mis un de mes brouillons ici:
    http://mayeulk.byethost4.com/geoport...bmercator5.htm

    Mayeul

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur Cartographe
    Inscrit en
    Juin 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Cartographe
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2009
    Messages : 84
    Points : 161
    Points
    161
    Par défaut
    Essaye comme cela : mets tes couches normalement avec isBaseLayer=false et transpose une des couche en base layer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    // Transpose une couche en BaseLayer
    function setBaseLayer (viewer, l)
    {	// Creer un base layer
    	var g = l.clone();
    	l.isBaseLayer = false;
    	viewer.getMap().addLayer(g);
    	var c = viewer.getMap().resolution;
    	// Changer de layer de reference + mettre le bon niveau de zoom 
    	var e = g.getZoomForResolution(c, true);
    	viewer.getMap().setBaseLayer(g, viewer.getMap().getCenter(), e);
    	viewer.getMap().restrictedMaxZoomLevel = g.maxZoomLevel;
    	// Ne pas afficher le BaseLayer...
    	g.displayInLayerSwitcher= false;
    	g.setVisibility(false);
    	//l.setVisibility(true);
    }
    @+

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre aide et votre persévérance, cela marche désormais, mais en recodant comme ceci (sinon seule la couche de base est visible)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function setBaseLayer (viewer, l)
      { // Creer un base layer
      var g = l.clone();
      l.isBaseLayer = false;
      viewer.getMap().addLayer(g);
      var c = viewer.getMap().resolution;
      // Changer de layer de reference + mettre le bon niveau de zoom 
    //     var e = init_zoom;
      var e = g.getZoomForResolution(c, true);
    //   viewer.getMap().setBaseLayer(g, viewer.getMap().getCenter());
      viewer.getMap().setBaseLayer(g, viewer.getMap().getCenter(), e);
      viewer.getMap().restrictedMaxZoomLevel = g.maxZoomLevel;
      // Ne pas afficher le BaseLayer...
      g.displayInLayerSwitcher= false;
      g.setVisibility(false);
      g.setOpacity(0);
      l.setOpacity(1);
      //l.setVisibility(true);
      }
    Version beta visible ici:
    http://www.outdoormaps.org/

    Cordialement,
    Mayeul Kauffmann

Discussions similaires

  1. Réponses: 9
    Dernier message: 14/12/2010, 08h49
  2. API Geoportail minimum en Flex avec Openscales
    Par mga_geo dans le forum IGN API Géoportail
    Réponses: 20
    Dernier message: 04/03/2010, 22h27
  3. Calcul d'itinéraire avec l'API GeoPortail
    Par spiau dans le forum IGN API Géoportail
    Réponses: 3
    Dernier message: 21/07/2009, 19h08
  4. Réponses: 9
    Dernier message: 20/06/2009, 11h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo