> Java > java지도 시간 > Google 길찾기 KML 데이터 검색이 Android 앱에서 더 이상 작동하지 않는 이유는 무엇입니까?

Google 길찾기 KML 데이터 검색이 Android 앱에서 더 이상 작동하지 않는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-11 19:55:12
원래의
643명이 탐색했습니다.

Why is Google Directions KML data retrieval no longer working for Android apps?

KML 데이터를 사용하여 Android용 Google 길찾기를 검색하는 것이 더 이상 작동하지 않는 이유는 무엇인가요?

소개

이전에는 Android 애플리케이션용 KML 데이터를 사용하여 Google 길찾기를 검색할 수 있었습니다. 그러나 이 방법은 더 이상 지원되지 않습니다.

지원 중단 이유

Google은 Directions API의 구조를 변경하여 방향 정보를 위해 JSON 또는 XML로 마이그레이션해야 합니다. 데이터 검색. KML은 더 이상 이 목적으로 사용할 수 없습니다.

솔루션

이 문제를 해결하기 위한 두 가지 솔루션이 있습니다.

  1. 이전 JSON

    • 아래 코드 조각에 설명된 대로 JSON 데이터를 구문 분석하는 Java 클래스를 만듭니다.
    • 이러한 클래스를 사용하여 JSON 방향을 검색하고 구문 분석합니다. data.
  2. 대안

    • KML 데이터를 제공하는 다른 매핑 서비스 사용을 고려해 보세요.
    • 탐색 Google의 Places API 또는 Directions API 사용

JSON 구문 분석을 위한 코드 조각

다음은 Java를 사용하여 JSON 길찾기 데이터를 구문 분석하기 위한 코드 조각입니다. 클래스:

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();
  }
}
로그인 후 복사

세그 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;
  }
}
로그인 후 복사

위 내용은 Google 길찾기 KML 데이터 검색이 Android 앱에서 더 이상 작동하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