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 Tue 07 April 2020 23:45

willj
Participant occasionnel
Lieu: île-de-france
Date d'inscription: 5 May 2019
Messages: 17

Faire apparaître fichier GEOjson dans openlayers

Bonjour ! smile

Comme indiqué dans le titre, je cherche à faire apparaître un fichier GeoJson sur une webmap Openlayers.
Je suis un débutant dans le webmapping ( openlayers, javascript, CSS et HTML ... Ouais le niveau 0 ), donc je suis un tutoriel ( en anglais ) sur le webmapping avec OpenLayers. Dans le tutoriel, on utilise Javascript pour faire noter code :
- main.js = contient le code
- style.css = contient les styles
- index.html = la page web.

En suivant le tutoriel à la lettre, la couche geojson, enregistrée en local, n'apparaît pas sur la carte. En faisant quelques recherches : on voit que HTML ne fait pas apparaître les fichiers venant du local, pourtant celui fait la vidéo y arrive bien ... Comment fait-il ça ? ( je vais mettre le code main.js juste après, pour que vous puissiez voir ). Pareil pour le fichier .kml ... Donc comment faire pour faire apparaître les fichiers sur le lien HTML depuis Local ?

Ensuite, j'ai vu qu'il fallait installer node.js, sur le site openlayers.org, pour suivre leur tutoriel. Du coup, est-ce qu'il faut l'installer aussi dans ce contexte ? Ou bien node.js n'est pas nécessaire ?

Merci à vous ! smile

Code:

window.onload = init;

