Maison >Java >javaDidacticiel >Comment migrer de KML vers JSON pour récupérer les données Google Directions ?

Comment migrer de KML vers JSON pour récupérer les données Google Directions ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-25 11:36:451030parcourir

How to Migrate from KML to JSON for Retrieving Google Directions Data?

Problème lors de la récupération de Google Directions à l'aide de données KML

Google a cessé de récupérer Google Directions à l'aide de données KML depuis le 27 juillet 2012. Cela signifie que le code utilisé pour extraire les directions de Google en analysant le fichier KML n'est plus fonctionnel.

Solution :

Migrez votre code pour utiliser JSON au lieu de KML. Pour faciliter cette transition, j'ai créé les classes suivantes :

  • Parser.java : Définit une interface pour analyser les données Google Directions.
  • XMLParser. java : Implémente une classe abstraite pour analyser les données XML à partir d'un URL.
  • Segment.java : Représente un segment d'un itinéraire, y compris les points, les instructions de virage, la longueur et la distance.
  • Route.java : Représente un itinéraire, y compris les points, les instructions de virage, la longueur, la polyligne et autres métadonnées.
  • GoogleParser.java : Implémente un analyseur concret pour les données Google JSON.
  • RouteOverlay.java : Dessine l'itinéraire sur un map.

Mise en œuvre :

  1. Remplacez votre code pour extraire les directions de KML par la fonction suivante :
private Route directions(final GeoPoint start, final GeoPoint dest) {
    Parser parser;
    String jsonURL = "https://developers.google.com/maps/documentation/directions/#JSON";
    final StringBuffer sBuf = new StringBuffer(jsonURL);
    sBuf.append("origin=");
    sBuf.append(start.getLatitudeE6()/1E6);
    sBuf.append(',');
    sBuf.append(start.getLongitudeE6()/1E6);
    sBuf.append("&destination=");
    sBuf.append(dest.getLatitudeE6()/1E6);
    sBuf.append(',');
    sBuf.append(dest.getLongitudeE6()/1E6);
    sBuf.append("&sensor=true&mode=driving");
    parser = new GoogleParser(sBuf.toString());
    Route r =  parser.parse();
    return r;
}
  1. Dans la méthode onCreate(), ajoutez ce qui suit code :
MapView mapView = (MapView) findViewById(R.id.mapview);
Route route = directions(new GeoPoint((int)(26.2*1E6),(int)(50.6*1E6)), new GeoPoint((int)(26.3*1E6),(int)(50.7*1E6)));
RouteOverlay routeOverlay = new RouteOverlay(route, Color.BLUE);
mapView.getOverlays().add(routeOverlay);
mapView.invalidate();

Remarque : Il est recommandé d'utiliser la fonction directions() dans une AsyncTask pour éviter les opérations réseau sur le thread de l'interface utilisateur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn