Map Offline
Bonjour à tous,
Un nouveau projet de petite appli pour laquelle l'amateur que je suis s'arrache les cheveux. Sans entrer dans le détail, c'est une appli qui va utiliser une carte et le positionnement GPS. Je souhaite utiliser une carte offline qui couvre l'Europe entière, avec très peu de détails. J'ai juste besoin des frontières et des plus grandes villes, pas besoin des routes, rues, forêts, j'en passe et des meilleures.
J'avais pensé un temps à OpenStreetView mais le niveau de détail est bien trop important, ce qui produit des cartes de plusieurs Go !
Avez vous connaissance d'un framework permettant l'utilisation de cartes hors ligne ? Des tutos ?
Un grand merci,
Bertrand
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Avec OpenStreetMap, les données sont organisées par couches, alors tu peux tout à fait ne prendre que les données qui t'intéressent. Après, ça dépasse ma compétence.
OpenStreetMap, mapbox, skobbler, il existe des tas de solutions mais tellement complexes par rapport à l'application simplissime que je souhaite mettre en oeuvre ...
Je ne connais pas trop le domaine, mais je pense qu'il faut télécharger toute la base de données, lui appliquer un traitement SQL savant pour supprimer toutes les données trop détaillées avant de charger la base de données obtenue dans l'application cible.
Depuis quelques années les gouvernements européens font la promotion de l'opendata en diffusant (partiellement) des données publiques. Il y a certainement des données géographiques dans le tas. Tu pourrais jeter un oeil sur les bases de données opendata disponibles sur le net.
En fait, pas tout à fait. Openstreetmap est une list énorme de points (node) et de lignes (way). Ces éléments ont des tags qui permettent de déterminer ce qu'ils sont (ex: tag highway=road, tag natural=water).
Donc, on peut bien-sûr les organiser par couche en les triant par tag mais ce n'est pas le format initial, donc cela demande du traitement.
Pour faire quelque chose de similaire au niveau de la france il y a quelques années (voir app stats de france), j'ai dû telecharger les données pour la france, installer un outil permettant de dessiner les cartes à partir des données et le configurer avec un style simplifié.
Ce fut très intéressant mais pas vraiment simple. Pas spécialement difficile, car il y plein de tutos, mais plutôt assez long et avec plein d.outils en ligne de commande à utiliser.
La solution la simple que je vois c'est d'installer l'outil TileMill de Mapbox. L'outil permet de manipuler différentes sources de données sous forme de couche sur une carte auxquelles tu pourras appliquer des styles.
D'apres mes souvenirs, il inclut la possibilité de télécharger les données de contour du monde.
qui ne font pas à proprement parler des données openstreetmap
Ensuite, pour les grandes villes, il existe une base de données de POI gratuites qui contient ces données. Mais je n'ai pas l'URL sous la main.
Tu as également l'outil en ligne overpass turbo qui te permet de faire des requêtes sur les données osm.
Cela te permettra de sortir les grosses villes d'europe quand tu auras bien compris le format des requetes et le principe des tags osm.
EDIT:
Tu trouveras ici des jeux de données extraits de OSM concernant les contour des continents et terres du monde au format shapefile:
http://openstreetmapdata.com/data/coast
Pour les villes et capitales (chercher cities15000.zip) :
http://download.geonames.org/export/dump/
Salut tout le monde,
Je rebondi sur le sujet car ça m'intéresse, je collecte des infos sur le sujet pour voir si je me lance ou pas dans un projet.
J'ai regardé mapbox, c'est sympa mais pas de offline actuellement.
Pour ma part, j'ai le besoin inverse de Simmer, j'ai besoin d'un système de carto 100% offline, pouvant aller disons du 1:100 000 au 1:1 000 000, avec une gestion des reliefs et le placement des routes et éléments naturels.
Le SDK du truc doit pouvoir me permettre de placer des dessins de zone par dessus, régler en coordonnées GPS mais vectoriel. Je veux pas un truc dégueulasse à base d'image pour les overlays.
MapBox est pas loin d'être parfait pour ce que je cherche à faire mais l'absence de offline est éliminatoire pour moi.
Il n'y a actuellement pas de standard vectoriel simple à utiliser pour découper des cartes et les afficher sur iOS, ni de SDK associé.
Donc c'est un peu la jungle, on peut y arriver mais il faut beaucoup chercher.
On a des tas de format vectoriel pour décrire les éléments d'une carte, mais aucun n'est prévu pour un découpage des formes en morceaux permettant de passer par le réseau et/ou d'être rendu efficacement sur un appareil mobile avec un scrolling fluide.
Il y a donc plusieurs problèmes qui sont liés : le découpage des données, un stockage efficace et un rendu fiable et assez rapide pour une expérience fluide sur mobile.
Cela ne veut pas dire que ce n'est pas fait, Google Maps et Apple Maps fonctionne en vectoriel mais que c'est difficile à mettre en place tout seul dans son coin.
Une des meilleurs réalisations sur mobile est à mon avis l'app maps.me qui pemet de télécharger et d'afficher des cartes par région ou par pays (environ 100 mo pour la France), mais l'app utilise surement un format propriétaire.
Il y a plusieurs tentatives en cours :
-une chez mapbox à base de tuile (Mapnick Vector Tile) mais pour l'instant le stockage offline n'est pas implémenté (ou pas disponible en open source)
-le projet mapsforge (mais pas de rendu sur ios)
-des projets pas open-source ou pas gratuit dont j'ai oublié le nom.
Une page liste les différents efforts:
wiki.openstreetmap.org/wiki/Vector_tiles
J'ai le projet d'intégrer des cartes offlines dans mon app et je suis parti sur un format perso car je n'ai rien trouvé qui soit facile à intégrer. Je n'arriverai sans doute pas à faire aussi bien que maps.me avec les ressources dont je dispose mais je vais essayer de m'en approcher le plus possible.
Si c'est pour le mac, tu peux essayer de prendre les sources du projet OpenStreetPad.
https://github.com/Whirlwind/OpenStreetPad/
Cela te permet de dessiner une carte directement à partir des données osm (xml ou pbf) en Objective-C.
C'est une usine à gaz, avec quelques bugs, trop lent pour iOS, mais cela peut passer sur un Mac.
Je m'en suis inspiré pour mon projet, même si au final je n'ai gardé qu'une petite partie pour le rendu en Core graphics.
Malheureusement c'est pour iPad me concernant.
Merci FKDEV pour toutes ces infos. ça dépasse définitivement mon niveau de compétence.. développer des applis, c'est un métier, et ce n'est pas le mien. Mais tes infos pourront me servir si j'arrive à déléguer.
Vraiment dommage que MapKit soit aussi rigide. J'ai constaté qu'avec des niveaux de zoom larges, on pouvait visualiser offline une mappemonde avec quelques villes, ainsi que la totalité des frontières. J'aurai juste besoin de quelques villes un peu moins grosses, j'aurai vraiment aimé pouvoir configurer le niveau de détail que l'on peut mettre en cache pour le réutiliser une fois passé offline...
tu as regardé si c'était faisable avec l'IGN ? (GeoPortail)
Le mec qui fait Iphygénie (pas sur de l'ortho) le propose je crois.
Dans l'option payante, on peut chopper les tuiles en local.
L'IGN a une API en effet et proposes différentes offre, pas mal d'app s'en servent.
Mais la data d'origine sert pas à grand chose sans un SDK optimisé du feu de dieu pour l'affichage.
Faire du offline map avec des tuiles sous forme d'images stockées en local, c'est facile par contre.
Là dessus tu dois pouvoir trouver pas mal d'exemples car c'est prévu dans Mapkit.
Pour info, l'excellente app multiplateforme Maps.me est maintenant open source.
Bon, c'est une grosse usine à gaz bien indigeste avec pas mal de dépendances.
Mais c'est souvent le cas pour les apps de ce calibre.
Leur format de map offline (.mwm) semble intéressant car très optimisé.