Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Wed 24 August 2016 09:09

JAUFRYBenjamin
Participant occasionnel
Date d'inscription: 25 Nov 2015
Messages: 11

Erreur OpenLayers 3

Bonjour,
Depuis quelques jours j'essaie d'afficher une couche sig venant de Postgis via openlayers en php.
Mon script PHP me génère bien un fichier geojson.
Quand j'essaye d'afficher le fichier sur Qgis, ce dernier ne le reconnais pas (OGR geojson unknow).


Maintenant dans firebug je n'ai plus d'erreur mais rien ne s'affiche.

Voici mon code javascript :

Code:

$(".button-collapse").sideNav();


    var map = new ol.Map({
        target: 'map',
        layers: [
            new ol.layer.Group({
                'title': 'Fond de cartes',
                layers: [
                    
                    new ol.layer.Vector({
                        title: 'Chemin',
                        source: new ol.source.Vector({
                        url: 'getData.php',
                        format: new ol.format.GeoJSON(),
                            projection: 'EPSG:3857',
                            color: 'yellow',
                            width: 1,
                            fill: new ol.style.Fill({
                                color: 'rgba(0, 0, 255, 0.1)'})
                            }),
                        }),
                    
                   new ol.layer.Tile({
                    title: 'MapBox Street',
                    type: 'base',
                    visible: true,
                    source: new ol.source.XYZ({
                        url: 'https://api.mapbox.com/styles/v1/mapbox/streets-v9/tiles/256/{z}/{x}/{y}?access_token=pk.eyJ1IjoiamF1ZnJ5IiwiYSI6ImNpcmVsbjg1YjAwMGhpY200b2xudmQ3bmUifQ.vSOJfU9DMMEa7JDss5TDQA'
                    })
                }),

                new ol.layer.Tile({
                    title: 'Fond OSM',
                    type: 'base',
                    visible: true,
                    source: new ol.source.OSM()
                }),   
                    
                   
                    

                ]
            }),
                
        ],
        view: new ol.View({
            center: ol.proj.fromLonLat([-0.57, 45.22]),
            zoom: 10
        })
    });

    var layerSwitcher = new ol.control.LayerSwitcher({
        tipLabel: 'Légende'
    });
    map.addControl(layerSwitcher);

Le php :

Code:

