#1 Thu 03 May 2012 10:49
- Alexandre David
- Participant occasionnel
- Lieu: Saint-Etienne
- Date d'inscription: 27 Sep 2011
- Messages: 16
[Geoserver] Couche vecteur PostGIS 3D sur Geoserver
Bonjour à tous,
Je me casse les dents depuis 2 semaines afin de trouver un moyen de relier ma database PostgreSQL 9.1 / PostGIS 2.0 à Geoserver 2.1.3.
Quand j'insers une couche vectorielle 3D en format .shp, tout va bien. Idem pour mes tables PostGIS 2D. Mais quand ces dernières sont en 3D, Geoserver les force à perdre leur troisième dimension.
Quelqu'un a-il déjà réussi la manipulation que j'essaie de faire ? Sinon connaissez-vous un seveur cartographique plus adapté à ma problématique ?
Merci d'avance.
A.D.
Hors ligne
#2 Fri 04 May 2012 11:01
- zone12
- Participant actif
- Date d'inscription: 3 Jan 2008
- Messages: 56
Re: [Geoserver] Couche vecteur PostGIS 3D sur Geoserver
Bonjour,
Il semble que Geoserver ne gère pas encore la 3D. Sauf peut être à servir du KML vers Google Earth.
Il ne semble pas non plus que Mapserver puisse répondre à votre besoin.
Tenez nous au courant.
Hors ligne
#3 Fri 04 May 2012 11:06
- zone12
- Participant actif
- Date d'inscription: 3 Jan 2008
- Messages: 56
Re: [Geoserver] Couche vecteur PostGIS 3D sur Geoserver
Une autre piste peut être, OpenWebGlobe ...
Hors ligne
#4 Thu 10 May 2012 14:41
- Alexandre David
- Participant occasionnel
- Lieu: Saint-Etienne
- Date d'inscription: 27 Sep 2011
- Messages: 16
Re: [Geoserver] Couche vecteur PostGIS 3D sur Geoserver
Bonjour,
J'ai trouvé un solution à mon problème de 3d. Etant donné que les serveurs cartographiques libres actuels sont assez limités pour la 3d, je suis passé par un export php de ma base de données PostGIS afin de pouvoir créer des documents .kml. La petite astuce que j'ai utilisé réside dans la requête sql que j'utilise.
Le problème d'exporter avec st_askml est qu'il n'y a pas possibilité de rajouter des balises dans celui-ci. J'ai donc sélectionné les caractères que je veux sortir avec la fonction substr(geometry, integer) et supprimer les balises précédent les coordonnées.
Ensuite, il me suffit de rajouter <extrude>0</extrude> et <tessellate>1</tessellate> pour lui demander de prendre en compte la troisième dimension.
exemple de Query :
$query = 'SELECT gid,name,substr(st_askml(geom,10),28) as geometrie from mon_schema.ma_table';
exemple de code :
Code:
<?php $conn = pg_pconnect ("host=localhost port=5432 dbname=ma_db user=postgres password=*****"); if (!$conn) { echo "Une erreur est survenue.\n"; exit; } // Selects all the rows in the markers table. $query = 'SELECT gid,name,substr(st_askml(geom,10),28) as geometrie from mon_schema.ma_table'; $result = pg_query($query); if (!$result) { echo "Une erreur est survenue.\n"; exit; } // Creates an array of strings to hold the lines of the KML file. $kml = array('<?xml version="1.0" encoding="UTF-8"?>'); $kml[] = '<kml xmlns="http://earth.google.com/kml/2.2">'; $kml[] = ' <Document>'; $kml[] = ' <Style id="yellowLineGreenPoly">'; $kml[] = ' <LineStyle>'; $kml[] = ' <color>ff0000ff</color>'; $kml[] = ' </LineStyle>'; $kml[] = ' <PolyStyle>'; $kml[] = ' <color>ffff0000</color>'; $kml[] = ' </PolyStyle>'; $kml[] = ' </Style>'; // Iterates through the rows, printing a node for each row. while ($row = pg_fetch_assoc($result)) { $kml[] = ' <Placemark id="placemark' . $row['gid'] . '">'; $kml[] = ' <name>' . htmlentities($row['name]) . '</name>'; $kml[] = ' <visibility>0</visibility>'; $kml[] = ' <description>Ma description</description>'; $kml[] = ' <styleUrl>#yellowLineGreenPoly</styleUrl>'; $kml[] = ' <MultiGeometry>'; $kml[] = ' <LineString>'; $kml[] = ' <extrude>0</extrude>'; $kml[] = ' <tessellate>1</tessellate>'; $kml[] = ' <altitudeMode>relativeToGround</altitudeMode>'; $kml[] = $row['geometrie']; $kml[] = ' </Placemark>'; } // End XML file $kml[] = ' </Document>'; $kml[] = '</kml>'; $kmlOutput = join("\n", $kml); header('Content-type: application/vnd.google-earth.kml+xml'); header("Content-Disposition: attachment; filename=mon_kml.kml"); echo $kmlOutput; ?>
Cette page php est à mettre dans la partie www du serveur apache que vous installez avec le Stack Builder. Ne pas oublier non plus d'installer phppgadmin.
Cordialement,
A.D.
Dernière modification par Alexandre David (Thu 10 May 2012 14:42)
Hors ligne