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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Tue 02 November 2010 12:35

renard
Participant actif
Date d'inscription: 16 Mar 2010
Messages: 96

editer une base de données depuis une application webcarto

Bonjour,

Je souhaiterais créer un portail webcarto. Je désirerais que les utilisateurs puissent modifier certaines données (attributaires/géométriques). Je me penche sur les solutions client/serveur libre. J'ai dors et déjà éliminer Geoserver (en cause, le serveur tomcat)

Si j'ai bien compris, il existe deux 'normes' pour la modification :
- le wfs-t
- le RESTful

J'ai cru comprendre que Mapserver ne prenait pas en compte le wfs-t, ce qui signifie qu'il est impossible de modifier ses données en utilisant mapserver?

Je penche donc sur Mapserver Client et serveur (basé sur REST). Je ne pensais utiliser que le serveur de mapfish mais à cette adresse
http://geoetic.net/index.php?view=8%20h … %20MapFish, il est indiqué 

Data Stylization
Le serveur MapFish n'est pas un serveur cartographique. Pour personnaliser vos projets, un serveur cartographique est habituellement installé (initialisé? => set up) avec MapFish pour pouvoir diffuser des données géographiques. Avec MapServer, la « stylisation » et la création de services WMS/WFS se fait grâce à la configuration du MapFile.


.

Je n'arrive pas trop à comprendre à quoi sert réellement le serveur Mapfish, ses fonctionnalités et possiblités, est-il un complément de mapserveur? ou simplement il peut être couplé à mapserver dans les domaines où ce dernier excelle?

Par avance merci,

Dernière modification par renard (Tue 02 November 2010 13:45)

Hors ligne

 

#2 Tue 02 November 2010 15:51

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: editer une base de données depuis une application webcarto

Bonjour Renard,

je n'ai pas la solution mais je recherche la même chose que toi (je pense).
J'ai posté également un message dans le sous-forum "Assistance et programmation".
Espérant que l'union de nos demandes vont aboutir à une solution.
Je jèterai un oeil à ton fil de discussion, en même temps que le mien.

Tu évoques MapFish. J'ai également entendu parler de TinyOWS.

Voyons ce qu'en pense les spécialistes SIG du forum.

Hors ligne

 

#3 Tue 02 November 2010 16:25

renard
Participant actif
Date d'inscription: 16 Mar 2010
Messages: 96

Re: editer une base de données depuis une application webcarto

Il est vrai que je n'ai pas préciser certaines contraintes auxquelles je dois faire face et qui exclu, dans un premier temps, certaines solutions. Je suis dans un environnement windows (notre sig lourd est sous windows) ce qui élimine d'office tinyOWS. Ensuite Geoserver tourne sur serveur tomcat, or j'utilise un serveur apache 2.0 pour le cms du site web, et je ne voudrais pas multiplier les solutions.
C'est pourquoi il me restait mapfish comme alternative. La encore windows+apache risque d'être un frein.

Je vais faire des tests, s'ils sont peu concluant il me restera à faire des choix mais qui multiplient les solutions

- 1 ou plusieurs server (apache + tomcat)
- abandon de la modification ( passer alors sous mapserver/ mapfish client)

Dernière modification par renard (Tue 02 November 2010 16:25)

Hors ligne

 

#4 Tue 02 November 2010 16:27

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: editer une base de données depuis une application webcarto

Bonjour,

TinyOWS est un serveur proposant des services OGC, notamment WFS-T.

MapFish est un serveur spatial dans la mesure où on lui passe des géométries et des actions à réaliser. Là où il se différencie avec MapServer  est qu'il ne renvoie pas d'image. Comme dit dans un autre poste il ne gère que des données vecteurs (et encore je pense qu'il doit être possible de traiter des données raster, mais il faut pouvoir l'afficher côté client wink ).

MapFish permet donc de réaliser des traitements spatiaux distants : recherche (geocodage et reverse geocoding), intersection, etc. Par défaut après installation il vous permet de lire et d'écrire des données. Toutes les autres actions peuvent/doivent être codée. Pour "discuter" entre la partie serveur et client, MapFish utilise un protocole REST qui permet de savoir comment envoyer les informations vers le serveur. Celui-ci renvoie les données au format GeoJSON.

