Précédent   Forum des professionnels en informatique > Applications > SIG : Système d'information Géographique > IGN API Géoportail
IGN API Géoportail Forum d'entraide sur l'API Géoportail développé par IGN
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/01/2012, 17h35   #1
Nouveau Membre du Club
 
Homme Olivier
Webmaster perso, Géomatique travail
Inscription : janvier 2012
Messages : 54
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Localisation : France, Vendée (Pays de la Loire)

Informations professionnelles :
Activité : Webmaster perso, Géomatique travail
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 54
Points : 29
Points : 29
Par défaut polygones cliquables !?

Un nouveau problème
J'ai réussi à afficher mes ilots, je cherche maintenant à les rendre interactifs.
Malgré une bonne journée de recherche et des tests pas moyens de faire afficher quelque chose:

var commentaire = 'Pacage :'+parcelle[i]["pacage"]+'<br />Ilot n° '+parcelle[i]["Num_ilot"]+'<br />Type de culture majoriataire : '+parcelle[i]["culture"]+'<br />Surface totale : '+parcelle[i]["surf_ilot"]+'<br />'+parcelle[i]["cultureilot"];


voici le code d'affichage de la couche ilots

//ajouter la couche
var vectorlayer = new OpenLayers.Layer.Vector(parcelle[0]["pacage"]);
viewer.getMap().addLayer(vectorlayer);
var bounds = new OpenLayers.Bounds();
for (i=0 ; i<nombre; i++)
{
var tempo= new Array ();
nb =(parcelle[i]["nombre_points"]/2)-1;
couleur=parcelle[i]["couleur"];
var style_ilot =
{
strokeColor: "#000000",
strokeOpacity: 0.8,
strokeWidth: 2,
fillColor: couleur,
fillOpacity: 0.3
};



for (j=0 ; j<nb; j++)
{
var mon_point = new OpenLayers.Geometry.Point(longitude[i][j+1],latitude[i][j+1]);

// newPoint.transform(OpenLayers.Projection.CRS84, map.getMap().getProjection());
var sourceproj = OpenLayers.Projection.CRS84; // WGS84
var destproj = viewer.projection; // Projection Geoportail
mon_point.transform(sourceproj, destproj);
//mon_point.transform(OpenLayers.Projection.CRS84, viewer.getMap().getProjection());
tempo.push(mon_point);
bounds.extend(tempo[j]);
}


var linearRing = new OpenLayers.Geometry.LinearRing(tempo);
var polygonFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Polygon([linearRing]),null,style_ilot);
vectorlayer.addFeatures([polygonFeature]);


} //fin i polygon
momo8508 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 09h08   #2
Membre émérite
 
Inscription : mai 2009
Messages : 1 086
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 1 086
Points : 821
Points : 821
Par défaut Page d'exemple!

Si par hasard, c'est la page http://randonnee.pedestre85.free.fr/projet-ign-v4.htm, il faudrait passer en version 1.2 de l'api et tout passer en utf-8.

Pour rendre un objet réactif, il faut utiliser les onSelect sur la couche.

Perso, je préfère faire traiter le fichier kml par l'api et afficher les données en parcourant la couche.
mga_geo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 10h03   #3
Nouveau Membre du Club
 
Homme Olivier
Webmaster perso, Géomatique travail
Inscription : janvier 2012
Messages : 54
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Localisation : France, Vendée (Pays de la Loire)

Informations professionnelles :
Activité : Webmaster perso, Géomatique travail
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 54
Points : 29
Points : 29
bon Php web manager ne sauvegarde pas en utf8

Je vais passer en 1.2 !!

Comment as tu trouver l'adresse du fichier , déduction du post précédent ou mon répertoire est lisible ?

"Perso, je préfère faire traiter le fichier kml par l'api et afficher les données en parcourant la couche." : le problème dans les kmls générés par ogrogr2r il y a des données que je ne veux pas afficher quand je clique sur les ilots de plus, je ne sais pas modifier le style d'affichage du kml (il m'affiche les ilots en "polyline" et pas en polygone plein)
momo8508 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 13h09   #4
Membre émérite
 
