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
- Tam örnek koda bakın
- Metin Arama (Yeni) ile ilgili dokümanlara bakın.
searchByText()
referansına bakın.