Genel Bakış
Maps JavaScript API'deki Yerler Kitaplığı'nda bulunan işlevler, uygulamanızın belirli bir alan (ör. harita sınırları) içinde veya sabit bir noktanın çevresinde yer alan yerleri (bu API'de kuruluşlar, coğrafi konumlar veya önemli ilgi alanları olarak tanımlanır) aramasını sağlar.
Places API, uygulamalarınıza Google Haritalar arama alanının yazarken arama yapma davranışını kazandırmak için kullanabileceğiniz bir otomatik tamamlama özelliği sunar. Kullanıcı bir adres yazmaya başladığında otomatik tamamlama özelliği geri kalanını doldurur. Daha fazla bilgi için otomatik tamamlama dokümanlarına bakın.
Başlarken
Maps JavaScript API veya JavaScript hakkında bilginiz yoksa başlamadan önce JavaScript ve API anahtarı edinme başlıklı makaleleri incelemenizi öneririz.
Kitaplığı yükleme
Yerler hizmeti, ana Maps JavaScript API kodundan ayrı, bağımsız bir kitaplıktır. Bu kitaplıkta yer alan işlevleri kullanmak için önce Maps API bootstrap URL'sindeki libraries parametresini kullanarak yüklemeniz gerekir:
<script async
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&libraries=places&callback=initMap">
</script>Daha fazla bilgi için Kitaplıklara Genel Bakış başlıklı makaleyi inceleyin.
Places API'yi API anahtarının API kısıtlamaları listesine ekleyin.
Anahtarlarınıza API kısıtlamaları uygulamak, API anahtarının kullanımını bir veya daha fazla API ya da SDK ile sınırlandırır. API anahtarıyla ilişkilendirilen API veya SDK'lara yapılan istekler işlenir. API anahtarıyla ilişkilendirilmeyen API veya SDK'lara yapılan istekler başarısız olur. Bir API anahtarının Places Library, Maps JavaScript API ile kullanımını kısıtlamak için:- Google Cloud Console'a gidin.
- Proje açılır listesini tıklayın ve güvenliğini sağlamak istediğiniz API anahtarını içeren projeyi seçin.
- Menü düğmesini
tıklayın ve Google Haritalar Platformu > Kimlik Bilgileri'ni seçin.
- Kimlik bilgileri sayfasında, güvenliğini sağlamak istediğiniz API anahtarının adını tıklayın.
- API anahtarını kısıtla ve yeniden adlandır sayfasında kısıtlamaları ayarlayın:
- API kısıtlamaları
- Anahtarı kısıtla'yı seçin.
- API'leri seç'i tıklayın ve hem Maps JavaScript API hem de Places API'yi seçin.
(API'lerden biri listelenmemişse etkinleştirmeniz gerekir.)
- KAYDET'i tıklayın.
Kullanım sınırları ve politikaları
Kotalar
Places Library, Places API'nin Kullanım Sınırları dokümanında açıklandığı gibi Places API ile kullanım kotasını paylaşır.
Politikalar
Yerler Kitaplığı, Maps JavaScript API'nin kullanımı, Places API için açıklanan politikalarla uyumlu olmalıdır.
Yer Aramaları
Yerler hizmetiyle aşağıdaki türlerde aramalar yapabilirsiniz:
- Sorgudan Yer Bulma bir metin sorgusuna (ör. bir yerin adı veya adresi) göre yer döndürür.
- Telefon Numarasından Yer Bulma, telefon numarasına göre yer döndürür.
- Yakındaki yerler araması kullanıcının konumuna göre yakındaki yerlerin listesini döndürür.
- Metin Arama Arama dizesine göre yakındaki yerlerin listesini döndürür. "Pizza".
- Yer Ayrıntıları istekleri, kullanıcı yorumları da dahil olmak üzere belirli bir yer hakkında daha ayrıntılı bilgiler döndürür.
Döndürülen bilgiler arasında restoranlar, mağazalar ve ofisler gibi kuruluşların yanı sıra adresleri, kasaba ve şehir gibi siyasi alanları ve diğer ilgi çekici yerleri belirten "coğrafi kod" sonuçları yer alabilir.
Yer Bulma istekleri
Yer Bulma isteği, metin sorgusu veya telefon numarasıyla yer aramanıza olanak tanır. İki tür Yer Bulma isteği vardır:
Sorgudan Yer Bulma
Sorgudan Yer Bulma, metin girişi alır ve yer döndürür. Giriş, işletme adı veya adres gibi herhangi bir Yer verisi olabilir. Sorgudan Yer Bulma isteği göndermek için PlacesService'nın findPlaceFromQuery() yöntemini çağırın. Bu yöntem aşağıdaki parametreleri alır:
query(zorunlu) Aranacak metin dizesi. Örneğin: "restoran" veya "123 Ana Cadde". Bu, bir yer adı, adres veya kuruluş kategorisi olmalıdır. Diğer giriş türleri hata oluşturabilir ve geçerli sonuçlar döndüreceği garanti edilmez. Places API, bu dizeye göre olası eşleşmeleri döndürür ve sonuçları algılanan alaka düzeylerine göre sıralar.fields(zorunlu) Döndürülecek yer verisi türlerini belirten bir veya daha fazla alan.locationBias(isteğe bağlı) Arama yapılacak alanı tanımlayan koordinatlar. Bu, aşağıdakilerden biri olabilir:- LatLngLiteral veya LatLng nesnesi olarak belirtilen bir dizi enlem/boylam koordinatı
- Dikdörtgen sınırlar (iki enlem/boylam çifti veya LatLngBounds nesnesi)
- Enlem/boylam üzerinde ortalanmış yarıçap (metre cinsinden)
Ayrıca sonuç nesnesini ve google.maps.places.PlacesServiceStatus yanıtını işlemek için findPlaceFromQuery()'ya bir geri çağırma yöntemi iletmeniz gerekir.
Aşağıdaki örnekte, "Avustralya Modern Sanat Müzesi"ni arayan ve name ile geometry alanlarını içeren bir findPlaceFromQuery() çağrısı gösterilmektedir.
var map; var service; var infowindow; function initMap() { var sydney = new google.maps.LatLng(-33.867, 151.195); infowindow = new google.maps.InfoWindow(); map = new google.maps.Map( document.getElementById('map'), {center: sydney, zoom: 15}); var request = { query: 'Museum of Contemporary Art Australia', fields: ['name', 'geometry'], }; var service = new google.maps.places.PlacesService(map); service.findPlaceFromQuery(request, function(results, status) { if (status === google.maps.places.PlacesServiceStatus.OK) { for (var i = 0; i < results.length; i++) { createMarker(results[i]); } map.setCenter(results[0].geometry.location); } }); }
Telefon Numarasından Yer Bulma
Telefon Numarasından Yer Bulma, telefon numarası alır ve yer döndürür. Telefon Numarasından Yer Bulma isteğinde bulunmak için aşağıdaki parametreleri alan PlacesService findPlaceFromPhoneNumber() yöntemini çağırın:
phoneNumber(zorunlu) E.164 biçiminde bir telefon numarası.fields(zorunlu) Döndürülecek yer verisi türlerini belirten bir veya daha fazla alan.locationBias(isteğe bağlı) Arama yapılacak alanı tanımlayan koordinatlar. Bu, aşağıdakilerden biri olabilir:- LatLngLiteral veya LatLng nesnesi olarak belirtilen bir dizi enlem/boylam koordinatı
- Dikdörtgen sınırlar (dört enlem/boylam noktası veya LatLngBounds nesnesi)
- Enlem/boylam üzerinde ortalanmış yarıçap (metre cinsinden)
Ayrıca sonuç nesnesini ve google.maps.places.PlacesServiceStatus yanıtını işlemek için findPlaceFromPhoneNumber()'ya bir geri çağırma yöntemi iletmeniz gerekir.
Alanlar (Yer Bulma yöntemleri)
Döndürülecek yer verisi türleri dizisini belirtmek için fields parametresini kullanın.
Örneğin: fields: ['formatted_address', 'opening_hours', 'geometry'].
Bileşik değerleri belirtirken nokta kullanın. Örneğin: opening_hours.weekday_text.
Alanlar Yer Arama sonuçlarına karşılık gelir ve üç faturalandırma kategorisine ayrılmıştır: Temel, Kişi ve Atmosfer. Temel alanlar, taban ücret üzerinden faturalandırılır ve ek ücret alınmaz. İletişim ve Atmosfer alanları daha yüksek bir ücretle faturalandırılır. Daha fazla bilgi için fiyatlandırma sayfasına göz atın. Alan istenip istenmediğine bakılmaksızın, atıflar (html_attributions) her aramada döndürülür.
Temel
Temel kategoride şu alanlar bulunur:
business_status, formatted_address, geometry,
icon,icon_mask_base_uri, icon_background_color,
name, permanently_closed (kullanımdan kaldırıldı),
photos, place_id, plus_code, types
İletişim
Kişi kategorisi aşağıdaki alanı içerir:opening_hours (Maps JavaScript API'deki Yerler Kitaplığı'nda desteği sonlandırıldı.
opening_hours sonuçlarını almak için Yer Ayrıntıları isteği kullanın.
Atmosfer
Atmosfer kategorisi şu alanları içerir:price_level, rating, user_ratings_total
findPlaceFromQuery() ve
findPlaceFromPhoneNumber() yöntemleri aynı alan grubunu alır ve kendi yanıtlarında aynı alanları döndürebilir.
Konum önyargısı ayarlama (Find Place yöntemleri)
Yer Bulma'nın belirli bir bölgedeki sonuçları tercih etmesini sağlamak için locationBias parametresini kullanın. locationBias simgesini aşağıdaki şekillerde ayarlayabilirsiniz:
Sonuçları belirli bir alana göre yönlendirme:
locationBias: {lat: 37.402105, lng: -122.081974}
Arama yapılacak dikdörtgen bir alan tanımlayın:
locationBias: {north: 37.41, south: 37.40, east: -122.08, west: -122.09}
LatLngBounds da kullanabilirsiniz.
Belirli bir bölgeye odaklı, arama yapılacak yarıçapı (metre cinsinden) tanımlayın:
locationBias: {radius: 100, center: {lat: 37.402105, lng: -122.081974}}
Yakında Arama İstekleri
Yakında arama, belirli bir alan içindeki yerleri anahtar kelimeye veya türe göre aramanıza olanak tanır. Yakında Arama her zaman bir konum içermelidir. Konum şu iki yöntemden biriyle belirtilebilir:
- a
LatLngBounds. - Dairenin merkezini
LatLngnesnesi olarak belirtenlocationözelliği ile metre cinsinden ölçülen bir yarıçapın kombinasyonu olarak tanımlanan dairesel alan.
Yakındaki Yerler araması,
PlacesService'ın nearbySearch() yöntemi çağrılarak başlatılır. Bu yöntem,
PlaceResult nesnelerinden oluşan bir dizi döndürür. nearbySearch()
yönteminin, 3.9 sürümünden itibaren search() yönteminin yerini aldığını unutmayın.
service = new google.maps.places.PlacesService(map); service.nearbySearch(request, callback);
Bu yöntemde aşağıdaki alanlara sahip bir istek kullanılır:
- Aşağıdakilerden biri:
bounds, dikdörtgen arama alanını tanımlayan birgoogle.maps.LatLngBoundsnesnesi olmalıdır. Sınırlar alanı için desteklenen maksimum çapraz mesafe yaklaşık 100.000 metredir.locationveradius. İlkigoogle.maps.LatLngnesnesini, ikincisi ise dairenin yarıçapını metre cinsinden temsil eden basit bir tam sayı nesnesini alır. İzin verilen maksimum yarıçap 50.000 metredir.rankBy, DISTANCE olarak ayarlandığındalocationbelirtmeniz gerektiğini ancakradiusveyaboundsbelirtemeyeceğinizi unutmayın.
keyword(isteğe bağlı): Ad, tür ve adresin yanı sıra müşteri yorumları ve diğer üçüncü taraf içerikleri dahil ancak bunlarla sınırlı olmamak üzere tüm kullanılabilir alanlarla eşleştirilecek bir terim.minPriceLevelvemaxPriceLevel(isteğe bağlı): Sonuçları yalnızca belirtilen aralıktaki yerlerle sınırlandırır. Geçerli değerler 0 (en uygun fiyatlı) ile 4 (en pahalı) arasındadır (bu değerler dahil).nameDesteği sonlandırıldı.keywordyönergesine eşdeğer. Bu alandaki değerler,keywordalanındaki değerlerle birleştirilir ve aynı arama dizesinin bir parçası olarak iletilir.openNow(isteğe bağlı) — Yerler hizmetinin yalnızca sorgu gönderildiği sırada açık olan yerleri döndürmesi gerektiğini belirten bir boole değeri. Google Yerler veritabanında çalışma saatlerini belirtmeyen yerler, sorgunuza bu parametreyi dahil ederseniz döndürülmez.openNowayarınıfalseolarak ayarlamanın herhangi bir etkisi olmaz.rankBy(isteğe bağlı) — Sonuçların listeleneceği sırayı belirtir. Olası değerler:google.maps.places.RankBy.PROMINENCE(varsayılan). Bu seçenek, sonuçları önem derecelerine göre sıralar. Sıralamada, belirlenen yarıçaptaki önemli yerler, yakındaki ancak daha az önemli olan ve eşleşen yerlere göre öncelikli olur. Öne çıkma durumu, bir yerin Google dizinindeki sıralaması, küresel popülerliği ve diğer faktörlerden etkilenebilir.google.maps.places.RankBy.PROMINENCEbelirtildiğinderadiusparametresi gereklidir.google.maps.places.RankBy.DISTANCE. Bu seçenek, sonuçları belirtilenlocationkonumuna (zorunlu) olan mesafelerine göre artan düzende sıralar.RankBy.DISTANCEbelirtirseniz özelboundsve/veyaradiusbelirtemeyeceğinizi unutmayın.RankBy.DISTANCEöğesini belirttiğinizdekeyword,nameveyatypeöğelerinden en az biri gereklidir.
type: Sonuçları, belirtilen türle eşleşen yerlerle sınırlar. Yalnızca bir tür belirtilebilir (birden fazla tür sağlanırsa ilk girişten sonraki tüm türler yoksayılır). Desteklenen türlerin listesine bakın.
Ayrıca, sonuç nesnesini ve google.maps.places.PlacesServiceStatus yanıtını işlemek için nearbySearch() yöntemine bir geri çağırma yöntemi iletmeniz gerekir.
var map; var service; var infowindow; function initialize() { var pyrmont = new google.maps.LatLng(-33.8665433, 151.1956316); map = new google.maps.Map(document.getElementById('map'), { center: pyrmont, zoom: 15 }); var request = { location: pyrmont, 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]); } } }
Metin Arama İstekleri
Google Places Text Search hizmeti, bir dizeye (ör. "New York'ta pizza" veya "Ottawa yakınlarındaki ayakkabı mağazaları") dayalı olarak bir dizi yerle ilgili bilgileri döndüren bir web hizmetidir. Hizmet, metin dizesiyle eşleşen yerlerin ve ayarlanan konum önyargısının bulunduğu bir liste ile yanıt verir. Arama yanıtında bir yer listesi yer alır. Yanıttaki yerlerden herhangi biri hakkında daha fazla bilgi edinmek için Yer Ayrıntıları isteği gönderebilirsiniz.
Metin aramaları, PlacesService'nın textSearch() yöntemi çağrılarak başlatılır.
service = new google.maps.places.PlacesService(map); service.textSearch(request, callback);
Bu yöntemde aşağıdaki alanlara sahip bir istek kullanılır:
query(zorunlu) Aranacak metin dizesi. Örneğin: "restoran" veya "123 Ana Cadde". Bu, bir yer adı, adres veya kuruluş kategorisi olmalıdır. Diğer giriş türleri hata oluşturabilir ve geçerli sonuçlar döndüreceği garanti edilmez. Places hizmeti, bu dizeye göre olası eşleşmeleri döndürür ve sonuçları algılanan alaka düzeylerine göre sıralar. Bu parametre, arama isteğindetypeparametresi de kullanılıyorsa isteğe bağlı hale gelir.- İsteğe bağlı:
openNow: Yerler hizmetinin, sorgu gönderildiği sırada yalnızca açık olan yerleri döndürmesi gerektiğini belirten bir Boole değeri. Google Yerler veritabanında çalışma saatlerini belirtmeyen yerler, sorgunuza bu parametreyi dahil ederseniz döndürülmez.openNowayarınıfalseolarak ayarlamanın hiçbir etkisi yoktur.minPriceLevelvemaxPriceLevel— Sonuçları yalnızca belirtilen fiyat düzeyindeki yerlerle sınırlar. Geçerli değerler 0 (en uygun fiyatlı) ile 4 (en pahalı) aralığındadır (bu değerler dahil).- Aşağıdakilerden biri:
bounds, dikdörtgen arama alanını tanımlayan birgoogle.maps.LatLngBoundsnesnesi olmalıdır. Sınırlar alanı için desteklenen maksimum çapraz mesafe yaklaşık 100.000 metredir.locationveradius:locationveradiusparametrelerini ileterek sonuçları belirli bir daireye göre yönlendirebilirsiniz. Bu işlem, Yerler hizmetine sonuçları söz konusu daire içinde göstermeyi tercih etmesi talimatını verir. Tanımlanan alanın dışındaki sonuçlar gösterilmeye devam edebilir. Konum,google.maps.LatLngnesnesini alır ve yarıçap, dairenin yarıçapını metre cinsinden temsil eden basit bir tam sayı alır. İzin verilen maksimum yarıçap 50.000 metredir.
type: Sonuçları, belirtilen türle eşleşen yerlerle sınırlar. Yalnızca bir tür belirtilebilir (birden fazla tür sağlanırsa ilk girişten sonraki tüm türler yoksayılır). Desteklenen türlerin listesine bakın.
Ayrıca sonuç nesnesini ve google.maps.places.PlacesServiceStatus yanıtını işlemek için textSearch()'ya bir geri çağırma yöntemi de iletmeniz gerekir.
var map; var service; var infowindow; function initialize() { var pyrmont = new google.maps.LatLng(-33.8665433,151.1956316); map = new google.maps.Map(document.getElementById('map'), { center: pyrmont, zoom: 15 }); var request = { location: pyrmont, radius: 500, query: 'restaurant' }; service = new google.maps.places.PlacesService(map); service.textSearch(request, callback); } function callback(results, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { for (var i = 0; i < results.length; i++) { var place = results[i]; createMarker(results[i]); } } }
Arama Yanıtları
Durum Kodları
PlacesServiceStatus yanıt nesnesi, isteğin durumunu içerir ve yer isteğinin neden başarısız olduğunu bulmanıza yardımcı olacak hata ayıklama bilgilerini içerebilir. Olası durum değerleri şunlardır:
INVALID_REQUEST: Bu istek geçersizdi.OK: Yanıtta geçerli bir sonuç var.OVER_QUERY_LIMIT: Web sayfası, istek kotasını aşmıştır.REQUEST_DENIED: Web sayfasının PlacesService'i kullanmasına izin verilmiyor.UNKNOWN_ERROR: PlacesService isteği, sunucu hatası nedeniyle işlenemedi. Tekrar denerseniz istek başarılı olabilir.ZERO_RESULTS: Bu istek için sonuç bulunamadı.
Yer Arama Sonuçları
findPlace(), nearbySearch() ve
textSearch() işlevleri,
PlaceResult nesnelerinden oluşan bir dizi döndürür.
Her PlaceResult nesnesi aşağıdaki özellikleri içerebilir:
business_status, işletme olan yerlerin faaliyet durumunu gösterir. Aşağıdaki değerlerden birini içerebilir:OPERATIONALCLOSED_TEMPORARILYCLOSED_PERMANENTLY
business_statusdöndürülmez.formatted_address, bu yerin kullanıcıların okuyabileceği adresini içeren bir dizedir.formatted_addressözelliği yalnızca Metin Arama için döndürülür.Bu adres genellikle posta adresine eşdeğerdir. Birleşik Krallık gibi bazı ülkelerde, lisanslama kısıtlamaları nedeniyle gerçek posta adreslerinin dağıtımına izin verilmediğini unutmayın.
Biçimlendirilmiş adres, mantıksal olarak bir veya daha fazla adres bileşeninden oluşur. Örneğin, "111 8th Avenue, New York, NY" adresi şu bileşenlerden oluşur: "111" (sokak numarası), "8th Avenue" (yol), "New York" (şehir) ve "NY" (ABD eyaleti).
Biçimlendirilmiş adresi programatik olarak ayrıştırmayın. Bunun yerine, API yanıtının biçimlendirilmiş adres alanına ek olarak içerdiği bağımsız adres bileşenlerini kullanmanız gerekir.
geometry: Yerle ilgili geometri bilgileri. Bu kapsamda:location, yerin enlem ve boylamını sağlar.viewport, bu yer görüntülenirken haritadaki tercih edilen görüntü alanını tanımlar.
permanently_closed(kullanımdan kaldırıldı) Yerlerin kalıcı veya geçici olarak kapatılıp kapatılmadığını belirten bir boole işaretidir (değertrue).permanently_closedkullanmayın. Bunun yerine, işletmelerin operasyonel durumunu almak içinbusiness_statuskullanın.plus_code(bkz. Open Location Code ve Plus Codes) bir alanı temsil eden, enlem ve boylam koordinatlarından türetilmiş, kodlanmış bir konum referansıdır: 1/8000 dereceye 1/8000 derece (Ekvator'da yaklaşık 14 m x 14 m) veya daha küçük. Plus code'lar, sokak adreslerinin olmadığı yerlerde (binaların numaralandırılmadığı veya sokakların adlandırılmadığı yerler) sokak adreslerinin yerine kullanılabilir.Plus Code, genel kod ve bileşik kod olarak biçimlendirilir:
global_code, 4 karakterlik bir alan kodu ve 6 karakterlik veya daha uzun bir yerel koddur (849VCWC8+R9).compound_code, açık bir konuma sahip 6 karakterli veya daha uzun bir yerel koddur (CWC8+R9, Mountain View, CA, ABD). Bu içeriği programatik olarak ayrıştırmayın.
html_attributions: Arama sonuçlarını gösterirken göstermeniz gereken bir ilişkilendirme dizisi. Dizideki her giriş, tek bir ilişkilendirmeye ait HTML metnini içerir. Not: Bu, arama yanıtının tamamı için tüm ilişkilendirmelerin toplu halidir. Bu nedenle, yanıttaki tümPlaceResultnesneleri aynı ilişkilendirme listelerini içerir.icon, renkli bir 71 piksel x 71 piksel PNG simgesinin URL'sini döndürür.icon_mask_base_uri, .svg veya .png uzantısı hariç olmak üzere renksiz bir simgenin temel URL'sini döndürür.icon_background_color, yerin kategorisi için varsayılan onaltılık renk kodunu döndürür.name: Yer adı.opening_hoursaşağıdaki bilgileri içerebilir:open_now, yerin şu anda açık olup olmadığını belirten bir Boole değeridir (Places Library, Maps JavaScript API'de kullanımdan kaldırıldı. Bunun yerineutc_offset_minuteskullanın).
place_id, bir yeri benzersiz şekilde tanımlayan metin tanımlayıcısıdır. Yerle ilgili bilgileri almak için bu tanımlayıcıyı Yer Ayrıntıları isteğine iletin. Yer kimliğiyle bir yere referans verme hakkında daha fazla bilgi edinin.rating, toplu kullanıcı yorumlarına göre yerin 0,0 ile 5,0 arasındaki puanını içerir.typesBu yerin türlerinin dizisi (ör.["political", "locality"]veya["restaurant", "lodging"]). Bu dizi birden fazla değer içerebilir veya boş olabilir. Yeni değerler önceden bildirimde bulunulmaksızın kullanıma sunulabilir. Desteklenen türlerin listesine bakın.vicinity: Yerle ilgili basitleştirilmiş adres. Sokak adı, sokak numarası ve yerleşim yeri bilgilerini içerir ancak il/eyalet, posta kodu veya ülke bilgilerini içermez. Örneğin, Google'ın Sidney, Avustralya ofisininvicinitydeğeri5/48 Pirrama Road, Pyrmont'dir.
Ek Sonuçlara Erişme
Varsayılan olarak, her yer araması sorgu başına en fazla 20 sonuç döndürür. Ancak her arama, üç sayfaya bölünmüş 60 sonuç döndürebilir.
PlaceSearchPagination
nesnesi kullanılarak ek sayfalar kullanılabilir. Ek sayfalara erişmek için geri çağırma işlevini kullanarak PlaceSearchPagination nesnesini yakalamanız gerekir. PlaceSearchPagination nesnesi şu şekilde tanımlanır:
hasNextPageBaşka sonuçların olup olmadığını belirten bir boole özelliği.trueEk bir sonuç sayfası olduğunda.nextPage()Sonraki sonuç kümesini döndüren bir işlev. Arama yaptıktan sonra, sonuçların bir sonraki sayfasının kullanılabilir olması için iki saniye beklemeniz gerekir.
Sonraki sonuç grubunu görmek için nextPage numarasını arayın.
Sonraki sonuç sayfası gösterilmeden önce her sonuç sayfası gösterilmelidir. Her aramanın, kullanım sınırlarınız dahilinde tek bir istek olarak sayıldığını unutmayın.
Aşağıdaki örnekte, birden fazla arama isteği gönderebilmeniz için geri çağırma işlevinizi PlaceSearchPagination nesnesini yakalayacak şekilde nasıl değiştireceğiniz gösterilmektedir.
TypeScript
// This example requires the Places library. Include the libraries=places // parameter when you first load the API. For example: // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places"> function initMap(): void { // Create the map. const pyrmont = { lat: -33.866, lng: 151.196 }; const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { center: pyrmont, zoom: 17, mapId: "8d193001f940fde3", } as google.maps.MapOptions ); // Create the places service. const service = new google.maps.places.PlacesService(map); let getNextPage: () => void | false; const moreButton = document.getElementById("more") as HTMLButtonElement; moreButton.onclick = function () { moreButton.disabled = true; if (getNextPage) { getNextPage(); } }; // Perform a nearby search. service.nearbySearch( { location: pyrmont, radius: 500, type: "store" }, ( results: google.maps.places.PlaceResult[] | null, status: google.maps.places.PlacesServiceStatus, pagination: google.maps.places.PlaceSearchPagination | null ) => { if (status !== "OK" || !results) return; addPlaces(results, map); moreButton.disabled = !pagination || !pagination.hasNextPage; if (pagination && pagination.hasNextPage) { getNextPage = () => { // Note: nextPage will call the same handler function as the initial call pagination.nextPage(); }; } } ); } function addPlaces( places: google.maps.places.PlaceResult[], map: google.maps.Map ) { const placesList = document.getElementById("places") as HTMLElement; for (const place of places) { if (place.geometry && place.geometry.location) { const image = { url: place.icon!, size: new google.maps.Size(71, 71), origin: new google.maps.Point(0, 0), anchor: new google.maps.Point(17, 34), scaledSize: new google.maps.Size(25, 25), }; new google.maps.Marker({ map, icon: image, title: place.name!, position: place.geometry.location, }); const li = document.createElement("li"); li.textContent = place.name!; placesList.appendChild(li); li.addEventListener("click", () => { map.setCenter(place.geometry!.location!); }); } } } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// This example requires the Places library. Include the libraries=places // parameter when you first load the API. For example: // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places"> function initMap() { // Create the map. const pyrmont = { lat: -33.866, lng: 151.196 }; const map = new google.maps.Map(document.getElementById("map"), { center: pyrmont, zoom: 17, mapId: "8d193001f940fde3", }); // Create the places service. const service = new google.maps.places.PlacesService(map); let getNextPage; const moreButton = document.getElementById("more"); moreButton.onclick = function () { moreButton.disabled = true; if (getNextPage) { getNextPage(); } }; // Perform a nearby search. service.nearbySearch( { location: pyrmont, radius: 500, type: "store" }, (results, status, pagination) => { if (status !== "OK" || !results) return; addPlaces(results, map); moreButton.disabled = !pagination || !pagination.hasNextPage; if (pagination && pagination.hasNextPage) { getNextPage = () => { // Note: nextPage will call the same handler function as the initial call pagination.nextPage(); }; } }, ); } function addPlaces(places, map) { const placesList = document.getElementById("places"); for (const place of places) { if (place.geometry && place.geometry.location) { const image = { url: place.icon, size: new google.maps.Size(71, 71), origin: new google.maps.Point(0, 0), anchor: new google.maps.Point(17, 34), scaledSize: new google.maps.Size(25, 25), }; new google.maps.Marker({ map, icon: image, title: place.name, position: place.geometry.location, }); const li = document.createElement("li"); li.textContent = place.name; placesList.appendChild(li); li.addEventListener("click", () => { map.setCenter(place.geometry.location); }); } } } window.initMap = initMap;
Örneği deneyin
Yer Ayrıntıları
Yer hizmeti, bir alan içindeki yerlerin listesini sağlamanın yanı sıra belirli bir yer hakkında ayrıntılı bilgiler de döndürebilir. Bir yer, yer arama yanıtında döndürüldükten sonra bu yerle ilgili ek ayrıntılar (ör. tam adresi, telefon numarası, kullanıcı puanı ve yorumları) istemek için yer kimliği kullanılabilir.
Yer Ayrıntıları İstekleri
Yer ayrıntıları, hizmetin getDetails() yöntemiyle yapılan bir çağrıyla istenir.
service = new google.maps.places.PlacesService(map); service.getDetails(request, callback);
Bu yöntem, bir yerin placeId değerini ve hangi tür Yer verilerinin döndürüleceğini belirten alanları içeren bir istek alır. Yer kimliğiyle bir yere referans verme hakkında daha fazla bilgi edinin.
Ayrıca, google.maps.places.PlacesServiceStatus yanıtında iletilen durum kodunun ve google.maps.places.PlaceResult nesnesinin işlenmesi gereken bir geri çağırma yöntemi de alır.
var request = { placeId: 'ChIJN1t_tDeuEmsRUsoyG83frY4', fields: ['name', 'rating', 'formatted_phone_number', 'geometry'] }; service = new google.maps.places.PlacesService(map); service.getDetails(request, callback); function callback(place, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { createMarker(place); } }
Alanlar (Yer ayrıntıları)
fields parametresi, bir dize dizisi (alan adları) alır.
Döndürülecek yer verisi türleri dizisini belirtmek için fields parametresini kullanın.
Örneğin: fields: ['address_components', 'opening_hours', 'geometry'].
Bileşik değerleri belirtirken nokta kullanın. Örneğin: opening_hours.weekday_text.
Alanlar Yer Ayrıntısı sonuçlarına karşılık gelir ve üç faturalandırma kategorisine ayrılmıştır: Temel, Kişi ve Atmosfer. Temel alanlar taban ücret üzerinden faturalandırılır ve ek ücret alınmaz. Kişi ve Atmosfer alanları daha yüksek bir ücretle faturalandırılır. Daha fazla bilgi için fiyatlandırma sayfasına göz atın. İlişkilendirmeler (html_attributions) istek yapılmasa da her aramada döndürülür.
Temel
Temel kategorisinde şu alanlar bulunur:
address_components, adr_address, business_status,
formatted_address, geometry, icon,
icon_mask_base_uri, icon_background_color,name,
permanently_closed (kullanımdan kaldırıldı),
photo, place_id, plus_code, type,
url, utc_offset (kullanımdan kaldırıldı
Yer Kitaplığı'nda, Maps JavaScript API), utc_offset_minutes,
vicinity
İletişim
Kişi kategorisi şu alanları içerir:
formatted_phone_number, international_phone_number,
opening_hours, website
Atmosfer
Atmosfer kategorisi şu alanları içerir:
price_level, rating, reviews,
user_ratings_total
Yer alanları hakkında daha fazla bilgi edinin. Yer verisi isteklerinin nasıl faturalandırıldığı hakkında daha fazla bilgi için Kullanım ve Faturalandırma başlıklı makaleyi inceleyin.
Yer Ayrıntıları Yanıtları
Durum Kodları
PlacesServiceStatus yanıt nesnesi, isteğin durumunu içerir ve Yer Ayrıntıları isteğinin neden başarısız olduğunu bulmanıza yardımcı olacak hata ayıklama bilgilerini içerebilir. Olası durum değerleri şunlardır:
INVALID_REQUEST: Bu istek geçersizdi.OK: Yanıtta geçerli bir sonuç var.OVER_QUERY_LIMIT: Web sayfası, istek kotasını aşmıştır.NOT_FOUNDBaşvuruda bulunulan konum, Yerler veritabanında bulunamadı.REQUEST_DENIED: Web sayfasının PlacesService'i kullanmasına izin verilmiyor.UNKNOWN_ERROR: PlacesService isteği, sunucu hatası nedeniyle işlenemedi. Tekrar denerseniz istek başarılı olabilir.ZERO_RESULTS: Bu istek için sonuç bulunamadı.
Yer Ayrıntıları Sonuçları
Başarılı bir getDetails() çağrısı, aşağıdaki özelliklere sahip bir
PlaceResult nesnesi döndürür:
address_components: Bu adres için geçerli olan ayrı bileşenleri içeren bir dizi.Her adres bileşeni genellikle aşağıdaki alanları içerir:
types[], adres bileşeninin türünü belirten bir dizidir. Desteklenen türlerin listesine bakın.long_name, adres bileşeninin Geocoder tarafından döndürülen tam metin açıklaması veya adıdır.short_name, varsa adres bileşeninin kısaltılmış metin adıdır. Örneğin, Alaska eyaletinin adres bileşeninde 2 harfli posta kısaltması kullanılaraklong_name"Alaska" veshort_name"AK" olabilir.
address_components[]dizisiyle ilgili aşağıdaki bilgilere dikkat edin:- Adres bileşenleri dizisi,
formatted_addressdeğerinden daha fazla bileşen içerebilir. - Dizi,
formatted_addressiçinde yer alanlar dışında, adres içeren tüm siyasi varlıkları içermeyebilir. Belirli bir adresi içeren tüm siyasi varlıkları almak için, isteğe parametre olarak adresin enlem/boylamını ileterek ters coğrafi kodlama kullanmanız gerekir. - Yanıtın biçiminin istekler arasında aynı kalacağı garanti edilmez. Özellikle
address_componentssayısı, istenen adrese göre değişir ve aynı adres için zaman içinde değişebilir. Bir bileşen, dizideki konumunu değiştirebilir. Bileşenin türü değişebilir. Belirli bir bileşen sonraki yanıtlarda eksik olabilir.
business_status, işletme olan yerlerin faaliyet durumunu gösterir. Aşağıdaki değerlerden birini içerebilir:OPERATIONALCLOSED_TEMPORARILYCLOSED_PERMANENTLY
business_statusdöndürülmez.formatted_address: Bu yerin kullanıcılar tarafından okunabilen adresi.Bu adres genellikle posta adresine eşdeğerdir. Birleşik Krallık gibi bazı ülkelerde, lisanslama kısıtlamaları nedeniyle gerçek posta adreslerinin dağıtımına izin verilmediğini unutmayın.
Biçimlendirilmiş adres, mantıksal olarak bir veya daha fazla adres bileşeninden oluşur. Örneğin, "111 8th Avenue, New York, NY" adresi şu bileşenlerden oluşur: "111" (sokak numarası), "8th Avenue" (yol), "New York" (şehir) ve "NY" (ABD eyaleti).
Biçimlendirilmiş adresi programatik olarak ayrıştırmayın. Bunun yerine, API yanıtının biçimlendirilmiş adres alanına ek olarak içerdiği bağımsız adres bileşenlerini kullanmanız gerekir.
formatted_phone_number: İşletmenin telefon numarası, numaranın bölgesel kurallarına göre biçimlendirilmiş olmalıdır.geometry: Yerle ilgili geometri bilgileri. Bu kapsamda:location, yerin enlem ve boylamını sağlar.viewport, bu yer görüntülenirken haritadaki tercih edilen görüntü alanını tanımlar.
permanently_closed(kullanımdan kaldırıldı) Yerlerin kalıcı veya geçici olarak kapatılıp kapatılmadığını belirten bir boole işaretidir (değertrue).permanently_closedkullanmayın. Bunun yerine, işletmelerin operasyonel durumunu almak içinbusiness_statuskullanın.plus_code(bkz. Open Location Code ve Plus Codes) bir alanı temsil eden, enlem ve boylam koordinatlarından türetilmiş, kodlanmış bir konum referansıdır: 1/8000 dereceye 1/8000 derece (Ekvator'da yaklaşık 14 m x 14 m) veya daha küçük. Plus code'lar, sokak adreslerinin olmadığı yerlerde (binaların numaralandırılmadığı veya sokakların adlandırılmadığı yerler) sokak adreslerinin yerine kullanılabilir.Plus Code, genel kod ve bileşik kod olarak biçimlendirilir:
global_code, 4 karakterlik bir alan kodu ve 6 karakterlik veya daha uzun bir yerel koddur (849VCWC8+R9).compound_code, açık bir konuma sahip 6 karakterli veya daha uzun bir yerel koddur (CWC8+R9, Mountain View, CA, ABD). Bu içeriği programatik olarak ayrıştırmayın.
html_attributions: Bu yer sonucu için gösterilecek ilişkilendirme metni.icon: Bu yerin türünü temsil etmek için kullanılabilecek bir resim kaynağının URL'si.international_phone_number, yerin telefon numarasını uluslararası biçimde içerir. Uluslararası biçimde ülke kodu bulunur ve numaranın başında artı (+) işareti yer alır. Örneğin, Google'ın Avustralya, Sidney'deki ofisinininternational_phone_numberdeğeri+61 2 9374 4000'dir.name: Yer adı.utc_offsetKullanımdan kaldırıldı Maps JavaScript API'deki Yerler Kitaplığı'nda bunun yerineutc_offset_minuteskullanın.utc_offset_minutes, bu yerin geçerli saat diliminin UTC'den kaç dakika farklı olduğunu gösterir. Örneğin, Avustralya'nın Sidney şehrinde yaz saati uygulaması sırasında bu değer 660 (UTC'den 11 saat ileri) olurken Kaliforniya'da yaz saati uygulaması dışında bu değer -480 (UTC'den 8 saat geri) olur.opening_hoursaşağıdaki bilgileri içerir:open_now(Kullanımdan kaldırıldı Maps JavaScript API'deki Yerler Kitaplığı'nda; bunun yerine opening_hours.isOpen() kullanın.isOpenile Yer Ayrıntıları'nı kullanma hakkında bilgi edinmek için Places API'de çalışma saatlerini alma başlıklı videoyu izleyin .) `open_now`, yerin şu anda açık olup olmadığını belirten bir Boole değeridir.periods[], pazar gününden başlayarak kronolojik sırayla yedi günü kapsayan açılış dönemlerinin dizisidir. Her dönem şunları içerir:open, yerin açılış saatini açıklayan bir gün ve saat nesnesi çifti içerir:dayHaftanın günlerine karşılık gelen ve pazar günüyle başlayan 0-6 arasındaki bir sayı. Örneğin, 2 sayısı Salı gününü ifade eder.time, 24 saatlik ssdd biçiminde günün saatini içerebilir (değerler 0000-2359 aralığındadır).time, yerin saat diliminde bildirilir.
close, yerin ne zaman kapandığını açıklayan bir gün ve saat nesnesi çifti içerebilir. Not: Bir yer her zaman açıksa yanıttaclosebölümü yer almaz. Uygulamalar, her zaman açık olanınopendönemi olarak gösterilmesine güvenebilir. Bu dönemdedaydeğeri 0,timedeğeri 0000'dır vecloseyoktur.
weekday_text, haftanın her günü için biçimlendirilmiş çalışma saatlerini temsil eden yedi dizeden oluşan bir dizidir. Yer Ayrıntıları isteğinde birlanguageparametresi belirtilmişse Places Hizmeti, çalışma saatlerini bu dile uygun şekilde biçimlendirir ve yerelleştirir. Bu dizideki öğelerin sırasılanguageparametresine bağlıdır. Bazı dillerde hafta Pazartesi günü başlarken bazılarında Pazar günü başlar.
permanently_closed(kullanımdan kaldırıldı) Yerlerin kalıcı veya geçici olarak kapatılıp kapatılmadığını belirten bir boole işaretidir (değertrue).permanently_closedkullanmayın. Bunun yerine, işletmelerin operasyonel durumunu almak içinbusiness_statuskullanın.photos[]:PlacePhotonesneleri dizisi.PlacePhoto,getUrl()yöntemiyle fotoğraf çekmek için kullanılabilir. Alternatif olarak, nesneyi aşağıdaki değerler açısından inceleyebilirsiniz:height: Resmin piksel cinsinden maksimum yüksekliği.width: Resmin piksel cinsinden maksimum genişliği.html_attributions: Bu yer fotoğrafıyla birlikte gösterilecek atfetme metni.
place_id: Bir yeri benzersiz şekilde tanımlayan ve Yer Ayrıntıları isteği kullanılarak yerle ilgili bilgileri almak için kullanılabilen metin tanımlayıcısı. Yer kimliğiyle bir yere referans verme hakkında daha fazla bilgi edinin.rating: Toplu kullanıcı yorumlarına göre yerin 0, 0 ile 5, 0 arasındaki puanı.reviewsen fazla beş yorumdan oluşan bir dizi. Her inceleme çeşitli bileşenlerden oluşur:aspects[], her biri kuruluşun tek bir özelliğinin derecelendirmesini sağlayan birPlaceAspectRatingnesne dizisi içerir. Dizideki ilk nesne birincil yön olarak kabul edilir. Her birPlaceAspectRatingşu şekilde tanımlanır:typeDeğerlendirilen yönün adı. Şu türler desteklenir:appeal,atmosphere,decor,facilities,food,overall,qualityveservice.ratingBu belirli yön için kullanıcının 0 ile 3 arasındaki puanı.
author_nameYorumu gönderen kullanıcının adı. Anonim yorumlar "Bir Google kullanıcısı" olarak ilişkilendirilir. Bir dil parametresi ayarlanmışsa "Bir Google kullanıcısı" ifadesi yerelleştirilmiş bir dize döndürür.author_urlKullanıcının Google+ profilinin URL'si (varsa).languageKullanıcının yorumunda kullanılan dili belirten bir IETF dil kodu. Bu alan yalnızca ana dil etiketini içerir, ülke veya bölgeyi belirten ikincil etiketi içermez. Örneğin, tüm İngilizce yorumlar "en-AU" veya "en-UK" olarak değil, "en" olarak etiketlenir.ratingkullanıcının bu yer için verdiği genel puan. Bu, 1 ile 5 arasında bir tam sayıdır.textkullanıcının yorumu. Google Yerler ile bir konumu incelerken metin yorumları isteğe bağlı olarak kabul edilir. Bu nedenle, bu alan boş olabilir.
typesBu yerin türlerinin dizisi (ör.["political", "locality"]veya["restaurant", "lodging"]). Bu dizi birden fazla değer içerebilir veya boş olabilir. Yeni değerler önceden bildirimde bulunulmaksızın kullanıma sunulabilir. Desteklenen türlerin listesine bakın.url: Bu yerin resmi Google sayfasının URL'si. Bu, Google'a ait ve yerle ilgili mevcut en iyi bilgileri içeren sayfadır. Uygulamalar, kullanıcıya yerle ilgili ayrıntılı sonuçları gösteren tüm ekranlarda bu sayfaya bağlantı vermelidir veya bu sayfayı yerleştirmelidir.vicinity: Yerle ilgili basitleştirilmiş adres. Sokak adı, sokak numarası ve yerleşim yeri bilgilerini içerir ancak il/eyalet, posta kodu veya ülke bilgilerini içermez. Örneğin, Google'ın Sidney, Avustralya ofisininvicinitydeğeri5/48 Pirrama Road, Pyrmont'dir.vicinityözelliği yalnızca yakındaki arama için döndürülür.website, bu yerin yetkili web sitesini (ör. bir işletmenin ana sayfası) listeler.
Not: Çok boyutlu puanlar tüm konumlar için kullanılamayabilir. Yorum sayısı çok azsa ayrıntılar yanıtında 0,0-5,0 ölçeğinde eski bir puan (varsa) veya hiç puan yer almaz.
Yer kimliği ile bir yere referans verme
Yer kimliği, Google Haritası'ndaki bir yerin benzersiz referansıdır. İşletmeler, önemli noktalar, parklar ve kavşaklar dahil olmak üzere çoğu konum için yer kimlikleri kullanılabilir.
Uygulamanızda yer kimliği kullanmak için önce kimliği aramanız gerekir. Bu kimlik, Yer Arama veya Ayrıntılar isteğinin PlaceResult bölümünde bulunur.
Daha sonra bu yer kimliğini kullanarak Yer
Ayrıntıları'nı arayabilirsiniz.
Yer kimlikleri, Google Haritalar Platformu Hizmet Şartları'nın Bölüm 3.2.3(b)'de belirtilen önbelleğe alma kısıtlamalarından muaftır. Bu nedenle, yer kimliği değerlerini daha sonra kullanmak üzere saklayabilirsiniz. Yer kimliklerini depolarken yararlanabileceğiniz en iyi uygulamalar için yer kimliğine genel bakış başlıklı makaleyi inceleyin.
var map; function initialize() { // Create a map centered in Pyrmont, Sydney (Australia). map = new google.maps.Map(document.getElementById('map'), { center: {lat: -33.8666, lng: 151.1958}, zoom: 15 }); // Search for Google's office in Australia. var request = { location: map.getCenter(), radius: '500', query: 'Google Sydney' }; var service = new google.maps.places.PlacesService(map); service.textSearch(request, callback); } // Checks that the PlacesServiceStatus is OK, and adds a marker // using the place ID and location from the PlacesService. function callback(results, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { var marker = new google.maps.Marker({ map: map, place: { placeId: results[0].place_id, location: results[0].geometry.location } }); } } google.maps.event.addDomListener(window, 'load', initialize);
Yerin Fotoğrafları
Sitenize yüksek kaliteli fotoğraf içerikleri eklemek için Yer Fotoğrafı özelliğini kullanın. Fotoğraf hizmeti, Yerler ve Google+ Yerel veritabanında depolanan milyonlarca fotoğrafa erişmenizi sağlar. Yer Ayrıntıları isteği kullanarak yer bilgisi aldığınızda, ilgili fotoğraf içerikleri için fotoğraf referansları döndürülür. Yakındaki Arama ve Metin Arama istekleri de alakalı olduğunda yer başına tek bir fotoğraf referansı döndürür. Fotoğraf hizmetini kullanarak referans verilen fotoğraflara erişebilir ve resmi uygulamanız için en uygun boyuta yeniden boyutlandırabilirsiniz.
PlacePhoto nesnelerinin dizisi, PlacesService öğesine karşı yapılan tüm getDetails(), textSearch() veya nearbySearch() istekleri için PlaceResult nesnesinin bir parçası olarak döndürülür.
Not: Döndürülen fotoğraf sayısı isteğe göre değişir.
- Yakındaki Arama veya Metin Arama en fazla bir
PlacePhotonesnesi döndürür. - Ayrıntılar isteği en fazla on
PlacePhotonesnesi döndürür.
PlacePhoto.getUrl() yöntemini çağırıp geçerli bir PhotoOptions nesnesi ileterek ilişkili resmin URL'sini isteyebilirsiniz. Resmin maksimum yüksekliğini ve genişliğini belirtmek için PhotoOptions nesnesini kullanın. Hem maxHeight hem de maxWidth için bir değer belirtirseniz fotoğraf hizmeti, orijinal en boy oranını koruyarak resmi iki boyuttan daha küçük olanına göre yeniden boyutlandırır.
Aşağıdaki kod snippet'i bir yer nesnesini kabul eder ve fotoğraf varsa haritaya işaretçi ekler. Varsayılan işaretçi resmi, fotoğrafın küçük bir sürümüyle değiştirilir.
function createPhotoMarker(place) { var photos = place.photos; if (!photos) { return; } var marker = new google.maps.Marker({ map: map, position: place.geometry.location, title: place.name, icon: photos[0].getUrl({maxWidth: 35, maxHeight: 35}) }); }
Fotoğraf hizmeti tarafından döndürülen fotoğraflar, işletme sahipleri ve kullanıcı tarafından gönderilen fotoğraflar da dahil olmak üzere çeşitli konumlardan alınır. Çoğu durumda bu fotoğraflar, atıfta bulunulmadan kullanılabilir veya gerekli atıf, resmin bir parçası olarak eklenir. Ancak, döndürülen photo öğesi html_attributions alanında bir değer içeriyorsa resmi gösterdiğiniz her yerde uygulamanıza ek atfı eklemeniz gerekir.