Android : API 1.0 이후 운전 방향이 제거되었습니다 - 1.5/1.6에서 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/1612533

문제

그것은 것 같습니다 DrivingDirections Android API 1.0 이후로 제거되었습니다

Android 1.6의 두 지점 (현재 위치 일 수도 있지만 현재 위치 일 수도 있지만 다른 위치 일 수도 있음)이있는지도를 표시하는 방법은 무엇입니까?

도움이 되었습니까?

해결책

나는 그 대답이 Telenav 또는 누군가의 수백만 달러 규모의 라이센스에 가입하는 것이라고 생각합니다.

Google은 Telenav 또는 기타 회사 에서이 데이터를 라이센스하기 때문에 API가 당겨진 이유는 Google 자체가 운전 방향 (예 : 실시간 전환 할 수 없음)과 관련하여 할 수있는 일에 제한이 있기 때문입니다. Google은 차례로 개발자가 제한된 일을 할 수 없으며이 경우 열린 API를 적절하게 보호 할 수 없습니다.

나는 Open Street Map에 Dried Directions, fwiw가 있다는 언급을 보았다고 생각했다.

다른 팁

라인과 연결된 포인트가 필요한 경우 전체 KML이 필요하지 않습니다. 훨씬 빠른 방법은 output = dragdir로 Google지도 API에서 반환 된 JSON을 사용하는 것입니다.

private String getUrl(String start, String end) {
    //If params GeoPoint convert to lat,long string here
    StringBuffer urlString = new StringBuffer();
    urlString.append("http://maps.google.com/maps?f=d&hl=en");
    urlString.append("&saddr=");// from
    urlString.append(start);
    urlString.append("&daddr=");// to
    urlString.append(end);
    urlString.append("&ie=UTF8&0&om=0&output=dragdir"); //DRAGDIR RETURNS JSON
    Log.i("URLString", urlString.toString());
    return urlString.toString();
}

이 urlstring은 JSON 파일을 얻는 데 사용될 수 있으며 String 's Split ()를 사용하여 정보를 쉽게 추출 할 수 있습니다.

private String getConnection(String url) {
    URL inUrl = new URL(url);
    URLConnection yc = inUrl.openConnection();
    BufferedReader in = new BufferedReader( new InputStreamReader(yc.getInputStream()));
    String inputLine;
    String encoded = "";
    while ((inputLine = in.readLine()) != null)
        encoded = encoded.concat(inputLine);
    in.close();
    String polyline = encoded.split("points:")[1].split(",")[0];
    polyline = polyline.replace("\"", "");
    polyline = polyline.replace("\\\\", "\\");
    return polyline;
}

반환 된 문자열은 아래 방법을 사용하여 지오 포인트 목록으로 디코딩 할 수있는 폴리 라인입니다.

private static ArrayList<GeoPoint> decodePolyline(String encoded) {
    ArrayList<GeoPoint> geopoints = new ArrayList<GeoPoint>();
    int index = 0, len = encoded.length();
    int lat = 0, lng = 0;
    while (index < len) {
        int b, shift = 0, result = 0;
        do {
            b = encoded.charAt(index++) - 63;
            result |= (b & 0x1f) << shift;
            shift += 5;
        } while (b >= 0x20);
        int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
        lat += dlat;
        shift = 0;
        result = 0;
        do {
            b = encoded.charAt(index++) - 63;
            result |= (b & 0x1f) << shift;
            shift += 5;
        } while (b >= 0x20);
        int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
        lng += dlng;
        GeoPoint p = new GeoPoint((int) (((double) lat / 1E5) * 1E6), (int) (((double) lng / 1E5) * 1E6));
        geopoints.add(p);
    }
 return geopoints;
}

마지막 단계는 이러한 점을 MapView에 그려 놓는 것입니다. 왜냐하면 우리는 지오 포인트의 배열 목록을 처리 할 오버레이 항목이 필요하기 때문입니다.

public class PathOverlay extends Overlay {

    private ArrayList<GeoPoint> pointList;

    public PathOverlay(ArrayList<GeoPoint> pointList) {
            this.pointList = pointList;     
    }

    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow) {
        Point current = new Point();
        Path path = new Path();
        Projection projection = mapView.getProjection();
        Iterator<GeoPoint> iterator = pointList.iterator();
        if (iterator.hasNext()) {
            projection.toPixels(iterator.next(), current);
            path.moveTo((float) current.x, (float) current.y);
        } else return;
        while(iterator.hasNext()) {
            projection.toPixels(iterator.next(), current);
            path.lineTo((float) current.x, (float) current.y);
        }

        Paint pathPaint = new Paint();
        pathPaint.setAntiAlias(true);
        pathPaint.setStrokeWidth(3.0f);
        pathPaint.setColor(Color.GREEN);
        pathPaint.setStyle(Style.STROKE);
        canvas.drawPath(path, pathPaint);
    }
}

MapView에 오버레이를 가져 오는 방법이나 라우터 클래스를 설정하는 방법과 같은 중간 단계에 대해 확실하지 않은 경우 알려 주시면 전체 코드를 보낼 수 있습니다.

어쩌면 너무 늦었지만 여전히 다른 사람들에게 도움이됩니다. Android 용 Mapview에서 드라이빙 방향을 가져오고 표시하기 위해 몇 가지 간단한 수업을 작성했습니다.

http://home.ameliemedia.com/android-app-aroundme/#tips

도움이되기를 바랍니다!

안드레아.

Google의 현재 솔루션은 사용하는 것입니다 Google은 API 웹 서비스를지도합니다. 제한된 사용을위한 무료; (성공적인) 상업용 사용 비용을 지불해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top