IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IGN API Géoportail Discussion :

Problème de liaison entre Postgresql/API geoportail


Sujet :

IGN API Géoportail

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Problème de liaison entre Postgresql/API geoportail
    Bonjour,
    Je suis nouveau pour l'utilisation des SIG sur internet.
    Je cherche à créer une carte (via l'api géoportail) avec des marqueurs provenant d'une base postgre/postgis.

    Pour commencer J'ai pris une base test avec juste un identifiant, libelle, description et la variable spatial the_geom.
    Pour le moment j'arrive via une page Php à afficher les coordonnées long et lat de postgresql.

    Voici mon code Php :
    Code PHP:
    <?php
    include ('./inclusion/connexion.inc');
    $idc = connect();
    $sql="select id, lib, description, st_asgeojson(the_geom) as geom from ponctuel";
    $res=pg_exec($idc, $sql);

    $json = 'type: FeatureCollection,'."\n";
    $json.= 'features : '."\n<br>";
    while ($row=pg_fetch_assoc($res)){
    if($row["geom"]!=''){
    $json.= 'type : Feature,'."\n";
    $json.= 'géométrie :'.$row["geom"].", \n";
    $json.= 'propriétés : {'."\n";
    $json.= 'libellé : '.$row['lib'].''.", \n";
    $json.= 'description : '.$row['description'].''."\n, ";
    $json.= 'id :'.$row['id'].''."\n"; // derniere champ (sans virgule)
    $json.= "}\n";
    $json.= "},\n <br>";
    }
    }
    $json=substr($json,0, strlen($json)-2);
    $json.= ""."\n";
    $json.="}";
    echo $json;
    ?>
    Par contre je ne trouve pas le code pour faire le lien avec ma base postgres afin d'afficher mes marqueurs sur ma carte.

    Voici mon code HTML:

    //____________Le clic sur marqueur ouvre une nouvelle fen뵲e
    function ouvrePopup(feature) {
    if (feature) {
    if (!feature.popup) {
    var ll= feature.geometry.getBounds().getCenterLonLat();
    var me= VISU.getMap().getExtent();
    var inView= me.containsLonLat(ll,false);
    if (!inView) { // Hors de la visualisation = renvoi au centre
    ll= me.getCenterLonLat();
    }
    feature.popup= new OpenLayers.Popup.FramedCloud(
    "chicken",
    ll,
    null,
    //____________Ajout des attributs 'NAME' et 'DESCRIPTION' dans l'info-bulle :
    '<div style="font-size:.75em">' + "<b>" + feature.attributes.lib + "</b><br>" + feature.attributes.description,
    null,
    false), // Croix de fermeture (true=oui false=non)
    null;
    }
    if (feature.popup) { // Ajout de la popup ࡬a carte
    VISU.getMap().addPopup(feature.popup,true); // True = l'une ou l'autre. False = en cumul
    }
    }
    }
    function outPopup(feature) {
    if (feature && feature.popup) {
    feature.popup.destroy();
    feature.popup= null;
    }
    }
    //____________La variable VISU est d꤬arꥠpar l'API via le param鵲e instance
    function initGeoportalMap() {
    if (typeof(geoportalLoadVISU) != 'function') {
    }
    geoportalLoadVISU("geoportalCarteDiv", "normal", 'FXX', null, null);
    if (VISU.getMap().allowedGeoportalLayers) {

    //____________Affichage d'une "partience" pendant le tꭩchargement
    VISU.getMap().addControl(new OpenLayers.Control.LoadingPanel());
    if (VISU) {
    VISU.addGeoportalLayers();
    }
    //____________Affichage des marqueurs Json

    var geojson = VISU.getMap().addLayer("Json", "Marqueurs GeoJson", "./st_asgeojson.php",{
    isBaseLayer: false,
    visibility: true,
    minZoomLevel: 0,
    maxZoomLevel: 20,
    },
    {
    onSelect: ouvrePopup,
    onUnselect: outPopup,
    hover: false // Ouverture au sꭥct = false. Au survol = true
    });
    //____________Positionnement du point central de la carte (coordonn꦳ + niveau de zoom)
    VISU.getMap().setCenterAtLonLat(5.56, 46.67, 8.5);
    }
    }

    La carte s'affiche bien mais ma couche "Marqueurs GeoJson" est inexistante...

    Je continu à chercher mais si vous avez des idées je suis preneur.

    Merci par avance de votre aide

  2. #2
    Membre averti
    Femme Profil pro
    Consultante SIG
    Inscrit en
    Mars 2011
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultante SIG

    Informations forums :
    Inscription : Mars 2011
    Messages : 233
    Points : 356
    Points
    356
    Par défaut
    Bonjour,

    La méthode addLayer de la classe Geoportal.Map permet l'ajout des couches suivantes: “WMS”, “MapServer”, “WMS-C”, “WFS”, “KML”, “GPX” "GEORSS" et “OSM”.

    Voici donc les étapes à suivre pour rajouter la couche 'Marqueurs GeoJson' à la carte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    1/ Création d'une couche vecteur
    
    var vlayer = new OpenLayers.Layer.Vector("Marqueurs GeoJson")
    
    2/ Création d'une instance de la classe OpenLayers.Format.GeoJSON avec les options suivantes:
    
    var options = {
    	         "internalProjection": VISU.getMap().getProjection(),
    		 "externalProjection": new OpenLayers.Projection("EPSG:4326")
    };  
    
    var json_format = new OpenLayers.Format.GeoJSON(options);		
    
    3/ Création d'une variable data qui est une chaîne de caractères avec le contenu du fichier JSON.
    
    4/Ajout des features à la couche vecteur:
    
    var vector_layer = VISU.getMap().getLayersByName("Marqueurs GeoJson")[0];
    vector_layer.addFeatures(json_format.read(data));
    
    5/ Ajout de cette couche à la carte
    VISU.getMap().addLayer(vector_layer);

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Je te remercie pour cette réponse,

    Après avoir intégré cette partie de code et avoir relancé mon application,
    j'obtiens une erreur : "OpenLayers.Format.GeoJSON is not a constructor".

    Selon mon maître de stage, ça serait un problème de compatibilité avec l'API géoportail...

    Y aurait il une autre façon de faire ou faut-il que je me tourne vers un format du style XML? Et si je me tourne vers ce format ne vais-je pas tomber sur le même problème?

    Merci d'avance

  4. #4
    Membre averti
    Femme Profil pro
    Consultante SIG
    Inscrit en
    Mars 2011
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultante SIG

    Informations forums :
    Inscription : Mars 2011
    Messages : 233
    Points : 356
    Points
    356
    Par défaut
    Bonjour,

    Ie format GeoJSON n'est supporté que par l'api étendue.
    Il faut donc passer en version "étendue" de l'api:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <script type="text/javascript" src="http://api.ign.fr/geoportail/api?v=1.2-e&amp; ....
    Voici un exemple sur le site d'openlayers qui reprend ce que j'ai expliqué dans le post précédent:
    http://dev.openlayers.org/releases/O...s/geojson.html

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/08/2007, 09h22
  2. [X] Problème de liaisons entre marker d'un graph
    Par axel-erator dans le forum SAP Crystal Reports
    Réponses: 16
    Dernier message: 29/06/2007, 14h40
  3. [Access 2003]Problème de liaison entre table
    Par steeves5 dans le forum Access
    Réponses: 3
    Dernier message: 12/06/2006, 09h40
  4. Réponses: 3
    Dernier message: 20/05/2006, 00h28
  5. Problèmes de liaisons entre tables ...
    Par Mangun dans le forum Access
    Réponses: 2
    Dernier message: 28/09/2005, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo