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

Rencontres QGIS 2025

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

#1 Thu 27 October 2016 09:54

nora 27
Participant actif
Date d'inscription: 15 Jul 2014
Messages: 59

créer une couche à partir une requête sql sur Postgis en PHP

Bonjour à tous,

Je travaille sur la conception d'un site web en utilisant html et javascript, les donnés sont provenus d'une base géographiques POSTGIS.  pour les appeller on se base  sur des requêtes sql par PHP.

J'ai réussi à publier une couche shape (commune), mais je rencontre une difficulté à créer une couche de la production des céréales (table attributaire : céréales).

mon but: jointure entre commune et céréales, affichage la production d'une année spécifique pour un type de céréale identifié

remarque : la sélection du nom de la table, type de céréale et l'année se fait sur le site ("formulaire html")

est ce que vous avez une idée ?

merci

Hors ligne

 

#2 Mon 31 October 2016 10:40

nora 27
Participant actif
Date d'inscription: 15 Jul 2014
Messages: 59

Re: créer une couche à partir une requête sql sur Postgis en PHP

Bonjour à tous,

j'ai posté cet question dans le forum de webmapping depuis quelques jours mais aucune réponse, j'espère que j'aurai un aide dans ce forum

Je travaille sur la conception d'un site web en utilisant html et javascript, les donnés sont provenus d'une base géographiques POSTGIS.  pour les appeller on se base  sur des requêtes sql par PHP.

J'ai réussi à publier une couche shape (commune), mais je rencontre une difficulté à créer une couche de la production des céréales (table attributaire : céréales).

mon but: jointure entre commune et céréales, affichage la production d'une année spécifique pour un type de céréale identifié

remarque : la sélection du nom de la table, type de céréale et l'année se fait sur le site ("formulaire html")

est ce que vous avez une idée ?

merci

Hors ligne

 

#3 Wed 02 November 2016 16:07

nora 27
Participant actif
Date d'inscription: 15 Jul 2014
Messages: 59

Re: créer une couche à partir une requête sql sur Postgis en PHP

autrement,

quel est l'équivalent de Create Query LAyer de Python par PHP ou javascript??

Hors ligne

 

#4 Wed 02 November 2016 17:04

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

Re: créer une couche à partir une requête sql sur Postgis en PHP

Bonjour, pour pouvoir vous répondre il faudrait, je pense, que l'on en sache plus sur la manière dont votre site web "consomme" les données spatiales et les affiche. S'il est basé sur une API type OpenLayers3 ou Leaflet (ou Google Maps, etc.), il faut utiliser un type de flux de données compatible.
Aujourd'hui, il s'agit souvent de GeoJSON, facile à produire en PHP (c'est un format texte structuré).

Plus de détails dans ce support de TP : http://www.geotests.net/cours/sigma/web … 015_TP.pdf

Cf. aussi ce message récent : http://georezo.net/forum/viewtopic.php?id=103705

Dernière modification par Laurent Jégou (Wed 02 November 2016 17:24)


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

Hors ligne

 

#5 Thu 03 November 2016 09:40

nora 27
Participant actif
Date d'inscription: 15 Jul 2014
Messages: 59

Re: créer une couche à partir une requête sql sur Postgis en PHP

Bonjour,

effectivement, j'utilise le format GeoJSON, et l'API OpenLayers3
- les requêtes se fait par PHP
- le fichier PHP est appelé avec AJAX

partie du code PHP:

Code:

$espece = $_GET['Page'];
$annee = $_GET['annee'];


$sql = "CREATE VIEW 'v1' as 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 > 0";
    

//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 ";";
}

partie du code js:

Code:

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);
}

voilà, mon but exacte c'est le même qui a été expliqué dans le TP envoyé.

Dernière modification par nora 27 (Thu 03 November 2016 10:11)

Hors ligne

 

#6 Sun 13 November 2016 14:36

nora 27
Participant actif
Date d'inscription: 15 Jul 2014
Messages: 59