Inscription : mai 2009
Messages : 1 086
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 1 086
Points : 821
Points : 821
Le "fill" à zéro empêche le remplissage.

J'ai un exemple de mon approche: http://atlasnw.free.fr/geoportail/ex...rojet-ign.html
mga_geo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 13h41   #5
Nouveau Membre du Club
 
Homme Olivier
Webmaster perso, Géomatique travail
Inscription : janvier 2012
Messages : 54
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Localisation : France, Vendée (Pays de la Loire)

Informations professionnelles :
Activité : Webmaster perso, Géomatique travail
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 54
Points : 29
Points : 29
Merci pour cet exemple !

Le fill à 0 (plutôt à 1 dans ton exemple) il est où ?
Il est dans le kml qui est généré automatiquement !!!!!
J'en ai 6000 je ne peux pas le changer manuellement ?!!!

Quand je clique sur l'ilot il y a des tas d'informations que je ne veux pas afficher !!
Est ce qu'elles sont lu via "kmlLayer.features[i].attributes"
Il y a moyen de modifier l'affichage du popup ?
dans kmlLoadend il ya la fonction "continue" ?

Mon but est d'obtenir une application du type http://randonnee.pedestre85.free.fr/testgoogle35.htm
Mais googlemap n'est pas validé par mon administration....
Et l'avantage de API IGN c'est aussi la couche cadastre.
La side bar de droite est importante voir obligatoire
Je ne suis pas assez bon en informatique pour la programmation de l'api IGN qui semble plus "professionnelle" que celle de google

Merci de votre aide et de votre patience!!
momo8508 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 15h23   #6
Membre émérite
 
Inscription : mai 2009
Messages : 1 086
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 1 086
Points : 821
Points : 821
Si l'informatique ne permet pas de traiter 6000 fichiers, j'ai loupé quelque chose.

"continue" est un mot-clé de javascript, il s'utilise dans les boucles.

J'ai fait quelques modifs simplistes dans mon exemple, le popup ne contient plus que certaines valeurs.
mga_geo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 23h10   #7
Expert Confirmé

 
Homme Didier Richard
Ingénieur cartographe
Inscription : avril 2009
Messages : 2 734
Détails du profil
Informations personnelles :
Nom : Homme Didier Richard
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur cartographe
Secteur : Service public

Informations forums :
Inscription : avril 2009
Messages : 2 734
Points : 3 502
Points : 3 502
Citation:
Envoyé par momo8508 Voir le message
Je ne suis pas assez bon en informatique pour la programmation de l'api IGN qui semble plus "professionnelle" que celle de google
La courbe d'apprentissage est plus élevée en effet
Mais, quel spectacle, une fois en haut

Dans le principe :

1/ charger les données depuis une source (KML, ou autre) dans une couche vectorielle :

Code :
1
2
3
4
5
6
7
var coucheV= viewer.getMap().addLayer("KML", etc ...);
/*
 * ou
 */
//var coucheV= new OpenLayers.Layer.Vector(...);
// viewer.getMap().addLayer(coucheV);
2/ définir la symbologie : c'est passer un styleMap à la création de la couche - voir cet exemple
Comme indiqué par mga_geo, le survol/clic des polygones n'est actif que si le remplissage n'est pas à 0

3/ rendre la couche réactive : dans 1/ la première méthode le fait automatiquement, la seconde implique de la faire manuellement :
[code]
var s= new OpenLayers.Control.Select(...);
viewer.getMap().addControls([s]);
s.activate();

4/ définir la popup : c'est en général surcharger la méthode onSelect() (Cf. le même exemple) - On peut mettre ce que l'on veut dedans

