Bu sayfada, Place sınıfında (yeni) ve PlacesService (eski) sınıfında kullanılan Yakında Arama arasındaki farklar açıklanmakta ve karşılaştırma için bazı kod snippet'leri sunulmaktadır.
- Eski
PlacesService, belirli bir alandaki yerleri anahtar kelimeye veya türe göre aramanıza olanak tanıyan birnearbySearch()yöntemine sahiptir. Placesınıfı, daha fazla esneklik için genişletilmiş yer veri alanları ve yer türleri seçeneğinden yararlanarak belirli bir alandaki yerleri yer türüne göre aramanıza olanak tanıyan birsearchNearby()yöntemine sahiptir.
Aşağıdaki tabloda, Place sınıfı ile PlacesService arasındaki yakında arama yöntemlerindeki temel farklardan bazıları listelenmiştir:
PlacesService (Eski) |
Place (Yeni) |
|---|---|
nearbySearch() |
searchNearby()
|
PlaceSearchRequest |
SearchNearbyRequest |
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. |
| 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. Place sınıfı, genişletilmiş ve düzenli olarak güncellenen bir alan seçimi sunar. |
| Sabit bir yer türü grubuyla sınırlıdır. | Genişletilmiş ve düzenli olarak güncellenen yer türleri seçimine erişin. |
| keyword ile metin tabanlı arama desteklenir. | Metin tabanlı arama desteklenmiyor. Bunun yerine Text Search (New) özelliğini 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ındaki yerleri arama yöntemlerinin kodu karşılaştırılmaktadır. Kod snippet'leri, metin tabanlı arama isteği göndermek için her API'de gereken kodu gösterir.
Yakında Arama (Eski)
Eski Yakında Arama, belirli bir alandaki yerleri anahtar kelimeye veya türe göre aramanıza olanak tanır. Aramaları yer verisi alanlarını kullanarak kısıtlamanın bir yolu yoktur. Bu nedenle, her istekte mevcut tüm alanlar döndürülür.
Aşağıdaki snippet'te, Sidney, Avustralya'daki restoranlar hakkında bilgi döndürmek için nearbySearch() çağrısı gösterilmektedir. İstek eşzamanlıdır, geri çağırma kullanır ve PlacesServiceStatus üzerinde zorunlu bir koşullu 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ında Arama'nın yeni sürümü, önceki sürüme kıyasla aşağıdaki iyileştirmeleri içerir:
- Hangi yer verisi alanlarının döndürüleceğini belirtebilme.
- Eşzamansız işlemi etkinleştiren Promise'lerin kullanımı.
PlacesServicedurumunu kontrol etmeniz gerekmez. Bunun yerine standart hata işleme kullanılabilir.
Aşağıdaki kod snippet'inde, restoranlar için Yakında 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ımı gösterilmektedir (önceki sürümde sıralama, rankBy seçeneği kullanılarak belirtilir). searchNearby() yöntemi await operatörünü kullandığından yalnızca bir async işlevinde 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");
}
}
Daha fazla bilgi
- Eksiksiz örnek koduna bakın
- Yakında Arama (Yeni) ile ilgili belgelere göz atın.
searchNearby()referansına bakın