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 yanlılığı 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 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üden geçirir 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).locationRestriction
(belirtilen konumun dışındaki sonuçları atlar) (locationBias
da desteklenir).