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 Wed 16 July 2014 17:36

Mak6
Participant occasionnel
Lieu: Paris
Date d'inscription: 1 Apr 2013
Messages: 37

Problème de liaison entre Openlayers/EXT-JS/GeoExt2 et PostGis

Bonjour à vous tous,

Je débute en webmapping et souhaite réaliser une carte interactive présentant des données vecteur et statistiques
de l'INSEE stockées dans une table PostGis, avec une interface graphique faisant interagir les APIs OpenLayers, EXT-JS, rassemblées par la bibliothèque GeoExt 2.

Etant donné que je suis pour l'instant en "local" je vais devoir créer une passerelle entre ces données situées dans des tables PostGIS et mon application cliente.

Pour extraire les données de ma table picardie.shp (GéoFla) en GeoJSON, j'ai réalisé la requête suivante :

Code:

SELECT d.code_arr, d.nom_arr, st_asgeojson(d.geom) as coords, p.poptotal, p.popactive, round(((p.popactive / p.poptotal)*100.0),2) as proportion_actifs FROM picardie as d, poppicardie as p where d.code_arr = p.arr

Après avoir installé les différentes APIs sur le serveur, j'exécute ma page d'index qui contient les appels des bibliothèques de fonctions des APIs. Les APIs fonctionnent ainsi que googlemap mais J'essaie d'afficher le résultat de ma requête SQL (qui fonctionne bien dans postgis) mais rien ne s'affiche et firebug détecte l'erreur suivante:

Code:

SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

je ne comprend pas ce qu'il se passe? à noter que sur mon ordinateur portable tout fonctionne mais pas sur l'ordinateur de mon travail...?!


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#2 Wed 16 July 2014 18:35

Laurent Jégou
Participant assidu
Lieu: Toulouse
Date d'inscription: 5 Sep 2005
Messages: 447
Site web

Re: Problème de liaison entre Openlayers/EXT-JS/GeoExt2 et PostGis

Pierre, le message d'erreur est assez explicite : le flux de données JSON récupéré n'est pas valide. Il se peut qu'il ait mal été généré par ton script PHP. Pour vérifier, regarde dans l'onglet "réseau" de firebug pour voir directement ce flux.


Enseignant-Chercheur en Géomatique
UT2J - Dept Géo / CNRS UMR LISST-Cieu / Master Sigma - Revue Mappemonde

Hors ligne

 

#3 Thu 17 July 2014 11:36

Mak6
Participant occasionnel
Lieu: Paris
Date d'inscription: 1 Apr 2013
Messages: 37

Re: Problème de liaison entre Openlayers/EXT-JS/GeoExt2 et PostGis

Ok, les différents flux se chargent convenablement, la connexion à la base s'est établie avec succés, les données postgis sont bien consommées par le script php mais il me dit que j'utilise des coordonnées indéfinies?! What? "Use of undefined constant coords - assumed 'coords' on line 26"

voici la capture firebug :
https://drive.google.com/file/d/0B5xRrH … sp=sharing

voici la réponse de getdepts :
https://drive.google.com/file/d/0B5xRrH … sp=sharing

voici le problème :
https://drive.google.com/file/d/0B5xRrH … sp=sharing

Merci, au moins je sais maintenant d'où vient le problème même si je ne sais absolument pas comment le résoudre. smile

Code:

//Requête SQL
    $sql = "SELECT d.code_arr, d.nom_arr, st_asgeojson(d.geom) as coords, p.poptotal, p.popactive, round(((p.popactive / p.poptotal)*100.0),2) as proportion_actifs FROM picardie as d, poppicardie as p where d.code_arr = p.arr";


    $res = pg_query($sql) or die(pg_last_error());

    //Génération de la chaîne GeoJSON
    $str = '';
    $str .= '{
    "type": "FeatureCollection",
    "features": [';
    $i = 1;
    while ($result = pg_fetch_array($res)) {
        $str .= '{
            "geometry": 
                '.$result[coords].'
            ,
            "id": '.$i++.',
            "type": "Feature",'.
            '"properties": {
                "Code_arrondissement": "'.$result['code_arr'].'",
                "nom": "'.$result['nom_arr'].'",
                "poptotal": "'.$result['poptotal'].'",
                "popactive": "'.$result['popactive'].'",
                "proportion_actifs": "'.$result['proportion_actifs'].'"
            }
        },';
    }
    $str2 = substr($str,0,strlen($str)-1);    // enlever la dernière virgule

    $str2 .= ']}';

Hors ligne

 

#4 Thu 17 July 2014 12:46

Laurent Jégou
Participant assidu
Lieu: Toulouse
Date d'inscription: 5 Sep 2005
Messages: 447
Site web

Re: Problème de liaison entre Openlayers/EXT-JS/GeoExt2 et PostGis

C'est un warning/notice PHP, qui prévient du fait que la variable coords n'a pas été déclarée avant son utilisation dans le script, il faut donc mieux utiliser la syntaxe $result['coords'] (avec les guillemets autour).

