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 :

Dev iPhone map framework


Sujet :

IGN API Géoportail

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Dev iPhone map framework
    Bonjour,

    J'essaye d'implémenter la récupération des tuiles IGN dans un framework pour application iPhone.
    Il ne s'agit pas ici de l'api web (js et css) de l'ign. Du coup je ne poste peut-etre pas au bon endroit...
    Ce framework (route me) fonctionne trés bien pour divers types de carte mais en branchant le WS de récupération de tuiles de l'IGN, le rendu n'est pas correct.
    La résolution n'est pas bonne et les tuiles récupérées ne se suivent pas.

    Ma question est:
    Le système de projection ou la calcul des paramètres TILEMATRIX, TILECOL et TILEROW sont-ils spécifiques aux tuiles IGN?
    Faut-il recoder le calcul de ces paramètres à partir de la coordonnée GPS à couvrir? (la formule est dans la doc technique de l'IGN)

    Seconde question qui m'éviterais éventuellement de "perdre du temps" sur ce framework.
    Quelqu'un a-t-il déja utilisé un autre framework de ce type?
    Framework dans le language natif (Objective-C) qui permet d'aller plus loin dans l'intégration des cartes IGN.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Difficile de répondre sans :

    1. une capture d'écran (résolution);
    2. les requêtes envoyées (quel WS, a priori WMTS).

    Sinon, les paramètres ne sont pas propres à l'IGN, mais au standard WMTS.
    La page en question indique bien comment calculer la tuile à requêter en fonction de la position GPS. L'un des pièges de la formule est que les longitudes et latitudes GPS doivent être transformées en radian avant d'appliquer la formule ...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Voici l'implémentation de la méthode qui fournit les tuiles au framework route-me;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    -(NSString*) tileURL: (RMTile) tile
    {
    return [NSString stringWithFormat:@"http://wxs.ign.fr/%@/geoportail/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=GEOGRAPHICALGRIDSYSTEM.MAPS&STYLE=normal&TILEMATRIXSET=PM&TILEMATRIX=%d&TILEROW=%d&TILECOL=%d&FORMAT=image%@jpeg",accessKey, tile.zoom, tile.x, tile.y,@"%2F"];
    }
    C'est effectivement une requete WMTS.
    L'URL générée par cette méthode retourne dans un navigateur, une tuile (256x256) de résolution convenable.
    C'est l'affichage dans l'application qui pose problème.
    Le niveau de zoom apliqué dans l'application n'est peut être pas en rapport avec le TILEMATRIX??

    Je ne comprend pas tout à fait le passage suivant dans la doc technique IGN:
    "L'origine du niveau est à récupérer dans les capabities du service, elle correspond au paramètre TopLeftCorner (cf. figure 3). Dans notre cas:

    X0=-20037508
    Y0=20037508
    "
    Cela est l'origine en coordonnées de la première tuile IGN?
    C'est peut être ça "l'origine du problème" , le framework qui fonctionne avec d'autres tile source qui eux gèrent le monde est peut être positionné à
    X0=0
    Y0=0

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    J'ai jeté un oeuil aux méthodes de calcul des TILECOL, TILEROX et TILEMATRIX du framework route-me.
    C'est assez compliqué, tout du moins assez confus pour ne pas retrouver les formules issues de la doc IGN.

    Si on est bien en WMTS et en WebMercator, les formules doivent être OK non?

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par pkonieczny Voir le message
    Voici l'implémentation de la méthode qui fournit les tuiles au framework route-me;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    -(NSString*) tileURL: (RMTile) tile
    {
    return [NSString stringWithFormat:@"http://wxs.ign.fr/%@/geoportail/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=GEOGRAPHICALGRIDSYSTEM.MAPS&STYLE=normal&TILEMATRIXSET=PM&TILEMATRIX=%d&TILEROW=%d&TILECOL=%d&FORMAT=image%@jpeg",accessKey, tile.zoom, tile.x, tile.y,@"%2F"];
    }
    C'est effectivement une requete WMTS.
    L'URL générée par cette méthode retourne dans un navigateur, une tuile (256x256) de résolution convenable.
    Idéalement, c'était une vrai requête qu'il faudrait voir ...
    Du coup, avec une requête sur OSM dans le framework à la même résolution serait une piste.

    Citation Envoyé par pkonieczny Voir le message
    C'est l'affichage dans l'application qui pose problème.
    Le niveau de zoom apliqué dans l'application n'est peut être pas en rapport avec le TILEMATRIX??
    A priori, c'est la piste que je vois, d'où ma question sur OSM !

    Citation Envoyé par pkonieczny Voir le message
    Je ne comprend pas tout à fait le passage suivant dans la doc technique IGN:
    "L'origine du niveau est à récupérer dans les capabities du service, elle correspond au paramètre TopLeftCorner (cf. figure 3). Dans notre cas:

    X0=-20037508
    Y0=20037508
    "
    Cela est l'origine en coordonnées de la première tuile IGN?
    C'est peut être ça "l'origine du problème" , le framework qui fonctionne avec d'autres tile source qui eux gèrent le monde est peut être positionné à
    X0=0
    Y0=0
    J'ai jeté un oeil rapide sur le framework, apparemment 0,0 est l'initialisation par défaut si X0, Y0 ne sont pas fournis. Rien n'empêche d'utiliser autre chose!

    Il faudrait vraiment une capture d'écran ...

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par pkonieczny Voir le message
    J'ai jeté un oeuil aux méthodes de calcul des TILECOL, TILEROX et TILEMATRIX du framework route-me.
    C'est assez compliqué, tout du moins assez confus pour ne pas retrouver les formules issues de la doc IGN.
    C'est normal, les calculs dans le framework s'effectue par niveau de résolution et fenêtre (emprise). Notre calcul part d'une position pour retrouver la tuile. Globalement, les formules sont les mêmes ...

    Citation Envoyé par pkonieczny Voir le message
    Si on est bien en WMTS et en WebMercator, les formules doivent être OK non?
    Non car les chemins pour trouver les tuiles ne sont pas les mêmes (cf. supra).

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Visiblement, chaque fournisseur de tuiles a sa classe dans Route-me
    Il faudrait donc passer par une classe RMGeoportalMapSource.m (.h) qui concentrerait les calculs.
    En effet, le nombre de niveau est fixé à 1-18 pour OSM, là où Geoportail en a 0-20 ...

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Pour illustrer le problème, voici quelques images écrans.

    La première présente le rendu avec OSM: No Problemo.

    La deuxième: le rendu juste en branchant le WS IGN. En fait la tuile n'apparait pas, il faut dézoomer pour avoir des tuiles mais, elles ne se suivent pas (cf photos suivantes).
    Images attachées Images attachées      

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Points : 2
    Points
    2

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par dgrichard Voir le message
    Visiblement, chaque fournisseur de tuiles a sa classe dans Route-me
    Il faudrait donc passer par une classe RMGeoportalMapSource.m (.h) qui concentrerait les calculs.
    En effet, le nombre de niveau est fixé à 1-18 pour OSM, là où Geoportail en a 0-20 ...
    Oui, cette classe a été créée (RMIGNMapSource.m pour ma part).
    J'ai par contre positionné les niveaux de zoom de 0 à 21:
    [self setMaxZoom:21];
    [self setMinZoom:0];
    Je viens d'essayer de 0 à 20, le rendu est identique. Je pense que le framework utilise ces indications juste pour ne pas demander de nouvelles dales si les niveaux de zoom sont dépassés. Si c'est le cas, l'image est simplement étirée.

    Le passage d'un "MapSource" à l'autre se fait simplement dans le MainViewController.m

    - (void)viewDidLoad {
    [super viewDidLoad];

    RMMapContents *contents =
    //OSM
    //[[RMMapContents alloc] initWithView:mapView tilesource:[[[RMOpenStreetMapSource alloc] init] autorelease]];
    //IGN
    [[RMMapContents alloc] initWithView:mapView tilesource:[[[RMIGNMapSource alloc] initWithAccessKey:@"<MY_KEY>"] autorelease]];

    [mapView setContents:contents];

    [mapView setDelegate:self];
    [mapView setDeceleration:YES];
    [self updateInfo];

    }

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Bonne nouvelle, le problème est résolu est le rendu est OK.

    Erreur de positionnement des valeurs tile.x et tile.y.
    J'avais repris ce code et n'avait pas pensé à vérifer cela jusqu'alors
    Code incorrect:
    -(NSString*) tileURL: (RMTile) tile
    {
    return [NSString stringWithFormat:@"http://wxs.ign.fr/%@/geoportail/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=GEOGRAPHICALGRIDSYSTEM.MAPS&STYLE=normal&TILEMATRIXSET=PM&TILEMATRIX=%d&TILEROW=%d&TILECOL=%d&FORMAT=image%@jpeg",accessKey, tile.zoom, tile.x, tile.y,@"%2F"];
    }
    au lieu de :
    -(NSString*) tileURL: (RMTile) tile
    {
    return [NSString stringWithFormat:@"http://wxs.ign.fr/%@/geoportail/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=GEOGRAPHICALGRIDSYSTEM.MAPS&STYLE=normal&TILEMATRIXSET=PM&TILEMATRIX=%d&TILEROW=%d&TILECOL=%d&FORMAT=image%@jpeg",accessKey, tile.zoom, tile.y, tile.x,@"%2F"];
    }

    Le TILEROW doit recevoir tile.y et TILECOL tile.x

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DEV] IPhone, connexion à une base de données.
    Par poumpoumpaf dans le forum Apple
    Réponses: 2
    Dernier message: 08/02/2010, 18h13
  2. [DEV] iPhone WebService .NET sécurisé
    Par KoRiGaN44 dans le forum Apple
    Réponses: 1
    Dernier message: 31/07/2009, 21h53
  3. [iPhone Paris] Formation dev iPhone
    Par OFred27 dans le forum Demandes
    Réponses: 0
    Dernier message: 06/10/2008, 22h50
  4. [XCode] [DEV] Ajouter un framework ou une lib
    Par Rocou dans le forum XCode
    Réponses: 3
    Dernier message: 07/09/2007, 00h48
  5. Dev C# Compact FrameWork 1.0
    Par ooyeah dans le forum Windows Forms
    Réponses: 1
    Dernier message: 22/08/2007, 11h12

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