الإكمال التلقائي للأماكن
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
المطوّرون في المنطقة الاقتصادية الأوروبية
ملاحظة: المكتبات
من جهة الخادم
توضّح هذه الصفحة مكتبة من جهة العميل متاحة مع Maps JavaScript API. إذا كنت تريد استخدام خدمة الويب Places API على الخادم، يمكنك الاطّلاع على عميل Node.js لخدمات "خرائط Google". تقدّم الصفحة المتوفرة على هذا الرابط أيضًا عميل Java وعميل Python وعميل Go لخدمات "خرائط Google".
مقدمة
الإكمال التلقائي هو إحدى ميزات مكتبة الأماكن في Maps JavaScript API. يمكنك استخدام الإكمال التلقائي لمنح تطبيقاتك سلوك البحث المسبق في حقل البحث في "خرائط Google". يمكن لخدمة الإكمال التلقائي مطابقة الكلمات الكاملة والسلاسل الفرعية، وحل أسماء الأماكن والعناوين ورموز Plus Codes. وبالتالي، يمكن للتطبيقات إرسال طلبات البحث أثناء كتابة المستخدم، وذلك لتقديم توقعات فورية بشأن الأماكن. وكما هو محدّد في Places API، يمكن أن يكون "المكان" مؤسسة أو موقعًا جغرافيًا أو نقطة اهتمام بارزة.
الخطوات الأولى
قبل استخدام مكتبة Places في Maps JavaScript API، عليك أولاً التأكّد من تفعيل Places API في Google Cloud Console، وذلك في المشروع نفسه الذي أعددته لـ Maps JavaScript API.
للاطّلاع على قائمة واجهات برمجة التطبيقات المفعَّلة، اتّبِع الخطوات التالية:
انقر على الزر اختيار مشروع، ثم اختَر المشروع نفسه الذي أعددته
لواجهة Maps JavaScript API وانقر على فتح.
من قائمة واجهات برمجة التطبيقات في لوحة البيانات، ابحث عن Places API.
إذا ظهرت واجهة برمجة التطبيقات في القائمة، يعني ذلك أنّك قد انتهيت من عملية الإعداد. ومع ذلك، فإنّ هذا المشروع في حالة "قديم".
لمزيد من المعلومات حول مرحلة Legacy وكيفية نقل البيانات من Legacy إلى الخدمات الأحدث، يُرجى الاطّلاع على المنتجات والميزات القديمة.
يتوفّر استثناء لعنصرَي واجهة المستخدم الإكمال التلقائي وSearchBox، اللذين لم يتوفّرا بعد كمنتج متاح للجميع في Places API (New).
تحميل المكتبة
خدمة "الأماكن" هي مكتبة مستقلة ومنفصلة عن رمز Maps JavaScript API الرئيسي. لاستخدام الميزات المضمّنة في هذه المكتبة، يجب أولاً تحميلها باستخدام المَعلمة libraries في عنوان URL الخاص ببرنامج إعداد Maps API:
توفّر واجهة برمجة التطبيقات نوعَين من أدوات الإكمال التلقائي التي يمكنك إضافتها باستخدام الفئتَين Autocomplete وSearchBox على التوالي.
بالإضافة إلى ذلك، يمكنك استخدام الفئة AutocompleteService لاسترداد نتائج الإكمال التلقائي آليًا (راجِع مرجع Maps JavaScript API: فئة AutocompleteService).
في ما يلي ملخّص عن الصفوف المتاحة:
يضيف Autocomplete حقل إدخال نص إلى صفحة الويب،
ويراقب هذا الحقل بحثًا عن إدخالات الأحرف. أثناء إدخال المستخدم للنص، تعرض ميزة الإكمال التلقائي توقعات الأماكن في شكل قائمة منسدلة. عندما يختار المستخدم مكانًا من القائمة، يتم عرض معلومات حول المكان في عنصر الإكمال التلقائي، ويمكن لتطبيقك استرداد هذه المعلومات. يمكنك الاطّلاع على التفاصيل أدناه.
الشكل 1: حقل النص والإكمال التلقائي وقائمة الاختيارالشكل 2: نموذج العنوان المكتمل
يضيف العنصر SearchBox حقل إدخال نص إلى صفحة الويب، بطريقة مشابهة للعنصر Autocomplete، مع الاختلافات التالية:
يكمن الاختلاف الرئيسي في النتائج التي تظهر في قائمة الاختيار. تقدّم SearchBox قائمة موسّعة من التوقّعات، والتي يمكن أن تشمل أماكن (كما هو محدّد في Places API) بالإضافة إلى عبارات البحث المقترَحة. على سبيل المثال، إذا أدخل المستخدم "بيتزا في"، قد تتضمّن قائمة الاختيار العبارة "بيتزا في القاهرة" بالإضافة إلى أسماء منافذ بيع البيتزا المختلفة.
تقدّم SearchBox خيارات أقل من Autocomplete لتقييد البحث. في الحالة الأولى، يمكنك توجيه البحث نحو LatLngBounds معيّن. في الحالة الأخيرة، يمكنك حصر البحث على بلد معيّن وأنواع أماكن معيّنة، بالإضافة إلى ضبط الحدود. لمزيد من المعلومات، يُرجى الاطّلاع على
ما يلي.
الشكل 3: يعرض SearchBox عبارات البحث وتوقّعات الأماكن.
يمكنك الاطّلاع على التفاصيل أدناه.
يمكنك إنشاء عنصر
AutocompleteService لاسترداد التوقعات آليًا. استخدِم getPlacePredictions() لاسترداد الأماكن المطابقة، أو استخدِم getQueryPredictions() لاسترداد الأماكن المطابقة بالإضافة إلى عبارات البحث المقترَحة.
ملاحظة: لا تضيف AutocompleteService أي عناصر تحكّم في واجهة المستخدم.
بدلاً من ذلك، تعرض الطرق المذكورة أعلاه مصفوفة من عناصر التوقّع. يحتوي كل عنصر من عناصر التوقّع على نص التوقّع، بالإضافة إلى معلومات مرجعية وتفاصيل حول كيفية تطابق النتيجة مع بيانات أدخلها المستخدم. يمكنك الاطّلاع على التفاصيل أدناه.
إضافة أداة الإكمال التلقائي
ينشئ عنصر واجهة المستخدم Autocomplete حقل إدخال نص في صفحة الويب، ويوفّر توقعات للأماكن في قائمة اختيار ضمن واجهة المستخدم، ويعرض تفاصيل المكان استجابةً لطلب getPlace(). يتطابق كل إدخال في قائمة الاختيار مع مكان واحد (كما هو محدّد في Places API).
تأخذ الدالة الإنشائية Autocomplete وسيطتَين:
عنصر input من HTML من النوع text، وهو حقل الإدخال الذي ستراقبه خدمة الإكمال التلقائي وسترفق نتائجها به.
مصفوفة من البيانات fields سيتم تضمينها في الرد Place Details على PlaceResult الذي اختاره المستخدم. في حال عدم ضبط السمة أو تمرير ['ALL']، سيتم عرض جميع الحقول المتاحة وتحصيل رسوم مقابلها (لا يُنصح بذلك في عمليات النشر في مرحلة الإنتاج). للاطّلاع على قائمة بالحقول، يُرجى الرجوع إلى PlaceResult.
مصفوفة من types تحدّد نوعًا صريحًا أو مجموعة أنواع، كما هو موضّح في الأنواع المتوافقة. في حال عدم تحديد أي نوع، سيتم عرض جميع الأنواع.
bounds هو عنصر google.maps.LatLngBounds يحدّد المنطقة التي سيتم البحث فيها عن الأماكن. تكون النتائج متحيزة نحو الأماكن الواقعة ضمن هذه الحدود، ولكنها لا تقتصر عليها.
strictBounds هي boolean
تحدّد ما إذا كان على واجهة برمجة التطبيقات عرض الأماكن التي تقع ضمن المنطقة المحدّدة
بواسطة bounds المحدّدة فقط. لا تعرض واجهة برمجة التطبيقات نتائج خارج هذه المنطقة حتى إذا كانت تتطابق مع
بيانات أدخلها المستخدم.
يمكن استخدام componentRestrictions لحصر النتائج في مجموعات معيّنة. ويمكنك استخدام componentRestrictions للفلترة حسب ما يصل إلى 5 بلدان. يجب إدخال البلدان كرمز بلد مكوّن من حرفَين ومتوافق مع معيار ISO 3166-1 Alpha-2. يجب إدخال البلدان المتعددة كقائمة برموز البلدان.
يمكن استخدام placeIdOnly لتوجيه أداة Autocomplete إلى استرداد معرّفات الأماكن فقط. عند استدعاء getPlace() على عنصر Autocomplete، لن يتضمّن PlaceResult المتاح سوى السمات place id وtypes وname. يمكنك استخدام معرّف المكان الذي تم استرداده مع طلبات إلى خدمات "الأماكن" أو "ترميز الموقع الجغرافي" أو "الاتجاهات" أو "مصفوفة المسافات".
تقييد عبارات البحث المقترَحة من ميزة "الإكمال التلقائي"
تعرض خدمة "الإكمال التلقائي للأماكن" تلقائيًا جميع أنواع الأماكن، مع إعطاء الأولوية للتوقعات القريبة من الموقع الجغرافي للمستخدم، وتسترد جميع حقول البيانات المتاحة للمكان الذي اختاره المستخدم. اضبط خيارات الإكمال التلقائي في Place
لتقديم توقّعات أكثر صلة بحالة الاستخدام.
ضبط الخيارات عند الإنشاء
يقبل الدالة الإنشائية 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);
حدِّد حقول البيانات لتجنُّب تحصيل رسوم منك مقابل وحدات حفظ المخزون في "بيانات الأماكن" التي لا تحتاج إليها. أدرِج السمة fields في
AutocompleteOptions التي يتم تمريرها إلى الدالة الإنشائية للأداة، كما هو موضّح في المثال السابق، أو استدعِ setFields() على كائن Autocomplete حالي.
استخدِم الخيار types أو استدعِ الدالة setTypes() لتقييد التوقعات بأنواع معيّنة من الأماكن. يحدّد هذا القيد نوعًا أو مجموعة أنواع، كما هو موضّح في أنواع الأماكن. وفي حال عدم تحديد أي قيد، يتم عرض جميع الأنواع.
بالنسبة إلى قيمة الخيار types أو القيمة التي تم تمريرها إلى setTypes()، يمكنك تحديد أي مما يلي:
عندما يختار المستخدم مكانًا من التوقّعات المرفقة بحقل النص الخاص بميزة "الإكمال التلقائي"، تُطلق الخدمة الحدث place_changed. للحصول على تفاصيل حول مكان، اتّبِع الخطوات التالية:
أنشئ معالج أحداث للحدث place_changed، واستدعِ addListener()
على العنصر Autocomplete لإضافة المعالج.
استدعِ الدالة Autocomplete.getPlace()
على العنصر Autocomplete لاسترداد العنصر PlaceResult
الذي يمكنك استخدامه بعد ذلك للحصول على مزيد من المعلومات حول المكان المحدّد.
عندما يختار المستخدم مكانًا، تعرض ميزة الإكمال التلقائي تلقائيًا جميع حقول البيانات المتاحة للمكان المحدّد، وسيتم تحصيل الرسوم منك وفقًا لذلك.
استخدِم Autocomplete.setFields()
لتحديد حقول بيانات الأماكن المطلوب عرضها. يمكنك الاطّلاع على مزيد من المعلومات حول عنصر
PlaceResult، بما في ذلك قائمة بحقول بيانات الأماكن التي يمكنك طلبها. لتجنُّب دفع رسوم مقابل بيانات لا تحتاج إليها، احرص على استخدام Autocomplete.setFields() لتحديد بيانات الأماكن التي ستستخدمها فقط.
يحتوي العنصر name على
description من عبارات البحث المقترَحة في Places Autocomplete. يمكنك الاطّلاع على مزيد من المعلومات حول
description في
مستندات
Places Autocomplete.
بالنسبة إلى نماذج العناوين، من المفيد الحصول على العنوان بتنسيق منظَّم. لعرض العنوان المنظَّم للمكان المحدّد، استدعِ الدالة 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 على العنصر input:
<input id="searchTextField" type="text" size="50" placeholder="Anything you want!">
ملاحظة: يتم تلقائيًا توفير نص العنصر النائب التلقائي بلغات متعددة. وإذا حدّدت قيمة العنصر النائب الخاصة بك، عليك التعامل مع توفير هذه القيمة بلغات متعددة في تطبيقك. للحصول على معلومات حول كيفية اختيار Google Maps JavaScript API للغة التي سيتم استخدامها، يمكنك الاطّلاع على المستندات حول
توفير المحتوى بلغات متعددة.
تتيح SearchBox للمستخدمين إجراء بحث جغرافي مستند إلى نص، مثل "بيتزا في نيويورك" أو "متاجر أحذية بالقرب من شارع روبسون".
يمكنك ربط SearchBox بحقل نص، وعند إدخال النص، ستعرض الخدمة توقعات في شكل قائمة اختيار منسدلة.
توفّر SearchBox قائمة موسّعة من التوقّعات، يمكن أن تتضمّن أماكن (كما هو محدّد في Places API) بالإضافة إلى عبارات بحث مقترَحة. على سبيل المثال، إذا أدخل المستخدم "بيتزا في"، قد تتضمّن قائمة الاختيار العبارة "بيتزا في القاهرة" بالإضافة إلى أسماء منافذ بيع البيتزا المختلفة. وعندما يختار المستخدم مكانًا من القائمة، يتم عرض معلومات حول هذا المكان في عنصر SearchBox، ويمكن لتطبيقك استرداد هذه المعلومات.
تأخذ الدالة الإنشائية SearchBox وسيطتَين:
عنصر input من نوع text في HTML، وهو حقل الإدخال الذي ستراقبه خدمة SearchBox وسترفق نتائجها به.
وسيطة options، والتي يمكن أن تحتوي على السمة bounds:
bounds هي عنصر google.maps.LatLngBounds
يحدّد المنطقة التي سيتم البحث فيها عن الأماكن. وتكون النتائج منحازة إلى الأماكن الواقعة ضمن هذه الحدود، ولكنها لا تقتصر عليها.
يستخدم الرمز التالي المَعلمة bounds لتوجيه النتائج نحو الأماكن الواقعة ضمن منطقة جغرافية معيّنة، ويتم تحديد هذه المنطقة باستخدام إحداثيات خطوط الطول والعرض.
عندما يختار المستخدم عنصرًا من التوقّعات المرفقة بمربّع البحث، تُطلق الخدمة حدث places_changed. يمكنك استدعاء getPlaces() على العنصر SearchBox لاسترداد مصفوفة تحتوي على عدة توقعات، كل منها عبارة عن عنصر PlaceResult.
لمزيد من المعلومات حول العنصر PlaceResult، يُرجى الرجوع إلى المستندات حول
نتائج تفاصيل المكان.
TypeScript
// 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) بالإضافة إلى عبارات البحث المقترَحة. على سبيل المثال، إذا أدخل المستخدم عبارة "بيتزا في"، قد تتضمّن قائمة الاختيار العبارة "بيتزا في القاهرة" بالإضافة إلى أسماء منافذ بيع البيتزا المختلفة.
تعرض كلتا الطريقتين أعلاه مصفوفة من عناصر التوقّعات بالتنسيق التالي:
description هي التوقّعات المطابِقة.
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().
في هذه الحالة، يتم دمج طلب الإكمال التلقائي مع طلب "تفاصيل المكان"، ويتم تحصيل رسوم المكالمة كطلب عادي لخدمة "تفاصيل المكان". لا يتم تحصيل أي رسوم مقابل طلب الإكمال التلقائي.
يوضّح المثال التالي كيفية إنشاء رمز مميّز للجلسة، ثم تمريره في 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 لأدوات Autocomplete وSearchBox
فئة CSS
الوصف
pac-container
العنصر المرئي الذي يحتوي على قائمة بالتوقّعات التي تعرضها خدمة "الإكمال التلقائي للمكان". تظهر هذه القائمة كقائمة منسدلة أسفل الأداة Autocomplete أو SearchBox.
pac-icon
الرمز المعروض على يمين كل عنصر في قائمة التوقعات
pac-item
تمثّل هذه السمة عنصرًا في قائمة التوقّعات التي توفّرها أداة Autocomplete أو SearchBox.
pac-item:hover
العنصر الذي يمرّر المستخدم مؤشر الماوس فوقه
pac-item-selected
العنصر عندما يختاره المستخدم باستخدام لوحة المفاتيح ملاحظة: ستكون العناصر المحدّدة عضوًا في هذا الصف وفي الصف pac-item.
pac-item-query
تمثّل هذه السمة جزءًا من pac-item وهو الجزء الرئيسي من التوقّع. بالنسبة إلى المواقع الجغرافية، تحتوي هذه السمة على اسم مكان، مثل "سيدني"، أو اسم شارع ورقم، مثل "10 شارع الملك". بالنسبة إلى عمليات البحث المستندة إلى النصوص، مثل "بيتزا في نيويورك"، تحتوي هذه السمة على النص الكامل لطلب البحث. يكون لون pac-item-query أسودًا تلقائيًا. إذا كان هناك أي نص إضافي في pac-item، يكون خارج pac-item-query ويستمد تنسيقه من pac-item. يكون لون النص الإضافي رماديًا تلقائيًا، وعادةً ما يكون عنوانًا.
pac-matched
جزء التوقّع الذي تم إرجاعه والذي يتطابق مع ما أدخله المستخدم وبشكلٍ تلقائي، يتم تمييز النص المطابِق بخط غامق. يُرجى العِلم أنّ النص المطابِق قد يكون في أي مكان ضمن pac-item. ولا يشكّل هذا النص
بالضرورة جزءًا من pac-item-query، بل يمكن أن يكون جزءًا منه
وجزءًا من النص المتبقي في pac-item.pac-item-query
تحسين خدمة "الإكمال التلقائي للأماكن" (الإصدار القديم)
يوضّح هذا القسم أفضل الممارسات لمساعدتك في الاستفادة إلى أقصى حدّ من خدمة "الإكمال التلقائي للأماكن" (الإصدار القديم).
التعرّف على حقول البيانات الأساسية
في خدمة "الإكمال التلقائي للأماكن" (الإصدار القديم)
من البداية
حقلَي "تفضيل الموقع الجغرافي" و"حظر الموقع الجغرافي" اختياريان، ولكن يمكن أن يكون لهما تأثير كبير في أداء ميزة الإكمال التلقائي.
استخدِم ميزة معالجة الأخطاء للتأكّد من أنّ تطبيقك يتراجع بشكل سليم
في حال عرض واجهة برمجة التطبيقات رسالة خطأ.
تأكَّد من أنّ تطبيقك يتعامل مع الحالات التي لا يتم فيها تحديد أي خيار، ويوفّر للمستخدمين طريقة للمتابعة.
أفضل الممارسات لتحسين التكلفة
تحسين التكلفة الأساسي
لتحسين تكلفة استخدام خدمة الإكمال التلقائي للأماكن (الإصدار القديم)، استخدِم أقنعة الحقول في أدوات تفاصيل المكان (الإصدار القديم) والإكمال التلقائي للأماكن (الإصدار القديم) لعرض حقول البيانات التي تحتاج إليها فقط في الإكمال التلقائي للأماكن (الإصدار القديم).
تحسين التكلفة المتقدّم
ننصحك بتنفيذ خدمة "الإكمال التلقائي للأماكن (الإصدار القديم)" آليًا للوصول إلى
رمز التخزين التعريفي: الإكمال التلقائي - التسعير لكل طلب
وطلب نتائج Geocoding API حول المكان المحدّد بدلاً من "تفاصيل المكان (الإصدار القديم)". يكون التسعير لكل طلب مع Geocoding API أكثر فعالية من حيث التكلفة من التسعير لكل جلسة (استنادًا إلى الجلسة) في حال استيفاء الشرطَين التاليَين:
إذا كنت بحاجة فقط إلى خطوط الطول والعرض أو عنوان المكان الذي اختاره المستخدم، تقدّم Geocoding API هذه المعلومات بتكلفة أقل من طلب Place Details (Legacy).
إذا اختار المستخدمون عبارة بحث مقترحة من ميزة "الإكمال التلقائي للأماكن" (الإصدار القديم) في غضون أربعة طلبات اقتراحات أو أقل في المتوسط، قد يكون التسعير لكل طلب أكثر فعالية من حيث التكلفة من التسعير لكل جلسة.
للمساعدة في اختيار عملية تنفيذ ميزة "الإكمال التلقائي للأماكن" (الإصدار القديم) التي تناسب احتياجاتك، اختَر علامة التبويب التي تتوافق مع إجابتك عن السؤال التالي.
هل يتطلّب تطبيقك أي معلومات أخرى غير العنوان وخطوط الطول والعرض الخاصة بالتوقّع المحدّد؟
توضّح الإرشادات التالية طرقًا لتحسين أداء خدمة الإكمال التلقائي للأماكن (الإصدار القديم):
أضِف قيودًا على البلدان وتفضيل الموقع الجغرافي واللغة المفضّلة (في عمليات التنفيذ الآلية) إلى عملية تنفيذ ميزة "الإكمال التلقائي للأماكن" (الإصدار القديم). لا حاجة إلى اللغة المفضّلة مع الأدوات لأنّها تختار اللغة المفضّلة من متصفّح المستخدِم أو جهازه الجوّال.
إذا كانت ميزة "الإكمال التلقائي للأماكن" (الإصدار القديم) مصحوبة بخريطة، يمكنك تحديد الموقع الجغرافي حسب إطار عرض الخريطة.
في الحالات التي لا يختار فيها المستخدم أحد التوقعات التي تقدّمها خدمة الإكمال التلقائي للأماكن (الإصدار القديم)، وذلك بشكل عام لأنّ أيًا من هذه التوقعات ليس عنوان النتيجة المطلوب، يمكنك إعادة استخدام بيانات أدخلها المستخدم الأصلية لمحاولة الحصول على نتائج أكثر صلة بالموضوع:
إذا كنت تتوقّع أن يدخل المستخدم معلومات العنوان فقط، أعِد استخدام إدخال المستخدم الأصلي في طلب إلى Geocoding API.
إذا كنت تتوقّع أن يُدخل المستخدم طلبات بحث عن مكان معيّن بالاسم أو العنوان، استخدِم طلب "تفاصيل المكان (الإصدار القديم)". إذا كانت النتائج متوقّعة في منطقة معيّنة فقط، استخدِم تحسين النتائج حسب الموقع الجغرافي.
تشمل السيناريوهات الأخرى التي يُنصح فيها بالرجوع إلى 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
التي توجّه خدمة "الإكمال التلقائي للأماكن" (الإصدار القديم) إلى عرض النتائج فقط
ضمن تلك المنطقة.
سقف الاستخدام
الحصص
للحصول على معلومات حول الحصص والأسعار، يُرجى الاطّلاع على
مستندات الاستخدام والفوترة الخاصة بواجهة Places API.
تاريخ التعديل الأخير: 2026-06-15 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","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 (حسب التوقيت العالمي المتفَّق عليه)"],[],[]]