banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Pour sa 21ème année, l’association GeoRezo a toujours besoin de vous !

10€ = 1 mois de frais bancaires ; 15€ = 12 mois de nom de domaine ; 30€ = 1 semaine de location des serveurs …

Faire un don 

Retrouver nos membres bienfaiteurs

#1 Fri 12 December 2014 11:20

Valdivarius
Juste Inscrit !
Date d'inscription: 9 Dec 2014
Messages: 1

[OpenLayers 3] Affichage couche XYZ (Esri/REST) sur fond de plan OSM

Bonjour à tous,

je suis actuellement en train de réaliser une application utilisant OpenLayers 3 et je cherche désespérément à afficher une couche au format ESRI/REST (tiles via url en xyz) fournie par un serveur ArcGis et qui soit calée avec avec le fond de plan OpenStreetMap.

Je pense que le principal problème se situe dans le fait que les données fournies sont dans une projection différente (Lambert 93 - EPSG:2154) de celle de Openlayers 3 qui est en Google Mercator - EPSG:3857

De plus après des recherches je suis arrivé à la conclusion que ça doit être possible en modifiant le Tilegrid avec les paramètres (extents, resolution, etc...) en fonction de la source de données mais malgré tout mes efforts je n'arrive pas à obtenir un résultat correct.

Merci d'avance pour votre aide, si vous avez des précisions à me demander, n'hésitez pas...

Liens divers :

Source de données que j'essaye d'implémenter : http://services.opengeodata.fr/arcgis/r … /MapServer

Exemple d'OpenLayers3 (mais en 3857, avec tiles bien formatées donc qui ne m'avance pas beaucoup) : http://openlayers.org/en/master/examples/xyz-esri.html

Sujet abordé sur github : https://github.com/openlayers/ol3/pull/1124

Code

J'ai mis un extrait de code que j'ai essayé d'épurer au maximum, j'arrive à afficher les tile que je désire mais pas du tout à la bonne échelle et en trichant (+4à et +35 pour les coordonnées des tiles dans tileUrlFunction

Code:

  
     
      .map 
      {
         height: 99%;
         width: 100%;
       }
    
    
    OpenLayers 3
  
var projection = ol.proj.get('EPSG:3857');
var projectionExtent = projection.getExtent();

var tileSize = 256;

var maxResolution = ol.extent.getWidth(projectionExtent) / (tileSize * 2);
var resolutions = new Array(16);
var z;
for (z = 0; z < 16; ++z) {
  resolutions[z] = maxResolution / Math.pow(2, z);
}

var urlTemplate = 'http://services.opengeodata.fr/arcgis/rest/services/FRANCE/CORINE_Land_Cover_Urban_Atlas/MapServer/tile/{z}/{y}/{x}';
var tileg = new ol.tilegrid.TileGrid({
          origin: ol.extent.getTopLeft(projectionExtent),
          resolutions: resolutions,
          tileSize: 512
        });
var map = new ol.Map({
  target: 'map',
  layers: [
   new ol.layer.Tile({
            source: new ol.source.MapQuest({layer: 'osm'})
          }),
    new ol.layer.Tile({
 
      opacity: 0.5,
      source: new ol.source.TileImage({

        tileUrlFunction: function(tileCoord, pixelRatio, projection) {
          var z = tileCoord[0];
          var x = tileCoord[1] + 35;
          var y = -tileCoord[2] + 40;
          

          return urlTemplate.replace('{z}', z.toString())
              .replace('{y}', y.toString())
              .replace('{x}', x.toString());
        },
        projection: projection,
        tileGrid: tileg,
      })
    }),
    
 new ol.layer.Tile({
      source: new ol.source.TileDebug({

        tileGrid: new ol.tilegrid.XYZ({
          maxZoom: 22
        })
      })
    }),
  ],
  view: new ol.View({
    center: [0, 0],
    zoom: 0,

  })
});

Hors ligne

 

Pied de page des forums

Powered by FluxBB