Re: créer une couche à partir une requête sql sur Postgis en PHP

Bonjour,

J'ai bien lu le TP que vous m'avez envoyé, et essayé avec mon code mais en vain.

aussi, j'ai tenté d'ouvrir ce lien : https://www.geotests.net/cours/sigma/we … g/2015/TP/
pour voir les fichier source, il m'affiche que :"The requested URL /cours/sigma/webmapping/2015/TP/ was not found on this server"

Est ce que vous pouvez m'aider plus, parce que je ne suis pas  informaticienne et je débute avec ce développement??

mon code utilisé est dans le message précédent.


merci

Dernière modification par nora 27 (Mon 14 November 2016 11:00)

Hors ligne

 

#7 Sun 13 November 2016 18:08

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Re: créer une couche à partir une requête sql sur Postgis en PHP

Bonjour,

On évite de mettre des accents dans un nom de table: céréales

Dernière modification par michel56 (Sun 13 November 2016 19:34)


Opérateur cartographique & DAO & PHP.

Hors ligne

 

#8 Mon 14 November 2016 11:32

nora 27
Participant actif
Date d'inscription: 15 Jul 2014
Messages: 59

Re: créer une couche à partir une requête sql sur Postgis en PHP

michel56 a écrit:

Bonjour,

On évite de mettre des accents dans un nom de table: céréales


en fait la table dans la BD s'appelle "R_CerealesHiver". j'ai mis céréales seulement dans l'explication.

Hors ligne

 

#9 Mon 14 November 2016 18:07

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Re: créer une couche à partir une requête sql sur Postgis en PHP

Bonjour,

Il faut utiliser la fonction postgis: ST_AsGeoJSON

https://github.com/bmcbride/PHP-Databas … eojson.php

http://postgis.fr/chrome/site/docs/work … erver.html

Cordialement.


Opérateur cartographique & DAO & PHP.

Hors ligne

 

#10 Tue 15 November 2016 11:10

nora 27
Participant actif
Date d'inscription: 15 Jul 2014
Messages: 59

Re: créer une couche à partir une requête sql sur Postgis en PHP

bonjour michel,

j'ai utilisé ST_AsGeoJSON, mais  l'erreur reste le même.
une question:

l'année est de type smalint, et j'ai mis : $annee = $_GET['annee'];

est ce que c'est juste si je mets dans le sql : benmed.\"R_CerealesHiver\".annee=$annee   
??

Hors ligne

 

#11 Tue 15 November 2016 12:39

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Re: créer une couche à partir une requête sql sur Postgis en PHP

Fait les choses une par une.

Essai en premier de récupérer ton GeoJSON. Pour la récupération de la date via ton formulaire html tu verras après.

Donc, la date tu la mets directement dans le requête.

benmed.\"R_CerealesHiver\".annee="2016-11-15"


Opérateur cartographique & DAO & PHP.

Hors ligne

 

#12 Tue 15 November 2016 13:35

nora 27
Participant actif
Date d'inscription: 15 Jul 2014
Messages: 59

Re: créer une couche à partir une requête sql sur Postgis en PHP

l'année est de type smallint (integer) ce n'est pas de type date.

Hors ligne

 

#13 Tue 15 November 2016 14:06

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Re: créer une couche à partir une requête sql sur Postgis en PHP

tu mets l'année

benmed.\"R_CerealesHiver\".annee=2016

Code:

l'année est de type smalint, et j'ai mis : $annee = $_GET['annee'];

Et t'es sur que ton formulaire envoie les données par la méthode GET.

C'est pas plutôt POST:

Code:

$annee = $_POST['annee'];

Dernière modification par michel56 (Tue 15 November 2016 14:14)


Opérateur cartographique & DAO & PHP.

Hors ligne

 

#14 Tue 15 November 2016 15:42

nora 27
Participant actif
Date d'inscription: 15 Jul 2014
Messages: 59