Il n'y a pas une solution, mais des solutions possibles, et une sera plus pertinente que les autres dans votre cas. La bonne solution dépend de vos compétences en programmation, de vos objectifs à long terme, des fonctionnalités nécessaires, etc.

Il n'y a pas de mauvaises solutions, il n'y a que des mauvais choix wink

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#5 Tue 02 November 2010 16:44

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 947
Site web

Re: editer une base de données depuis une application webcarto

Bonjour,

Je suis dans un environnement windows (notre sig lourd est sous windows) ce qui élimine d'office tinyOWS


Pour info, TinyOWS peut fonctionner sous Windows...
Voir le package associé à MS4W (en pied de page) http://www.maptools.org/ms4w/index.phtm … loads.html

Cordialement

ThomasG

Hors ligne

 

#6 Tue 02 November 2010 17:18

Delu
Participant actif
Lieu: Briançon
Date d'inscription: 29 Apr 2008
Messages: 76

Re: editer une base de données depuis une application webcarto

Bonjour,

Yves a raison, vous avez a conduire une solide réflexion concernant les choix à faire en fonction de vos contraintes et de vos compétences, ainsi que de votre budget.
Si cela peut vous éclairer voici notre situation et les choix fait :

Structure générale :
stockage : postgres/postgis + shape progressivement migrées vers postgis selon besoin (qq anciennes données sous Excel, Access)
serveur : linux debian en local et chez un hébergeur (avec notamment : apache, mapserver, php, tilecache, subversion, postgres/postgis, mysql)
poste de travail : windows (ms4w, tortoise, notepad ++, putty, wincsp, pgadmin)

Niveau 1 = application "presse bouton" permettant de gérer des données métier (une application par thème, sujet) -> développement interne ou via prestataire : symphony (php), Extjs, geoExt ou mapfish client, openlayers (Javascripth). Toutes nos applications sont basées sur des bases postgis, les cartes rasters sont servies en wms par mapserver, les vecteurs sont produits par une requête sql à la base postgis qui renvoie du geojson pour les géométries. Ce geojson est lu par openlayers pour être affiché sur les fonds de cartes. Openlayers est capable d'éditer ces géométries et de les renvoyer à postgis pour enregistrement en base (format WKT). GeoExt ou mapfish ne font que marier Openlayers et ExtJs pour offrir des fonctionnalités étendues. PHP (framework symphony mais sans obligation) pilote les échanges (SQL) entre la base postgis et les librairies javascprit permettant aux clients de lire et éditer les données géographiques et attributaires. L'utilisation de ces outils demandes de bonnes compétences en développement que nous avons acquises progressivement en auto-formation et/ou via une prestation d'assistance avec des sociétés spécialisées.

Niveau 2
: certains utilisateurs ont des besoins au dela du niveau 1 et doivent pouvoir faire des traitements ou des production de couches eux mêmes : Qgis (ou GSVIG) + formation

Niveau 3 : administrateur(s) de données : Postgis - Arcgis - OGR2OGR - GDAL ...etc

Coté solution payantes, non retenue chez nous pour le moment mais permettant de mettre en oeuvre un websig ou des applications plus ou moins complexes : voir du coté de dynmap (de Symalis) ou de veremap pro (Veremmes). Existe aussi la solution Aigle (Cyril) et surement bien d'autres. Je crois avoir lu que Veremap doit ou est passé en Opensource.

Cordialement

Hors ligne

 

#7 Tue 02 November 2010 18:14

renard
Participant actif
Date d'inscription: 16 Mar 2010
Messages: 96

Re: editer une base de données depuis une application webcarto

Merci Delu,
Ce que tu me dis m'intéresse tout particulièrement. Cependant j'aurais besoin de quelques éclaircissements.

les vecteurs sont produits par une requête sql à la base postgis qui renvoie du geojson pour les géométries.


Comment sont réalisé tes requêtes sql (php?/AJAX?). Par quels procédés la réponse à ta requête est envoyé en geojson? Est ce que le format WKT est la norme définissant le stockage la géométrie dans postgis?

merci

Hors ligne

 

#8 Tue 02 November 2010 19:50

