রুটিং সারাংশের সাথে রুট বরাবর অনুসন্ধান একত্রিত করুন

আপনি রুটিং সারাংশ গণনার সাথে একটি রুট বরাবর অনুসন্ধানকে একত্রিত করতে পারেন। এক্ষেত্রে, টেক্সট সার্চ (নতুন) প্রতিক্রিয়ার প্রতিটি স্থানে যাওয়ার ভ্রমণের সময়কাল ও দূরত্ব এবং তারপর প্রতিটি স্থান থেকে রুটের চূড়ান্ত গন্তব্য পর্যন্ত ভ্রমণের সময়কাল ও দূরত্ব ফেরত দেয়।

একটি রুট বরাবর অনুসন্ধানের পাশাপাশি রাউটিং সারাংশ গণনা করতে টেক্সট সার্চ (নতুন) ব্যবহার করতে:

  1. Routes API ব্যবহার করে এমন একটি রাউট গণনা করুন যা রেসপন্সে একটি রাউট পলিলাইন ফেরত দেয়

  2. সার্চের ফলাফলকে নির্দিষ্ট রুটের দিকে পক্ষপাতদুষ্ট করতে, টেক্সট সার্চ (নতুন)-এ রুট পলিলাইনটি পাস করার জন্য searchAlongRouteParameters.setPolyline() ব্যবহার করুন। এর ফলে প্রাপ্ত রেসপন্সে সেইসব স্থানের তথ্য থাকবে, যেগুলো সার্চের শর্ত পূরণ করে এবং নির্দিষ্ট রুটের কাছাকাছি অবস্থিত।

  3. রিকোয়েস্ট অবজেক্ট তৈরি করার সময় .setRoutingSummariesIncluded(true) যোগ করুন।

ডিফল্টরূপে, টেক্সট সার্চ (নতুন) সম্পূর্ণ রুট জুড়ে অনুসন্ধানটি সম্পাদন করে:

// Define the route polyline object using the route string.
EncodedPolyline encodedPolyline = EncodedPolyline.newInstance("wblcFptchVIFOd@G@EVw@Ms@dHKR}ApNA`AF~@Hf@TjAb@bBb@~@n@p@^Rd@~@Vz@HVz@nDLt@?d@Kr@c@~@mD`G?`@aEfGkCnDuChDm`@bb@[`@{GhHeEdEciBnnBkC`DkC~DaClEuKjT_Z|l@Qb@iR~_@}EzJ_AdB_Und@kAfCaOjZkg@vcAqBzD_]rr@iBlEaBxEgArD}AlG}AhHsA`IeAnH{@dIq@dJgL~iBq@rHu@vGgAtHwArHaBhHkBzG_DpJ}Nbc@iBhGkA|EgC|LcIjb@oAhG_AvDgAdDkApC_BzCiBpCsFvGii@vn@scAxlAmLjNgSzUeRjT{TzWqExEmG|FuNlMmMhLaRvPqOlNmbAl}@mFlF{PlOmJfIoElE}LtMiSbU_H`I}}@jcAwl@vp@oAbBqA~BeAhCm@tBg@fCWrBQ~BI|DaB~rBO~D[bEa@`Dm@pDaAdE{@vC_BbEkB~Def@|z@sEzHKJeS~]}K`S{\\~l@cXpe@sBpDm@bAuCxDkBrBiC~BwCtByBnAcBx@}Bt@{Bn@gh@|LaOpDeFhAoDj@aE^kVrA_E^iEr@yD~@uBr@gMjF_EnAcCh@eFr@_DRsAD}@Jsu@xCWDqIV}BCeCOyDm@cBa@_DmA}JeE_CwAsBcBiBoBuAqBmOoX{CuEkB_CoDqDkVoUoD{CeE_DkEkC_FeCqB}@sDuAoDgAeCe@cCW}CK}BDaDTeOlBcuBrYaNlBq@Dyd@rGyFt@yBb@eBf@oCnAoBlAkIpGkAp@wBbAaCt@oFdAwKjBoGxA{FbByIjC_HfB_@KmNdDuC|@uFzBcH|C{@\\[?sBv@}@VaBVoA@y@EmAQcA[w@]aBkAeAkA}BuDUKs@uAqBsCwBcCgAiAiN_MyKsJsG{GkBaBiBuA{BwAwDkBcOaHiC_AiCg@}BQcCAcBHqBVkB`@qEjAu@LgCVgAHwG@sG?mABsH^eNr@mBXy@NqBt@uAt@aBlAkAlA}BtCyApBiAdB_BxB{A`B}@j@oAf@s@PeCVcIf@gAAkAQy@YiAo@_A{@_DgEgJqM_DeEaM}PoBiCzAsBw@kAdAGVk@f@q@z@C
");

// Specify the list of fields to return.
final List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.NAME);