function init(){
    const map = new ol.Map({
        view: new ol.View({
            center: [0, 0],
            maxZoom: 20,
            minZoom: 4
        }),
        target: 'js-map',
        keyboardEventTarget: document
    })


    console.log(ol.control.defaults());

    const popupContainerElement = document.getElementById('popup-coordinates');

    const popup = new ol.Overlay({
        element: popupContainerElement,
        positioning: 'bottom-right'
    })

    map.addOverlay(popup);

    map.on('click', function(e){
        const clickedCoordinate = e.coordinate;
        popup.setPosition(undefined);
        popup.setPosition(clickedCoordinate);
        popupContainerElement.innerHTML = clickedCoordinate;
    })

    // drag rotation interact
    const dragRotateInteraction = new ol.interaction.DragRotate({
        condition: ol.events.condition.altKeyOnly
    })

    map.addInteraction(dragRotateInteraction)

    // créer des polygones / formes
    //const drawInteraction = new ol.interaction.Draw({
        //type: 'Polygon',
        //freehand: true
    

    //map.addInteraction(drawInteraction);

    //drawInteraction.on('drawend', function(e){
        //let parser = new ol.format.GeoJSON();
        //let drawnFeatures = parser.writeFeatures([e.feature]);
        //console.log(drawnFeatures);
    //})

    const openStreetMapStandard = new ol.layer.Tile({
        source: new ol.source.OSM(),
        visible: true,        
        title: 'OSMStandard'
    })

    const openStreetMapHumanitarian = new ol.layer.Tile({
        source: new ol.source.OSM({
            url: 'https://{a-c}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png'
        }),
        visible: true,        
        title: 'OSMHumantarian'
    })

    // pour le moment la Stamen Terrain ne fonctionne pas
    const stamenTerrain = new ol.layer.Tile({
        source: new ol.source.XYZ({
            url: 'http://tile.stamen.com/terrain/{z}/{x}/{y}.jpg',
            attributions: 'Map tiles by <a href="http://stamen.com">Stamen Design</a>, under <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a>. Data by <a href="http://openstreetmap.org">OpenStreetMap</a>, under <a href="http://www.openstreetmap.org/copyright">ODbL</a>.'
        }),
        visible: true,
        title: 'StamenTerrain'
    })

    // Base Vector layers
    // Vector Tile Layer OSM
    const openstreetMapVectorTile = new ol.layer.VectorTile({
        source: new ol.source.VectorTile({
            url: 'https://api.maptiler.com/tiles/v3/{z}/{x}/{y}.pbf?key=1jDM5XobgnqOfAvtmnVL',
            format: new ol.format.MVT(),
            attributions: '<a href="https://www.maptiler.com/copyright/" target="_blank">&copy; MapTiler</a> <a href="https://www.openstreetmap.org/copyright" target="_blank">&copy; OpenStreetMap contributors</a>'
        }),
        visible: true,
    })

    const openstreetMapVectorTileStyles = 'https://api.maptiler.com/maps/7c274c44-1f84-47c6-91ec-f8b6360fdceb/style.json?key=1jDM5XobgnqOfAvtmnVL';
    olms.apply(map, openstreetMapVectorTileStyles);


    // layer group
    const baseLayerGroup = new ol.layer.Group({
        layers: [
            openStreetMapStandard, openStreetMapHumanitarian, stamenTerrain, openstreetMapVectorTileStyles
        ]
    })
    map.addLayer(baseLayerGroup);

    // layer switcher logic for basemaps
    const baseLayersElements = document.querySelectorAll('.sidebar > input[type=radio]');
    for(let baseLayersElement of baseLayersElements){
        baseLayersElement.addEventListener('change', function(){
            let baseLayerElementValue = this.value;
            baseLayerGroup.getLayers().forEach(function(element, index, array){
                let baseLayerTitle = element.get('title');
                element.setVisible(baseLayerTitle === baseLayerElementValue);
            })
        })
    }

    // Vector Layers

    const ThingsCergyGeoJSON = new ol.layer.Vector({
        source: new ol.source.Vector({
            url: "data/vector_data/contoursGeojson.geojson",
            format: new ol.format.GeoJSON()
        }),
        visible: true
    })
    map.addLayer(ThingsCergyGeoJSON);

     // Vector Layers Image

     const ThingsCergyGeoJSONVectorImage = new ol.layer.VectorImage({
        source: new ol.source.Vector({
            url: "data/vector_data/contoursGeojson.geojson",
            format: new ol.format.GeoJSON()
        }),
        visible: true
    })
    //map.addLayer(ThingsCergyGeoJSON);

    // Poentiel activité KML
    const potentielKML = ol.layer.Vector({
        source: new ol.source.Vector({
            url: './data\vector_data\potentielattractiviteKML.kml',
            format: new ol.format.KML()
        }),
        visible: true
    })
    map.addLayer(potentielKML);  

    //HeatMap
    const heatMapOnlineFBUsers = new ol.layer.Heatmap({
        source: new ol.source.Vector({
            url: './data/vector_data/onlineFBUsers.geojson',
            format: new ol.format.GeoJSON()
        }),
        radius: 15,
        blur: 10
    })
    map.addLayer(heatMapOnlineFBUsers);
    
}

Hors ligne

 

#2 Mon 13 April 2020 18:15

Blaise Picinbono
Participant actif
Date d'inscription: 8 Jan 2015
Messages: 67
Site web

Re: Faire apparaître fichier GEOjson dans openlayers

Bonjour

Pour bien débuter avec openlayers, on peut s'inspirer des exemples présentés sur leur site:
https://openlayers.org/en/latest/examples/
notamment celui-ci à propos de GeoJSON:
https://openlayers.org/en/latest/exampl … layer.html

Il faut arriver à les faire marcher sur un serveur (local ou non), puis les modifier à sa guise.

Il n'est pas nécessaire d'installer node.js sur le serveur pour pouvoir utiliser openlayers.

Pour débuguer, il faut utiliser les outils de développement web du navigateur (touche F12 en général) et regarder dans les flux réseau ainsi que dans la console pour voir les erreurs.

Hors ligne

 

#3 Wed 29 April 2020 10:49

willj
Participant occasionnel
Lieu: île-de-france
Date d'inscription: 5 May 2019
Messages: 17

Re: Faire apparaître fichier GEOjson dans openlayers

Bonjour !

Je n'ai pas encore eu le temps de tester ce que vs me dîtes.
Merci à vous d'avoir pris le temps de répondre !!

Hors ligne

 

Pied de page des forums

Powered by FluxBB