Pages: 1 2
- Sujet précédent - [Openlayers] Créer une polyligne à partir de données X/Y - Sujet suivant
#31 Wed 14 March 2012 08:51
Re: [Openlayers] Créer une polyligne à partir de données X/Y
Bonjour,
Un petit exemple serait parfait !
Par avance, merci.
Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com
Hors ligne
#32 Wed 14 March 2012 10:37
- Cornet Jérémie
- Participant assidu
- Lieu: Nouméa
- Date d'inscription: 6 Apr 2008
- Messages: 229
Re: [Openlayers] Créer une polyligne à partir de données X/Y
Voilà le code détaillé qui correspond à ton besoin avec l'utilisation d'un tableau php associatif et de la fonction json_encode().
A première vu, ça peut paraître compliqué.
Néanmoins, vu que cette méthode fait construire un tableau associatif dans la logique du geojson, ça permet de bien intégrer le fonctionnement et de détecter plus facilement les erreurs.
Code:
//Je créé la structure générale de mon geojson dans un tableau associatif $Resultat $Resultats = array('type'=> 'FeatureCollection', 'features' => array()); //Je rajoute un feature dans ce tableau avec pour l'instant des valeurs de géométrie et d'attributs vides $Resultats['features'][] = array('type' => 'feature', 'geometry' => Null, 'properties' => Null); //Je remplis plus précisément mon feature $Resultats['features'][0]['geometry'] = array('type' => 'LineString', 'coordinates' => array()); //Je remplis le geometry de ce feature (géometrie vide pour l'instant) //Je rajoute les paires de points qui composent ma géométrie while($tab_select_coordonne = $sql_select_coordonne->fetch()){ $Resultats['features'][0]['geometry']['coordinates'][] = array($tab_select_coordonne['coord_gps_lon'], $tab_select_coordonne['coord_gps_lat']); } $Resultats['features'][0]['properties']['nom_champ1'] = "ma valeur 1"; //Je rajoute un attribut nom_champ1 à ce feature $Resultats['features'][0]['properties']['nom_champ2'] = "ma valeur 2"; //Je rajoute un autre attribut nom_champ2 à ce feature //La fonction magique qui transforme mon tableau associatif construit dans la logique d'un json en json echo json_encode($Resultats);
NB : il faut au minimum un attribut par feature pour que le geojson soit valide
Dernière modification par Cornet Jérémie (Wed 14 March 2012 10:38)
Hors ligne
#33 Wed 14 March 2012 11:33
Re: [Openlayers] Créer une polyligne à partir de données X/Y
Bonjour et merci pour la mise en œuvre de ce code et les commentaires associés a ce dernier !
Qgis arrive à ouvrir le flux sans erreur mais le tracé ne s'affiche pas.
Faut-il modifier quelque chose de spécial, ajouter le paramètre de projection ?
On observe l'echo du résultat sur la page http://www.partir-en-vtt.com/test.php
Merci pour votre aide.
Dernière modification par heretik25 (Wed 14 March 2012 11:50)
Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com
Hors ligne
#34 Wed 14 March 2012 11:54
- Cornet Jérémie
- Participant assidu
- Lieu: Nouméa
- Date d'inscription: 6 Apr 2008
- Messages: 229
Re: [Openlayers] Créer une polyligne à partir de données X/Y
Les coordonnées sont considérées comme du texte donc mises entre guillemets (stockées dans des colonnes textes dans MySql ?).
Il faut les caster avec floatval() avant insertion dans le tableau.
Hors ligne
#35 Wed 14 March 2012 11:57
Re: [Openlayers] Créer une polyligne à partir de données X/Y
Les coordonnées sont stockées dans un champ type "double"
Edit : Avec floatval(), ça fonctionne impeccable !
Il reste à alimenter mon Openlayers avec ce flux.
Dernière modification par heretik25 (Wed 14 March 2012 11:59)
Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com
Hors ligne
#36 Wed 14 March 2012 12:05
- Cornet Jérémie
- Participant assidu
- Lieu: Nouméa
- Date d'inscription: 6 Apr 2008
- Messages: 229
Re: [Openlayers] Créer une polyligne à partir de données X/Y
Ça doit donc être le connecteur MySql qui n’interprète pas explicitement les types (ce qui n'a aucune conséquence dans l'immense majorité des cas).
Hors ligne
#37 Wed 14 March 2012 14:20
Re: [Openlayers] Créer une polyligne à partir de données X/Y
J'ai essayé d'ajouter ma couche GeoJSON sans succès
Code:
var featurecollection = <?php echo $geojson; ?>; var geojson_format = new OpenLayers.Format.GeoJSON(); var vector_layer = new OpenLayers.Layer.Vector(); map.addLayer(vector_layer); vector_layer.addFeatures(geojson_format.read(featurecollection));
où $geojson est la variable contenant la chaîne produite précédemment.
OpenLayers ne plante pas, une couche "undefined" s'ajoute dans le contrôle des couches mais rien n'apparait.
Une idée du pourquoi ?, un problème de projection ?
Merci.
Dernière modification par heretik25 (Wed 14 March 2012 14:31)
Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com
Hors ligne
#38 Wed 21 March 2012 10:38
Re: [Openlayers] Créer une polyligne à partir de données X/Y
Bonjour,
J'ai essayé d'ouvrir mon GeoJSON avec cette méthode mais la trace ne s'affiche pas alors qu'on la distingue bien sur QGIS
Code:
//geojson var trace_geojson = new OpenLayers.Layer.Vector( "Trace GPS",{ protocol: new OpenLayers.Protocol.HTTP({ url: "/php/articles/inclusion/gpx/appel_geojson.php?id_article=<?php echo $id_article; ?>", format: new OpenLayers.Format.GeoJSON() }), style: {strokeColor: "red", strokeWidth: 5, strokeOpacity: 0.5}, projection: new OpenLayers.Projection("EPSG:4326") } ); map.addLayer(trace_geojson);
où
Code:
url: "/php/articles/inclusion/gpx/appel_geojson.php?id_article=<?php echo $id_article; ?>",
Fait appel aux coordonnées de la bonne trace GPS.
Si quelqu'un pouvait m'aiguiller, ce serait sympa !
Merci.
Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com
Hors ligne
#39 Wed 21 March 2012 15:19
Re: [Openlayers] Créer une polyligne à partir de données X/Y
En fait, tout fonctionne, sujet résolu encore merci à tous ;-)
Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com
Hors ligne
#40 Sun 03 June 2012 18:39
- Geo-x
- Participant assidu
- Lieu: Pau
- Date d'inscription: 2 Nov 2010
- Messages: 215
Re: [Openlayers] Créer une polyligne à partir de données X/Y
Bonjour,
je me permet de relancer le sujet sur cette discussion puisqu'il se trouve qu'en réalisation un GeoJson à partir d'un tableau voici ce que Json_encode me sort :
Code:
{"type":"FeatureCollection", "features": [ { "type":"Feature", "geometry":["{\"type\":\"Polygon\",\"coordinates\":[ [[1425852.134679031800000,2237257.623517665100000],[1425346.528171384700000,2237626.072311582000000],[1425371.885804403800000,2238256.713760123600000], [1425077.558769205600000,2238459.819051424000000],[1425752.007903343100000,2239276.015621744100000],[1426021.405240113600000,2240996.587999971600000], [1426048.528703020900000,2244051.736198240900000],[1427108.042340413400000,2243987.496484439800000],[1427001.401963571800000,2244652.816088751900000], [1428446.207631997800000,2244776.435986341000000],[1429081.858942011600000,2245154.826528541700000],[1429558.051301665600000,2244572.390139861000000], [1429131.859293428900000,2343963.678910399800000],[1429646.102515593400000,2242561.856103177200000],[1431598.676531297400000,2241451.496771504200000], [1432860.361400574000000,2240858.048181833700000],[1431128.429995955700000,2239290.709569655400000],[1430445.130245215000000,2239586.788649573000000], [1429315.523318104400000,2238148.876647222800000],[1427498.395096579600000,2237892.417240878600000],[1427197.169961071800000,2237668.797033748600000], [1427365.914117102000000,2237333.455429508400000],[1426062.205461734400000,2237952.694463774600000],[1425852.134679031800000,2237257.623517665100000]]]}" ], "properties":{ "commune":["VILLENEUVE"], "ogc_fid":["6"]} } ] }
Là ou il devrait me sortir quelque chose du style :
Code:
{"type":"FeatureCollection", "features": [ { "type":"Feature", "geometry":{"type":"Polygon","coordinates":[ [[1425852.134679031800000,2237257.623517665100000],[1425346.528171384700000,2237626.072311582000000],[1425371.885804403800000,2238256.713760123600000], [1425077.558769205600000,2238459.819051424000000],[1425752.007903343100000,2239276.015621744100000],[1426021.405240113600000,2240996.587999971600000], [1426048.528703020900000,2244051.736198240900000],[1427108.042340413400000,2243987.496484439800000],[1427001.401963571800000,2244652.816088751900000], [1428446.207631997800000,2244776.435986341000000],[1429081.858942011600000,2245154.826528541700000],[1429558.051301665600000,2244572.390139861000000], [1429131.859293428900000,2343963.678910399800000],[1429646.102515593400000,2242561.856103177200000],[1431598.676531297400000,2241451.496771504200000], [1432860.361400574000000,2240858.048181833700000],[1431128.429995955700000,2239290.709569655400000],[1430445.130245215000000,2239586.788649573000000], [1429315.523318104400000,2238148.876647222800000],[1427498.395096579600000,2237892.417240878600000],[1427197.169961071800000,2237668.797033748600000], [1427365.914117102000000,2237333.455429508400000],[1426062.205461734400000,2237952.694463774600000],[1425852.134679031800000,2237257.623517665100000]]]}, "properties":{ "commune":"VILLENEUVE", "ogc_fid":"6"} } ] }
Pour faire plus simple voici les erreurs au niveau de l'encodage :
Ce qu'il m'affiche : "geometry":["{\"type\":\"Polygon\"
"commune":["VILLENEUVE"],
Ce qu'il doit mettre : "geometry":{"type":"Polygon"
"commune":"VILLENEUVE",
C'est très important sinon j'ai des messages d'erreurs depuis QGIS ou bien je n'ai pas la forme qui s'affiche.
Pour le code PHP j'ai repris l'exemple donné dans ce forum :
Code:
<?php $db_conn = pg_connect("host=localhost port=5432 user=postgres password=xxxx dbname=test"); $sql="SELECT ogc_fid,ST_ASGeoJSON(wkb_geometry) AS geojson,commune FROM commune WHERE commune='VILLENEUVE'"; $result = pg_query($db_conn,$sql); //Je créé le tableau php associatif avec structure GeoJson mais sans Features pour l'instant $Resultats = array('type'=> 'FeatureCollection', 'features' => array()); $compteur = 0; while ($row = pg_fetch_assoc($result)) { //Je rajoute un Feature avec geométrie et propriétés nulles pour l'instant $Resultats['features'][$compteur] = array('type' => 'Feature', 'geometry' => Null,'properties' => Null); //Je rajoute les propriétés $Resultats["features"][$compteur]["properties"]["commune"] = array($row['commune']); $Resultats["features"][$compteur]["properties"]["ogc_fid"] = array ($row['ogc_fid']); $compteur ++; //Incrémentation du compteur //Je rajoute la géométrie $Resultats['features'][$compteur]['geometry'] = array ($row['geojson']); } pg_close($db_conn); //Affichage de json grâce à la fonction magique echo json_encode($Resultats); ?>
Pensez qu'il s'agit là d'un problème d'encodage de la bse? d'un problème au niveau du PHP? ou d'autre chose?
Merci d'avance!
Dernière modification par Geo-x (Sun 03 June 2012 18:41)
Hors ligne
Pages: 1 2
- Sujet précédent - [Openlayers] Créer une polyligne à partir de données X/Y - Sujet suivant