banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#31 Wed 14 March 2012 08:51

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1024
Site web

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

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1024
Site web

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

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1024
Site web

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

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1024
Site web

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

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1024
Site web

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);



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

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1024
Site web

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

 

Pied de page des forums

Powered by FluxBB