Yeni Yer Arama'ya geçiş

Avrupa Ekonomik Alanı (AEA) geliştiricileri

Bu sayfada, Place sınıfındaki (yeni) ve PlacesService sınıfındaki (eski) 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 olup yer verileri alanlarının kullanımını desteklemez.

Yeni Place sınıfı, metin sorgusu veya telefon numarası kullanarak yer aramanıza olanak tanıyan Place.searchByText() yöntemini sunar. Ayrıca, düzenli olarak güncellenen yer veri alanları ve 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 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ç 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.
Yer türleri ve yer verileri alanlarından oluşan sabit bir grupla 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, bir yer aramak için findPlaceFromQuery() yönteminin nasıl kullanılacağı gösterilmektedir. İstek senkronizedir 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 seçeneğiyle aramaları yalnızca açık yerleri döndürecek şekilde kısıtlayabilirsiniz.
  • 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ı atlar (locationBias da desteklenir).

Daha fazla bilgi