#1 Sun 11 December 2016 09:56
- nima ninette
- Participant assidu
- Date d'inscription: 18 May 2016
- Messages: 187
affichage des données/postgreSQL/ Geoserver
salut, svp je viens d'afficher les données d'un shape superposé sur Open Street Map , l'idée c'est de cliquer sur ce shape et d'afficher dans un <div> les données correspondantes de ce click ( les données sont stockées en postgreSQL et les cartes en Goserver) , vous pouvez m'aider par des fonctions , j'ai entendu le WFS mais je n'ai aucune idée Merci.
Hors ligne
#2 Tue 31 January 2017 01:02
- Nekultra
- Participant occasionnel
- Lieu: France
- Date d'inscription: 21 Oct 2013
- Messages: 18
Re: affichage des données/postgreSQL/ Geoserver
Bonsoir,
Pour réaliser des requête tu va devoir interroger ta couche de donner à l'aide de GeoServer. En cliquant tu souhaites savoir ce qu'il y a aux Lon/Lat de ta souris. Il te faut donc un contrôle pour obtenir ces valeurs qui te serviront comme argument de requête.
Ensuite, tu peux réaliser une requête sur le WMS type getFeatureInfo qui utilisera en paramètre les coordonnées de ta souris au clic.
N'hésites pas à regarder la documentation GeoServer sur les WMS / WFS pour trouver les services qui te conviennent.
Pour afficher les informations dans une div, tu dois au préalable créer ta div sur ta page avec un ID et ensuite remplir cette div en l'appelant par son ID ainsi :
document.getElementById("monId").innerHTML = "mon nouveau texte à afficher";
Enfin, inspire toi du code de cette exemple, je ne sais pas si tu utilises OpenLayers mais le principe reste le même :
http://dev.openlayers.org/examples/getf … ntrol.html
Si tu ne sais pas comment regarder le code sur une page, renseignes toi sur la console et le debugger Ce sont de puissants alliés
Hors ligne
#3 Tue 31 January 2017 14:04
- nima ninette
- Participant assidu
- Date d'inscription: 18 May 2016
- Messages: 187
Re: affichage des données/postgreSQL/ Geoserver
bonsoir, j'ai réccupéré "longitude et latitude" en cliquant sur la carte, elles seront affichées par un message (Alert;) j'ai créé la <div> qui va contenir mes tables attributaires que je souhaite afficher,
mon problème maintenant au coté programmation, est ce qu'il y'a des fonctions?, filtres appliqués? vu que je travaille avec le POSTGIS et GEOSERVER
Hors ligne
#4 Tue 31 January 2017 18:35
- Nekultra
- Participant occasionnel
- Lieu: France
- Date d'inscription: 21 Oct 2013
- Messages: 18
Re: affichage des données/postgreSQL/ Geoserver
En effet il y a des fonctions à "exécuter" pour lancer la requête du navigateur vers le GeoServer. GeoServer devra être déjà connecté aux bases de données Postgis.
L'exemple que j'ai fourni réalise exactement ce dont tu as besoin. Pour les filtres dans une requête, tu peux regarder si les filtres CQL peuvent t'aider (voir la doc GeoServer).
Hors ligne
#5 Tue 31 January 2017 20:20
- nima ninette
- Participant assidu
- Date d'inscription: 18 May 2016
- Messages: 187
Re: affichage des données/postgreSQL/ Geoserver
bonsoir, justement le GeoServer est déjà connecté aux bases de données Postgis. mais la fonction de filtre je n'ai pas vous pouvez m'aider pour quelques codes ou sites?
le site que vous m'avez donné j'ai pas trouvé réellement ce que je veux, Merci a vous.
Hors ligne
#6 Wed 01 February 2017 15:43
- Nekultra
- Participant occasionnel
- Lieu: France
- Date d'inscription: 21 Oct 2013
- Messages: 18
Re: affichage des données/postgreSQL/ Geoserver
1) Ajoute un point
2) Prend les coordonnées X/Y du point
3) Utilise ces coordonnées pour l'insérer dans une requête WFS sur ta couche (fouille dans la doc GeoServer pour voir comment réaliser ceci ou les nombreux post en ligne).
Tu va avoir dans ta requête des paramètres de ce type :
request: getfeature
version: 1.0.0
service: wfs
typename: tonentrepot:tacouche
outputFormat: application/json
filter:<Filter xmlns:gml="http://www.opengis.net/gml"><Intersects><PropertyName>shape</PropertyName><gml:Point><gml:coordinates>-189726.98564965,6127342.3921418</gml:coordinates></gml:Point></Intersects></Filter>
/!\ Tu remarqueras que tes coordonnées sont dans la balise <gml:coordinates>-189726.98564965,6127342.3921418</gml:coordinates>
Enfin, tu réalises cette requête gràace à une requête Ajax (en méthode GET c'est plus simple je trouve) ou alors avec OpenLayers.Request.GET().
Le retour de cette requête est au format Json, OpenLayers2 te permet de récupérer un JSON et de l'utiliser en javascript.
var request = new OpenLayers.Request.GET({
url: WFSLayerUrl,
params: WFSsettings,
callback: function(request) { // Callback c'est le retour de la réponse
// read json and zoom to extent
if (request.responseText) { // si tu as une réponse
var featureJson = request.responseText;
var geojson_format = new OpenLayers.Format.GeoJSON();
var readJson = geojson_format.read(featureJson); // met la réponse dans une variable une fois décodée
//Exploite la réponse comme tu veux pour arriver à quelque chose comme
map.zoomToExtent(layer.getDataExtent());
} else { // important pour connaitre la raison d'un nom affichage d'info par exemple
console.log("Error ", request.responseText);
}
}
});
Hors ligne
#7 Thu 02 February 2017 08:39
- nima ninette
- Participant assidu
- Date d'inscription: 18 May 2016
- Messages: 187
Re: affichage des données/postgreSQL/ Geoserver
bonjour j'ai une couche shape nommée "grande_zones", je l'ai stockée en postgis et GEOSERVER puis la superposée sur OSM (bien sur j'ai 8 autres couches soit raster ou shape) , ma couche est affichée sur map en utilisant openlayers2 et WMS:
grande = new OpenLayers.Layer.WMS( "grandes_zones_rep1", "http://localhost:8081/geoserver/délimitaion_des_terres_à_voccation_céralière/wms", {layers: "délimitaion_des_terres_à_voccation_céralière:grandes_zones_rep1", transparent: true} );
et j'ai fait une fonction pour récupérer longitude et latitude , ça marche.
trigger: function(e) {
var lonlat = map.getLonLatFromPixel(e.xy);
lonlat.transform(
new OpenLayers.Projection("EPSG:900913"),
new OpenLayers.Projection("EPSG:4326")
);
document.getElementById("longit").value=""+lonlat.lon;
document.getElementById("latit").value=""+lonlat.lat ;
alert(" Vos Cordonnées " + lonlat.lat + " Latitude, " +
+ lonlat.lon + " longitude");
}
concernant l'affichage des attributs je veux les mettre dans une <div> que j'ai déjà définit :
<div id="partie_inferieur" splitter="false"> </div>
j'ai sauvegardé le fichier "grandes_zones.JSON" (je vais le mettre comme un fichier joint) , maintenant que ce que je dois mettre au niveau de ce <div> ?
je n'ai aucune idée, c'est mon projet de confirmation, si vous pouvez m'aider s'il vous plait ,Merci
Hors ligne
#8 Thu 02 February 2017 09:43
- Nekultra
- Participant occasionnel
- Lieu: France
- Date d'inscription: 21 Oct 2013
- Messages: 18
Re: affichage des données/postgreSQL/ Geoserver
Tu veux donc obtenir les informations attributaires d'un élément dont la géométrie intersecte les coordonnées de ton clic et ensuite, afficher ces informations attributaires dans une div sur ta page HTML sous la carte c'est bien cela ?
Si c'est cela tu as toutes les informations pour y arriver, l'affichage dans la div se fera en décodant le JSON pour en avoir les infos puis, pour chaque infos, les charger dans la div avec ce code :
// avec une div dont l'ID = "content"
var string = "Hello world !";
// comme tu as déjà fait pour les long / lat
document.getElementById("content").innerHTML = string;
Mais qu'attends tu de cette div, ton besoin est vague en dehors d'y intégrer du contenu ? Tu veux bien y intégrer le contenu du JSON ou le contenu d'un autre JSON retourné par une requête ?
Dernière modification par Nekultra (Thu 02 February 2017 09:51)
Hors ligne
#9 Thu 02 February 2017 10:37
- nima ninette
- Participant assidu
- Date d'inscription: 18 May 2016
- Messages: 187
Re: affichage des données/postgreSQL/ Geoserver
dans ma <div> je veux bien afficher les attributs , exemple, je coche la couche "grandes_zones" elle sera superposée puis je clic sur cette couche j'obtient longitude et latitude puis au niveau de ma <div id="partie_inferieur" splitter="false"> </div> les données seront affichées (table attributaire de cette couche) bien sur les données concernant ce clic que j'ai fait et quand je la décoche la table se cache, et je coche une autre couche et le même principe se répète . j'espère que vous m'aviez compris.
Hors ligne
#10 Thu 02 February 2017 10:55
- Nekultra
- Participant occasionnel
- Lieu: France
- Date d'inscription: 21 Oct 2013
- Messages: 18
Re: affichage des données/postgreSQL/ Geoserver
Désolé je vais être insistant mais as-tu bien regardé le code de cet exemple ?
http://dev.openlayers.org/examples/getf … ntrol.html
Pour voir le code utilise la console. Sous Chrome c'est la touche F12 et dans l'onglet "sources" tu trouvera dans l'arborescence de gauche le style CSS + le code javascript dans une feuille HTML nommée "getfeatureinfo-control.html".
Si tu adaptes ce code à tes besoin tu devrais t'en sortir sans problème !
Je pense que cet exemple est exactement le code que tu recherches. le clic sur un objet de la couche retourne des informations qui vont peupler une div. Dans cet exemple les informations reviennent sous forme de tableau. Je ne pourrais pas te faire ton code par manque de temps mais tu trouvera comment mettre en forme le code HTML.
Hors ligne
#11 Thu 02 February 2017 13:56
- nima ninette
- Participant assidu
- Date d'inscription: 18 May 2016
- Messages: 187
Re: affichage des données/postgreSQL/ Geoserver
ok, je vais voir Merci Bcp ^^
Hors ligne
#12 Tue 29 August 2017 16:40
- gwen1436
- Participant occasionnel
- Lieu: châteauroux
- Date d'inscription: 21 Apr 2014
- Messages: 17
Re: affichage des données/postgreSQL/ Geoserver
Bonjour,
J'ai créer une petite appli avec postgres et geoserver, je modifie mes couches par la biais de la carto avec un qgis qui modifie ma base postgres et donc modifie mon appli car tout est lié. Mais j'ai un soucis c'est que j'aimerai que geoserver ne m'affiche que certains champs et pas toute ma base dans l'encadré en bas "clic sur l'élément' mais je n'arrive pas a trouvé ou geoserver interroge la base pour récupérer ces éléments.
Hors ligne
#13 Tue 29 August 2017 17:36
Re: affichage des données/postgreSQL/ Geoserver
Bonjour Gwen,
Tu as plusieurs possibilités pour limiter les champs visibles sur ton appli:
dans postgresql:
tu peux créer une vue de la table afin de faire apparaître que les champs souhaités lors de la nouvelle publication de la couche dans GeoServer
dans Geoserver :
lors de la publication de la couche > onglet données > tout en bas tu as Restrict the features on layer by CQL filter.
http://docs.geoserver.org/stable/en/use … orial.html
et dans ton script de l'appli :
tu peux modifier ton lien de la couche (wms, wfs) en y ajoutant le filtre CQL.
Il y a certainement d'autres possibilités...
FD
Hors ligne