Bu sayfada, Place sınıfındaki (yeni) ve PlacesService (eski) metin tabanlı yer arama özellikleri arasındaki farklar açıklanmakta ve karşılaştırma için bazı kod snippet'leri sunulmaktadır.
Eski PlacesService, aşağıdaki metin tabanlı arama yöntemlerine sahiptir:
- Metin sorgusu alıp tek bir yer sonucu döndüren ve 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ümdür ve yer verisi alanlarının kullanımını desteklemez.
Yeni Place sınıfı, metin sorgusu veya telefon numarası kullanarak yer aramanıza ve düzenli olarak güncellenen yer veri alanları ve yer türlerinden oluşan genişletilmiş bir seçim 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öntemlerindeki temel farklardan bazıları listelenmiştir:
PlacesService (Eski) |
Place (Yeni) |
|---|---|
findPlaceFromQuery()findPlaceFromPhoneNumber()
|
searchByText() |
FindPlaceFromQueryRequestFindPlaceFromPhoneNumberRequest |
SearchByTextRequest |
| Sorgu seçenekleri sınırlıdır. | Daha kapsamlı sorgu seçenekleri. |
Sonuç nesnesini ve google.maps.places.PlacesServiceStatus yanıtını işlemek için bir geri çağırma işlevinin kullanılmasını gerektirir. |
Promise'leri 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 konuma göre ağırlıklandırmayı destekler. | Konum tercihi ve konum kısıtlamasını destekler. |
| Yer verisi alanları, alt çizgili yazım kullanılarak biçimlendirilir. | Yer verileri alanları, camel case kullanılarak biçimlendirilir. |
| Tek bir yer sonucu döndürür. | En fazla 20 yer sonucu döndürür. |
| Sabit bir yer türleri ve yer verisi alanları kümesiyle sınırlıdır. | Düzenli olarak güncellenen yer türleri ve yer verisi alanları için genişletilmiş bir seçim sunar. |
textSearch() |
searchByText() |
| Kullanılabilir tüm veri alanlarını (desteklenen alanların bir 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 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'leri, metin tabanlı arama isteği göndermek için her bir API'de gereken kodu gösterir.
Places Service (Eski)
Aşağıdaki kod snippet'inde, bir yeri aramak için findPlaceFromQuery() yönteminin kullanımı gösterilmektedir. İstek eşzamanlıdır ve PlacesServiceStatus üzerinde koşullu bir kontrol içerir. Gerekli yer verileri 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 eşzamansızdır ve durum kontrolü gerektirmez (standart hata işleme kullanılabilir). Bu örnekte istek, 8 değerinde bir maxResultCount içerir (değer 1 ile 20 arasında olmalıdır). Bu işlev, sonuçlar arasında gezinir ve her biri için bir işaretçi ekleyerek 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şlevinde 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. Bu seçeneklerden bazıları şunlardır:
includedType, aramaları belirli bir yer türüyle kısıtlamanıza olanak tanır.isOpenNowparametresi, 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 (örneğin, yalnızca üç yıldız veya daha fazla puana sahip yerleri döndürür).locationRestriction(locationBiasde desteklenir).
Daha fazla bilgi
- Eksiksiz örnek koduna bakın
- Text Search (New) ile ilgili belgelere bakın
searchByText()referansına bakın