Delu
Participant actif
Lieu: Briançon
Date d'inscription: 29 Apr 2008
Messages: 76

Re: editer une base de données depuis une application webcarto

Le plus simple serait que je t'envoie un script d'exemple complet mais en gros :
postgis possède une fonction ST_asgeojson qui retourne la géométrie directement au format geojson et une fonction st_geomfromtext qui permet d'enregistrer une géométrie à partir d'un format wkt qu'Openlayers est capable de retourner.
voici un exemple c'est toujours plus parlant (les géométries sont stockées dans un champ the_geom dans la base postgis) :
ma requete sql :

Code:

"SELECT st_asgeojson(a.the_geom) as geojson, a.id, t.nom_territoire, a.nom_aire, a.num_aire, 
        obs.prenom_role, obs.nom_role, a.altitude, a.hauteur_falaise, a.id_orientation, a.id_position, a.id_substrat, a.id_topologie, o.orientation, p.positionnement, s.substrat, g.topologie, a.annee_decouverte, validation, s.type_substrat
        FROM matable a
        join cor_aire_territoire c on c.id_aire = a.id_aire
        join t_territoires t on t.id_territoire = c.id_territoire
        left join bib_orientations o on o.id_orientation = a.id_orientation
        left join bib_positions p on p.id_position = a.id_position
        left join bib_substrats s on s.id_substrat = a.id_substrat
        left join bib_topologies g on g.id_topologie = a.id_topologie
        left join utilisateurs.t_roles obs on obs.id_role = a.id_observateur
        WHERE t.annee = 2010";

QQ extrait de php pour que tu comprennes un peu mieux ce que retourne postgis avec le st_asgeojson:

Code:

$prefix = '{"type": "FeatureCollection","features":[';
//$debut='{"geometry":{"type":"GeometryCollection","geometries":[';
$debut='{"geometry":';
$fin=',"type": "Feature","properties": {}}';
$suffix=']}';

Ici la requete sql dans une variable $sqliste

    //Executer la requete
    $result = pg_query($sqliste) or die ('Échec requête : ' . pg_last_error()) ;
    //Compter le nombre d'enregistrements renvoyés par la requete
    $nb = pg_numrows($result);
    
    while ($val = pg_fetch_assoc($result)){
        $compt++;
        $id = $val['id'];
        $num= $val['num'];
        $nom = $val['nom'];
        $nom_territoire = $val['nom_territoire'];
        $altitude = $val['altitude'];
        $hauteur_falaise = $val['hauteur_falaise'];
        $id_observateur = $val['id_observateur'];
        $decouvreur = $val['prenom_role']." ".$val['nom_role'];
        $orientation = $val['orientation'];
        $positionnement = $val['positionnement'];
        $substrat = $val['substrat'];
        $topologie = $val['topologie'];
        $id_orientation = $val['id_orientation'];
        $id_position = $val['id_position'];
        $id_substrat = $val['id_substrat'];
        $type_substrat = $val['type_substrat'];
        $id_topologie = $val['id_topologie'];
        $annee_decouverte = $val['annee_decouverte'];
        $validation = $val['validation'];
        if($validation=='t'){$validation ='true';}else{$validation='false';}
        $fin=',"type": "feature","id": '.$id.',"properties": {"nom": "'.$nom.'","id": "'.$id.'","num": "'.$num.'","territoire": "'.$nom_territoire.'","altitude": "'.$altitude.'","hauteur_falaise": "'.$hauteur_falaise.'","orientation": "'.$orientation.'","positionnement": "'.$positionnement.'","substrat": "'.$substrat.'","type_substrat":"'.$type_substrat.'","topologie": "'.$topologie.'","id_orientation": "'.$id_orientation.'","id_position": "'.$id_position.'","id_substrat": "'.$id_substrat.'","id_topologie": "'.$id_topologie.'","annee_decouverte": "'.$annee_decouverte.'","id_observateur": "'.$id_observateur.'","decouvreur": "'.$decouvreur.'","validation": "'.$validation.'"}}';
        $str = $debut.$val['geojson'].$fin;
        if ($compt >1){$virgule = ",";}
        $geojson = $geojson.$virgule.$str;
}
echo $prefix.$geojson.$suffix;

