البحث النصي (جديد)

اختيار النظام الأساسي: Android iOS JavaScript خدمة الويب

يأخذ البحث النصي (جديد) استعلامًا نصيًا ويعرض قائمة بالأماكن المطابقة.

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

لاستخدام ميزة "البحث النصي" (ميزة جديدة)، يجب تفعيل ميزة "واجهة برمجة التطبيقات للأماكن (جديدة)" في مشروعك على 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>

    <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>

تجربة "عيّنة"