Pages: 1
- Sujet précédent - créer une couche à partir une requête sql sur Postgis en PHP - Sujet suivant
#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
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
Pages: 1
- Sujet précédent - créer une couche à partir une requête sql sur Postgis en PHP - Sujet suivant