ce qu'elle retourne en geojson :

Code:

{"type": "FeatureCollection","features":[{"geometry":{"type":"Point","coordinates":[402225.554686374380253,1758054.555962574901059]},"type": "feature","id": 732,"properties": {"nom": "demo19","id": "732","num": "demo19","territoire": "toto","altitude": "1800","hauteur_falaise": "100","orientation": "Sud-Est","positionnement": "milieu","substrat": "calcaire","type_substrat":"sédimentaire","topologie": "falaise","id_orientation": "4","id_position": "2","id_substrat": "1","id_topologie": "1","annee_decouverte": "1978","id_observateur": "99","decouvreur": "Dupont","validation": "false"}}]}

Openlayers sait lire et charger les objets vecteurs de ce geojson, tu trouvera des exemples ici avec geoext : http://geotribu.net/taxonomy/term/14
Openlayers te permet maintenant d'éditer ces géométries de manière très intuitive : tu peux voir des exemples sur le site d'openlayers : http://openlayers.org/dev/examples/ par exemple regarde : "vector formats exemple", "GeoJSON Example", "editing toolbar Example" et bien d'autres (tout le code source est disponible)
Ensuite Openlayers peut te renvoyer en wkt ce qui est éditer par les outils d'édition.
PHP sera utilisé pour injecter ce wkt en SQL dans postgis :
exemple coté openlayers (c'est du javascript)

Code:

var format = new OpenLayers.Format.WKT();
var updateGeometryFormField = function() {
        if (layer.features[0]){
                        //récupération de la géométrie dessinée
            var geom = layer.features[0];
            if (geom == null) {
                wkt = '';
            } else {
                                //récupération en wkt de la géométrie dessinée
                var wkt = format.write(geom);
            }
            //mise à jour du champ hidden geometry du formulaire extjs
            Ext.getCmp('form-edit').getForm().findField('geometry').setValue(wkt);
        }
        else{return false;}
    };

Puis on récupère coté PHP ce que le formulaire à posté ($_GET['leChampDeMonFormulaire']) et on enregistre en SQL

Code:

$geometry=$_GET['geometry'];
$id =  $_GET['id'];
$nom_champ = $_GET['nom_champ'];
$sql = "Update matable 
set nom_champ = '$nom_champ', 
the_geom = st_geomfromtext('$geometry',27572)
WHERE id = $id";
$result = pg_query($sql) or die ('{success: false, msg:"ben ! pas bon."}') ;
$msg= "update ok !";
echo "{success: true, msg:'".$msg."'}";

Voilà en gros le cheminement serveur ->client -> édition coté client ->enregistrement des modifications en base

Il faut donc que tu soit familié avec le SQL, le PHP, les formulaires HTML et/ou EXTJS, que tu découvres progressivement Openlayers avec des tuto et que tu installes POstgres et Postgis (assez facile sur windows). Les fonctions de postgis sont bien documentées.

Pour répondre à ta question : la requete est faite en AJAX par EXTJS mais ce n'est pas obligatoire. Postgis stocke les géométries en WKB mais sais lire le WKT et écrire du WKB à partir du WKT (st_geomfromtext)

En espérant que cela t'éclaire.

Hors ligne

 

#9 Wed 03 November 2010 12:02

renard
Participant actif
Date d'inscription: 16 Mar 2010
Messages: 96

Re: editer une base de données depuis une application webcarto

merci délu,

Je pense adopter ta solution si je ne parviens pas à configurer apache pour mapfish serveur. A ce propos j'aimerais éclaircir une zone d'ombre.
La communication entre le client et le serveur se fait par http. Mapfish serveur utilise bien "paster" pour communiquer? Je ne me trompe pas si je souhaite que le protocole http soit géré par apache au lieu de paster?

merci,

Dernière modification par renard (Wed 03 November 2010 12:07)

Hors ligne

 

#10 Wed 03 November 2010 12:39

SDuceux
Participant occasionnel
Lieu: Lorient
Date d'inscription: 12 Mar 2008
Messages: 15
Site web

Re: editer une base de données depuis une application webcarto

Bonjour,
Le Conseil Régional de Bretagne en partenariat avec les services de l'Etat
ont développé des modules sur une base GEOSERVER.
Tout a été reversé dans le libre sous le nom de GEOORCHESTRA.
Vous pouvez contacter lydie.vinsonneau@texte-a-enlever.region-bretagne.fr à la région
bretagne. Les modules permettent en autre : D'avoir une base en
modification, attributaire/géométrique, de faire des extractions de données,
des requêtes etc...

Sylvaine DUCEUX
Responsable SIG-Bureau de dessin

Courriel : sduceux@texte-a-enlever.agglo-lorient.fr

Hors ligne

 

#11 Wed 03 November 2010 13:30

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: editer une base de données depuis une application webcarto

bonjour,

renard a écrit:

La communication entre le client et le serveur se fait par http. Mapfish serveur utilise bien "paster" pour communiquer? Je ne me trompe pas si je souhaite que le protocole http soit géré par apache au lieu de paster?


Si, paster est un serveur web dédié au développement d'une application python. En prod tu utiliseras plutôt apache avec le mod_wsgi activé.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#12 Wed 03 November 2010 14:31

renard
Participant actif
Date d'inscription: 16 Mar 2010
Messages: 96

Re: editer une base de données depuis une application webcarto

aïe j'ai du mal à saisir.

Sur ce schéma http://mapfish.org/_images/mapfish_architecture_en.png paster serait où? Avec le mod_wsgi le python et php est interprété par apache et non plus par paster? ou apache se place comme un intermédiaire?
merci,

Hors ligne

 

#13 Thu 04 November 2010 08:58

Delu
Participant actif
Lieu: Briançon
Date d'inscription: 29 Apr 2008
Messages: 76

Re: editer une base de données depuis une application webcarto

Bonjour,

Je ne connais pas suffisamment mapfish ni python pour te répondre. Nous n'avons ni utilisé mapfish serveur, ni paster. Dans l'absolu on peut faire uniquement avec PHP et Openlayers. Le serveur web était bien Apache. Yves saura mieux te répondre que moi.
Pour les développement sur Windows nous utilisons l'apache et le mapserver de MS4W, sur le serveur de prod toutes les config apache et mapserver sont faite à la mano.
Désolé pour cette réponse peu précise.

Hors ligne

 

#14 Thu 04 November 2010 19:55

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: editer une base de données depuis une application webcarto

Bonsoir,

est-ce obligé de passer par le format geojson ? Je dis çà car je ne bénéficie pas de st_asgeojson dans mon postgis.

Je vois st_geomfromtext dans ton code php, mais ce n'est pas reconnu non ?

Merci d'avance.

Hors ligne

 

#15 Fri 05 November 2010 10:54

Delu
Participant actif
Lieu: Briançon
Date d'inscription: 29 Apr 2008
Messages: 76

Re: editer une base de données depuis une application webcarto

bonjour,

J'ai eu le même problème que toi et j'ai du installer la version 1.3.6 de postgis pour bénéficier de cette fonction st_asgeojson.
Je précise que j'ai des versions de postgis différentes selon mes bases. Je ne sais pas si c'est bien sain mais je n'ai pas migrer les bases existantes en 1.3.6 et elles fonctionnent très bien.
Je ne sais pas s'il existe d'autres alternatives mais le javascript lit du json en natif, le geojson en est une déclinaison. Tu peux toujours recréer en php une syntaxe geojson à partir de valeurs de coordonnées et de type de geometries retournées par ton postgis mais ça complique la chose.
Regarde tjs la doc openlayers pour voir les formats acceptés en entrée mais j'ai travaillé à partir d'exemple de code fait par des gens qui maitrisent à la fois postgis et openlayers, je pense que s'il on pris cette option c'est qu'ils avaient de bonnes raisons de penser que c'était la bonne. Ce qui ne veut pas dire qu'il ny en pas d'autres.
Si tu as une ancienne version de postgis, peut-être que le st_xxx n'existait pas et que toutes les fonctions sont écrites sans le ST_ ; essaie geomfromtext();

Hors ligne

 

#16 Fri 05 November 2010 11:21

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: editer une base de données depuis une application webcarto

bonjour,

Les fonctions commençant par ST_ ont été introduites pour des questions de compatibilités avec des normes. Elles existent généralement sous forme de fonction identique sans le st_.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#17 Fri 05 November 2010 11:23

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: editer une base de données depuis une application webcarto

Bonjour et merci.

oui j'ai bien geomfromtext. Je pourrai travailler avec OpenLayers avec la représentation texte sans souci ? pas besoin de geojson pour le coup ?

Oui, ta migration s'est bien passé, c'est cool. Tu avais fait une mise à jour de ton postgis ? tu avais suivi des tutoriaux ?

Hors ligne

 

#18 Fri 05 November 2010 14:33

Delu
Participant actif
Lieu: Briançon
Date d'inscription: 29 Apr 2008
Messages: 76

Re: editer une base de données depuis une application webcarto

geomfromtext va te permettre d'enregistrer dans postgis une géométrie produite par openlayers ; dans l'autre sens (postgis vers openlayers) si tu n'as pas le asgeojson dans postgtis, il faut que tu fasses comme je t'ai dis plus haut : utiliser PHP pour construire du geojson à partir de ce que peux te renvoyer postgis ou voir si openlayers sait lire autre chose que postgis serait en capacité de produire.
Je te conseille tout de même de voir pour une mise à jour de postgis. Je me souviens avoir galéré en voulant installer une version 1.4 et être revenu à une 1.3.6 qui comporte ce st_asgeojson aussi. Je n'ai pas fait de procédure mais tu devrais trouver ça qq part sur ce forum ou ailleurs. Il faut aussi que ta version de postgres soit compatible avec les nouvelles versions de postgis.
Tout dépend sur quel OS est ton postgres, si tu as ou non des bases déjà en prod, si tu as un serveur et un seul ou si tu un serveur de test.
Je te conseille de faire une install en local de postgres postgis tout neuf (version 9 ;-) )sur ton poste de travail et de voir avec ça si tu parviens à faire ce que tu enviseages. Si ça fonctionne, tu étudieras ensuite les solutions pour migrer ce qui est en prod.

