الجمع بين ملخّصات التوجيه والبحث على طول المسار

يمكنك دمج عمليات حساب ملخّص التوجيه مع البحث على طول مسار. في هذه الحالة، تعرض ميزة البحث النصي (جديد) مدة السفر والمسافة إلى كل مكان في الرد، ثم من كل مكان إلى الوجهة النهائية للمسار.

لاستخدام ميزة "البحث النصي (جديد)" من أجل احتساب ملخّص التوجيه إلى جانب البحث على طول طريق، اتّبِع الخطوات التالية:

  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، تعرض خدمة "البحث النصي" (الجديدة) مدة رحلة بمحطتين:

  • يتضمّن الجزء الأول مدة الرحلة والمسافة من نقطة الانطلاق إلى المكان.

  • يحتوي الجزء الثاني على مدة السفر والمسافة من المكان إلى وجهة المسار.

تحديد نقطة انطلاق التوجيه ووضع السفر ومعدّلات المسار

يمكنك تعديل طريقة احتساب ملخّص البحث وتحديد المسار من خلال تحديد نقطة بداية المسار ووسيلة النقل ومعدّلات المسار وإعدادات المسار المفضّلة. تعمل معدِّلات وضع التنقّل والمسار بالطريقة نفسها كما هو الحال عند احتساب ملخّصات التوجيه بدون تحديد مسار، كما هو موضّح في موضوع تحديد خيارات التنقّل.

تلقائيًا، يحتوي الجزء الأول من كل نتيجة على المسافة من نقطة البداية المحدّدة بواسطة الخط المتعدد الأضلاع إلى كل مكان. ومع ذلك، يمكنك إلغاء هذا الإعداد التلقائي من خلال تحديد مصدر توجيه بشكل صريح في الطلب. في حال تحديدها، يحدّد الجزء الأول من جميع الردود المسافات والمدّة من نقطة بداية التوجيه المحدّدة، ما يؤدي إلى تجاهل نقطة البداية من الخط المتعدد الأضلاع.

في المثال التالي، يمكنك تحديد نقطة بداية التوجيه كإحداثيات مدينة سان ماتيو في كاليفورنيا، وتحديد تجنُّب رسوم المرور، وضبط عدد النتائج على 5:

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

تعرض الصورة التالية خريطة تحتوي على خطوط متعددة الأضلاع للمسار والموقع الجغرافي الجديد للمصدر (دبوس أزرق فاتح) والأماكن في نتائج البحث (دبابيس خضراء). لاحظ كيف أنّ جميع النتائج تقع على طول الطريق ولكن بعد سان ماتيو:

نتائج البحث من مصدر التحديث