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

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

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

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

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

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