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 14 October 2014 10:17

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1017
Site web

[GeoJson] Optimisation d'affichage sur Openlayers

Bonjour le forum,

J'ai un script générant du geojson (depuis une base postgis) afin d'afficher un territoire de compétence à l'échelle d'une région sur une carte OpenLayers.

Lorsque le territoire de compétence reste restreint, la carte s'affiche relativement vite mais dès lors que l'on a plus de 500 communes, on a parfois une petite minute à attendre ce qui n'est pas satisfaisant. J'ai essayé de simplifier les communes via st_simplify() mais le changement n'est pas flagrant.

Mon code Openlayers

Code:

        var communes = new OpenLayers.Layer.Vector(
            "Territoire",{
                protocol: new OpenLayers.Protocol.HTTP({
                url: "/modules/ppn/appel_geojson.php?id=<?php echo $_GET['id']; ?>",
                format: new OpenLayers.Format.GeoJSON()
                }),
                style: {strokeColor: "red", strokeWidth: 2, strokeOpacity: 1, fillColor: "transparent"},
                projection: new OpenLayers.Projection("EPSG:900913"),
                strategies: [
                    new OpenLayers.Strategy.Fixed() //chargement unique
                    ]
                }
            );
            map.addLayer(communes);
            
            
            // add a layer switcher
            map.addControl(new OpenLayers.Control.LayerSwitcher());
            
            communes.events.register('loadend', map, function(){this.zoomToExtent(communes.getDataExtent())});
            map.setCenter(null, null);

Ainsi, j'aimerais savoir si vous avez des pistes pour améliorer tout ça ?

Merci :-)

Dernière modification par heretik25 (Tue 14 October 2014 10:19)


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#2 Tue 14 October 2014 11:14

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

Re: [GeoJson] Optimisation d'affichage sur Openlayers

Salut,
Pour moi, la solution passe très clairement par du cache.
Tu modifies ton script geojson pour afficher un fichier de cache s'il existe et sinon, le générer puis l'afficher.

Code:

$id = (int) $_GET['id'];
$folder="../cache/";
$filepath = $folder.$id.".geojson";

//si le fichier n'existe pas, on le génère
if(!file_exists($filepath)){
    //on génère le fichier de cache
    //
}

//On affiche le fichier de cache
header('Content-type: application/json');
readfile($filepath);

Il te restera à réfléchir au système de rafraichissement / mise à jour du cache.

Dernière modification par Cornet Jérémie (Tue 14 October 2014 11:15)

Hors ligne

 

#3 Tue 14 October 2014 11:20

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1017
Site web

Re: [GeoJson] Optimisation d'affichage sur Openlayers

Merci Jérémie pour ta proposition. J'essaye de mettre en place tout ça et te tiens au courant des résultats.


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#4 Tue 14 October 2014 11:40

PA
Membre
Lieu: Paris
Date d'inscription: 5 Sep 2005
Messages: 3259
Site web

Re: [GeoJson] Optimisation d'affichage sur Openlayers

Bonjour,

Peut-être des pistes à suivre ici : http://makina-corpus.com/blog/metier/20 … un-geojson


Pierre-André Le Ny
Modérateur QGIS, Données, Coin de l'OpenSource
Aidez l'association GeoRezo !

Hors ligne

 

#5 Tue 14 October 2014 12:45

Dof
Participant assidu
Lieu: Grenoble
Date d'inscription: 28 Oct 2009
Messages: 317
Site web

Re: [GeoJson] Optimisation d'affichage sur Openlayers

Bonjour,
Est ce la génération du GeoJson, le dessin ou le transfère des données qui est le plus long?

Petit comparatif de différentes méthodes:  http://dogeo.fr/index.php/web-carto/19- … r-de-mysql

Hors ligne

 

#6 Tue 14 October 2014 15:21

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1017
Site web

Re: [GeoJson] Optimisation d'affichage sur Openlayers

Bonjour et merci pour vos pistes.

J'avais pensé à la simplification, il faut que j'étudie ça davantage.

Dernière modification par heretik25 (Tue 14 October 2014 15:42)


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#7 Wed 15 October 2014 08:32

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1017
Site web

Re: [GeoJson] Optimisation d'affichage sur Openlayers

En simplifiant beaucoup, la réponse est plutôt bonne et le cache permet d’accélérer d'environ 1/3 ou 1/4 le temps d'affichage. Dans mon cas ce n'est pas grave de simplifier énormément mais dans un cas ou je souhaiterais afficher la géométrie de façon précise, je ne sais pas comment on pourrait faire pour afficher toutes les communes d'une région en peu de temps.

Sinon, une idée pour arrondir les coordonées via postgres ? Un round() ne semble pas lui plaire.

Ma requête :

Code:

select st_asgeojson(ST_SimplifyPreserveTopology(st_transform(gez_geometry,900913),100)) 
        as geojson FROM public.tv_geom_zonages_commune where gez_id_geom_zonage in(select gez_id_geom_zonage FROM tj_user_a_acces_zonage a
        JOIN t_authentification b on a.aut_id_utilisateur = b.aut_id_utilisateur 
        WHERE ref_user_module = ?

Merci

Dernière modification par heretik25 (Wed 15 October 2014 08:56)


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#8 Mon 20 October 2014 13:05

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1017
Site web

Re: [GeoJson] Optimisation d'affichage sur Openlayers

Je cherche à savoir comment faire la màj du fichier en cache en cas de modification du territoire concerné. Une idée ?


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#9 Mon 20 October 2014 13:30

Dof
Participant assidu
Lieu: Grenoble
Date d'inscription: 28 Oct 2009
Messages: 317
Site web

Re: [GeoJson] Optimisation d'affichage sur Openlayers

Peut être en lisant les métadonnées du fichier avec la date de modification, la comparer la date de dernière modification de la données. Mais bien sur, pour cela il faut une colonne qui indique la date de la dernière modification dans la base (mis à jour avec un trigger par exemple) .

exemple : Si date_fichier > date_dernière_modif_bdd => on prend le cache, sinon on le refait

Hors ligne

 

Pied de page des forums

Powered by FluxBB