Yer kimlikleri

Platform seçin: Android iOS JavaScript Web Hizmeti
Avrupa Ekonomik Alanı (AEA) geliştiricileri

Giriş

Yer kimlikleri, Google Places veritabanında ve Google Haritalar'da bir yeri benzersiz şekilde tanımlar. Aşağıdaki Maps API'lerine yapılan isteklerde yer kimlikleri kabul edilir:

  • Geocoding API ve Geocoding Hizmeti, Maps JavaScript API'de bir yer kimliği için adres alma.
  • Routes API ve Directions API (Eski) ile Directions Hizmeti, Maps JavaScript API'de (Eski) başlangıç, hedef ve ara yol noktalarını belirtme.
  • Routes API, Distance Matrix API (Eski) ve Distance Matrix Hizmeti, Maps JavaScript API (Eski) içinde başlangıç ve hedef belirtme.
  • Yerler API'sinde (Yeni), Android için Yerler SDK'sında (Yeni), iOS için Yerler SDK'sında (Yeni) ve Yerler Kitaplığı'nda yer ayrıntılarını alma
  • Maps Embed API'de yer kimliği parametrelerini kullanma
  • Haritalar URL'lerindeki arama sorguları alınıyor.
  • Roads API'de hız sınırlarını gösterme
  • Sınırlar için veri odaklı stilde sınır çokgenlerini bulma ve stilini belirleme.

Belirli bir yerin kimliğini bulma

Belirli bir yerin yer kimliğini mi arıyorsunuz? Bir yeri aramak ve kimliğini almak için aşağıdaki yer kimliği bulma aracını kullanın:

Alternatif olarak, Maps JavaScript API belgelerinde koduyla birlikte yer kimliği bulucuyu görüntüleyebilirsiniz.

Genel Bakış

Yer kimliği, bir yeri benzersiz şekilde tanımlayan metin biçimindeki tanımlayıcıdır. Tanımlayıcının uzunluğu değişebilir (yer kimlikleri için maksimum uzunluk yoktur). Örnekler:

  • ChIJgUbEo8cfqokR5lP9_Wh_DaM
  • GhIJQWDl0CIeQUARxks3icF8U8A
  • EicxMyBNYXJrZXQgU3QsIFdpbG1pbmd0b24sIE5DIDI4NDAxLCBVU0EiGhIYChQKEgnRTo6ixx-qiRHo_bbmkCm7ZRAN
  • EicxMyBNYXJrZXQgU3QsIFdpbG1pbmd0b24sIE5DIDI4NDAxLCBVU0E
  • IhoSGAoUChIJ0U6OoscfqokR6P225pApu2UQDQ

İşletmeler, önemli noktalar, parklar ve kavşaklar dahil olmak üzere çoğu konum için yer kimlikleri kullanılabilir. Aynı yerin veya konumun birden fazla farklı yer kimliği olabilir. Yer kimlikleri zaman içinde değişebilir.

Places API ve bir dizi Google Haritalar Platformu API'sinde aynı yer kimliğini kullanabilirsiniz. Örneğin, Places API, Maps JavaScript API, Geocoding API, Maps Embed API ve Roads API'de bir yere referans vermek için aynı yer kimliğini kullanabilirsiniz.

Yer kimliğini kullanarak yer ayrıntılarını alma

Yer kimliklerini kullanmanın yaygın bir yolu, Places API veya Maps JavaScript API'deki Places kitaplığını kullanarak bir yer aramaktır. Ardından, yer ayrıntılarını almak için döndürülen yer kimliğini kullanın. Yer kimliğini saklayabilir ve daha sonra aynı yer ayrıntılarını almak için kullanabilirsiniz. Bu belgenin ilerleyen kısımlarında yer kimliklerini kaydetme hakkında bilgi edinebilirsiniz.

Android için Yerler SDK'sını (Yeni) kullanan örnek

