Metin Arama (Yeni)

Platform seçin: Android iOS JavaScript Web Hizmeti

Metin Arama (Yeni), bir metin sorgusu alır ve eşleşen yerlerin listesini döndürür.

Metin Arama (Yeni), bir dizeye göre bir yer grubu hakkında bilgi döndürür. Örneğin, "New York'ta pizza" veya "Ottawa yakınlarındaki ayakkabı mağazaları" ya da "123 Ana Cadde". Hizmet, metin dizesine ve ayarlanmış konum yanlılığına eşleşen yerlerin listesini döndürür. Metin Arama (Yeni), yerleri türe göre aramanıza, çalışma saatleri ve puan gibi ölçütleri kullanarak filtrelemenize ve sonuçları belirli bir konumla sınırlamanıza veya belirli bir konuma yönlendirmenize olanak tanır.

Metin Arama'yı (Yeni) kullanmak için Google Cloud projenizde "Places API (Yeni)"yi etkinleştirmeniz gerekir. Ayrıntılar için Başlayın bölümüne bakın.

Metin sorgusuna göre yer bulma

Metin sorgusundan veya telefon numarasından alınan yerlerin listesini döndürmek için searchByText'i arayın. Bir istek kullanarak arama parametrelerini belirtin ve ardından searchByText() işlevini çağırın. Sonuçlar, yer ayrıntılarını edinebileceğiniz Place nesnelerinin listesi olarak döndürülür. Aşağıdaki snippet'te, searchByText adresine yapılan bir istek ve çağrı örneği gösterilmektedir:

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 parametresi ile aranacak bir metin sorgusu veya telefon numarası belirtin.
  • Bir veya daha fazla veri alanının virgülle ayrılmış listesini camel case olarak belirtmek için fields parametresini (zorunlu) kullanın.
  • Yalnızca belirtilen türde sonuçlar döndürmek için includedType parametresini kullanın.
  • Metin arama sonuçlarınızı belirli bir bölgeye yönlendirmek veyalocationBiaslocationRestriction
Mülklerin tam listesine bakın.

Sorgu bir telefon numarası içeriyorsa bölge parametresi ayarlanmalıdır. Örneğin, Japonya'da bir yer aramak için telefon numarası kullanıyorsanız ve istek alanınız jp ise region parametresini "jp" olarak ayarlamanız gerekir. region istekten çıkarılırsa API varsayılan olarak Amerika Birleşik Devletleri ("us") bölgesini kullanır.

Sonuçlar, yer ayrıntılarını alabileceğiniz Place nesnelerinin listesi olarak döndürülür.

Örnek

Aşağıdaki örnekte, Mountain View yakınlarındaki taco restoranlarını sorgulamak için searchByText kullanılır ve sonuçları göstermek üzere bir harita işaretçilerle doldurulur.

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>

Örneği Deneyin