השלמה אוטומטית למקומות
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
מפתחים באזור הכלכלי האירופי (EEA)
הערה: ספריות בצד השרת
בדף הזה נסביר על ספריית צד הלקוח שזמינה ב-Maps JavaScript API. אם רוצים לעבוד עם שירות האינטרנט של Places API בשרת, כדאי לעיין בלקוח Node.js עבור שירותי מפות Google. בדף בקישור הזה יש גם מבוא ללקוח Java, ללקוח Python וללקוח Go לשירותי מפות Google.
מבוא
ההשלמה האוטומטית היא תכונה של ספריית המקומות ב-Maps JavaScript API. אתם יכולים להשתמש בהשלמה אוטומטית כדי להוסיף לאפליקציות שלכם את ההתנהגות של שדה החיפוש במפות Google, שמאפשרת להקליד מונח חיפוש ולראות תוצאות בזמן ההקלדה.
שירות ההשלמה האוטומטית יכול להתאים מילים מלאות ותת-מחרוזות, ולפתור שמות של מקומות, כתובות וקודי פלוס. לכן, אפליקציות יכולות לשלוח שאילתות בזמן שהמשתמש מקליד, כדי לספק תחזיות של מקומות תוך כדי ההקלדה. כפי שמוגדר ב-Places API, 'מקום' יכול להיות עסק, מיקום גיאוגרפי או נקודת עניין בולטת.
תחילת העבודה
לפני שמשתמשים בספריית המקומות ב-Maps JavaScript API, צריך לוודא ש-Places API מופעל במסוף Google Cloud, באותו פרויקט שהגדרתם עבור Maps JavaScript API.
לוחצים על הלחצן Select a project, בוחרים את אותו פרויקט שהגדרתם עבור Maps JavaScript API ולוחצים על Open.
ברשימת ממשקי ה-API במרכז הבקרה, מחפשים את Places API.
אם ה-API מופיע ברשימה, הכול מוכן. עם זאת, הפרויקט הזה נמצא בסטטוס 'גרסה קודמת'.
מידע נוסף על השלב 'דור קודם' ועל מעבר משירותים מדור קודם לשירותים חדשים יותר זמין במאמר מוצרים ותכונות מדור קודם.
יש חריג לגבי הווידג'טים Autocomplete ו-SearchBox, שעדיין לא זמינים כמוצר GA ב-Places API (חדש).
טעינת הספרייה
שירות המקומות הוא ספרייה עצמאית, נפרדת מקוד Maps JavaScript API הראשי. כדי להשתמש בתכונות שנכללות בספרייה הזו, קודם צריך לטעון אותה באמצעות הפרמטר libraries בכתובת ה-URL של bootstrap של Maps API:
ממשק ה-API מציע שני סוגים של ווידג'טים להשלמה אוטומטית, שאפשר להוסיף באמצעות המחלקות Autocomplete ו-SearchBox בהתאמה. בנוסף, אפשר להשתמש במחלקה AutocompleteService כדי לאחזר תוצאות של השלמה אוטומטית באופן פרוגרמטי (ראו את ההפניה לממשק API של JavaScript במפות Google: המחלקה AutocompleteService).
לפניכם סיכום של המחלקות שזמינות:
Autocomplete מוסיף שדה להזנת טקסט לדף האינטרנט, ומנטר את השדה הזה כדי לזהות הזנות של תווים. כשהמשתמש מזין טקסט, ההשלמה האוטומטית מחזירה תחזיות של מקומות בצורה של רשימה נפתחת. כשהמשתמש בוחר מקום מהרשימה, המידע על המקום מוחזר לאובייקט ההשלמה האוטומטית, והאפליקציה יכולה לאחזר אותו. פרטים נוספים מופיעים בהמשך.
איור 1: שדה טקסט של השלמה אוטומטית ורשימת בחירהאיור 2: טופס כתובת מלא
SearchBox מוסיף שדה להזנת טקסט לדף האינטרנט, בדומה ל-Autocomplete. ההבדלים הם:
ההבדל העיקרי הוא בתוצאות שמופיעות ברשימת הבחירה. SearchBox מספק רשימה מורחבת של חיזויים, שיכולה לכלול מקומות (כפי שמוגדרים ב-Places API) וגם הצעות למונחי חיפוש. לדוגמה, אם המשתמש
מזין 'פיצה ב', יכול להיות שרשימת הבחירה תכלול את הביטוי
'פיצה בתל אביב' וגם את השמות של פיצריות שונות.
SearchBox מציע פחות אפשרויות מאשר Autocomplete להגבלת החיפוש. באפשרות הראשונה, אפשר להטות את החיפוש לכיוון LatLngBounds מסוים. באפשרות השנייה, אפשר להגביל את החיפוש למדינה מסוימת ולסוגים מסוימים של מקומות, וגם להגדיר את הגבולות. מידע נוסף זמין בהמשך.
איור 3: תיבת חיפוש עם מונחי חיפוש ותוצאות חזויות של מקומות.פרטים נוספים
אפשר ליצור אובייקט AutocompleteService כדי לאחזר תחזיות באופן פרוגרמטי. מתקשרים אל getPlacePredictions() כדי לאחזר מקומות תואמים, או אל getQueryPredictions() כדי לאחזר מקומות תואמים וגם הצעות למונחי חיפוש.
הערה: AutocompleteService לא מוסיף אמצעי בקרה בממשק המשתמש.
במקום זאת, השיטות שלמעלה מחזירות מערך של אובייקטים של תחזיות. כל
אובייקט של תחזית מכיל את הטקסט של התחזית, וגם מידע על ההפניה ופרטים על מידת ההתאמה של התוצאה לקלט של המשתמש. פרטים נוספים מופיעים בהמשך.
הוספת ווידג'ט של השלמה אוטומטית
בווידג'ט Autocomplete נוצר שדה להזנת טקסט בדף האינטרנט, מוצגות תחזיות של מקומות ברשימת בחירה בממשק המשתמש, ומוחזרים פרטי מקום בתגובה לבקשת getPlace(). כל רשומה ברשימת הבחירה מתאימה למקום אחד (כפי שמוגדר ב-Places API).
הקונסטרוקטור Autocomplete מקבל שני ארגומנטים:
רכיב HTML input מסוג text. זהו שדה להזנת קלט שהשירות להשלמה אוטומטית יעקוב אחריו ויצרף אליו את התוצאות.
מערך של נתונים fields שייכללו בתשובה Place Details עבור PlaceResult שנבחר על ידי המשתמש. אם המאפיין לא מוגדר או אם מועבר הערך ['ALL'], כל השדות הזמינים מוחזרים ומחויבים (לא מומלץ לפריסות בייצור). לרשימת השדות, אפשר לעיין בPlaceResult.
מערך של types שמציין סוג מפורש או אוסף סוגים, כמו שמפורט בסוגים הנתמכים. אם לא מצוין סוג, כל הסוגים מוחזרים.
bounds הוא אובייקט google.maps.LatLngBounds שמציין את האזור שבו יתבצע חיפוש של מקומות. התוצאות מוטות לטובת מקומות שנמצאים בגבולות האלה, אבל לא מוגבלות רק להם.
strictBounds הוא boolean
שמציין אם ה-API צריך להחזיר רק מקומות שנמצאים בתוך האזור שמוגדר על ידי bounds הנתון. ה-API לא מחזיר תוצאות מחוץ לאזור הזה, גם אם הן תואמות לקלט של המשתמש.
אפשר להשתמש ב-componentRestrictions כדי להגביל את התוצאות לקבוצות ספציפיות. אפשר להשתמש ב-componentRestrictions כדי לסנן לפי עד 5 מדינות. המדינות צריכות להיות קוד מדינה בן שני תווים שתואם לתקן ISO 3166-1 Alpha-2. אם רוצים לציין כמה מדינות, צריך להעביר אותן כרשימה של קודי מדינות.
placeIdOnly יכול לשמש כדי להנחות את הווידג'ט
Autocomplete לאחזר רק מזהי מקומות. כשקוראים ל-getPlace() באובייקט Autocomplete, האובייקט
PlaceResult שזמין יכלול רק את המאפיינים place id, types ו-name. אפשר להשתמש במזהה המקום שמוחזר בקריאות לשירותים Places, Geocoding, Directions או Distance Matrix.
הגבלת ההצעות להשלמת החיפוש
כברירת מחדל, השלמה אוטומטית למקומות מציגה את כל סוגי המקומות, עם הטיה לחיזויים שקרובים למיקום של המשתמש, ומאחזרת את כל שדות הנתונים הזמינים למקום שהמשתמש בחר. כדי להציג חיזויים רלוונטיים יותר בהתאם לתרחיש השימוש שלכם, צריך להגדיר את האפשרויות של השלמה אוטומטית למקומות.
הגדרת אפשרויות במהלך הבנייה
הקונסטרוקטור Autocomplete מקבל פרמטר AutocompleteOptions
כדי להגדיר אילוצים בזמן יצירת הווידג'ט. בדוגמה הבאה מוגדרות האפשרויות bounds, componentRestrictions ו-types לבקשת מקומות מסוג establishment, עם עדיפות למקומות שנמצאים באזור הגיאוגרפי שצוין, וההגבלות הן רק למקומות שנמצאים בארצות הברית. הגדרת האפשרות fields מציינת איזה מידע יוחזר לגבי המקום שהמשתמש בחר.
אפשר להתקשר אל setOptions() כדי לשנות את הערך של אפשרות בווידג'ט קיים.
TypeScript
constcenter={lat:50.064192,lng:-130.605469};// Create a bounding box with sides ~10km away from the center pointconstdefaultBounds={north:center.lat+0.1,south:center.lat-0.1,east:center.lng+0.1,west:center.lng-0.1,};constinput=document.getElementById("pac-input")asHTMLInputElement;constoptions={bounds:defaultBounds,componentRestrictions:{country:"us"},fields:["address_components","geometry","icon","name"],strictBounds:false,};constautocomplete=newgoogle.maps.places.Autocomplete(input,options);
constcenter={lat:50.064192,lng:-130.605469};// Create a bounding box with sides ~10km away from the center pointconstdefaultBounds={north:center.lat+0.1,south:center.lat-0.1,east:center.lng+0.1,west:center.lng-0.1,};constinput=document.getElementById("pac-input");constoptions={bounds:defaultBounds,componentRestrictions:{country:"us"},fields:["address_components","geometry","icon","name"],strictBounds:false,};constautocomplete=newgoogle.maps.places.Autocomplete(input,options);
כדי להימנע מחיוב על מק"טים של נתונים ב-Places שאתם לא צריכים, אתם יכולים לציין שדות נתונים. כוללים את המאפיין fields ב-AutocompleteOptions שמועבר לקונסטרוקטור של הווידג'ט, כמו בדוגמה הקודמת, או קוראים ל-setFields() באובייקט Autocomplete קיים.
מגדירים את האפשרות strictBounds כדי להגביל את התוצאות לגבולות הנוכחיים, בין אם הם מבוססים על אזור התצוגה במפה או על גבולות מלבניים.
autocomplete.setOptions({strictBounds:true});
הגבלת התחזיות למדינה ספציפית
אפשר להשתמש באפשרות componentRestrictions או להתקשר אל setComponentRestrictions() כדי להגביל את החיפוש בהשלמה האוטומטית לקבוצה ספציפית של עד חמש מדינות.
כדי להגביל את התחזיות לסוגים מסוימים של מקומות, משתמשים באפשרות types או מתקשרים אל setTypes(). ההגבלה הזו מציינת סוג או אוסף סוגים, כמו שמופיע בסוגי מקומות. אם לא מציינים הגבלה, כל הסוגים מוחזרים.
במקום הערך של האפשרות types או הערך שמועבר אל setTypes(), אפשר לציין:
בטפסים של כתובות, כדאי לקבל את הכתובת בפורמט מובנה. כדי להחזיר את הכתובת המובנית של המקום שנבחר, קוראים לפונקציה Autocomplete.setFields() ומציינים את השדה address_components.
בדוגמה הבאה נעשה שימוש בהשלמה אוטומטית כדי למלא את השדות בטופס כתובת.
TypeScript
functionfillInAddress(){// Get the place details from the autocomplete object.constplace=autocomplete.getPlace();letaddress1="";letpostcode="";// Get each component of the address from the place details,// and then fill-in the corresponding field on the form.// place.address_components are google.maps.GeocoderAddressComponent objects// which are documented at http://goo.gle/3l5i5Mrfor(constcomponentofplace.address_componentsasgoogle.maps.GeocoderAddressComponent[]){// @ts-ignore remove once typings fixedconstcomponentType=component.types[0];switch(componentType){case"street_number":{address1=`${component.long_name}${address1}`;break;}case"route":{address1+=component.short_name;break;}case"postal_code":{postcode=`${component.long_name}${postcode}`;break;}case"postal_code_suffix":{postcode=`${postcode}-${component.long_name}`;break;}case"locality":(document.querySelector("#locality")asHTMLInputElement).value=component.long_name;break;case"administrative_area_level_1":{(document.querySelector("#state")asHTMLInputElement).value=component.short_name;break;}case"country":(document.querySelector("#country")asHTMLInputElement).value=component.long_name;break;}}address1Field.value=address1;postalField.value=postcode;// After filling the form with address components from the Autocomplete// prediction, set cursor focus on the second address line to encourage// entry of subpremise information such as apartment, unit, or floor number.address2Field.focus();}
functionfillInAddress(){// Get the place details from the autocomplete object.constplace=autocomplete.getPlace();letaddress1="";letpostcode="";// Get each component of the address from the place details,// and then fill-in the corresponding field on the form.// place.address_components are google.maps.GeocoderAddressComponent objects// which are documented at http://goo.gle/3l5i5Mrfor(constcomponentofplace.address_components){// @ts-ignore remove once typings fixedconstcomponentType=component.types[0];switch(componentType){case"street_number":{address1=`${component.long_name}${address1}`;break;}case"route":{address1+=component.short_name;break;}case"postal_code":{postcode=`${component.long_name}${postcode}`;break;}case"postal_code_suffix":{postcode=`${postcode}-${component.long_name}`;break;}case"locality":document.querySelector("#locality").value=component.long_name;break;case"administrative_area_level_1":{document.querySelector("#state").value=component.short_name;break;}case"country":document.querySelector("#country").value=component.long_name;break;}}address1Field.value=address1;postalField.value=postcode;// After filling the form with address components from the Autocomplete// prediction, set cursor focus on the second address line to encourage// entry of subpremise information such as apartment, unit, or floor number.address2Field.focus();}window.initAutocomplete=initAutocomplete;
כברירת מחדל, שדה הטקסט שנוצר על ידי שירות ההשלמה האוטומטית מכיל טקסט placeholder סטנדרטי. כדי לשנות את הטקסט, מגדירים את המאפיין placeholder ברכיב input:
<input id="searchTextField" type="text" size="50" placeholder="Anything you want!">
הערה: טקסט הפלייסהולדר שמוגדר כברירת מחדל עובר לוקליזציה באופן אוטומטי. אם מציינים ערך placeholder משלכם, צריך לטפל בלוקליזציה של הערך הזה באפליקציה. מידע על האופן שבו Google Maps JavaScript API בוחר את השפה שבה ישתמש מופיע במאמר בנושא
לוקליזציה.
. אי אפשר להגביל את הבקשות של SearchBox כך שיחזירו רק שדות ספציפיים. כדי להימנע מבקשת נתונים שאתם לא צריכים (ומתשלום עליהם), כדאי להשתמש במקום זאת בווידג'ט של השלמה אוטומטית.
התכונה SearchBox מאפשרת למשתמשים לבצע חיפוש גיאוגרפי מבוסס-טקסט, כמו 'פיצה בניו יורק' או 'חנויות נעליים ליד רחוב רובסון'.
אפשר לצרף את SearchBox לשדה טקסט, וכשמזינים טקסט, השירות יחזיר תחזיות בצורה של רשימה נפתחת לבחירה.
SearchBox מספק רשימה מורחבת של תחזיות, שיכולה לכלול מקומות (כפי שמוגדר ב-Places API) וגם מונחי חיפוש מוצעים. לדוגמה, אם המשתמש מזין 'פיצה ב', רשימת הבחירה עשויה לכלול את הביטוי 'פיצה בתל אביב' וגם את השמות של פיצריות שונות. כשמשתמש בוחר מקום מהרשימה, מידע על המקום הזה מוחזר לאובייקט SearchBox, והאפליקציה יכולה לאחזר אותו.
הקונסטרוקטור SearchBox מקבל שני ארגומנטים:
רכיב HTML input מסוג text. זהו שדה להזנת קלט שהשירות SearchBox יעקוב אחריו ויצרף אליו את התוצאות.
ארגומנט options, שיכול להכיל את המאפיין bounds:
bounds הוא אובייקט google.maps.LatLngBounds
שמציין את האזור שבו יתבצע חיפוש המקומות. התוצאות מוטות לטובת מקומות שנמצאים בתחום הזה, אבל לא מוגבלות רק להם.
בדוגמה הבאה של קוד נעשה שימוש בפרמטר bounds כדי להטות את התוצאות למקומות שנמצאים באזור גיאוגרפי מסוים, שמוגדר באמצעות קואורדינטות של קו רוחב וקו אורך.
כשמשתמש בוחר פריט מההצעות שמוצגות בתיבת החיפוש, השירות מפעיל אירוע places_changed. אפשר לקרוא ל-getPlaces() באובייקט SearchBox כדי לאחזר מערך שמכיל כמה תחזיות, שכל אחת מהן היא אובייקט PlaceResult.
// Listen for the event fired when the user selects a prediction and retrieve// more details for that place.searchBox.addListener("places_changed",()=>{constplaces=searchBox.getPlaces();if(places.length==0){return;}// Clear out the old markers.markers.forEach((marker)=>{marker.setMap(null);});markers=[];// For each place, get the icon, name and location.constbounds=newgoogle.maps.LatLngBounds();places.forEach((place)=>{if(!place.geometry||!place.geometry.location){console.log("Returned place contains no geometry");return;}consticon={url:place.iconasstring,size:newgoogle.maps.Size(71,71),origin:newgoogle.maps.Point(0,0),anchor:newgoogle.maps.Point(17,34),scaledSize:newgoogle.maps.Size(25,25),};// Create a marker for each place.markers.push(newgoogle.maps.Marker({map,icon,title:place.name,position:place.geometry.location,}));if(place.geometry.viewport){// Only geocodes have viewport.bounds.union(place.geometry.viewport);}else{bounds.extend(place.geometry.location);}});map.fitBounds(bounds);});
// Listen for the event fired when the user selects a prediction and retrieve// more details for that place.searchBox.addListener("places_changed",()=>{constplaces=searchBox.getPlaces();if(places.length==0){return;}// Clear out the old markers.markers.forEach((marker)=>{marker.setMap(null);});markers=[];// For each place, get the icon, name and location.constbounds=newgoogle.maps.LatLngBounds();places.forEach((place)=>{if(!place.geometry||!place.geometry.location){console.log("Returned place contains no geometry");return;}consticon={url:place.icon,size:newgoogle.maps.Size(71,71),origin:newgoogle.maps.Point(0,0),anchor:newgoogle.maps.Point(17,34),scaledSize:newgoogle.maps.Size(25,25),};// Create a marker for each place.markers.push(newgoogle.maps.Marker({map,icon,title:place.name,position:place.geometry.location,}),);if(place.geometry.viewport){// Only geocodes have viewport.bounds.union(place.geometry.viewport);}else{bounds.extend(place.geometry.location);}});map.fitBounds(bounds);});
אחזור פרוגרמטי של חיזויים משירות ההשלמה האוטומטית למקומות
כדי לאחזר תחזיות באופן פרוגרמטי, משתמשים במחלקה AutocompleteService. AutocompleteService
לא מוסיף אמצעי בקרה בממשק המשתמש. במקום זאת, היא מחזירה מערך של אובייקטים של חיזוי, שכל אחד מהם מכיל את הטקסט של החיזוי, מידע על ההפניה ופרטים על מידת ההתאמה של התוצאה לקלט של המשתמש.
האפשרות הזו שימושית אם רוצים יותר שליטה בממשק המשתמש מאשר האפשרויות Autocomplete ו-SearchBox שמתוארות למעלה.
השיטה AutocompleteService חושפת את השיטות הבאות:
getPlacePredictions() מחזירה תחזיות לגבי מקומות.
הערה: 'מקום' יכול להיות עסק, מיקום גיאוגרפי או נקודת עניין בולטת, כפי שמוגדר ב-Places API.
getQueryPredictions() מחזירה רשימה מורחבת של תחזיות, שיכולה לכלול מקומות (כפי שמוגדרים ב-Places API) וגם הצעות למונחי חיפוש. לדוגמה, אם המשתמש
מזין 'פיצה ב', יכול להיות שרשימת הבחירה תכלול את הביטוי
'פיצה בתל אביב' וגם את השמות של פיצריות שונות.
distance_meters הוא המרחק במטרים של המקום מAutocompletionRequest.origin שצוין.
matched_substrings מכיל קבוצה של מחרוזות משנה בתיאור שתואמות לאלמנטים בקלט של המשתמש. כדאי להיעזר בזה אם רוצים להדגיש את מחרוזות המשנה האלה באפליקציה. במקרים רבים, השאילתה תופיע כמחרוזת משנה בשדה התיאור.
length הוא אורך המחרוזת המשנית.
offset הוא ההיסט של התו, שנמדד מתחילת מחרוזת התיאור, שבו מופיעה מחרוזת המשנה התואמת.
terms הוא מערך שמכיל רכיבים של השאילתה. כשמדובר במקום, כל רכיב בדרך כלל מייצג חלק מהכתובת.
offset הוא ההיסט של התו, שנמדד מתחילת מחרוזת התיאור, שבו מופיעה מחרוזת המשנה התואמת.
value הוא המונח התואם.
בדוגמה הבאה מבוצעת בקשה לחיזוי שאילתה עבור הביטוי 'פיצה קרוב', והתוצאה מוצגת ברשימה.
TypeScript
// This example retrieves autocomplete predictions programmatically from the// autocomplete service, and displays them as an HTML list.// This example requires the Places library. Include the libraries=places// parameter when you first load the API. For example:// <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places">functioninitService():void{constdisplaySuggestions=function(predictions:google.maps.places.QueryAutocompletePrediction[]|null,status:google.maps.places.PlacesServiceStatus){if(status!=google.maps.places.PlacesServiceStatus.OK||!predictions){alert(status);return;}predictions.forEach((prediction)=>{constli=document.createElement("li");li.appendChild(document.createTextNode(prediction.description));(document.getElementById("results")asHTMLUListElement).appendChild(li);});};constservice=newgoogle.maps.places.AutocompleteService();service.getQueryPredictions({input:"pizza near Syd"},displaySuggestions);}declareglobal{interfaceWindow{initService:()=>void;}}window.initService=initService;
// This example retrieves autocomplete predictions programmatically from the// autocomplete service, and displays them as an HTML list.// This example requires the Places library. Include the libraries=places// parameter when you first load the API. For example:// <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places">functioninitService(){constdisplaySuggestions=function(predictions,status){if(status!=google.maps.places.PlacesServiceStatus.OK||!predictions){alert(status);return;}predictions.forEach((prediction)=>{constli=document.createElement("li");li.appendChild(document.createTextNode(prediction.description));document.getElementById("results").appendChild(li);});};constservice=newgoogle.maps.places.AutocompleteService();service.getQueryPredictions({input:"pizza near Syd"},displaySuggestions);}window.initService=initService;
<html>
<head>
<title>Retrieving Autocomplete Predictions</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
</head>
<body>
<p>Query suggestions for 'pizza near Syd':</p>
<ul id="results"></ul>
<!-- Replace Powered By Google image src with self hosted image. https://developers.google.com/maps/documentation/places/web-service/policies#other_attribution_requirements -->
<img
class="powered-by-google"
src="https://storage.googleapis.com/geo-devrel-public-buckets/powered_by_google_on_white.png"
alt="Powered by Google"
/>
<!--
The `defer` attribute causes the script to execute after the full HTML
document has been parsed. For non-blocking uses, avoiding race conditions,
and consistent behavior across browsers, consider loading using Promises. See
https://developers.google.com/maps/documentation/javascript/load-maps-js-api
for more information.
-->
<script
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg&callback=initService&libraries=places&v=weekly"
defer
></script>
</body>
</html>
AutocompleteService.getPlacePredictions()
אפשר להשתמש בטוקנים של סשנים (אם הטמעתם אותם) כדי לקבץ בקשות להשלמה אוטומטית לצורכי חיוב. טוקנים של סשנים מקבצים את שלבי השאילתה והבחירה של חיפוש השלמה אוטומטית של משתמש לסשן נפרד לצורכי חיוב. הסשן מתחיל כשהמשתמש מתחיל להקליד שאילתה, ומסתיים כשהוא בוחר מקום. כל סשן יכול לכלול כמה שאילתות, ואחריהן בחירה אחת של מקום. אחרי שסשן מסתיים, הטוקן כבר לא תקף. האפליקציה שלכם צריכה ליצור טוקן חדש לכל סשן. מומלץ להשתמש בטוקנים של סשנים לכל הסשנים של ההשלמה האוטומטית. אם הפרמטר sessionToken מושמט, או אם משתמשים מחדש בטוקן של סשן, הסשן מחויב כאילו לא סופק טוקן של סשן (כל בקשה מחויבת בנפרד).
אפשר להשתמש באותו טוקן סשן כדי לשלוח בקשת פרטי מקום אחת לגבי המקום שמתקבל כתוצאה מהתקשרות אל AutocompleteService.getPlacePredictions().
במקרה כזה, בקשת ההשלמה האוטומטית משולבת עם בקשת Place Details, והחיוב על הקריאה הוא כמו על בקשת Place Details רגילה. אין חיוב על בקשת ההשלמה האוטומטית.
חשוב להעביר טוקן סשן ייחודי לכל סשן חדש. שימוש באותו טוקן ליותר מסשן אחד של השלמה אוטומטית יגרום לפסילת הסשנים האלה, וכל בקשה להשלמה אוטומטית בסשנים הפסולים תחויב בנפרד באמצעות מק"ט של השלמה אוטומטית לכל בקשה. מידע נוסף על טוקנים של סשנים
בדוגמה הבאה מוצג תהליך של יצירת אסימון סשן והעברתו ב-AutocompleteService (הפונקציה displaySuggestions() הושמטה כדי שהדוגמה תהיה קצרה יותר):
// Create a new session token.varsessionToken=newgoogle.maps.places.AutocompleteSessionToken();// Pass the token to the autocomplete service.varautocompleteService=newgoogle.maps.places.AutocompleteService();autocompleteService.getPlacePredictions({input:'pizza near Syd',sessionToken:sessionToken},displaySuggestions);
חשוב להעביר טוקן סשן ייחודי לכל סשן חדש. אם משתמשים באותו טוקן ליותר מסשן אחד, כל בקשה תחויב בנפרד.
כברירת מחדל, רכיבי ממשק המשתמש שמוצגים על ידי Autocomplete ו-SearchBox מעוצבים כך שיוצגו במפת Google. אולי תרצו לשנות את הסגנון כדי שיתאים לאתר שלכם. אלה מחלקות ה-CSS שזמינות: כל הסוגים שמפורטים בהמשך רלוונטיים לווידג'טים Autocomplete ו-SearchBox.
CSS classes for Autocomplete and SearchBox widgets
מחלקת CSS
תיאור
pac-container
הרכיב החזותי שמכיל את רשימת החיזויים שמוחזרים על ידי שירות ההשלמה האוטומטית למקומות. הרשימה הזו מופיעה כרשימה נפתחת מתחת לווידג'ט Autocomplete או SearchBox.
pac-icon
הסמל שמוצג מימין לכל פריט ברשימת התחזיות.
pac-item
פריט ברשימת התחזיות שמוצגת בווידג'ט Autocomplete או SearchBox.
pac-item:hover
הפריט כשמציבים את סמן העכבר מעליו.
pac-item-selected
הפריט כשמשתמש בוחר אותו באמצעות המקלדת. הערה: פריטים שנבחרו יהיו חברים במחלקה הזו ובמחלקה pac-item.
pac-item-query
תג span בתוך תג pac-item שהוא החלק העיקרי של התחזית. במקרה של מיקומים גיאוגרפיים, הערך הזה מכיל שם מקום, כמו 'סידני', או שם רחוב ומספר, כמו '10 King Street'. בחיפושים מבוססי-טקסט כמו 'פיצה בתל אביב', הוא מכיל את הטקסט המלא של השאילתה. כברירת מחדל, הצבע של pac-item-query הוא שחור. אם יש טקסט נוסף בתוך pac-item, הוא נמצא מחוץ ל-pac-item-query ומקבל את העיצוב שלו מ-pac-item. כברירת מחדל, הוא צבוע באפור. הטקסט הנוסף
הוא בדרך כלל כתובת.
pac-matched
החלק של התחזית שמוחזר שמתאים לקלט של המשתמש. כברירת מחדל, הטקסט התואם מודגש. שימו לב שהטקסט התואם יכול להיות בכל מקום בתוך pac-item. הוא לא בהכרח חלק מ-pac-item-query, והוא יכול להיות חלקית בתוך pac-item-query וגם חלקית בטקסט שנותר ב-pac-item.
אופטימיזציה של השלמה אוטומטית למקומות (מדור קודם)
בקטע הזה מתוארות שיטות מומלצות שיעזרו לכם להפיק את המרב משירות השלמה אוטומטית למקומות (גרסה קודמת).
הסבר על שדות הנתונים החיוניים של השלמה אוטומטית למקומות (מדור קודם) מההתחלה.
השדות 'הטיה לפי מיקום' ו'הגבלת מיקום' הם אופציונליים, אבל יכולה להיות להם השפעה משמעותית על הביצועים של ההשלמה האוטומטית.
כדאי להשתמש בטיפול בשגיאות כדי לוודא שהאפליקציה תפעל בצורה תקינה גם אם ה-API יחזיר שגיאה.
חשוב לוודא שהאפליקציה מטפלת במצב שבו לא נבחרה אפשרות, ומציעה למשתמשים דרך להמשיך.
שיטות מומלצות לאופטימיזציה של עלויות
אופטימיזציה בסיסית של עלויות
כדי לבצע אופטימיזציה של העלות של השימוש בשירות השלמה אוטומטית למקומות (מדור ישן), צריך להשתמש במסכות שדות בווידג'טים Place Details (מדור ישן) והשלמה אוטומטית למקומות (מדור ישן) כדי להחזיר רק את שדות הנתונים של השלמה אוטומטית למקומות (מדור ישן) שאתם צריכים.
אופטימיזציה מתקדמת של עלויות
כדאי לשקול הטמעה פרוגרמטית של השלמה אוטומטית למקומות (מדור קודם) כדי לגשת אל SKU: השלמה אוטומטית – תמחור לפי בקשה ולבקש תוצאות של Geocoding API לגבי המקום שנבחר במקום Place Details (מדור קודם). תמחור לפי בקשה בשילוב עם Geocoding API הוא חסכוני יותר מתמחור לפי סשן (מבוסס-סשן) אם מתקיימים שני התנאים הבאים:
אם אתם צריכים רק את קו הרוחב/קו האורך או את הכתובת של המקום שהמשתמש בחר, Geocoding API מספק את המידע הזה בפחות משיחה של Place Details (Legacy).
אם המשתמשים בוחרים הצעות להשלמת החיפוש בתוך ממוצע של ארבע בקשות או פחות של השלמה אוטומטית למקומות (גרסה קודמת), התמחור לפי בקשה עשוי להיות חסכוני יותר מהתמחור לפי סשן.
כדי לקבל עזרה בבחירת ההטמעה של השלמה אוטומטית למקומות (גרסה מדור קודם) שמתאימה לצרכים שלכם, בוחרים את הכרטיסייה שמתאימה לתשובה שלכם לשאלה הבאה.
האם האפליקציה שלך דורשת מידע כלשהו מלבד הכתובת וקו הרוחב/קו האורך של החיזוי שנבחר?
בהמשך מפורטות הנחיות לאופטימיזציה של הביצועים של השלמה אוטומטית למקומות (גרסה קודמת):
מוסיפים הגבלות לפי מדינה, הטיה של מיקום והעדפת שפה (להטמעות פרוגרמטיות) להטמעה של השלמה אוטומטית למקומות (מדור קודם). אין צורך בהעדפת שפה בווידג'טים, כי הם בוחרים את העדפות השפה מתוך הדפדפן או המכשיר הנייד של המשתמש.
אם השלמה אוטומטית למקומות (מדור קודם) מופיע עם מפה, אפשר להטות את המיקום לפי אזור התצוגה של המפה.
במקרים שבהם משתמש לא בוחר באחד מהחיזויים של השלמה אוטומטית למקומות (מדור קודם), בדרך כלל כי אף אחד מהחיזויים האלה לא מתאים לכתובת הרצויה, אפשר להשתמש מחדש בקלט של משתמשים כדי לנסות לקבל תוצאות רלוונטיות יותר:
אם אתם מצפים שהמשתמש יזין רק פרטי כתובת, תוכלו להשתמש מחדש בקלט של משתמשים המקורי בקריאה ל-Geocoding API.
אם אתם מצפים שהמשתמש יזין שאילתות לגבי מקום ספציפי לפי שם או כתובת, תשתמשו בבקשה של Place Details (גרסה קודמת). אם אתם מצפים לתוצאות רק באזור מסוים, כדאי להשתמש בהטיה לפי מיקום.
תרחישים נוספים שבהם מומלץ לחזור ל-Geocoding API כוללים:
משתמשים שמזינים כתובות של יחידות משנה, כמו כתובות של יחידות או דירות ספציפיות בתוך בניין. לדוגמה, הכתובת הצ'כית Stroupežnického 3191/17, Praha מניבה חיזוי חלקי ב-השלמה אוטומטית למקומות (מדור קודם).
משתמשים שמזינים כתובות עם קידומות של קטע כביש כמו "23-30 29th St, Queens" בניו יורק או "47-380 Kamehameha Hwy, Kaneohe" באי קוואי בהוואי.
הטיה של מיקום
כדי להטות את התוצאות לאזור מסוים, מעבירים פרמטר location ופרמטר radius. ההוראה הזו גורמת ל-השלמה אוטומטית למקומות (מדור קודם) להעדיף להציג תוצאות באזור המוגדר. יכול להיות שיוצגו תוצאות מחוץ לאזור שהוגדר. אפשר להשתמש בפרמטר includedRegionCodes כדי לסנן את התוצאות ולהציג רק מקומות במדינה שצוינה.
הגבלת מיקום
כדי להגביל את התוצאות לאזור מסוים, מעבירים פרמטר locationRestriction.
אפשר גם להגביל את התוצאות לאזור שמוגדר על ידי location והפרמטר radius, על ידי הוספת הפרמטר strictbounds. הפרמטר הזה מורה ל-השלמה אוטומטית למקומות (מדור קודם) להחזיר רק תוצאות באזור הזה.
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2026-06-15 (שעון UTC)."],[],[]]