Android için Yerler SDK'sında (Yeni), Place.getId() yöntemini çağırarak bir yerin kimliğini alabilirsiniz. Yer Adı Otomatik Tamamlama (Eski) hizmeti, sağlanan arama sorgusu ve filtreyle eşleşen her yer için bir yer kimliği de döndürür. Place nesnesini daha sonra tekrar almak için yer kimliğini kullanın.

Kimliğe göre yer almak için PlacesClient.fetchPlace() işlevini çağırın ve FetchPlaceRequest iletin.

API, bir Task içinde FetchPlaceResponse döndürür. FetchPlaceResponse, sağlanan yer kimliğiyle eşleşen bir Place nesnesi içerir.

Aşağıdaki kod örneğinde, belirtilen yerle ilgili ayrıntıları almak için fetchPlace() çağrısı gösterilmektedir.

Kotlin

// Define a Place ID.
val placeId = PlaceIdProvider.getRandomPlaceId()

// Specify the fields to return.
val placeFields = listOf(
    Place.Field.ID,
    Place.Field.DISPLAY_NAME,
    Place.Field.FORMATTED_ADDRESS,
    Place.Field.LOCATION
)

// Construct a request object, passing the place ID and fields array.
val request = FetchPlaceRequest.newInstance(placeId, placeFields)

placesClient.fetchPlace(request)
    .addOnSuccessListener { response: FetchPlaceResponse ->
        val place = response.place

        val name = place.displayName
        val address = place.formattedAddress
        val location = place.location

        binding.placeName.text = name
        binding.placeAddress.text = address
        if (location != null) {
            binding.placeLocation.text = getString(
                R.string.place_location, location.latitude, location.longitude
            )
        } else {
            binding.placeLocation.text = null
        }
        Log.i(TAG, "Place found: ${place.displayName}")
    }.addOnFailureListener { exception: Exception ->
        if (exception is ApiException) {
            val message = getString(R.string.place_not_found, exception.message)
            binding.placeName.text = message
            Log.e(TAG, "Place not found: ${exception.message}")
            val statusCode = exception.statusCode
            TODO("Handle error with given status code")
        }
    }

      

Java

// Define a Place ID.
final String placeId = PlaceIdProvider.getRandomPlaceId();

// Specify the fields to return.
final List<Place.Field> placeFields =
        Arrays.asList(
                Place.Field.ID,
                Place.Field.DISPLAY_NAME,
                Place.Field.FORMATTED_ADDRESS,
                Place.Field.LOCATION
        );

// Construct a request object, passing the place ID and fields array.
final FetchPlaceRequest request = FetchPlaceRequest.newInstance(placeId, placeFields);

placesClient.fetchPlace(request).addOnSuccessListener((response) -> {
    Place place = response.getPlace();

    final CharSequence name = place.getDisplayName();
    final CharSequence address = place.getFormattedAddress();
    final LatLng location = place.getLocation();

    binding.placeName.setText(name);
    binding.placeAddress.setText(address);
    if (location != null) {
        binding.placeLocation.setText(
                getString(R.string.place_location, location.latitude, location.longitude)
        );
    } else {
        binding.placeLocation.setText(null);
    }

    Log.i(TAG, "Place found: " + place.getDisplayName());
}).addOnFailureListener((exception) -> {
    if (exception instanceof ApiException apiException) {
        final String message = getString(R.string.place_not_found, apiException.getMessage());
        binding.placeName.setText(message);
        Log.e(TAG, "Place not found: " + exception.getMessage());
        final int statusCode = apiException.getStatusCode();
        // TODO: Handle error with given status code.
    }
});

      

Yer kimliklerini daha sonra kullanmak üzere kaydetme

Yer kimlikleri, Google Haritalar Platformu Hizmet Şartları'nın Bölüm 3.2.3(b) maddesinde belirtilen önbelleğe alma kısıtlamalarından muaf tutulur. Bu nedenle, yer kimliği değerlerini daha sonra kullanmak üzere saklayabilirsiniz.