// Define the search along route parameters object and pass the polyline object.
SearchAlongRouteParameters searchAlongRouteParameters = SearchAlongRouteParameters.builder()
    .setPolyline(encodedPolyline)
    .build();

// Use the builder to create a SearchByTextRequest object and pass the search along route parameters.
final SearchByTextRequest searchByTextRequest = SearchByTextRequest.builder("Spicy Vegetarian Food", placeFields)
    .setMaxResultCount(10)
    .setSearchAlongRouteParameters(searchAlongRouteParameters)
    .setRoutingSummariesIncluded(true)
    .build();

// Call PlacesClient.searchByText() to perform the search.
// Define a response handler to process the returned List of Place objects.
placesClient.searchByText(searchByTextRequest)   
    .addOnSuccessListener(response -> {
      List<Place> places = response.getPlaces();
      List<RoutingSummary> routingSummaries = response.getRoutingSummaries();
      List<Leg> legs = routingSummaries.get(0).getLegs();
      Duration duration = legs.get(0).getDuration();
    });

রেসপন্সটিতে এমন অবজেক্ট থাকে, যেগুলোতে অনুরোধ করা স্থানগুলোর ফিল্ডের তালিকা এবং প্রতিটি স্থানে ভ্রমণের সময়কাল ও দূরত্ব সম্বলিত রাউটিং সামারি অন্তর্ভুক্ত থাকে। রাউটিং সামারিগুলোর তালিকা ফেরত পেতে আপনি SearchByTextResponse.getRoutingSummaries() কল করতে পারেন।

legs অ্যারের প্রতিটি এন্ট্রির জন্য, Text Search (New) দুই-লেগের ভ্রমণের সময় ফেরত দেয়:

  • প্রথম ধাপে যাত্রার সময়কাল এবং উৎস থেকে গন্তব্যস্থল পর্যন্ত দূরত্ব উল্লেখ থাকে।

  • দ্বিতীয় অংশে স্থান থেকে পথের গন্তব্যস্থল পর্যন্ত ভ্রমণের সময়কাল ও দূরত্ব উল্লেখ থাকে।

রাউটিংয়ের উৎস, ভ্রমণ পদ্ধতি এবং রুট মডিফায়ার নির্দিষ্ট করুন।

আপনি রাউটিং অরিজিন, ট্র্যাভেল মোড, রুট মডিফায়ার এবং রাউটিং প্রেফারেন্স উল্লেখ করে সার্চ ও রাউটিং সামারি ক্যালকুলেশন পরিবর্তন করতে পারেন। ট্র্যাভেল মোড এবং রুট মডিফায়ারগুলো, 'স্পেসিফাই ট্র্যাভেল অপশনস' টপিকে দেখানো অনুযায়ী, কোনো রুট উল্লেখ না করে রাউটিং সামারি গণনার মতোই কাজ করে।

ডিফল্টরূপে, প্রতিটি ফলাফলের প্রথম লেগে পলিলাইন দ্বারা সংজ্ঞায়িত মূলবিন্দু থেকে প্রতিটি স্থানের দূরত্ব থাকে। তবে, আপনি অনুরোধে স্পষ্টভাবে একটি রাউটিং মূলবিন্দু উল্লেখ করে এই ডিফল্টটি পরিবর্তন করতে পারেন। যদি এটি উল্লেখ করা হয়, তাহলে সমস্ত প্রতিক্রিয়ার প্রথম লেগে নির্দিষ্ট রাউটিং মূলবিন্দু থেকে দূরত্ব এবং সময়কাল উল্লেখ করা হয়, যা পলিলাইনের মূলবিন্দুকে বাতিল করে দেয়।

পরবর্তী উদাহরণে, আপনি রাউটিংয়ের উৎস হিসেবে ক্যালিফোর্নিয়ার সান মাতেও-এর স্থানাঙ্ক নির্দিষ্ট করবেন, টোল এড়ানোর নির্দেশ দেবেন এবং ফলাফলের সংখ্যা ৫-এ সেট করবেন:

