Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

Printemps des cartes 2024

#1 Thu 05 March 2020 14:03

Leehan
Participant actif
Lieu: tours
Date d'inscription: 10 Jun 2009
Messages: 52

Openlayers 5 problème reprojection de OSM

Bonjour,

Je débute avec OL5 et je tente de reprojeter OSM en 2154 en suivant la documentation du site d'OpenLayers https://openlayers.org/en/v5.3.0/doc/tu … tion.html, l'idée étant ensuite d'essayer de travailler avec l'API geportail.

package.json

Code:

{
  "name": "iliad_ol5.3.0",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "parcel index.html",
    "build": "parcel build --public-url . index.html"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "geoportal-extensions-openlayers": "^3.0.7",
    "ol": "^5.3.0",
    "proj4": "^2.5.0"
  },
  "devDependencies": {
    "parcel-bundler": "^1.12.4"
  },
  "description": ""
}

index.html

Code:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Using Parcel with OpenLayers</title>
    <!--<link rel="stylesheet" href="style/GpPluginOpenLayers.css" type="text/css">-->
    <link rel="stylesheet" href="style/style.css" type="text/css">
    
    <!--<link rel="stylesheet" href="style/GpPluginOpenLayers-src.css" type="text/css">-->
  </head>
  <body>  
    <div id="map" tabindex="0">
        <div id="menu1">
            <table class="tab" id="table1">
            <tr>
                <td><button class="tablinks" id="Ope" onclick="menu(event, 'Ope')" title="Rechercher opération"> Ope?</button></td>
            </tr>
            <tr>
                <td><button class="tablinks" id="Inf" onclick="menu(event, 'Inf')" title="Afficher les informations des opérations">Inf</button></td>
            </tr>
            </table>
        </div>
        <!-- panneau recherche opération -->
        <div class="tabContent" id="OpeContent" style="visibility:hidden">
            <div class="titrePanneau" id="titrePanneauOpe">
                Recherche opération
            </div>
            <div class="soustitrePanneau" id="choixAttributLabel">
                Choix attribut
            </div>
            <form id="choixOpe" name="choixOpe">
                <select class="tooltip" id="listeNumOpe" name="champ" size="1" title="Choix du champ de données">
                    <option>
                        numope
                    </option>
                    <option>
                        code_tranche
                    </option>
                    <option>
                        numprescr
                    </option>
                    <option>
                        numoa
                    </option>
                </select>
            </form>
            <div class="soustitrePanneau" id="valeurR">
                Valeur recherchée
            </div><input class="" id="choixNumOpe" title="Valeur à rechercher" type="text" value=""> <button class="fonctionsSearchOpe" id="button2" onclick="chercherOpe()" type="button">chercher</button> <!-- message recherche inaboutie -->
        </div><!-- The Modal -->
        <div class="modal" id="myModal">
            <!-- Modal content -->
            <div class="modal-content">
                <span class="close">&times;</span>
                <p id="message">La recherche n'a rien donné !</p>
            </div>
        </div>
        </div><!-- popups informations -->
        <div class="ol-popup" id="popup" style="visibility:hidden">
            <div class="ol-popup-closer" id="popup-closer"></div>
            <div id="popup-content"></div>
        </div>
        <div id="result" style="display:none"></div>
        <div id="legend" style="display:none"></div>
    </div>
    </div> <!--fin id map -->
    <script src="./index.js"></script>
  </body>
</html>

index.js

Code:

import {get as getProjection} from 'ol/proj';
import Map from 'ol/Map';
import 'ol/ol.css';
import OSM from 'ol/source/OSM';
import proj4 from 'proj4';
import {register} from 'ol/proj/proj4';
import TileLayer from 'ol/layer/Tile';
import TileWMS from 'ol/source/TileWMS';
import View from 'ol/View';
import * as Gp from 'geoportal-extensions-openlayers';

proj4.defs('EPSG:2154','+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3' + 
    '+x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs');
    register(proj4);
const franceProjection = getProjection('EPSG:2154');

var couches = [
    new TileLayer({
      source: new OSM()
    })
];

var map = new Map({
  target: 'map',
  layers: couches,
   view: new View({
    projection: 'EPSG:2154',
    center: [524326, 6700656],
    zoom: 10
    //center: [0, 0],
    //zoom: 5
  })
});

Ce dernier fichier ne renvoie rien : aucune dalle OSM n'est chargée. Aucun message d'erreur dans la console de debug.
Aucun souci pour afficher OSM dans sa projection native (3857) en revanche.
J'en déduis qu'un souci avec proj4 en est la cause mais suis incapable de résoudre ce problème.
A  vot' bon coeur !
Merci

Hors ligne

 

#2 Fri 06 March 2020 00:34

Cornet Jérémie
Participant assidu
Lieu: Nouméa
Date d'inscription: 6 Apr 2008
Messages: 229

Re: Openlayers 5 problème reprojection de OSM

Bonjour,
Un  webservice tuilé ne peut s'afficher que dans une carte de même système de coordonnées.

Donc impossible d'afficher le fond OSM (tuilé en mercator) dans une carte en lambert.

NB : le geoportail propose des flux en mercator donc à moins de besoin spécifique, autant travailler en mercator !
https://openlayers.org/en/latest/examples/wmts-ign.html

Bonne journée

Hors ligne

 

#3 Fri 06 March 2020 12:28

Leehan
Participant actif
Lieu: tours
Date d'inscription: 10 Jun 2009
Messages: 52

Re: Openlayers 5 problème reprojection de OSM

étrange car avec le package.json ci-dessous sans rien changer à index.js, ca fonctionne très bien.

Code:

{
  "name": "iliadv2",
  "version": "1.0.0",
  "description": "OpenLayers 6 et couches de Caviar",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "parcel index.html",
    "build": "parcel build --public-url . index.html"
  },
  "keywords": [],
  "author": "mathias cunault",
  "license": "ISC",
  "dependencies": {
    "geoportal-extensions-openlayers": "^3.0.7",
    "ol": "^6.2.1",
    "proj4": "^2.6.0"
  },
  "devDependencies": {
    "parcel-bundler": "^1.12.4"
  }
}

Si je suis re passé à OL 5.3.0 c'est pour être compatible avec le module geoportal.
Et dans le premier package.json, j'ai également essayé avec proj4 2.6.0

Hors ligne

 

#4 Fri 06 March 2020 14:35

Leehan
Participant actif
Lieu: tours
Date d'inscription: 10 Jun 2009
Messages: 52

Re: Openlayers 5 problème reprojection de OSM

Après un gros ménage dans les dépendances et surtout celles liées au module proj, tout semble fonctionner.
Je ne suis pas certain que cela soit l'explication mais faute de mieux.
je ne touche plsu à rien avec cette config de base ;

Code:

"ol": "^5.3.0",
    "proj4": "^2.5.0"

Hors ligne

 

Pied de page des forums

Powered by FluxBB