IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Créer et publier une couche à partir postgis en utilisant javascript


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 167
    Par défaut Créer et publier une couche à partir postgis en utilisant javascript
    Bonjour à tous,

    ma base de données est sur postgresql/postgis,à partir une table s'appelle "Céréales" je veux créer et publier une carte d'un champ s'appelle "production" sur mon site. (une carte de production)
    Pour cela, il faut sélectionner l'année et l'espece sur le site, et la requête SQL (jointure avec une couche géométrique) est faite par PHP.

    code PHP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    //get the table and fields data
    $espece = $_GET['Page'];
    $annee = $_GET['annee'];
    $production = $_GET['production'];
     
     
    //$id = $_GET['id'];
     
    $sql = "SELECT *  FROM benmed.\"Communes\",benmed.\"R_CerealesHiver\" WHERE benmed.\"Communes\".code_commune = benmed.\"R_CerealesHiver\".code_commune and benmed.\"R_CerealesHiver\".espece='$espece' and benmed.\"R_CerealesHiver\".annee=$annee and benmed.\"R_CerealesHiver\".production = $production ";
     
     
     
    //send the query
    if (!$response = pg_query($conn, $sql)) {
    	echo "A query error occured.\n";
    	exit;
    }
    $trv = true;
    //echo the data back to the DOM
    while ($row = pg_fetch_row($response)) {
     
     
    	foreach ($row as $i => $attr){
    		if ( $trv ){echo $attr.", ";}
    		$trv = true;
    	}
     
    	echo ";";
    }
    Est ce que ce code PHP est juste?
    Est ce qu'on peut utiliser GET pour le champ "production"?
    Comment je peut céer une nouvelle couche des valeurs de production par AJAX?

    merci d'avance pour toute orientation ou aide

  2. #2
    Membre confirmé
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 167
    Par défaut
    autrement:

    par python on utilise l'instruction Create Query Layer, quel est son équivalent par php ou javascript??

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Si ce code est utilisé par un appel AJAX, oui, il a l'air correct, si l'appel ajax est bien fait avec une requête GET en passant les bons paramètres, et en supposant que tu ais bien initialisé $conn avec la connexion à la base.

    Cela dit, je ne comprends pas bien où est le problème : tu as essayé et ça plante ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre confirmé
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 167
    Par défaut
    Bonjour,

    Oui Celira. moi aussi je ne comprend pas où existe il l'erreur.

    code ajax:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    function DisplayStat(){
       //var fields = flds;
       var data = {
    		table: str,
    		fields: fields,
     
    	};
         $.ajax({ url:"get_map_prod.php",
    		    data: data,
    		    success: function(data){
    			alert("a");
    			//if (data) {
    			//var production=data.production;
    	       var dataArray = data.split(", ;");
     
    	dataArray.pop();    
    	dataArray.forEach(function(d){
    		d = d.split(", "); 
    			var feature = {
    				"type": "Feature",
    				"properties": {}, //properties object container
    				"geometry": JSON.parse(d[fields.length])			//parse geometry
    			};
    			alert ("c");
    		for (var i=0; i<fields.length; i++){
    			feature.properties[fields[i]] = d[i];
    		};
    		geojson.features.push(feature);
    	}	
    	);
     
    	alert("b");
    	hangry2();
    	}
    	});
     
    }
    function hangry2(){
    		console.log(geojson);
    		var statistique = new ol.style.Style({
            fill: new ol.style.Fill({
              color: [0,0,0,1]
            }),
            stroke: new ol.style.Stroke({
              color: [240,215,255,1],
              width: 1
            })
          });
    vector1 = new ol.layer.Vector({
    	title: 'Mes statistiques',
        source: new ol.source.Vector({
    	features: (new ol.format.GeoJSON()).readFeatures(geojson),
        //url: 'ilot.geojson',
        format: new ol.format.GeoJSON(),
     
     
      }),style: statistique
     
    });
    map.addLayer(vector1);
    }

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    On va essayer de comprendre : qu'est-ce qu'il se passe lorsque tu déclenches la fonction Javascript ? Tu as une erreur ? Est-ce que tu vois bien les alerte que tu as ajouté pour débugger ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre confirmé
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 167
    Par défaut
    il exécute la fonction displayStat (str, flds) et affiche les alertes, aussi la couches de "mes statistiques" dans switcherLayer mais la couche est vide, aucune information.

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Peux-tu voir dans les outils de Dev de ton navigateur si la requête Ajax est bien lancée et la réponse obtenue ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Membre confirmé
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 167
    Par défaut
    voir la pièce jointe
    Images attachées Images attachées  

  9. #9
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Si tu cliques sur la ligne de la requête (dernière ligne du tableau), tu vas arriver sur un onglet de détail, avec quelque part une mention "Réponse". C'est ce qui est affiché dans ce cadre "Réponse" qui nous intéresse.
    Moniteur Réseau - Outils de développement
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  10. #10
    Membre confirmé
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 167
    Par défaut
    est ce que vous parlez sur ça??
    Images attachées Images attachées  

  11. #11
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Oui, on y est presque. Dans le cadre à droite, il y a un onglet "Réponse" et ce qu'il y a dans cet onglet qui m'intéresse
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  12. #12
    Membre confirmé
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 167
    Par défaut
    Bonjour,

    Je suis désolé Celira pour la réponse retardée, j'avais un problème de connexion.

    Voilà l'onglet "réponse":

    Nom : reponse.PNG
