Pourquoi la récupération de Google Directions pour Android à l'aide de données KML ne fonctionne-t-elle plus ?
Introduction
Auparavant, il était possible de récupérer Google Directions à l'aide de données KML pour les applications Android. Cependant, cette méthode n'est plus prise en charge.
Raison de l'arrêt
Google a modifié la structure de son API Directions, rendant nécessaire la migration vers JSON ou XML pour récupération de données. KML n'est plus disponible à cet effet.
Solutions
Il existe deux solutions pour résoudre ce problème :
Migrer vers JSON
Alternatives
Extraits de code pour l'analyse JSON
Voici des extraits de code pour analyser les données de directions JSON à l'aide de Java classes :
Parser.java
public interface Parser { public Route parse(); }
XMLParser.java
public abstract class XMLParser implements Parser { protected URL feedUrl; protected XMLParser(String feedUrl) throws MalformedURLException { this.feedUrl = new URL(feedUrl); } protected InputStream getInputStream() throws IOException { return feedUrl.openConnection().getInputStream(); } }
Seg ment.java
public class Segment { private GeoPoint start; private String instruction; private int length; private double distance; public Segment() {} public void setInstruction(String instruction) { this.instruction = instruction; } public String getInstruction() { return instruction; } public void setPoint(GeoPoint point) { start = point; } public GeoPoint startPoint() { return start; } }
Route.java
public class Route { private String name; private List<GeoPoint> points = new ArrayList<>(); private List<Segment> segments = new ArrayList<>(); private String copyright; private String warning; private String country; private int length; private String polyline; public void addPoint(GeoPoint p) { points.add(p); } public List<GeoPoint> getPoints() { return points; } public void addSegment(Segment s) { segments.add(s); } public List<Segment> getSegments() { return segments; } }
GoogleParser.java
public class GoogleParser extends XMLParser { private int distance; public GoogleParser(String feedUrl) throws MalformedURLException { super(feedUrl); } public Route parse() { // Convert stream to string String result = convertStreamToString(getInputStream()); // Create route object Route route = new Route(); Segment segment = new Segment(); // Parse JSON object try { JSONObject json = new JSONObject(result); JSONObject jsonRoute = json.getJSONArray("routes").getJSONObject(0); JSONObject leg = jsonRoute.getJSONArray("legs").getJSONObject(0); JSONArray steps = leg.getJSONArray("steps"); int numSteps = steps.length(); route.setName(leg.getString("start_address") + " to " + leg.getString("end_address")); route.setCopyright(jsonRoute.getString("copyrights")); route.setLength(leg.getJSONObject("distance").getInt("value")); if (!jsonRoute.getJSONArray("warnings").isNull(0)) { route.setWarning(jsonRoute.getJSONArray("warnings").getString(0)); } // Parse steps for (int i = 0; i < numSteps; i++) { JSONObject step = steps.getJSONObject(i); JSONObject start = step.getJSONObject("start_location"); GeoPoint position = new GeoPoint((int) (start.getDouble("lat") * 1E6), (int) (start.getDouble("lng") * 1E6)); segment.setPoint(position); int stepLength = step.getJSONObject("distance").getInt("value"); distance += stepLength; segment.setLength(stepLength); segment.setDistance(distance / 1000); segment.setInstruction(step.getString("html_instructions").replaceAll("<(.*?)>", "")); route.addPoints(decodePolyLine(step.getJSONObject("polyline").getString("points"))); route.addSegment(segment.copy()); } } catch (JSONException e) { Log.e(e.getMessage(), "Google JSON Parser - " + feedUrl); } return route; } }
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!