// Define the route polyline object using the route string.
EncodedPolyline encodedPolyline = EncodedPolyline.newInstance("wblcFptchVIFOd@G@EVw@Ms@dHKR}ApNA`AF~@Hf@TjAb@bBb@~@n@p@^Rd@~@Vz@HVz@nDLt@?d@Kr@c@~@mD`G?`@aEfGkCnDuChDm`@bb@[`@{GhHeEdEciBnnBkC`DkC~DaClEuKjT_Z|l@Qb@iR~_@}EzJ_AdB_Und@kAfCaOjZkg@vcAqBzD_]rr@iBlEaBxEgArD}AlG}AhHsA`IeAnH{@dIq@dJgL~iBq@rHu@vGgAtHwArHaBhHkBzG_DpJ}Nbc@iBhGkA|EgC|LcIjb@oAhG_AvDgAdDkApC_BzCiBpCsFvGii@vn@scAxlAmLjNgSzUeRjT{TzWqExEmG|FuNlMmMhLaRvPqOlNmbAl}@mFlF{PlOmJfIoElE}LtMiSbU_H`I}}@jcAwl@vp@oAbBqA~BeAhCm@tBg@fCWrBQ~BI|DaB~rBO~D[bEa@`Dm@pDaAdE{@vC_BbEkB~Def@|z@sEzHKJeS~]}K`S{\\~l@cXpe@sBpDm@bAuCxDkBrBiC~BwCtByBnAcBx@}Bt@{Bn@gh@|LaOpDeFhAoDj@aE^kVrA_E^iEr@yD~@uBr@gMjF_EnAcCh@eFr@_DRsAD}@Jsu@xCWDqIV}BCeCOyDm@cBa@_DmA}JeE_CwAsBcBiBoBuAqBmOoX{CuEkB_CoDqDkVoUoD{CeE_DkEkC_FeCqB}@sDuAoDgAeCe@cCW}CK}BDaDTeOlBcuBrYaNlBq@Dyd@rGyFt@yBb@eBf@oCnAoBlAkIpGkAp@wBbAaCt@oFdAwKjBoGxA{FbByIjC_HfB_@KmNdDuC|@uFzBcH|C{@\\[?sBv@}@VaBVoA@y@EmAQcA[w@]aBkAeAkA}BuDUKs@uAqBsCwBcCgAiAiN_MyKsJsG{GkBaBiBuA{BwAwDkBcOaHiC_AiCg@}BQcCAcBHqBVkB`@qEjAu@LgCVgAHwG@sG?mABsH^eNr@mBXy@NqBt@uAt@aBlAkAlA}BtCyApBiAdB_BxB{A`B}@j@oAf@s@PeCVcIf@gAAkAQy@YiAo@_A{@_DgEgJqM_DeEaM}PoBiCzAsBw@kAdAGVk@f@q@z@C
");

// Specify the list of fields to return.
final List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.NAME);

// Define the routing modifiers object.
RouteModifiers routeModifiers = RouteModifiers.builder()
    .setAvoidTolls(true)
    .build();

// Define the routing parameters object and pass the routing origin.
// Set the travel mode to DRIVE.
// Pass the routeModifiers object.
RoutingParameters routingParameters = RoutingParameters.builder()
    .setOrigin(toLatLng("37.56617, -122.30870"))
    .setTravelMode(DRIVE)
    .setRouteModifiers(routeModifiers)
    .build();

// Define the search along route parameters object and pass the polyline object.
SearchAlongRouteParameters searchAlongRouteParameters = SearchAlongRouteParameters.builder()
    .setPolyline(encodedPolyline)
    .build();

// Use the builder to create a SearchByTextRequest object and pass the search along route parameters.
final SearchByTextRequest searchByTextRequest = SearchByTextRequest.builder("Spicy Vegetarian Food", placeFields)
    .setMaxResultCount(5)
    .setRoutingParameters(routingParameters)
    .setSearchAlongRouteParameters(searchAlongRouteParameters)
    .setRoutingSummariesIncluded(true)
    .build();

// Call PlacesClient.searchByText() to perform the search.
// Define a response handler to process the returned List of Place objects.
placesClient.searchByText(searchByTextRequest)   
    .addOnSuccessListener(response -> {
      List<Place> places = response.getPlaces();
      List<RoutingSummary> routingSummaries = result.getRoutingSummaries();
      List<Leg> legs = routingSummaries.get(0).getLegs();
      Duration duration = legs.get(0).getDuration();
    });

নিচের ছবিতে একটি মানচিত্র দেখানো হয়েছে, যাতে রুটের পলিলাইন, নতুন উৎস (হালকা-নীল পিন) এবং অনুসন্ধানের ফলাফলে থাকা স্থানগুলো (সবুজ পিন) রয়েছে। লক্ষ্য করুন, সমস্ত ফলাফলই রুট বরাবর কিন্তু সান মাতেও-এর পরে অবস্থিত:

আপডেট উৎস থেকে প্রাপ্ত অনুসন্ধানের ফলাফল।