J2ME / অ্যান্ড্রয়েড / ব্ল্যাকবেরি - ড্রাইভিং দিকনির্দেশ, দুটি অবস্থানের মধ্যে রুট


90

অ্যান্ড্রয়েড ১.০ এ ড্রাইভিং দিকনির্দেশের জন্য একটি com.google.googlenav নেমস্পেস ছিল:
রুট - উন্নত গুগল ড্রাইভিং দিকনির্দেশ
তবে নতুন এসডিকে এটি কোনও কারণে
সরিয়ে দেওয়া হয়েছে ... অ্যান্ড্রয়েড: ড্রাইভিং দিকনির্দেশগুলি এপিআই 1.0 এর পরে সরানো হয়েছে - এটি 1.5 / এ কীভাবে করবেন 1.6? ব্ল্যাকবেরিতে এই জাতীয় স্টাফগুলির জন্য এপিআইয়েরও অভাব রয়েছে:
ব্ল্যাকবেরিতে দুটি জায়গার মধ্যে পথটি কীভাবে সন্ধান করতে হবে?

csie-tw এর একটি ওয়ার্কঅ্যারাউন্ড দেয় (KML ফাইল জন্য আপনার জিজ্ঞাসিত প্রশ্নের GMaps এবং এটি পার্স):
অ্যান্ড্রয়েড - ড্রাইভিং দিক নির্দেশ (রুট পথ)
এছাড়াও অ্যান্ড্রিয়া একটি তৈরি DrivingDirections সাহায্যকারী শ্রেণীর Android এর জন্য।
আমি j2me এ এই কার্যকারিতাটির জন্য একটু সহায়ক লিখেছি, তাই আমি আমার নমুনাগুলি অ্যান্ড্রয়েড এবং ব্ল্যাকবেরিতে ভাগ করতে চাই।

আপডেট
যেমন মন্তব্যগুলিতে বলা হয়েছিল, এটি সরকারীভাবে গুগল ম্যাপস এপিআইয়ের পরিষেবার শর্তাদি অনুমোদিত নয় :

গুগল ম্যাপস / গুগল আর্থ এপিআইস পরিষেবার শর্তাদি
সর্বশেষ আপডেট হয়েছে: ২ 27 শে মে, ২০০৯
...
১০. লাইসেন্স সীমাবদ্ধতা। শর্তাদির অধীনে স্পষ্টভাবে অনুমতি দেওয়া বা আপনি গুগল (বা, নির্দিষ্ট বিষয়বস্তুর সরবরাহকারীর কাছ থেকে প্রযোজ্য হিসাবে) পূর্ব লিখিত অনুমোদন না পেলে উপরের গুগলের লাইসেন্সগুলি নীচের সমস্ত বিধিনিষেধের সাথে আপনার সম্মতিতে সাপেক্ষে। বিভাগে 7 বা মানচিত্রের APIs ডকুমেন্টেশনে স্পষ্টভাবে অনুমোদিত ব্যতীত আপনার অবশ্যই করা উচিত নয় (আপনি অন্য কাউকে অনুমতিও দিতে পারবেন না):
...
10.9 কোনও পণ্য, সিস্টেম বা অ্যাপ্লিকেশনগুলির সাথে বা এর সাথে সংযোগে পরিষেবা বা সামগ্রী ব্যবহার করুন:
(ক) রিয়েল টাইম নেভিগেশন বা রুট গাইডেন্স, ব্যবহারকারীর সেন্সর-সক্ষম ডিভাইসের অবস্থানে সিঙ্ক্রোনাইজ হওয়া টার্ন-ওয়ে-টার্ন রুট গাইডেন্স সহ সীমাবদ্ধ নয়;

এবং নির্দিষ্ট অ্যাপ্লিকেশনের জন্য অক্ষম করা যেতে পারে (কোনওভাবে, কমপক্ষে Android এ) ... জিয়োকোড থেকে । নেট কথোপকথনে স্ক্র্যাপিং থেকে :