Re: créer une couche à partir une requête sql sur Postgis en PHP

oui, j'en suis sur.

Hors ligne

 

#15 Tue 15 November 2016 17:39

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Re: créer une couche à partir une requête sql sur Postgis en PHP

Un code que j'ai utilisé il y a plusieurs années et qui fonctionnait:

Code:

<?php
session_start();
include "config.php";
?>
{
"type": "FeatureCollection",
"features": [
<?php
// Connexion, sélection de la base de données
$dbconn = pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password") or die('Connexion impossible : ' . pg_last_error());  

// Exécution de la requête SQL
    $query = "SELECT ST_Area(the_geom) AS surface, ST_AsGeoJSON(the_geom,3) AS coord, gid, nom_zac, insee, commune_1, type FROM zac WHERE insee='$_SESSION[Selection_Commune]' ";  
    $result = pg_query($query) or die('Échec requête : ' . pg_last_error());  

// Affichage des résultats en HTML
$Boucle="0";
   while ($line = pg_fetch_array($result, null, PGSQL_ASSOC)) {
if($Boucle!="0"){echo ",\n";}
echo "{ \"type\": \"Feature\", \"properties\": { \"GID\": \"".$line[gid]."\", \"NUM_INSEE\": \"".$line[insee]."\", \"NOM_COM\": \"".$line[commune_1]."\", \"SURFACE\": \"".$line[surface]."\", \"NOM_ZAC\": \"".$line[nom_zac]."\", \"TYPE\": \"".$line[type]."\" }, \"geometry\": ".$line[coord]." }\n";
$Boucle=$Boucle+1;
   }  

// Libère le resultset
   pg_free_result($result);

// Ferme la connexion
   pg_close($dbconn);  
?>
]
}

Opérateur cartographique & DAO & PHP.

Hors ligne

 

#16 Wed 16 November 2016 08:32

nora 27
Participant actif
Date d'inscription: 15 Jul 2014
Messages: 59

Re: créer une couche à partir une requête sql sur Postgis en PHP

merci beaucoup michel,

je pense que mon problème se trouve dans la requête de jointure, quand j'exécute le PHP seul voilà ce qu'il m'affiche:

Warning: pg_query(): Query failed: ERREUR: erreur de syntaxe sur ou près de « and » LINE 1: ...

Hors ligne

 

#17 Wed 16 November 2016 10:03

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Re: créer une couche à partir une requête sql sur Postgis en PHP

La requête devrait ressemblé un peu plus à ce code:

Code:

"SELECT * FROM benmed.Communes,benmed.R_CerealesHiver 
WHERE benmed.Communes.code_commune = benmed.R_CerealesHiver.code_commune 
AND 
benmed.R_CerealesHiver.espece=$_GET['Page'] 
AND 
benmed.R_CerealesHiver.annee=$_GET['annee'] 
AND 
benmed.R_CerealesHiver.production > 0 ";

Tu mets:

Code:

remarque : la sélection du nom de la table, type de céréale et l'année se fait sur le site ("formulaire html")

Je ne vois pas comment tu sélectionnes ta table dans le code.

Dernière modification par michel56 (Wed 16 November 2016 10:03)


Opérateur cartographique & DAO & PHP.

Hors ligne

 

#18 Wed 16 November 2016 13:43

nora 27
Participant actif
Date d'inscription: 15 Jul 2014
Messages: 59

Re: créer une couche à partir une requête sql sur Postgis en PHP

ça ce que j'ai fait. concernant le nom de la table je l'ai reporté après que je règles ce problème.

Hors ligne

 

#19 Sun 20 November 2016 10:36

nora 27
Participant actif
Date d'inscription: 15 Jul 2014
Messages: 59

Re: créer une couche à partir une requête sql sur Postgis en PHP

c'est résolu.
en fait, le problème n'était pas dans la requête, c'est dans le code java.

merci à tous

Hors ligne

 

Pied de page des forums

Powered by FluxBB