5/ Si l'on ne veut afficher qu'un des objets d'une telle couche, on peut jouer sur les styles. Par défaut, on met un display à "none" dans le StyleMap et pas dans le style "select" :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
var regsStyle= new OpenLayers.StyleMap({
  "default": new OpenLayers.Style({
    ...
    display:"none"
  }),
  "temporary": new OpenLayers.Style({
    ...
  }),
  "select": new OpenLayers.Style({
    ...
  });
dgrichard est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/01/2012, 15h05   #8
Nouveau Membre du Club
 
Homme Olivier
Webmaster perso, Géomatique travail
Inscription : janvier 2012
Messages : 54
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Localisation : France, Vendée (Pays de la Loire)

Informations professionnelles :
Activité : Webmaster perso, Géomatique travail
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 54
Points : 29
Points : 29
Par défaut je progresse quoi que ?

bonjour,
J'ai profité de quelques temps dans mon planning pour partir sur la piste kml...
J'arrive à afficher les polygones plein et avec un popup mieux qu'avant.
Mais ce n'est pas l'apothéose.
Je voudrais pouvoir mettre en couleur au moment de l'affichage les polygones(ilots) en fonction de la culture principale de ce dernier.
kmlLayer.features[i].attributes['code_MAJ'].value

De plus pour la fenêtre d'info, j'ai limité les valeurs afficher mais je ne vois pas comment afficher seulement celles qui ne sont pas à zéro
mon nouvel essai est là :
http://randonnee.pedestre85.free.fr/projet-ign.html

l'objectif version google map
http://randonnee.pedestre85.free.fr/testgoogle35.htm

Merci
Olivier
momo8508 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 15h12   #9
Expert Confirmé

 
Homme Didier Richard
Ingénieur cartographe
Inscription : avril 2009
Messages : 2 734
Détails du profil
Informations personnelles :
Nom : Homme Didier Richard
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur cartographe
Secteur : Service public

Informations forums :
Inscription : avril 2009
Messages : 2 734
Points : 3 502
Points : 3 502
Il te faut utiliser les context des styles comme dans cet exemple
dgrichard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 16h04   #10
Nouveau Membre du Club
 
Homme Olivier
Webmaster perso, Géomatique travail
Inscription : janvier 2012
Messages : 54
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Localisation : France, Vendée (Pays de la Loire)

Informations professionnelles :
Activité : Webmaster perso, Géomatique travail
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 54
Points : 29
Points : 29
Par défaut essai non réussi

J'ai mis ce code
[
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 var symb1= {
   'PT'   :{strokeColor:'#0DF20D',    strokeWidth:4},                
   'PP'   :{strokeColor:'#008000',    strokeWidth:4},          
   'MAIS' :{strokeColor:'#D99226',    strokeWidth:4},     
   'CER'  :{strokeColor:'#FFFF00',    strokeWidth:4},         
   'AC'   :{strokeColor:'#800000',    strokeWidth:4},  
   'OLEA' :{strokeColor:'#800080',    strokeWidth:4}, 
   'AU'   :{strokeColor:'#C0C0C0',    strokeWidth:4}, 
   'PROT' :{strokeColor:'#00FFFF',    strokeWidth:4},
   'GEL'  :{strokeColor:'#0000FF',    strokeWidth:4} 
        };
   kmlLayerStyle.addUniqueValueRules('default','code_MAJ',symb1);
pour prendre en compte la valeur de la culture majoritaire.
le suivant est pour l'affichage du kml
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 valeur =document.forms.f.nomfichier.value;
  valeur = valeur +".kml"
    
  kmlLayer = viewer.getMap().addLayer(
    "KML",
    valeur, //nom couche
    valeur, //nom fichier
    {
      visibility: true,
      eventListeners:{
        "loadend":kmlLoadend
      },
      minZoomLevel: 8,
      maxZoomLevel: 16
    },
    {formatOptions:{
                    extractStyles:false // désactivation des styles
                },
               }
    
  );
dois je faire appel au style "kmlLayerStyle" ou j'ai essayé mais je plante l'affichage.
il y a t'il conflit avec "extractStyles:false" qui annule le style du kml ?

http://randonnee.pedestre85.free.fr/projet-ign.html
momo8508 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 21h15   #11
Membre émérite
 
Inscription : mai 2009
Messages : 1 086
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 1 086
Points : 821
Points : 821
Par défaut UTF-8

S'il n'est pas possible de passer en UTF-8, il faudrait essayer un autre encodage mais cela peut provoquer d'autres erreurs!
Pour l'instant, le javascript doit un peu patauger sur les signes diacritiques.
mga_geo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 22h21   #12
Expert Confirmé

 
Homme Didier Richard
Ingénieur cartographe
Inscription : avril 2009
Messages : 2 734
Détails du profil
Informations personnelles :
Nom : Homme Didier Richard
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur cartographe
Secteur : Service public

Informations forums :
Inscription : avril 2009
Messages : 2 734
Points : 3 502
Points : 3 502
C'est « simplement » parce que les valeurs des attributs ne sont pas codés dans l'objet attributes['code_MAJ'], mais dans attributes['code_MAJ'].value

Il faut utiliser un contexte ...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
var contextMAJ = function(feature) {
    return { 'codeMAJ': feature.attributes['codeMAJ'].value };
}
...
kmlLayerStyle.addUniqueValueRules('default','code_MAJ',symb1,contextMAJ);
...
kmlLayer= viewer.getMap().addLayer("KML",
...
    styleMap:kmlLayerStyle
...
);
et non, extractStyles à false ne fait qu'empêcher l'interprétation des styles mis dans le KML

J'ai pas testé, mais c'est l'esprit
dgrichard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 09h44   #13
Membre émérite
 
Inscription : mai 2009
Messages : 1 086
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 1 086
Points : 821
Points : 821
Je viens de tester sur ma version et ça n'a pas l'air de fonctionner...
cf http://atlasnw.free.fr/geoportail/ex...rojet-ign.html
le bord du polygone devrait devenir noir!

Mais comme je suis en train de compter les oiseaux dans mon jardin en même temps, j'ai peut-être fait une erreur grossière. http://bougezpourlanature.pagesperso...r/sommaire.htm
mga_geo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 12h00   #14
Expert Confirmé

 
Homme Didier Richard
Ingénieur cartographe
Inscription : avril 2009
Messages : 2 734
Détails du profil
Informations personnelles :
Nom : Homme Didier Richard
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur cartographe
Secteur : Service public

Informations forums :
Inscription : avril 2009
Messages : 2 734
Points : 3 502
Points : 3 502
Citation:
Envoyé par mga_geo Voir le message
Je viens de tester sur ma version et ça n'a pas l'air de fonctionner...
cf http://atlasnw.free.fr/geoportail/ex...rojet-ign.html
le bord du polygone devrait devenir noir!
ma faute :

Code :
1
2
3
4
  var contextMAJ = function(feature) {
    return { 'code_MAJ': feature.attributes['code_MAJ'].value };
  }
Edit: et un bug OpenLayers trouvé

il faut rajouter ceci (par exemple avant initGeoportalMap) pour que tout fonctionne :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    OpenLayers.Rule.prototype.clone= function() {
        var options = OpenLayers.Util.extend({}, this);
        if (this.symbolizers) {
            // clone symbolizers
            var len = this.symbolizers.length;
            options.symbolizers = new Array(len);
            for (var i=0; i<len; ++i) {
                options.symbolizers[i] = this.symbolizers[i].clone();
            }
        } else {
            // clone symbolizer
            options.symbolizer = {};
            var value, type;
            for(var key in this.symbolizer) {
                value = this.symbolizer[key];
                type = typeof value;
                if(type === "object") {
                    options.symbolizer[key] = OpenLayers.Util.extend({}, value);
                } else if(type === "string") {
                    options.symbolizer[key] = value;
                }
            }
        } 
        // clone filter
        options.filter = this.filter && this.filter.clone();
        // clone context
        //options.context = this.context && OpenLayers.Util.extend({}, this.context);
        //IGNF:
        options.context = typeof this.context === "function" ?
            this.context
        :   this.context && OpenLayers.Util.extend({}, this.context);
        return new OpenLayers.Rule(options);
    }
dgrichard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 14h14   #15
Membre émérite
 
Inscription : mai 2009
Messages : 1 086
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 1 086
Points : 821
Points : 821
Si je mets avant initGeoportalMap, j'ai une erreur
mga_geo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 14h40   #16
Expert Confirmé

 
Homme Didier Richard
Ingénieur cartographe
Inscription : avril 2009
Messages : 2 734
Détails du profil
Informations personnelles :
Nom : Homme Didier Richard
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur cartographe
Secteur : Service public

Informations forums :
Inscription : avril 2009
Messages : 2 734
Points : 3 502
Points : 3 502
Citation:
Envoyé par mga_geo Voir le message
Si je mets avant initGeoportalMap, j'ai une erreur
Comme d'hab., cela dépend du chargement de l'API
Il faut alors le déplacer à l'intérieur d'initGeoportalMap.
dgrichard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 09h29   #17
Nouveau Membre du Club
 
Homme Olivier
Webmaster perso, Géomatique travail
Inscription : janvier 2012
Messages : 54
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Localisation : France, Vendée (Pays de la Loire)

Informations professionnelles :
Activité : Webmaster perso, Géomatique travail
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 54
Points : 29
Points : 29
Par défaut Projet 1 en phase de finition

Bonjour,
Grâce à vous (dgrichard et mga_geo), ma première application IGN pour le boulot est presque que terminé un grand Merci !!!

Un dernier souci , je n'arrive pas à afficher la couche des parcelles 2009
Code :
1
2
3
4
5
6
7
8
 viewer.addGeoportalLayers(
    ['ADMINISTRATIVEUNITS.BOUNDARIES:WMSC', 'CADASTRALPARCELS.PARCELS:WMSC','ORTHOIMAGERY.ORTHOPHOTOS:WMSC','GEOGRAPHICALGRIDSYSTEMS.MAPS:WMSC','LANDUSE.AGRICULTURE2009:WMSC'],
    {
      'ORTHOIMAGERY.ORTHOPHOTOS:WMSC':{visibility:false},
      'GEOGRAPHICALGRIDSYSTEMS.MAPS:WMSC':{visibility:true,opacity:0.6},
      'LANDUSE.AGRICULTURE2009:WMSC':{visibility:true},global:{opacity:1.0}
    }
  );
Mes données affichées seront plus récente mais une comparaison avec 2009 pourra être demandée.

Petite question pour mga_geo "bougezpourlanature" est limité à la Bretagne ?

Olivier
momo8508 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 12h00   #18
Membre émérite
 
Inscription : mai 2009
Messages : 1 086
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 1 086
Points : 821
Points : 821
Pour afficher les parcelles, il faut que la clé l'autorise!

Le comptage des oiseaux de jardin est une opération initiée en Normandie et reprise en Côtes-d'Armor puis en Bretagne qui devrait être généralisée en France l'année prochaine.
mga_geo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 15h07   #19
Expert Confirmé

 
Homme Didier Richard
Ingénieur cartographe
Inscription : avril 2009
Messages : 2 734
Détails du profil
Informations personnelles :
Nom : Homme Didier Richard
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur cartographe
Secteur : Service public

Informations forums :
Inscription : avril 2009
Messages : 2 734
Points : 3 502
Points : 3 502
Citation:
Envoyé par mga_geo Voir le message
Pour afficher les parcelles, il faut que la clé l'autorise!
Et je confirme, la clef ne l'autorise pas
dgrichard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 08h36   #20
Nouveau Membre du Club
 
Homme Olivier
Webmaster perso, Géomatique travail
Inscription : janvier 2012
Messages : 54
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Localisation : France, Vendée (Pays de la Loire)

Informations professionnelles :
Activité : Webmaster perso, Géomatique travail
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 54
Points : 29
Points : 29
Par défaut Résolu

Sauf ce problème de clé et de codage UTF8
La discussion est résolue


Merci
momo8508 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h48.


 
 
 
 
Partenaires

Hébergement Web