এটি ব্যবহারের API শর্তাদি দ্বারা অনুমোদিত নয়। জিওকোডগুলি তৈরি করার জন্য আপনার Google মানচিত্রকে স্ক্র্যাপ করা উচিত নয়। আমরা আমাদের সার্ভারগুলির স্বয়ংক্রিয় অনুসন্ধানগুলি করে এমন পরিষেবাগুলি ব্লক করব।

ব্রেট টেলর
পণ্য পরিচালক, গুগল মানচিত্র

কোনও বিকল্প এবং / বা পরামর্শের জন্য কৃতজ্ঞ হবে!
ধন্যবাদ!


4
আমি কল্পনা করেছি যে গুগল মানচিত্রের ড্রাইভিং এর দিকনির্দেশগুলি স্ক্র্যাপিংয়ের ফলে গুগলের ব্যবহারের শর্তগুলি খারাপ হতে পারে।
ক্রিস্টোফার অর

আমি এমআরডে সমস্ত পয়েন্ট পাচ্ছি তবে তারা এমএপি-তে ম্যাপিং করছে না .. এমএপ-এ প্রদর্শিত পথটি কেবল জয়পুর থেকে দিল্লির দিকে!
বিশাল খখখর

4
@ ভিশাল: দুঃখিত, তবে আমি তাতে সাহায্য করতে পারি না! আলাদা প্রশ্ন পোস্ট করুন!
ম্যাকসেম গোঁটার

উত্তর:


115

J2ME মানচিত্রের রুট সরবরাহকারী

map.google.com এর একটি নেভিগেশন পরিষেবা রয়েছে যা আপনাকে কেএমএল ফর্ম্যাটে রুটের তথ্য সরবরাহ করতে পারে ।

কিমিএল ফাইল পেতে আমাদের শুরু এবং গন্তব্য অবস্থানগুলির সাথে ইউআরএল তৈরি করতে হবে:

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

এর পরে আপনাকে এক্সএমএল (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[] {};
}

নেটওয়ার্ক সংযোগ অ্যান্ড্রয়েড এবং ব্ল্যাকবেরিতে বিভিন্ন উপায়ে প্রয়োগ করা হয়েছে, সুতরাং আপনাকে প্রথমে ইউআরএল তৈরি করতে হবে:

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

তারপরে এই url এর সাথে সংযোগ তৈরি করুন এবং ইনপুট স্ট্রিম পান।
তারপরে এই ইনপুট স্ট্রিমটি পাস করুন এবং বিশ্লেষণ করা ডেটা স্ট্রাকচার পান:

 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 এ পূর্ণ কোড দেখুন

অ্যান্ড্রয়েড

অ্যান্ড্রয়েড জি 1 স্ক্রিনশট

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 এ পূর্ণ কোড দেখুন



8
গুগল কেএমএল ফর্ম্যাটে প্রতিক্রিয়া জানানো বন্ধ করায় এই কোডটি আর কাজ করবে না। স্ট্যাক ওভারফ্লো প্রশ্নের উত্তরের সমাধানের লিঙ্কটি এখানে কেন কেএমএল ডেটা ব্যবহার করে অ্যান্ড্রয়েডের জন্য গুগল নির্দেশাবলী পুনরুদ্ধার করা কেন কাজ করছে না?
kendrelaxman

4
এখানে সম্পূর্ণ ডকুমেন্টেশন রয়েছে: developers.google.com/maps/docamentation/direferences
আলেক্সি

উপরের সমাধানটি আর এপিআই 2 নিয়ে কাজ করছে না I আমি গুগল ম্যাপ অ্যান্ড্রয়েড এপিআই ভি 2 ব্যবহার করে দুটি পয়েন্টের মধ্যে একটি পথ আঁকতে সক্ষম হয়েছি। আমি তার লিঙ্কে এর সমাধান পোস্ট। উত্তর: গুগল ম্যাপস অ্যান্ড্রয়েড এপিআই v2 ব্যবহার করে দুটি পয়েন্টের মধ্যে পথ আঁকুন
জিশান মির্জা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.