Kayıtlı yer kimliklerini yenileme

Google Haritalar veritabanındaki güncellemeler nedeniyle yer kimlikleri değişebileceğinden Google, 12 aydan eski yer kimliklerinin yenilenmesini önerir. fields parametresinde yalnızca Place.Field.ID alanını belirterek Yer Ayrıntıları isteği göndererek yer kimliklerini ücretsiz olarak yenileyebilirsiniz.

Bu çağrı, Yer Ayrıntıları - Kimlik Yenileme SKU'sunu tetikler.

Yer kimlikleri kullanılırken hata kodları

INVALID_REQUEST

INVALID_REQUEST durum kodu, belirtilen yer kimliğinin geçerli olmadığını gösterir. Yer kimliği kısaltılmış veya başka bir şekilde değiştirilmişse ve artık doğru değilse INVALID_REQUEST döndürülebilir.

NOT_FOUND

NOT_FOUND durum kodu, belirtilen yer kimliğinin artık kullanılmadığını gösterir. Bir işletme kapanır veya yeni bir konuma taşınırsa yer kimliği geçerliliğini yitirebilir. Yer kimlikleri, Google Haritalar veritabanındaki güncellemeler nedeniyle de değişebilir. Bu gibi durumlarda, bir yer yeni bir yer kimliği alabilir ve eski kimlik NOT_FOUND yanıtını döndürür.

Eski bir yer kimliği olması durumunda sonuçları yenilemek için her yer kimliğini döndüren orijinal isteği saklayın ve gerektiğinde isteği yeniden gönderin. Yeniden gönderilen isteğin uygun SKU'da faturalandırıldığını unutmayın.

Bazı yer kimliği türleri bazen NOT_FOUND yanıtına neden olabilir veya API, yanıtta farklı bir yer kimliği döndürebilir. Bu yer kimliği türleri şunlardır:

  • Google Haritalar'da tam adres olarak bulunmayan ancak bir adres aralığından tahmin edilen açık adresler.
  • İsteğin bir şehir veya bölge de belirttiği uzun bir rotanın segmentleri.
  • Kavşaklar.
  • subpremise türünde adres bileşeni olan yerler.

Bu kimlikler genellikle uzun bir dize biçimindedir (yer kimlikleri için maksimum uzunluk yoktur). Örneğin:

EpID4LC14LC_4LCo4LCv4LGN4LCo4LCX4LCw4LGNIC0g4LC44LGI4LCm4LGN4LCs4LC-4LCm4LGNIOCwsOCxi-CwoeCxjeCwoeCxgSAmIOCwteCwv-CwqOCwr-CxjSDgsKjgsJfgsLDgsY0g4LCu4LGG4LCv4LC_4LCo4LGNIOCwsOCxi-CwoeCxjeCwoeCxgSwg4LC14LC_4LCo4LCv4LGNIOCwqOCwl-CwsOCxjSDgsJXgsL7gsLLgsKjgsYAsIOCwsuCwleCxjeCwt-CxjeCwruCwv-CwqOCwl-CwsOCxjSDgsJXgsL7gsLLgsKjgsYAsIOCwuOCwsOCxguCwsOCxjSDgsKjgsJfgsLDgsY0g4LC14LGG4LC44LGN4LCf4LGNLCDgsLjgsK_gsYDgsKbgsL7gsKzgsL7gsKbgsY0sIOCwueCxiOCwpuCwsOCwvuCwrOCwvuCwpuCxjSwg4LCk4LGG4LCy4LCC4LCX4LC-4LCjIDUwMDA1OSwg4LCt4LC-4LCw4LCk4LCm4LGH4LC24LCCImYiZAoUChIJ31l5uGWYyzsR9zY2qk9lDiASFAoSCd9ZebhlmMs7Efc2NqpPZQ4gGhQKEglDz61OZpjLOxHgDJCFY-o1qBoUChIJi37TW2-YyzsRr_uv50r7tdEiCg1MwFcKFS_dyy4