Yeni Yer Arama'ya geçiş

Avrupa Ekonomik Alanı (AEA) geliştiricileri

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

Eski PlacesService sürümünde aşağıdaki metin tabanlı arama yöntemleri bulunur:

  • Metin sorgusu alan ve tek bir yer sonucu döndüren, yer verisi alanlarının kullanımını destekleyen findPlaceFromQuery() yöntemi.
  • Telefon numarası kullanarak yer aramanıza olanak tanıyan ve yer verisi 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 eski bir sürüm olduğu için yer verileri alanlarının kullanımını desteklemez.

Yeni Place sınıfı, Place.searchByText() yöntemini sunar. Bu yöntem, metin sorgusu veya telefon numarası kullanarak yer aramanıza ve düzenli olarak güncellenen yer veri alanları ile yer türlerinden oluşan genişletilmiş bir seçimle aramalarınızı özelleştirmenize olanak tanır.

Aşağıdaki tabloda, Place sınıfı ile PlacesService arasındaki yer arama yöntemlerindeki temel farklardan bazıları listelenmiştir:

PlacesService (Eski) Place (Yeni)
findPlaceFromQuery()
findPlaceFromPhoneNumber()
searchByText()
FindPlaceFromQueryRequest
FindPlaceFromPhoneNumberRequest
SearchByTextRequest
Sınırlı sorgu seçenekleri. Daha kapsamlı sorgu seçenekleri.
Sonuç nesnesini ve google.maps.places.PlacesServiceStatus yanıtını işlemek için geri çağırma işlevinin kullanılması gerekir. Promises kullanır ve eşzamansız olarak çalışır.
PlacesServiceStatus kontrolü gerekir. Durum kontrolü gerekmez, standart hata işleme kullanılabilir. Daha fazla bilgi
Yalnızca konum önyargısını destekler. Konum tercihi ve konum kısıtlaması desteklenir.
Yer verileri alanları, snake case kullanılarak biçimlendirilir. Yer verisi alanları, camel case kullanılarak biçimlendirilir.
Tek bir yer sonucu döndürür. 20'ye kadar yer sonucu döndürür.
Sabit bir yer türleri ve yer verisi alanları grubuyla sınırlıdır. Düzenli olarak güncellenen yer türleri ve yer verisi alanları için daha kapsamlı bir seçim sunar.
textSearch()
searchByText()
Mevcut tüm veri alanlarını (desteklenen alanların bir alt kümesi) döndürür; belirli alanlarla sınırlanamaz. Yalnızca istenen yer verileri alanlarını döndürür.

Kod karşılaştırması

Bu bölümde, Places Service ile Place sınıfı arasındaki farkları göstermek için metin arama yöntemlerinin kodu karşılaştırılmaktadır. Kod snippet'lerinde, metin tabanlı bir arama isteği yapmak için ilgili API'lerde gereken kod gösterilir.

Places Service (Eski)

Aşağıdaki kod snippet'inde, yer aramak için findPlaceFromQuery() yönteminin nasıl kullanılacağı gösterilmektedir. İstek senkrondur ve PlacesServiceStatus üzerinde koşullu bir kontrol içerir. Gerekli yer verileri alanları, gerçek 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 nasıl kullanılacağı gösterilmektedir. İstek eşzamansızdır ve durum kontrolü gerektirmez (standart hata işleme kullanılabilir). Bu örnekte, istekte 8 maxResultCount değeri yer alıyor (değer 1 ile 20 arasında olmalıdır). Bu işlev, sonuçlar arasında döngü oluşturur ve her biri için bir işaretçi ekler. Ayrıca, harita sınırlarını işaretçilerin konumuna göre ayarlar. searchByText() yöntemi await operatörünü kullandığından yalnızca 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 ile aramaları belirli bir yer türüyle sınırlayabilirsiniz.
  • isOpenNow Bu filtre, aramaları yalnızca açık olan yerleri döndürecek şekilde kısıtlamanıza olanak tanır.
  • minRating ile sonuçları belirtilen sınırın altında kalanları filtreleyebilirsiniz (örneğin, yalnızca üç yıldız veya daha yüksek puana sahip yerleri döndürme).
  • locationRestriction Belirtilen konumun dışındaki sonuçları hariç tutan locationBias da desteklenir.

Daha fazla bilgi