الروبوت: DrivingDirections إزالة منذ API 1.0 - كيف نفعل ذلك في 1.5 / 1.6؟

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

سؤال

ويبدو أن تمت إزالة DrivingDirections منذ الروبوت API 1.0

ما هي الطريقة الآن لعرض خريطة برصيد نقطتين (واحد منهم قد يكون الموقع الحالي، ولكن يمكن أيضا أن تكون أي مكان آخر) واتجاه من واحد إلى آخر في الروبوت 1.6؟

هل كانت مفيدة؟

المحلول

وأظن أن الجواب هو الاشتراك للحصول على رخصة عدة ملايين من الدولارات من TeleNav أو شخص ما.

وكان السبب تم سحب API لجوجل نفسها لديها قيود على ما يمكن القيام به مع توجيهات القيادة (على سبيل المثال، لا يمكن القيام به في الوقت الحقيقي بدوره عن طريق بدوره الاشياء)، منذ تراخيص جوجل هذه البيانات من TeleNav أو شركات أخرى. جوجل، في المقابل، لا يمكن السماح للمطورين تفعل تلك الأشياء المحظورة، وAPI المفتوحة لا يمكن أن تكون محمية بشكل كاف لهذه القضية.

وظننت أنني رأيت أن أذكر أن شارع توسيع خريطة ديه اتجاهات القيادة، FWIW.

نصائح أخرى

إذا كنت بحاجة فقط لنقطة اتصال مع خط لا تحتاج ملف KML الكامل. وهناك طريقة أسرع بكثير للقيام بذلك هو استخدام فقط عاد JSON من API خرائط جوجل مع الناتج = dragdir

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، والتي يمكنك بسهولة استخراج المعلومات باستخدام انقسام سلسلة من ()

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;
}

والخيط عاد هو متعدد الخطوط التي يمكن فك الشفرة إلى قائمة Geopoints باستخدام الأسلوب أدناه.

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، لذلك نحن بحاجة إلى البند تراكب من شأنها أن التعامل مع ArrayList من GeoPoints.

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 أو كيفية إعداد فئة الموجه اسمحوا لي أن أعرف، وأستطيع أن نرسل لك رمز كاملة.

وربما في وقت متأخر قليلا جدا، ولكن لا تزال مفيدة للآخرين. كنت قد كتبت عدة فئات بسيطة للحصول على وعرض اتجاهات القيادة في MapView لالروبوت:

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

ونأمل أن يساعد!

وأندريا.

والحل الحالي من جوجل لاستخدام خرائط جوجل خدمات الويب API . مجانا للاستخدام المحدود. ستحتاج لدفع ثمن (ناجح) الاستخدام التجاري.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top