Affichages : 171
Taille : 50,3 Ko

  13. #13
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Ah ben voilà on a le vrai message d'erreur : tu as un problème sur une requête exécutée par pg_query parce que visiblement il n'y a de valeur dans la recherche pour benmed.R_CerealesHiver.annee.

    Donc si je reprends le code que tu as posté dans ton premier post, le problème vient du fait que $_GET['annee'] est vide. Pour corriger cela, il faut vérifier ce que tu envoies comme donnée dans ton appel Ajax (et si tu en envoies) et éventuellement, gérer le cas où il n'y a aucun paramètre reçu (en retournant une erreur par exemple)

    En parallèle, tu peux aussi modifier ta requête pour encapsuler les paramètres en utilisant pg_​query_​params, histoire d'éviter les plantages et les injections SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = 'SELECT *  FROM benmed.Communes, benmed.R_CerealesHiver 
    WHERE benmed.Communes.code_commune = benmed.R_CerealesHiver.code_commune 
    and benmed.R_CerealesHiver.espece=$1 
    and benmed.R_CerealesHiver.annee=$2 
    and benmed.R_CerealesHiver.production = $3 ';
     
    //send the query
    if (!$response = pg_query_params($conn, $sql, array($espece, $annee, $production))) {
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  14. #14
    Membre confirmé
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 167
    Par défaut
    j'ai modifié le code ,de requête comme vous avez m'indiquer. aucun changement
    l'espece et l'année sont sélectionnés depuis le site mais la production non. est ce que c'est correcte si je mets $production=$_get ("production")

    c'est le champs de la production que je veux le cartographier; c'est à dire afficher une carte des valeurs de production s'affiche au dessus de celle des communes.

    j'ai un exemple de même travail mais je n'arrive pas à comprendre et régler mon code.

  15. #15
    Membre confirmé
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 167
    Par défaut
    Bonjour,

    je pense que j'ai approché à la solution mais j'ai besoin un petit aide:

    alors j'ai modifié le fichier php et java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    $sql = "SELECT benmed.\"Communes\".code_commune, benmed.\"Communes\".nom_commune, benmed.\"R_CerealesHiver\".production, benmed.\"R_CerealesHiver\".annee, benmed.\"R_CerealesHiver\".espece,ST_AsGeoJSON(benmed.\"Communes\".geom,6) as geojson   FROM benmed.\"Communes\",benmed.\"R_CerealesHiver\" WHERE benmed.\"Communes\".code_commune = benmed.\"R_CerealesHiver\".code_commune and benmed.\"R_CerealesHiver\".espece='$espece' and benmed.\"R_CerealesHiver\".annee=$annee and benmed.\"R_CerealesHiver\".production > 0";
     
    //ll
    if (!$rs = pg_query($conn, $sql)) {
    	echo "A query error occured.\n";
    	exit;
    }
    # Build GeoJSON feature collection array
    $geojson = array(
       'type'      => 'FeatureCollection',
       'features'  => array()
    );
    # Loop through rows to build feature arrays
    while ($row = pg_fetch_row($rs)) {
        $properties = $row;
        # Remove geojson and geometry fields from properties
        unset($properties['geojson']);
        unset($properties['geom']);
        $feature = array(
             'type' => 'Feature',
             'geometry' => json_decode($row['geojson'], true),
             'properties' => $properties
        );
        # Add feature arrays to feature collection array
        array_push($geojson['features'], $feature);
    }
    header('Content-type: application/json');
    echo json_encode($geojson);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    function DisplayStat(){
      /* var fields = flds;
       var data = {
    		table: str,
    		fields: fields,
     
    	};*/
         $.ajax({ url:"get_map_prod.php",
    		    type: "GET",
    		    data: $("#form5").serialize(),
    		    success: function(data){
    			alert("a");
    			//if (data) {
    			//var production=data.production;
    	     /* var dataArray = data.split(", ;");
     
    	dataArray.pop();    
    	dataArray.forEach(function(d){
    		d = d.split(", "); 
    			var feature = {
    				"type": "Feature",
    				"properties": {}, //properties object container
    				"geometry": JSON.parse(d[fields.length])			//parse geometry
    			};
    			alert ("c");
    		for (var i=0; i<fields.length; i++){
    			feature.properties[fields[i]] = d[i];
    		};
    		geojson.features.push(feature);
    	}	
    	)*/
     
    	alert("b");
    	hangry2();
    	}
    	});
     
    }
    function hangry2(){
    		console.log(geojson);
    		var statistique = new ol.style.Style({
            fill: new ol.style.Fill({
              color: [0,0,0,1]
            }),
            stroke: new ol.style.Stroke({
              color: [240,215,255,1],
              width: 1
            })
          });
    vector1 = new ol.layer.Vector({
    	title: 'Mes statistiques',
        source: new ol.source.Vector({
    	features: (new ol.format.GeoJSON()).readFeatures(geojson),
        //url: 'ilot.geojson',
        format: new ol.format.GeoJSON(),
     
     
      }),style: statistique
     
    });
    map.addLayer(vector1);
    }
    cas1: quand je laisse annee dans sql j'obtiens dans l'onglet reponse ce qui suit:

    Nom : 2.PNG
Affichages : 207
Taille : 48,8 Ko

    cas 2: quand j'élimine annee de la requête, voilà :

    Nom : nouv.PNG
Affichages : 189
Taille : 51,2 Ko

    pourquoi la couche ne s'affiche pas??? est ce qu'il manque la légende ???

    poussez moi s'il vous plait,

  16. #16
    Membre confirmé
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 167
    Par défaut
    Bonjour,

    le problème était dans le code java.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     dataArray = data.split(", null");
    		 console.log(dataArray)
    	dataArray.pop();    // supprimer le dernier element vide
    	dataArray.forEach(function(d){
    		d = d.split(", "); 
    			var feature = {
    				"type": "Feature",
    				"properties": {"gid": d[0]+"", "production":d[2]+""}, //properties object container
    				"geometry": JSON.parse(d[5])			//parse geometry
    			};
    			//alert ("c");
    		/*for (var i=0; i<fields.length; i++){
    			feature.properties[fields[i]] = d[i];
    		};*/
    		geojson.features.push(feature);

  17. #17
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    L'essentiel c'est que ça fonctionne
    Au passage, c'est "Javascript", pas "Java" (les deux noms se ressemblent, mais ce sont des langages complètement différents)
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. script php et chargement d'une couche vecteur postgis
    Par georex dans le forum SIG : Système d'information Géographique
    Réponses: 2
    Dernier message: 29/05/2012, 18h59
  2. Réponses: 2
    Dernier message: 21/10/2010, 09h28
  3. créer et ouvrir une image à partir d'une servlet
    Par natoine dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 27/04/2009, 20h39
  4. [AC-2003] créer et remplir une table à partir d'une autre
    Par Dokko974 dans le forum VBA Access
    Réponses: 3
    Dernier message: 06/04/2009, 11h57
  5. Créer et remplir une BD à partir de fichier SQL
    Par djamsdjams dans le forum Débuter
    Réponses: 1
    Dernier message: 26/11/2008, 18h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo