Yeni Yer Arama'ya geçiş

Bu sayfada, Place sınıfındaki (yeni) ve PlacesService sınıfındaki (eski) metne dayalı yer arama özellikleri arasındaki farklar açıklanmakta ve karşılaştırma için bazı kod snippet'leri sağlanmaktadır.

Eski PlacesService, aşağıdaki metne dayalı arama yöntemlerine sahiptir:

  • Metin sorgusu alan, tek bir yer sonucu döndüren ve yer veri alanlarının kullanımını destekleyen findPlaceFromQuery() yöntemi.
  • Telefon numarası kullanarak yer aramanızı sağlayan ve yer veri alanlarının kullanımını destekleyen findPlaceFromPhoneNumber() yöntemi.
  • Metin sorgusu alan ve yer sonuçlarının listesini döndüren textSearch() yöntemi. textSearch() daha eskidir ve yer veri alanlarının kullanımını desteklemez.

Yeni Place sınıfı, metin sorgusu veya telefon numarası kullanarak yer aramanızı sağlayan ve düzenli olarak güncellenen daha geniş bir yer verisi alanı ve yer türü seçkisini kullanarak aramalarınızı özelleştirmenize olanak tanıyan Place.searchByText() yöntemini sunar.

Aşağıdaki tabloda, Place sınıfı ile PlacesService arasındaki yer arama yöntemlerinde bulunan bazı temel farklılıklar listelenmiştir:

PlacesService (Eski) Place (Yeni)
findPlaceFromQuery()
findPlaceFromPhoneNumber()
searchByText()
FindPlaceFromQueryRequest
FindPlaceFromPhoneNumberRequest
SearchByTextRequest
Sınırlı sorgu seçenekleri. Daha kapsamlı sorgu seçenekleri.
Sonuçlar nesnesini ve google.maps.places.PlacesServiceStatus yanıtını işlemek için geri çağırma işlevinin kullanılması gerekir. Promise'leri kullanır ve eşzamansız olarak çalışır.
PlacesServiceStatus kontrolü gerekir. Zorunlu durum kontrolü yoktur, standart hata işleme kullanılabilir.
Yalnızca konum önyargısını destekler. Konum önyargısını ve konum kısıtlamasını destekler.
Yer veri alanları, küçük harf ve tire kullanılarak biçimlendirilir. Yer veri alanları, büyük/küçük harf kullanmadan biçimlendirilir.
Tek bir yer sonucu döndürür. En fazla 20 yer sonucu döndürür.
Sabit bir yer türü ve yer veri alanı kümesiyle sınırlıdır. Düzenli olarak güncellenen yer türleri ve yer veri alanları ile ilgili daha geniş bir seçim sunar.
textSearch()
searchByText()
Mevcut tüm veri alanlarını (desteklenen alanların alt kümesi) döndürür; belirli alanlarla sınırlandırılamaz. Yalnızca istenen yer verisi alanlarını döndürür.

Kod karşılaştırması

Bu bölümde, Places hizmeti ile Place sınıfı arasındaki farkları göstermek için metin arama yöntemlerinin kodu karşılaştırılmıştır. Kod snippet'leri, metin tabanlı arama isteği yapmak için ilgili API'de gereken kodu gösterir.

Yerler hizmeti (eski)

Aşağıdaki kod snippet'inde, bir yer aramak için findPlaceFromQuery() yönteminin kullanımı gösterilmektedir. İstek senkronizedir ve PlacesServiceStatus üzerinde koşullu bir kontrol içerir. Gerekli yer verisi alanları, asıl istek yapılmadan önce tanımlanan istek gövdesinde belirtilir.

function findPlaces() {
  const request = {
    query: "Museum of Contemporary Art Australia",
    fields: ["name", "geometry"],
  };

  // Create an instance of PlacesService.
  service = new google.maps.places.PlacesService(map);

  // Make a findPlaceFromQuery request.
  service.findPlaceFromQuery(request, (results, status) => {
    let place = results[0];
    if (status === google.maps.places.PlacesServiceStatus.OK && results) {
      if (!place.geometry || !place.geometry.location) return;

      const marker = new google.maps.Marker({
        map,
        position: place.geometry.location,
      });
      map.setCenter(place.geometry.location);
    }
  });
}

Daha fazla bilgi

Metin Arama (Yeni)

Aşağıdaki kod snippet'inde, yer aramak için searchByText() yönteminin kullanımı gösterilmektedir. İstek asenkrondur ve durum kontrolü gerektirmez (standart hata işleme kullanılabilir). Bu örnekte istek, 8 değerine sahip bir maxResultCount içerir (değer 1 ile 20 arasında olmalıdır). Bu işlev, sonuçları döngü şeklinde tarar ve her biri için bir işaretçi ekler. Bu sırada harita sınırlarını işaretçilerin konumuna göre ayarlar. searchByText() yöntemi await operatörünü kullandığından yalnızca bir async işlevi içinde kullanılabilir.

async function findPlaces() {
  // Define a request.
  // The `fields` property is required; all others are optional.
  const request = {
    fields: ["displayName", "location", "businessStatus"],
    textQuery: "Tacos in Mountain View",
    includedType: "restaurant",
    locationBias: { lat: 37.4161493, lng: -122.0812166 },
    isOpenNow: true,
    language: "en-US",
    maxResultCount: 8,
    minRating: 3.2,
    region: "us",
    useStrictTypeFiltering: false,
  };

  // Call searchByText passing the request.
  const { places } = await google.maps.places.Place.searchByText(request);

  // Add a marker for each result.
  if (places.length) {
    const bounds = new google.maps.LatLngBounds();

    places.forEach((place) => {
      const markerView = new google.maps.marker.AdvancedMarkerElement({
        map,
        position: place.location,
        title: place.displayName,
      });

      bounds.extend(place.location);
      console.log(place);
    });
    map.fitBounds(bounds);
  } else {
    console.log("No results");
  }
}

searchByText() yöntemi, önceki sürüme kıyasla çok daha fazla istek seçeneğini destekler. Örneğin:

  • includedType, aramaları belirli bir yer türüyle sınırlamanıza olanak tanır.
  • isOpenNow, aramaları yalnızca açık olan yerleri döndürecek şekilde kısıtlamanıza olanak tanır.
  • minRating, belirtilen sınırın altındaki sonuçları filtrelemenize olanak tanır (ör. yalnızca üç yıldız veya daha fazla puana sahip yerleri döndürme).
  • Belirtilen konumun dışındaki sonuçları atlayan locationRestriction (locationBias da desteklenir).

Daha fazla bilgi