Bu sayfada, Place
sınıfında (yeni) ve PlacesService
sınıfında (eski) kullanılan yakın arama arasındaki farklar açıklanmakta ve karşılaştırma için bazı kod snippet'leri sağlanmaktadır.
- Eski
PlacesService
, belirli bir alandaki yerleri anahtar kelimeye veya türe göre aramanıza olanak tanıyan birnearbySearch()
yöntemine sahiptir. Place
sınıfında, daha fazla esneklik için daha geniş bir yer veri alanı ve yer türü seçimini kullanarak belirli bir alandaki yerleri yer türüne göre aramanıza olanak tanıyan birsearchNearby()
yöntemi vardır.
Aşağıdaki tabloda, Place
sınıfı ile PlacesService
arasındaki yakın arama yöntemlerinde bulunan bazı temel farklılıklar listelenmiştir:
PlacesService (Eski) |
Place (Yeni) |
---|---|
nearbySearch() |
searchNearby()
|
PlaceSearchRequest |
SearchNearbyRequest |
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. |
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; Place sınıfı, genişletilmiş ve düzenli olarak güncellenen bir alan seçeneği sunar. |
Sabit bir yer türü grubuyla sınırlıdır. | Geniş ve düzenli olarak güncellenen bir yer türü seçimine erişin. |
Anahtar kelime ile metin tabanlı arama desteklenir. | Metne dayalı arama desteklenmez. Bunun yerine Metin Arama (Yeni)'yi kullanın. |
Kod karşılaştırması
Bu bölümde, Places Hizmeti ile Place sınıfı arasındaki farkları göstermek için yakın arama yöntemlerinin kodu karşılaştırılmaktadır. Kod snippet'leri, metin tabanlı arama isteği yapmak için ilgili API'de gereken kodu gösterir.
Yakında Arama (eski)
Eski Yakındaki Yerler, belirli bir alandaki yerleri anahtar kelimeye veya türe göre aramanıza olanak tanır. Yer veri alanları kullanılarak aramaları kısıtlamak mümkün değildir. Bu nedenle, her istekle birlikte mevcut alanların tümü döndürülür.
Aşağıdaki snippet'te, Avustralya'nın Sidney kentindeki restoranlarla ilgili bilgileri döndürmek için nearbySearch()
çağrısı gösterilmektedir. İstek senkronizedir, geri çağırma kullanır ve PlacesServiceStatus
üzerinde zorunlu koşullu bir kontrol içerir.
let map;
let service;
function initMap() {
const sydney = new google.maps.LatLng(-33.867, 151.195);
map = new google.maps.Map(document.getElementById("map"), {
center: sydney,
zoom: 15,
});
const request = {
location: sydney,
radius: '500',
type: ['restaurant']
};
service = new google.maps.places.PlacesService(map);
service.nearbySearch(request, callback);
}
function callback(results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
createMarker(results[i]);
}
}
}
// Helper function to create markers.
function createMarker(place) {
if (!place.geometry || !place.geometry.location) return;
const marker = new google.maps.Marker({
map,
position: place.geometry.location,
title: place.name,
});
}
Daha fazla bilgi
Yakında Arama (Yeni)
Yakındakiler Arama'nın yeni sürümü, önceki sürüme kıyasla aşağıdaki avantajlara sahiptir:
- Hangi yer verisi alanlarının döndürüleceğini belirtme olanağı.
- Eşzamansız çalışmayı sağlayan Promise'lerin kullanılması.
PlacesService
durumunu kontrol etmeye gerek yoktur. Bunun yerine standart hata işleme kullanılabilir.
Aşağıdaki kod snippet'inde, restoranlar için Yakındakiler Arama isteği gönderen bir işlev gösterilmektedir. Bu örnekte, arama sonuçlarını popülerliğe göre sıralamak için rankPreference
seçeneğinin kullanıldığı gösterilmektedir (önceki sürümde sıralama rankBy
seçeneği kullanılarak belirtilmektedir). searchNearby()
yöntemi await
operatörünü kullandığından yalnızca bir async
işlevi içinde kullanılabilir.
async function nearbySearch() {
// Restrict within the map viewport.
let center = new google.maps.LatLng(52.369358, 4.889258);
const request = {
// Required parameters.
fields: ["displayName", "location", "businessStatus"],
locationRestriction: {
center: center,
radius: 500,
},
// Optional parameters.
includedPrimaryTypes: ["restaurant"],
maxResultCount: 5,
rankPreference: google.maps.places.SearchNearbyRankPreference.POPULARITY,
language: "en-US",
region: "us",
};
const { places } = await google.maps.places.Place.searchNearby(request);
if (places.length) {
console.log(places);
// Create a new bounds, which will be extended with each result.
const bounds = new google.maps.LatLngBounds();
// Loop through and get all the results.
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");
}
}