web-dev-qa-db-fra.com

Comment utiliser la carte OSM dans une application Android? Existe-t-il un tutoriel pour apprendre à utiliser OSM dans Android?

Bonjour les gars de la semaine dernière, je cherche un tutoriel/manuel ou des étapes pour inclure Open street map dans mon application Android. Tout ce que j'ai trouvé est soit un gros projet avec beaucoup plus de fonctionnalités, sinon autant de questions se sont terminées sans conclusion appropriée sur "COMMENT" ..!

Existe-t-il un blog/site approprié ou un document pouvant être consulté par une personne plus récente?

12
rubin

Je ne connais aucun tutoriel, mais voici le code que j'ai écrit pour un exemple minimal utilisant Osmdroid.

// This is all you need to display an OSM map using osmdroid
package osmdemo.demo;

import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapController;
import org.osmdroid.views.MapView;
import Android.app.Activity;
import Android.os.Bundle;

public class OsmdroidDemoMap extends Activity {
    private MapView         mMapView;
    private MapController   mMapController;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.osm_main);
        mMapView = (MapView) findViewById(R.id.mapview);
        mMapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);
        mMapView.setBuiltInZoomControls(true);
        mMapController = (MapController) mMapView.getController();
        mMapController.setZoom(13);
        GeoPoint gPt = new GeoPoint(51500000, -150000);
        mMapController.setCenter(gPt);
    }
}
/* HAVE THIS AS YOUR osm_main.xml
---------------------------------------------------------- XML START
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:orientation="vertical" >
    <org.osmdroid.views.MapView
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:id="@+id/mapview"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:clickable="true" />
</LinearLayout>
---------------------------------------------------------- XML END
Include slf4j-Android-1.5.8.jar and osmdroid-Android-4.1.jar in the build path
(Google search for where to get them from)
*/

Notez que vous devez maintenant utiliser la dernière version (4.1) pour éviter le blocage du téléchargement des vignettes à partir de OSM.

Notez également qu'ils déplacent leurs dépôts vers Github et que le processus n'est pas encore terminé. Cette page téléchargements contient les liens pour les pots

15
NickT

Cet exemple de projet OSMdroid est certainement le plus simple que j'ai rencontré. Pas plus de 5 minutes pour être opérationnel. Faites attention au fichier manifeste.

Pour un peu plus de complexité, ce tutoriel affiche une carte avec un géopoint actuel. 

Voici quelques extraits de différents projets. Je ne les ai pas tous testés, cependant.

Vous devriez télécharger OSMdroid et SLF4J , placez-le dans le dossier libs, Add as Library osmdroid, corrigez AndroidManifest.xml avec les autorisations appropriées (voir le premier tutoriel). Si vous faites cela, il n’est pas nécessaire de modifier le fichier gradle.build comme recommandé dans le premier tutoriel.

Je vous recommande d'utiliser, pour commencer, les anciennes versions de osmdroid (3.x) lorsque vous les utilisez. Une fois que vous êtes à l'aise, migrez vers la version plus récente d'osmdroid (4.x ou 5.x). 

Les classes GeoPoint et MapController changent de nom dans les nouvelles versions, alors faites attention/ ERREUR DE TYPES INCOMPATIBLES

IGeoPoint ne peut pas être converti en GeoPoint

IMapController ne peut pas être converti en MapController

5
tony gil

J'ai expliqué les étapes ICI . Je vous recommande également de jeter un coup d'œil à leur Sample Project qui est très utile. Et leur documentation sur COMMENT ;)

Et pour Utilisation hors ligne

1- vous devez télécharger la carte en utilisant MOBAC .

2- Placez-le dans /mnt/sdcard/osmdroid/

Après ces étapes, tout est identique à ce que @Nick a expliqué. 

3
Milad Faridnia

Une erreur que commettent les utilisateurs de Google Maps comme service est qu’ils traitent OpenStreetMap comme un simple fournisseur de tuiles de carte. Vous devez savoir qu'OpenStreetMap est en réalité une grande géodatabase wiki éditable et gratuite et qu'il existe trois manières différentes d'utiliser cette base de données. 

  1. Vous pouvez créer des outils pour écrire dans cette base de données. Il y a REST Api https://wiki.openstreetmap.org/wiki/API_v0.6 . C'est ce que vous utilisez si vous devez apporter des modifications à la base de données. C'est le cas d'utilisation le moins courant mais il est documenté de la manière la plus complète. L’API est l’API OSM principale et peut également être utilisée pour télécharger des données, mais ce n’est pas la méthode recommandée pour télécharger des données OSM.

  2. Ensuite, vous pouvez lire les données de cette base de données. La meilleure façon de faire est de télécharger des extraits de la planète https://wiki.openstreetmap.org/wiki/Planet.osm et des extraits plus petits hébergés par geofabrik http://download.geofabrik.de/ . Si vous souhaitez effectuer des requêtes plus spécifiques, les meilleures options pourraient être Overpass API https://wiki.openstreetmap.org/wiki/Overpass_API

  3. Enfin, il existe une gamme de services construits sur des données OSM telles que (tuiles de carte, routage, recherche de POI, géocodage). C’est très probablement ce que vous recherchez. Il existe de nombreuses options pour cela. Mapbox est une bonne solution complète pour Android https://www.mapbox.com/Android-docs/map-sdk/overview/ . Les avantages de mapbox Android sdk sont qu’ils fournissent tout, comme des mosaïques de carte, des itinéraires, des recherches de points d’intérêt, des cartes géocodées, des cartes hors ligne et même du trafic en direct via un seul service. Vous pouvez également suivre le lien ci-dessus et consulter des tutoriels et des exemples de code. Une mauvaise chose est que vous devrez utiliser le service mapbox et que le fournisseur risque de rester bloqué, mais la plupart des produits mapbox sont open source. Si vous travaillez un peu fort, vous devriez également pouvoir vous concocter d’autres solutions. 

J'espère que cela t'aides. 

2
Nirab Pudasaini

OSM est vraiment génial, mais difficile à utiliser spécialement avec son api google. De plus, il n’ya pas beaucoup de tutoriels ni de documentation, la meilleure option sera d’utiliser des services comme mapbox Qui ont une excellente documentation. et beaucoup de sources, faciles à utiliser et abordables. espérons que cela aidera.

1
Lily bentham