Hors ligne

 

#19 Mon 08 November 2010 09:42

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: editer une base de données depuis une application webcarto

Bonjour et merci.

Je vais essayer de voir çà dès que je le pourrai, en testant en virtualisée ou en local pour faire des tests de version de postgis.

Je redirai quoi par la suite.

Bonne journée.

Hors ligne

 

#20 Mon 08 November 2010 10:49

renard
Participant actif
Date d'inscription: 16 Mar 2010
Messages: 96

Re: editer une base de données depuis une application webcarto

Bonjour,

Delu, les performances sont-elles plus/moins/équivalentes au wms pour consulter des vecteurs (je pense apporter la modifications plus tard)?

merci.

Hors ligne

 

#21 Mon 08 November 2010 12:08

Delu
Participant actif
Lieu: Briançon
Date d'inscription: 29 Apr 2008
Messages: 76

Re: editer une base de données depuis une application webcarto

plus ou moins comparable à quoi ?
Si tu parles du chargement des vecteurs, 2 facteurs interviennent : le navigateur et la quantité/complexité des vecteurs
Avec Firefox tu peux charger un bon nombre de vecteurs de taille moyenne, avec IE, tu es plus rapidement limité voir franchement limité. avec les autres navigateurs je n'ai ni testé, ni d'information.
Si tu dois charger des vecteurs complexes, genres des polygones comportant des milliers de sommets, tu vas rencontrer des difficultés si tu dois en charger trop. Je n'ai pas de valeurs à te donner concernant les seuils. Pour te donner un ordre d'idée, on charge en 8secondes dans un grid Extjs et sur sur une carte (avec geoExt) environ 238 polygones comportant un total de 22000 sommets (calcul avec npoints(the_geom) dans postgis) + qq données attributaires. Ensuite, une fois chargés, le navigateurs manipule ces vecteurs de manière instantanée.
En édition d'un polygone, j'ai constaté sur un très gros polygone que le wkt retourné par openlayers et envoyé à PHP avec une méthode GET avait atteint la limite de la taille de l'URL. Si tu envoies ton formulaire en POST, je pense qu'il n'y pas de pb.
Est-ce que ça répond à ta question ?

