سؤال

على Android 1.0، كان هناك اسم اسم com.google.googlenav لاتجاهات القيادة:
الطريق - تحسين اتجاهات قيادة جوجل
ولكن في الأحدث SDK تمت إزالته بواسطة بعض الأسباب ...
Android: تقويم القيادة تمت إزالتها منذ API 1.0 - كيفية القيام بذلك في 1.5 / 1.6؟على BlackBerry، هناك أيضا نقص في واجهات برمجة التطبيقات لهذه الأشياء:
كيفية العثور على الطريق بين مكانين في بلاك بيري؟

CSIE-TN يعطي الحل البديل (استعلام Gmaps لملف KML وتحليله):
أندرويد - اتجاه القيادة (مسار الطريق)
ايضا أندريا صنع تقويم محبييدات المساعدات لأجهزة الأندرويد.
كتبت مساعد قليلا لهذه الوظيفة، في J2ME، لذلك أود أن أشارك عيناتي على أندرويد وبلاك بيري.

تحديث
كما هو مذكور في التعليقات، فهو غير مسموح به رسميا خرائط Google APIS شروط الخدمة :

خرائط Google / Google Earth APIS شروط الخدمة
آخر تحديث: 27 مايو 2009
...
10. قيود الترخيص. باستثناء المسموح به صراحة بموجب الشروط، أو ما لم تكن قد تلقيت ترخيصا كتابيا مسبقا من Google (أو، حسب الاقتضاء، من مزود محتوى معين)، تخضع تراخيص Google أعلاه للالتزام بكل القيود أدناه. باستثناء المسموح به صراحة في قسم القسم 7 أو توثيق خرائط واجهات برمجة التطبيقات، يجب ألا تسمح (ولا يمكنك السماح لأي شخص آخر):
...
10.9 استخدم الخدمة أو المحتوى مع أي منتجات أو أنظمة أو تطبيقات أو اتصال مع:
(أ) التوجيه في الوقت الحقيقي أو توجيه توجيه الطريق، بما في ذلك ولكن لا يقتصر على توجيه توجيه الطريق بدوره يتم مزامنة إلى موضع الجهاز الذي يدعم جهاز استشعار المستخدم؛

ويمكن تعطيل بعض التطبيقات (بطريقة أو بأخرى على الأقل على الروبوت) ... من geocode تجرها في محادثة .NET:

هذا غير مسموح به من قبل شروط الاستخدام API. يجب أن لا تفكر خرائط جوجل لتوليد الجغرافيين. سنقوم بحظر الخدمات التي تقوم باستفسارات تلقائية لخوادمنا.

بريت تايلور
مدير المنتج، خرائط جوجل

سيكون ممتنا لأي بدائل و / أو اقتراحات!
شكرًا!

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

المحلول

J2ME مزود خريطة الطريق

يحتوي Maps.google.com على خدمة الملاحة التي يمكن أن توفر لك معلومات الطريق في كود صيغة.

للحصول على ملف kml نحتاج إلى تشكيل عنوان URL مع مواقع البدء والوجهة:

public static String getUrl(double fromLat, double fromLon,
                            double toLat, double toLon) {// connect to map web service
    StringBuffer urlString = new StringBuffer();
    urlString.append("http://maps.google.com/maps?f=d&hl=en");
    urlString.append("&saddr=");// from
    urlString.append(Double.toString(fromLat));
    urlString.append(",");
    urlString.append(Double.toString(fromLon));
    urlString.append("&daddr=");// to
    urlString.append(Double.toString(toLat));
    urlString.append(",");
    urlString.append(Double.toString(toLon));
    urlString.append("&ie=UTF8&0&om=0&output=kml");
    return urlString.toString();
}

بعد ذلك، ستحتاج إلى تحليل XML (تم تطبيقه باستخدام Saxparser) وملء هياكل البيانات:

public class Point {
    String mName;
    String mDescription;
    String mIconUrl;
    double mLatitude;
    double mLongitude;
}

public class Road {
    public String mName;
    public String mDescription;
    public int mColor;
    public int mWidth;
    public double[][] mRoute = new double[][] {};
    public Point[] mPoints = new Point[] {};
}

يتم تطبيق اتصال الشبكة بطرق مختلفة على Android و BlackBerry، لذلك سيكون عليك أولا النموذج URL:

 public static String getUrl(double fromLat, double fromLon,
     double toLat, double toLon)

ثم قم بإنشاء اتصال بهذا URL واحصل على Inputstream.
ثم قم بتمرير هذه InputStream واحصل على هيكل البيانات المحور:

 public static Road getRoute(InputStream is) 

شفرة المصدر الكامل RoadProvider.java.

بلاك بيري

class MapPathScreen extends MainScreen {
    MapControl map;
    Road mRoad = new Road();
    public MapPathScreen() {
        double fromLat = 49.85, fromLon = 24.016667;
        double toLat = 50.45, toLon = 30.523333;
        String url = RoadProvider.getUrl(fromLat, fromLon, toLat, toLon);
        InputStream is = getConnection(url);
        mRoad = RoadProvider.getRoute(is);
        map = new MapControl();
        add(new LabelField(mRoad.mName));
        add(new LabelField(mRoad.mDescription));
        add(map);
    }
    protected void onUiEngineAttached(boolean attached) {
        super.onUiEngineAttached(attached);
        if (attached) {
            map.drawPath(mRoad);
        }
    }
    private InputStream getConnection(String url) {
        HttpConnection urlConnection = null;
        InputStream is = null;
        try {
            urlConnection = (HttpConnection) Connector.open(url);
            urlConnection.setRequestMethod("GET");
            is = urlConnection.openInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return is;
    }
}

انظر الكود الكامل على j2memaprouteblackberryex. على Google Code.

ذكري المظهر

Android G1 screenshot

public class MapRouteActivity extends MapActivity {
    LinearLayout linearLayout;
    MapView mapView;
    private Road mRoad;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mapView = (MapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);
        new Thread() {
            @Override
            public void run() {
                double fromLat = 49.85, fromLon = 24.016667;
                double toLat = 50.45, toLon = 30.523333;
                String url = RoadProvider
                        .getUrl(fromLat, fromLon, toLat, toLon);
                InputStream is = getConnection(url);
                mRoad = RoadProvider.getRoute(is);
                mHandler.sendEmptyMessage(0);
            }
        }.start();
    }

    Handler mHandler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            TextView textView = (TextView) findViewById(R.id.description);
            textView.setText(mRoad.mName + " " + mRoad.mDescription);
            MapOverlay mapOverlay = new MapOverlay(mRoad, mapView);
            List<Overlay> listOfOverlays = mapView.getOverlays();
            listOfOverlays.clear();
            listOfOverlays.add(mapOverlay);
            mapView.invalidate();
        };
    };

    private InputStream getConnection(String url) {
        InputStream is = null;
        try {
            URLConnection conn = new URL(url).openConnection();
            is = conn.getInputStream();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return is;
    }
    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }
}

انظر الكود الكامل على j2memaprouteandroidex. على Google Code.

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