(idem chez les voisins : http://www.forumsig.org/showthread.php/ … post326537)


Enseignant-Chercheur en Géomatique
UT2J - Dept Géo / CNRS UMR LISST-Cieu / Master Sigma - Revue Mappemonde

Hors ligne

 

#5 Thu 17 July 2014 13:23

Mak6
Participant occasionnel
Lieu: Paris
Date d'inscription: 1 Apr 2013
Messages: 37

Re: Problème de liaison entre Openlayers/EXT-JS/GeoExt2 et PostGis

GéNIAL!!!! Merci encore une fois....! J'ai perdu la moitié de mes cheveux pour deux guillemets... : rolleyes :

Hors ligne

 

#6 Thu 17 July 2014 16:07

Mak6
Participant occasionnel
Lieu: Paris
Date d'inscription: 1 Apr 2013
Messages: 37

Re: Problème de liaison entre Openlayers/EXT-JS/GeoExt2 et PostGis

Bon... J'ai un dernier petit souci.
Il a bien compris qu'il y avait une jointure de table entre "picardie" et "poppicardie" mais il ne m'affiche pas les résultats sad

capture :
https://drive.google.com/file/d/0B5xRrH … sp=sharing

Hors ligne

 

#7 Thu 17 July 2014 16:32

Mak6
Participant occasionnel
Lieu: Paris
Date d'inscription: 1 Apr 2013
Messages: 37

Re: Problème de liaison entre Openlayers/EXT-JS/GeoExt2 et PostGis

Non c'est bon j'ai parlé trop vite.

Hors ligne

 

#8 Thu 24 July 2014 15:20

Mak6
Participant occasionnel
Lieu: Paris
Date d'inscription: 1 Apr 2013
Messages: 37

Re: Problème de liaison entre Openlayers/EXT-JS/GeoExt2 et PostGis

Bonjour,

Petit à petit mon application se développe et ça commence à prendre forme.
J'ai quelques petits blocage tout de même à 2 niveaux.

1. Afficher dans le controleur les deux flux (OSM et google map) en même temps.

Mon contrôle LayerSwitcher affiche une table des matières pour la carte, ça me permettra de basculer entre BaseLasyers et pour afficher ou masquer des superpositions. J'arrive à afficher soit OSM, soit Google maps mais pas les deux en même temps dans le controleur.

Code:

// create map instance
        map = 
        new OpenLayers.Map({projection: 
        new OpenLayers.Projection("EPSG:3857"), 
        
        controls: [new OpenLayers.Control.MousePosition(), 
        new OpenLayers.Control.OverviewMap(), 
        new OpenLayers.Control.Permalink(),
        new OpenLayers.Control.Permalink('permalink'),
        new OpenLayers.Control.LayerSwitcher(),         
        new OpenLayers.Control.PanZoomBar()]});
        
        var gLayer = new OpenLayers.Layer.Google("Google Maps", {type: google.maps.MapTypeId.TERRAIN});
        var gLayer = new OpenLayers.Layer.OSM();

2. Au niveau de la symbologie

Comme vous pouvez le voir sur le code suivant, j'effectue une symbologie affichant une couleur différentes par classe de 10

Code:

// create vector layer
        var context = {
            getFond: function(feature) {
                if (feature.attributes.nbactif <= 10) {
                    return '#C79F4B';
                }
                if (feature.attributes.nbactif >= 20&& feature.attributes.nbactif < 30) {
                    return 'yellow';
                }
                if (feature.attributes.nbactif >= 30&& feature.attributes.nbactif < 40) {
                    return 'orange';
                }
                if (feature.attributes.nbactif >= 50) {
                    return 'blue';
                }

Or, ma base de donnée concerne des zonage PLU, j'aurai aimé affiché une couleur pour chaque zonage, exemple
Si le libellé = A alors renvoyer la couleur jaune
Si le libellé = UHa  alors renvoyer la couleur rouge

Je pensais que ça allait être très simple avec un simple "Like" ou "=" :

Code:

        var context = {
            getFond: function(feature) {
                if (feature.attributes.libelle Like "A") {
                    return '#C79F4B';

mais non sad

Hors ligne

 

#9 Thu 24 July 2014 17:40

nworr
Participant actif
Date d'inscription: 10 Apr 2014
Messages: 77

Re: Problème de liaison entre Openlayers/EXT-JS/GeoExt2 et PostGis

Pour l'affichage de osm et google maps en même temps, je ne crois pas que ce soit possible, ils sont considérés comme baseLayer systématiquement je pense et comme on ne peut avoir 2 base layer en même temps ....

Pour la fonction qui te retourne ça devrait pouvoir marcher avec

Code:

 if (feature.attributes.libelle == "A") {

ou une expression regulière js si tu veux faire un like

Hors ligne

 

#10 Thu 24 July 2014 17:43

Mak6
Participant occasionnel
Lieu: Paris
Date d'inscription: 1 Apr 2013
Messages: 37

Re: Problème de liaison entre Openlayers/EXT-JS/GeoExt2 et PostGis

ça fonctionne! Merci pour le deuxième point, je n'y avais pas pensé....

Hors ligne

 

Pied de page des forums

Powered by FluxBB