#1 Tue 11 January 2011 14:32
- sergino85
- Juste Inscrit !
- Date d'inscription: 11 Jan 2011
- Messages: 3
probleme d'affichage svg/php
Bonjour, je suis nouveau dans le monde des SIG, devellopant une application web/php, j'ai besoin de vous pour éclairer ma lanterne:
-J'ai importé mes fichiers shapefiles dans la base POSTGIS(remarquez que mes tables n'ont pas la meme structure pour les champs), quand je fait le code suivant:
Code:
<!xml version="1.0" encoding="ISO-8859-1" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> <html> <head> <title>Génération de SVG par PostGIS et AsSVG</title> </head> <body> <?php // // Une simple fonction permettant d'arrondir // // $chaine issu de AsSVG() arrondi selon $approx (1 à 8) // function assvg_with_php_round($chaine, $approx) { $table = array(); $table = explode(" ", $chaine); $chaine = ""; for ($iter_chaine_assvg = 0; $iter_chaine_assvg < count($table); $iter_chaine_assvg++) { $vec = $table[$iter_chaine_assvg]; if ((substr_count($vec, "cx=\"") > 0) || (substr_count($vec, "cy=\"") > 0)) { $search = array("cx=\"", "cy=\"", "\""); $replace = array("", "", ""); $chaine_c = round(str_replace($search, $replace, $vec), $approx); $chaine_tmp = (substr_count($vec, "cx=\"") >= 1) ? "cx=\"" . $chaine_c . "\" " : "cy=\"" . $chaine_c . "\" "; } else { $chaine_tmp = (is_numeric($vec)) ? round($vec, $approx) . " " : $vec . " "; } $chaine = $chaine . $chaine_tmp; } return $chaine; } // Connexion au serveur // $db_handle = pg_connect("host=localhost port=5432 dbname=test_gis user=postgres password=pwd"); // Création du SVG $my_svg = fopen("testgis.svg", "w"); $colonne_geo = "the_geom"; // colonne géométrique de la table $table = "unetable"; // la table en question $requete_extent = "SELECT xmin(extent(" . $colonne_geo . ")),ymin(extent (" . $colonne_geo . ")),xmax(extent(" . $colonne_geo . ")),ymax(extent (" . $colonne_geo . ")) FROM " . $table . " where (gid > 0);"; $pg_resultat_extent = pg_exec($db_handle, $requete_extent); $xmin = pg_result($pg_resultat_extent, 0, 0); $ymin = pg_result($pg_resultat_extent, 0, 1); $xmax = pg_result($pg_resultat_extent, 0, 2); $ymax = pg_result($pg_resultat_extent, 0, 3); // echo $xmax." aprs x".$ymax; $width = abs($xmax - $xmin); $height = abs($ymax - $ymin); $rapport = $width / $height; $height_svg = "400"; $width_svg = intval($height_svg * $rapport); $entete = '<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?AdobeSVGViewer save="snapshot"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'; fputs($my_svg,$entete); fputs($my_svg, "<svg version='1.1' baseProfile='full' width='" . $width_svg . "px' height='" . $height_svg . "px' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' xmlns:batik='http://xml.apache.org/batik/ext' zoomAndPan='magnify' >\n"); $entete = '<title>APOC</title> <script type="text/ecmascript" xlink:href="rscripts/essai.js"/>'; fputs($my_svg,$entete); $sql_ocp = "select assvg(the_geom,0) from " . $table . ";"; $resultats_ocp = pg_exec($db_handle, $sql_ocp); for ($iter_ocp = 0; $iter_ocp < pg_numrows($resultats_ocp); $iter_ocp++) { // ajout du path selon l'objet spatial en cours fputs($my_svg, "<path d='" . assvg_with_php_round(pg_result($resultats_ocp, $iter_ocp, 0), 1) . "' fill='blue' stroke='black' stroke-width='1'/>\n"); // point rouge au centre de la commune fputs($my_svg, "<circle " . pg_result($resultats_ocp, $iter_ocp, 1) . " r='20' fill='red' stroke='black' stroke-width='1'/>\n"); // ajout du nom de la commune fputs($my_svg, "<text " . str_replace("c", "", pg_result($resultats_ocp, $iter_ocp, 1)) . " fill='black' font-size='16' font-color='white'>" . pg_result($resultats_ocp, $iter_ocp, 2) . "</text>\n"); } fputs($my_svg,"</svg>"); // fermeture du SVG fclose($my_svg); // fermeture de la connexion à PostgreSQL pg_close($db_handle); ?> <script type="text/javascript"> <!-- document.write("<object type='image/svg+xml' data='testgis.svg' height='100%' width='100%' id='ocp'>" +"<param name='src' value='testgis.svg'>" +"<div style='margin:100px;text-align:center'>" +"<p>L'utilisation avec votre navigateur de cet module nécessite l'installation préalable ou" +" la mise à jour du module " +"externe gratuit SVG Viewer d'Adobe.</p><p>Ce module, disponible dans de nombreuses langues, " +"et pour les systèmes les plus répandus (Windows, Mac, Linux...), peut être téléchargé" +" à l'adresse suivante (site en anglais) : " +"<a href='http://www.adobe.com/svg/viewer/install/'>http://www.adobe.com/svg/viewer/install/</a></p>" +"</div>" +"</object>"); --> </script> </body> </html>
j'obtiens un svg ou les points sont tous concentrés à l'angle en haut à gauche, je n'arrrive donc pas à les positionner sur le svg. Mon code a un probleme?
-J'utilise des coordonées en latitude et longitude mais j'ai remarqué qu'il y'a qu'une seule table qui a ces coordonnées, les autres sont des fichiers raster donc leur import dans la base de données ne m'a pas données de coordonnées, comment traiter les fichiers raster sous postgis et php?
-J'aimerai rendre quelques points de la carte svg résultante cliquable, comment puis je inserer du code javascript pour que ces point réagissent sur un Onclick?
Cordialement
Hors ligne
#2 Tue 11 January 2011 15:42
Re: probleme d'affichage svg/php
Bonjour,
Je n'ai pas la réponse mais pourquoi ne pas utiliser OpenLayers ?
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#3 Tue 18 January 2011 13:04
- sergino85
- Juste Inscrit !
- Date d'inscription: 11 Jan 2011
- Messages: 3
Re: probleme d'affichage svg/php
Bonjour et merci pour ta reponse, j'explique mon probleme! j'ai une carte issu de six tables dont une seule contient des point avec des latitudes et longitudes, les autres sont des fichiers RASTERS(si je comprend bien, juste des prises satellitaires). Mon objectifs est de l'integré dans une page web et de rendre les points cliquable, on m'a parlé de postgis et svg, j'ai donc fai entrer mes données en postgis, veuillez noté que mes tables n'ont pas la même structure! donc j'ai une base de données avec plusieurs tables chacune ayant sa structure. Avec openlayers c'est possible de faire ce que je veux? Merci
Hors ligne
#4 Tue 18 January 2011 13:26
Re: probleme d'affichage svg/php
Bonjour,
Tes données raster sont dans la base PostGIS ? Tu as la possibilité d'utiliser un serveur carto ou non ? Si je comprend tu veux afficher des données vecteurs issus d'une base postgis et des données raster. Cela devrait être réalisé facilement avec OpenLayers, éventuellement avec un serveur carto.
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#5 Wed 19 January 2011 11:21
- sergino85
- Juste Inscrit !
- Date d'inscription: 11 Jan 2011
- Messages: 3
Re: probleme d'affichage svg/php
Bonjour, oui tous mes fichiers ont été importé dans la postgis à laquelle j'ai pu me connecter avec Quantum GIS pour voir le resultat. Maintenant mon probleme c'es au niveau de la representation des points! je peux utiliser un serveur carto mais malheuresement je n'ai pas réussi à mettre un en place. Avec le systeme que j'ai réussi à mettre en place quand je fait assvg j'obtiens des coordonées négatives alors que svg ne prend pas ces genres de coordonnées, dans mes recherches on m'a dit de faire une translation donc je suis la dessus. Mais pour mes points en MULTIPOLYGONE je n'arrive toujours pas à les afficher. J'ajoute aussi que mon objectifs c'est de rendre mes points cliquable pour faire une requette et refaire le svg, cela doit etre dynamique!
Hors ligne