Dernière modification par Delu (Mon 08 November 2010 14:01)

Hors ligne

 

#22 Tue 09 November 2010 00:00

renard
Participant actif
Date d'inscription: 16 Mar 2010
Messages: 96

Re: editer une base de données depuis une application webcarto

merci, ca répond tout à fait à ma question, et j'appréhende un peu pour mon application webcarto qui doit comporter...3000polygones (mais souvent rectangulaire, ce sont des extraits de cadastres)+ pas mal de linéaire. Je te demandais ca pour gérer les données qui n'auront pas vocation à être être modifié, peut être alors le wms serait plus rapide (notamment grâce à tilecache). 

Tu obtiens ce résultat de 8 avec quel vitesse de connexion en up?

merci.

Hors ligne

 

#23 Tue 09 November 2010 16:26

Delu
Participant actif
Lieu: Briançon
Date d'inscription: 29 Apr 2008
Messages: 76

Re: editer une base de données depuis une application webcarto

on est en 2Mo sdsl théoriques au boulot.
Je fais le test chez moi avec 8Mo adsl classique mais je pense que c'est comparable.

il faut savoir qu'en wms, il n'y pas d'interraction possible entre les grid dans Extjs et les géométries de la carte. et que mapserver va devoir, pour chaque mouvement ou zoom de la carte, réintérroger postgis pour construire son wms. (tu ne peux pas mettre en cache ce que tu envisages de modifier via ton application, sinon les modifications ne seront pas affichées sur ton wms). C'est surement plus rapide mais l'avantage du vecteur et que tu peux organiser ton appli pour ne charger les données qu'une bonne fois pour toute.
Autre astuce que l'on a utilisée, on a créé 3 geom différents par enregistrement dans postgis. Un the_geom (l'original), un geom_mixte, un geom_point (le centroïd des géométries). Le geom mixte est soit le geom original, soit le point du centroïd, cela est fonction de la surface du geom original (par exemple un point centroid si S² < 10 000m²). Un trigger sur insert et sur update remplit les 2 colonnes geom_mixte et geom_point en fonction de cette surface. Ensuite dans l'application, selon le niveau de zoom, tu n'affiches que des points (en utilisant la colonne geom_point) si tu es sur une emprise large ; des points ou des polygones (pour les plus grands) - (en utilisant la colonne geom_mixte) si tu zoomes un peu. Si tu zoomes fort, tu affiches le the_geom original.
Cela permet de voir tous les micro polygones (genre 100m²) quand tu es à l'échelle d'un département ou même d'une commune (sinon ils sont invisibles ou presque) mais aussi de charger en vecteur beaucoup de géométries, sans trop charger le navigateur et en réduisant les temps de chargement.

