الجمع بين ملخّصات التوجيه والبحث على طول المسار
يمكنك الجمع بين عمليات احتساب ملخّص التوجيه والبحث على طول مسار. في هذه الحالة، تعرض ميزة البحث النصي (الجديد) مدة السفر والمسافة إلى كل مكان في الردّ، ثم من كل مكان إلى الوجهة النهائية للمسار.
لاستخدام ميزة "البحث النصي (الجديد)" لاحتساب ملخّص التوجيه بالإضافة إلى البحث على طول مسار، اتّبِعوا الخطوات التالية:
-
استخدِموا Routes API لاحتساب مسار يعرض خطًا متعدد الأضلاع للمسار في الردّ.
-
استخدِموا
searchAlongRouteParameters.setPolyline()لتمرير الخط المتعدد الأضلاع للمسار إلى ميزة "البحث النصي (الجديد)" من أجل تحسين نتائج البحث على طول المسار. بعد ذلك، يتضمّن الردّ الأماكن التي تطابق معايير البحث وتقع أيضًا بالقرب من المسار المحدّد. -
عند إنشاء عنصر الطلب، أضيفوا
.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(); });
تعرض الصورة التالية خريطة تحتوي على الخط المتعدد الأضلاع للمسار ونقطة الانطلاق الجديدة (الدبوس الأزرق الفاتح) والأماكن في نتائج البحث (الدبابيس الخضراء). لاحِظوا كيف أنّ جميع النتائج تقع على طول المسار ولكن بعد سان ماتيو: