تستخدم ميزة "البحث النصي" (جديد) طلب بحث نصيًا وتعرض قائمة بالأماكن المطابقة.
تعرض ميزة "البحث النصي" (جديد) معلومات عن مجموعة من الأماكن استنادًا إلى سلسلة، على سبيل المثال "فطائر في دبي" أو "متاجر أحذية بالقرب من أوتاوا" أو "123 الشارع الرئيسي". وتستجيب الخدمة بقائمة من الأماكن التي تطابق السلسلة النصية وأي انحياز تم تحديده للموقع الجغرافي. تتيح لك ميزة "البحث النصي" (ميزة جديدة) البحث عن الأماكن حسب النوع، والفلترة باستخدام معايير مثل ساعات العمل والتقييم، وحصر النتائج أو انحيازها في موقع جغرافي معيّن.
لاستخدام ميزة "البحث النصي" (جديد)، يجب تفعيل "واجهة برمجة تطبيقات الأماكن (جديدة)" في مشروعك على Google Cloud. راجِع البدء لمعرفة التفاصيل.
العثور على أماكن عن طريق طلب البحث النصي
اتصل بـ searchByText
لعرض قائمة بالأماكن من طلب بحث نصي أو رقم هاتف.
حدِّد معلَمات البحث باستخدام طلب، ثم استدعِ searchByText
. يتم عرض النتائج كقائمة من Place
عناصر، يمكنك من خلالها الحصول على تفاصيل المكان. يعرض المقتطف التالي مثالاً على طلب ويتصل بـ searchByText
:
TypeScript
const request = { textQuery: 'Tacos in Mountain View', fields: ['displayName', 'location', 'businessStatus'], includedType: 'restaurant', locationBias: { lat: 37.4161493, lng: -122.0812166 }, isOpenNow: true, language: 'en-US', maxResultCount: 8, minRating: 3.2, region: 'us', useStrictTypeFiltering: false, }; //@ts-ignore const { places } = await Place.searchByText(request);
JavaScript
const request = { textQuery: "Tacos in Mountain View", fields: ["displayName", "location", "businessStatus"], includedType: "restaurant", locationBias: { lat: 37.4161493, lng: -122.0812166 }, isOpenNow: true, language: "en-US", maxResultCount: 8, minRating: 3.2, region: "us", useStrictTypeFiltering: false, }; //@ts-ignore const { places } = await Place.searchByText(request);
- حدِّد طلب بحث نصي أو رقم هاتف للبحث باستخدام المَعلمة
textQuery
. - استخدِم المَعلمة
fields
(مطلوبة) لتحديد قائمة مفصولة بفواصل تتضمّن واحدًا أو أكثر من حقل البيانات في حالة الجمل. - استخدِم المعلَمة
includedType
لعرض نتائج من النوع المحدّد فقط. - استخدِم
locationBias
أوlocationRestriction
لانحياز نتائج البحث النصّية أو حصرها بمنطقة معيّنة.
إذا كان طلب البحث يحتوي على رقم هاتف، يجب ضبط مَعلمة المنطقة. على سبيل المثال، إذا كنت تستخدم رقم هاتف للبحث عن مكان في اليابان، وكان النطاق الذي قدّم الطلب هو jp
، عليك ضبط المَعلمة region
على "jp". إذا تم حذف region
من الطلب، سيتم ضبط واجهة برمجة التطبيقات تلقائيًا على منطقة الولايات المتحدة ("us").
Place
عنصر، يمكنك من خلالها الحصول على تفاصيل المكان.
مثال
يستخدم المثال التالي searchByText
لطلب البحث عن مطاعم تاكو في
منطقة ماونتن فيو، ويملأ الخريطة بعلامات لعرض النتائج.
TypeScript
let map; let center; async function initMap() { const { Map } = await google.maps.importLibrary("maps") as google.maps.MapsLibrary; center = { lat: 37.4161493, lng: -122.0812166 }; map = new Map(document.getElementById('map') as HTMLElement, { center: center, zoom: 11, mapId: 'DEMO_MAP_ID', }); findPlaces(); } async function findPlaces() { const { Place } = await google.maps.importLibrary("places") as google.maps.PlacesLibrary; const { AdvancedMarkerElement } = await google.maps.importLibrary("marker") as google.maps.MarkerLibrary; const request = { textQuery: 'Tacos in Mountain View', fields: ['displayName', 'location', 'businessStatus'], includedType: 'restaurant', locationBias: { lat: 37.4161493, lng: -122.0812166 }, isOpenNow: true, language: 'en-US', maxResultCount: 8, minRating: 3.2, region: 'us', useStrictTypeFiltering: false, }; //@ts-ignore const { places } = await Place.searchByText(request); if (places.length) { console.log(places); const { LatLngBounds } = await google.maps.importLibrary("core") as google.maps.CoreLibrary; const bounds = new LatLngBounds(); // Loop through and get all the results. places.forEach((place) => { const markerView = new AdvancedMarkerElement({ map, position: place.location, title: place.displayName, }); bounds.extend(place.location as google.maps.LatLng); console.log(place); }); map.fitBounds(bounds); } else { console.log('No results'); } } initMap();
JavaScript
let map; let center; async function initMap() { const { Map } = await google.maps.importLibrary("maps"); center = { lat: 37.4161493, lng: -122.0812166 }; map = new Map(document.getElementById("map"), { center: center, zoom: 11, mapId: "DEMO_MAP_ID", }); findPlaces(); } async function findPlaces() { const { Place } = await google.maps.importLibrary("places"); const { AdvancedMarkerElement } = await google.maps.importLibrary("marker"); const request = { textQuery: "Tacos in Mountain View", fields: ["displayName", "location", "businessStatus"], includedType: "restaurant", locationBias: { lat: 37.4161493, lng: -122.0812166 }, isOpenNow: true, language: "en-US", maxResultCount: 8, minRating: 3.2, region: "us", useStrictTypeFiltering: false, }; //@ts-ignore const { places } = await Place.searchByText(request); if (places.length) { console.log(places); const { LatLngBounds } = await google.maps.importLibrary("core"); const bounds = new LatLngBounds(); // Loop through and get all the results. places.forEach((place) => { const markerView = new AdvancedMarkerElement({ map, position: place.location, title: place.displayName, }); bounds.extend(place.location); console.log(place); }); map.fitBounds(bounds); } else { console.log("No results"); } } initMap();
CSS
/* * Always set the map height explicitly to define the size of the div element * that contains the map. */ #map { height: 100%; } /* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; }
HTML
<html> <head> <title>Text Search</title> <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script> <link rel="stylesheet" type="text/css" href="./style.css" /> <script type="module" src="./index.js"></script> </head> <body> <div id="map"></div> <!-- prettier-ignore --> <script>(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))}) ({key: "AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg", v: "weekly"});</script> </body> </html>