qq tests comme promis :
depuis chez moi donc en 8mo adsl théorique : idem 8s avec Firefox 3.6.12. J'ai fait qq tests intéressants.
si je regarde dans le firebug la requête qui charge les vecteurs : +ou - 3secondes dont 2 secondes d'attente de réponse du serveur et 1 seconde de téléchargement. Le débit semble donc avoir peu d'influence (=1s sur les 8). Les 5s restantes sont à attribuer au navigateur ou au poste client. J'ai donc fait des tests avec Chrome (V7) réputé rapide pour le javascript et avec Safari (V5.0.2). Et la y a pas photo comme on dit, idem pour ces deux navigateurs : 5s au lieu de 8s. Ce qui veut dire que si le temps de téléchargement des données est le même 3s, Chrome et safari mettent 2s pour les traiter et les afficher là ou Firefox met 5s...
Les autres paramètres important sont : la vélocité (+disponibilité) du serveur distant, mais aussi je pense les capacités de traitement du poste client puisque tous les tests ci-dessus sont fait avec un poste qui a 4 ans sous XP (mais bien optimisé avec core2duo 2.13Ghz - 4Go de RAm, un bon chipset et de bons DD). Sur un imac 27" d'un an (core2duo 3,06 GHz - 4Go de ram) les résultats sont les mêmes avec Firefox mais avec Safari (5.0.2 aussi) on passe à 4 secondes. La connection à internet est exactement la même.

Dernière modification par Delu (Wed 10 November 2010 11:30)

Hors ligne

 

Pied de page des forums

Powered by FluxBB