ترکیب کردن خلاصه‌های مسیریابی با جستجو درطول مسیر

می‌توانید محاسبات خلاصه مسیریابی را با جستجو در طول مسیر ترکیب کنید. در این مورد، جستجوی نوشتاری (جدید) مدت سفر و فاصله تا هر مکان را در پاسخ برمی‌گرداند، و سپس از هر مکان تا مقصد نهایی مسیر را برمی‌گرداند.

برای استفاده از Text Search (New) برای محاسبه خلاصه مسیریابی همراه با جستجو درطول مسیر:

  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، «جستجوی نوشتاری (جدید)» زمان سفر دو مرحله‌ای را برمی‌گرداند:

  • بخش اول شامل مدت سفر و فاصله از مبدأ تا مکان است.

  • بخش دوم شامل مدت سفر و فاصله از مکان تا مقصد مسیر است.

مبدأ مسیریابی، حالت سفر، و اصلاح‌کننده‌های مسیر را مشخص کنید

می‌توانید با مشخص کردن مبدأ مسیریابی، حالت سفر، اصلاح‌کننده‌های مسیر، و اولویت‌های مسیریابی، محاسبه خلاصه جستجو و مسیریابی را تغییر دهید. حالت سفر و اصلاح‌کننده‌های مسیر همانند محاسبه خلاصه مسیر بدون تعیین مسیر کار می‌کنند، همان‌طور که در موضوع مشخص کردن گزینه‌های سفر نشان داده شده است.

به‌طور پیش‌فرض، بخش اول هر نتیجه حاوی فاصله از مبدأ تعریف‌شده توسط چندخطی به هر مکان است. بااین‌حال، می‌توانید با مشخص کردن صریح مبدأ مسیریابی در درخواست، آن پیش‌فرض را لغو کنید. اگر مشخص شده باشد، اولین بخش از همه پاسخ‌ها فاصله‌ها و مدت زمان را از مبدأ مسیریابی مشخص‌شده تعیین می‌کند و مبدأ چندخطی را ملغی می‌کند.

در مثال بعدی، مبدأ مسیریابی را به‌عنوان مختصات San Mateo، کالیفرنیا، مشخص می‌کنید، مشخص می‌کنید که از عوارضی‌ها اجتناب شود، و تعداد نتایج را روی ۵ تنظیم می‌کنید:

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

تصویر زیر نقشه‌ای را نشان می‌دهد که حاوی چندخطی مسیر، مبدأ جدید (سنجاق آبی روشن)، و مکان‌های موجود در نتایج جستجو (سنجاق‌های سبز) است. توجه کنید که همه نتایج درطول مسیر اما بعداز سن‌متئو است:

نتایج جستجو از منبع به‌روزرسانی.