<?php
try{
      $bdd = new PDO ("pgsql:host=localhost;port=8356;dbname=BDD_SMIDDEST;user=postgres") or die(print_r($bdd->errorInfo()));
      $bdd->exec("SET NAMES utf8");
      $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
     
   catch(Exeption $e){
      die("Erreur!".$e->getMessage());
   }






$qry = $bdd->prepare("SELECT dgs_id, ST_ASGeoJSON(geom) AS geojson FROM departements_geofla_sage");
$qry->execute();
$Resultats = array("type"=> "FeatureCollection", "features" => array());
$compteur = 0;

while($row = $qry->fetch()) {
  //Je rajoute un feature avec geométrie et propriétés nulles pour l'instant
     $Resultats["features"][$compteur] = array("type" => "Feature", "id"=> $row["dgs_id"], "coordinates" => Null, "properties" => Null);
    
        //Je rajoute les propriétés
    $Resultats["features"][$compteur]["properties"]["dgs_id"] = array ($row["dgs_id"]);

    
    
    //Je rajoute la géométrie
    $Resultats["features"][$compteur]["coordinates"] = array ($row["geojson"]);

    $compteur ++; //Incrémentation du compteur
}
$bdd = null;
echo json_encode($Resultats);
?>

L'html :

Code:

<?php

session_start();

$bdd = new PDO('pgsql:host=localhost;port=8356;dbname=BDD_SMIDDEST;user=postgres');

if(isset($_GET['id']) AND $_GET['id'] > 0) {
    $getid = intval($_GET['id']);
    $requser = $bdd->prepare('SELECT * FROM membres WHERE mem_id = ?');
    $requser->execute(array($getid));
    $userinfo = $requser->fetch();

?>
<html>
    <head>

        <meta charset="utf-8" name="viewport" content="width=device-width, initial-scale=1.0">

        <title>Smiddest</title>

        <link type="text/css" rel="stylesheet" href="css/jquery-ui.css">

        <link rel="stylesheet" href="http://openlayers.org/en/v3.17.1/css/ol.css" type="text/css">
        <link rel="stylesheet" href="css/ol3-layerswitcher.css">
        <link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
        <link type="text/css" rel="stylesheet" href="css/materialize.css"  media="screen,projection">
        <link type="text/css" rel="stylesheet" href="css/main.css">



</head>
    <body>
        <?php
            if(isset($_SESSION['mem_id']) AND $userinfo['mem_id'] == $_SESSION['mem_id']) {
                ?>

    <header>
        <?php include 'header.php' ?>
    </header>

    <main>
        <div class="row">
            <div class="col s8 m8 l8">
                <div id="map" class="map"></div>
            </div>


            <div class="col s4 m4 4">
                <div class="col s6 m6 l6"></div>
                <div class="col s6 m6 l6">
                    <?php
                    $date = date("d/m/Y");
                    Print('<div class="heure">' . "$date" . '</div>');
                    ?>
                </div>
            </div>
        </div>
    </main>


        <!-- Fin du isset -->
        <?php
            }
        ?>

        <script src="js/ol-debug.js" type="text/javascript"></script>
        <script src="js/ol3-layerswitcher.js" type="text/javascript"></script>

        <script type="text/javascript" src="js/jquery-3.1.0.js"></script>
        <script type="text/javascript" src="js/jquery-ui.js"></script>



         <script src="js/materialize.js"></script>
        <script src="js/app.js"></script>

    </body>
</html>
    <?php

        }
    ?>

Et le Json valid :

Dernière modification par JAUFRYBenjamin (Wed 24 August 2016 11:49)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#2 Wed 24 August 2016 11:34

VianneyD
Participant assidu
Date d'inscription: 30 May 2011
Messages: 153

Re: Erreur OpenLayers 3

Bonjour,

Si je peux me permettre, il a une drôle de tête ton JSON. Le paramètre "geometry" de tes features vaut null et il y a des geometry toutes seules qui se promènent entre tes features...

Je pense que si tu arrives à affecter la géométrie à l'intérieur de tes features, ça se passera mieux ^^.

Dans ton php tu définis un paramètre "coordinates" (qui d'ailleurs n'apparait pas dans le JSON...). Ca ne devrait pas plutôt être "geometry" ?


Vianney Dugrain

Hors ligne

 

#3 Wed 24 August 2016 11:47

JAUFRYBenjamin
Participant occasionnel
Date d'inscription: 25 Nov 2015
Messages: 11

Re: Erreur OpenLayers 3

Oups je n'ai pas modifié l'image du Json. Si je met "geometry" ou "coordinate" ca ne change rien.
Je test ce que tu m'as dit ! Merci

** Edit **

Le geojson fonctionne dans Qgis. Maintenant il ne s'affiche toujours pas dans l'interface. D'où pourrait provenir le bug ? Surement le javascript ?
Aucune erreur dans le firebug avec ol-debug.

Code:

$(".button-collapse").sideNav();


    var map = new ol.Map({
        target: 'map',
        layers: [
            new ol.layer.Group({
                'title': 'Fond de cartes',
                layers: [
                    
                    new ol.layer.Vector({
                        title: 'Chemins',
                        source: new ol.source.Vector({
                        url: 'getData.php',
                        format: new ol.format.GeoJSON(),
                        projection: 'EPSG:3857',

                        }),
                        }),
                    
                   new ol.layer.Tile({
                    title: 'MapBox Street',
                    type: 'base',
                    visible: true,
                    source: new ol.source.XYZ({
                        url: 'https://api.mapbox.com/styles/v1/mapbox/streets-v9/tiles/256/{z}/{x}/{y}?access_token=pk.eyJ1IjoiamF1ZnJ5IiwiYSI6ImNpcmVsbjg1YjAwMGhpY200b2xudmQ3bmUifQ.vSOJfU9DMMEa7JDss5TDQA'
                    })
                }),

                new ol.layer.Tile({
                    title: 'Fond OSM',
                    type: 'base',
                    visible: true,
                    source: new ol.source.OSM()
                }),

                ]
            }),
                
        ],
        view: new ol.View({
            center: ol.proj.fromLonLat([-0.57, 45.22]),
            zoom: 10
        })
    });

    var layerSwitcher = new ol.control.LayerSwitcher({
        tipLabel: 'Légende'
    });
    map.addControl(layerSwitcher);

Dernière modification par JAUFRYBenjamin (Wed 24 August 2016 12:06)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#4 Wed 24 August 2016 12:14

VianneyD
Participant assidu
Date d'inscription: 30 May 2011
Messages: 153

Re: Erreur OpenLayers 3

Si tu lui envoies des coordonnées lon/lat, le SRID à spécifier n'est pas 3857 (pseudo Mercator) mais plutot 4326 :

Code:

new ol.layer.Vector({
                        title: 'Chemins',
                        source: new ol.source.Vector({
                        url: 'getData.php',
                        format: new ol.format.GeoJSON(),
                        projection: 'EPSG:4326',

                        }),
                        }),

Vianney Dugrain

Hors ligne

 

#5 Wed 24 August 2016 12:32

JAUFRYBenjamin
Participant occasionnel
Date d'inscription: 25 Nov 2015
Messages: 11

Re: Erreur OpenLayers 3

Merci, j'ai compris mon erreur. J'ai mes données en 2154 dans postgis et je veux les afficher en 4326, normal que cela ne fonctionne pas. Cependant je pense qu'il sera nécessaire de laisser les données dans postgis en 2154. Comment je pourrais les convertir avec javascript ?
Merci beaucoup

Hors ligne

 

#6 Wed 24 August 2016 14:14

VianneyD
Participant assidu
Date d'inscription: 30 May 2011
Messages: 153

Re: Erreur OpenLayers 3

Tu peux les convertir dans ta requête avec ST_Transform, ou directement envoyer le JSON en Lambert 93 (SRID 2154) mais en précisant le projection EPSG:2154.


Vianney Dugrain

Hors ligne

 

#7 Wed 24 August 2016 15:16

JAUFRYBenjamin
Participant occasionnel
Date d'inscription: 25 Nov 2015
Messages: 11

Re: Erreur OpenLayers 3

Merci !
J'ai cette requête, je ne pense pas me tromper :
SELECT dgs_id, ST_ASGeoJSON(ST_Transform(geom,4326)) AS geojson FROM departements_geofla_sage

Et pourtant :

"Warning: PDOStatement::execute(): SQLSTATE[XX000]: Internal error: 7 ERREUR: Input geometry has unknown (0) SRID in C:\Users\postgres\Documents\smiddest\getData.php on line 18
{"type":"FeatureCollection","features":[]}"

**Edit **

C'est tout bon, il fallait spécifier un srid à la table dans postgis !
Merci beaucoup pour votre patience.

Problème résolu !

Dernière modification par JAUFRYBenjamin (Wed 24 August 2016 15:40)

Hors ligne

 

#8 Wed 24 August 2016 15:29

VianneyD
Participant assidu
Date d'inscription: 30 May 2011
Messages: 153

Re: Erreur OpenLayers 3

Ta requête parait correcte. Ca sent plutot le SRID non défini dans PostGIS smile

Tu peux y remédier en exécutant un UpdateGeometrySRID sur le champ géométrique concerné dans ta BD.
Ou, si tu es sous PostGIS 2.X :

Code:

ALTER TABLE mytable ALTER COLUMN geom TYPE geometry(Multipolygon, 2154) USING ST_SetSRID(geom, 2154);

Vianney Dugrain

Hors ligne

 

#9 Wed 24 August 2016 15:41

JAUFRYBenjamin
Participant occasionnel
Date d'inscription: 25 Nov 2015
Messages: 11

Re: Erreur OpenLayers 3

On a édité en même temps :

**

C'est tout bon, il fallait spécifier un srid à la table dans postgis !
Merci beaucoup pour votre patience.

Problème résolu !

Hors ligne

 

Pied de page des forums

Powered by FluxBB