Yer Ayrıntıları

Platform seçin: Android iOS JavaScript Web Hizmeti

Android için Yerler SDK'sı, uygulamanızın yer adı ve adresi, enlem/boylam koordinatları olarak belirtilen coğrafi konum, yer türü (ör. gece kulübü, evcil hayvan mağazası, müze) gibi yerler hakkında zengin bilgiler sağlar. Belirli bir yerle ilgili bu bilgilere erişmek için, bir yeri benzersiz şekilde tanımlayan sabit bir tanımlayıcı olan yer kimliğini kullanabilirsiniz.

Yer ayrıntıları

Place nesnesi, belirli bir yer hakkında bilgi sağlar. Bir Place nesnesini aşağıdaki şekillerde yakalayabilirsiniz:

Bir yer isteğinde bulunurken hangi yer verilerinin döndürüleceğini belirtmeniz gerekir. Bunu yapmak için döndürülecek verileri belirten Place.Field değerlerinin listesini iletin. Her isteğin maliyetini etkilemesi nedeniyle bu liste önemlidir.

Yer verisi sonuçları boş olabileceği için yalnızca veri içeren yer sonuçları döndürülür (örneğin, istenen yerin fotoğrafı yoksa photos alanı sonuçta görünmez).

Aşağıdaki örnek, bir istek tarafından döndürülen verileri belirtmek için üç Place.Field değerinin listesini aktarır:

Java

// Specify the fields to return.
final List placeFields = Arrays.asList(Place.Field.NAME, Place.Field.RATING, Place.Field.OPENING_HOURS);

Kotlin

// Specify the fields to return.
val placeFields = listOf(Place.Field.NAME, Place.Field.RATING, Place.Field.OPENING_HOURS)

Place nesnesini aldıktan sonra, istekte belirtilen veri alanlarına erişmek için nesnenin yöntemlerini kullanın. Place nesnesinde alan eksikse ilgili yöntem boş değerini döndürür. Aşağıda, mevcut yöntemlerden birkaçı gösterilmiştir. Tüm yöntemlerin tam listesi için Place API referansına bakın.

  • getAddress() – Yerin kullanıcılar tarafından okunabilir biçimdeki adresi.
  • getAddressComponents() – Bu yer için List adres bileşeni. Bu bileşenler, bir yerin adresiyle ilgili yapılandırılmış bilgileri ayıklama (ör. bir yerin bulunduğu şehri bulma) amacıyla kullanılır. Adres biçimlendirme için bu bileşenleri kullanmayın. Bunun yerine, yerelleştirilmiş bir biçimlendirilmiş adres sağlayan getAddress() yöntemini çağırın.
  • getId() – Yerin metin tanımlayıcısı. Bu sayfanın geri kalanında yer kimlikleri hakkında daha fazla bilgi edinebilirsiniz.
  • getLatLng() – Yerin enlem ve boylam koordinatları olarak belirtilen coğrafi konumudur.
  • getName() – Yerin adı.
  • getOpeningHours() – Yer OpeningHours. Haftanın her günü için açılış ve kapanış saatlerini temsil eden dizelerin listesini döndürmek için OpeningHours.getWeekdayText() yöntemini çağırın. getWeekdayText() tarafından sağlanan verilerle eşdeğer olan, daha ayrıntılı bilgiler içeren period nesnelerinin listesini döndürmek için OpeningHours.getPeriods() yöntemini çağırın.

    Place nesnesi, bir yerin sonraki yedi gündeki çalışma saatlerini döndüren getCurrentOpeningHours() yöntemini ve sonraki yedi gün içinde bir yerin ikincil çalışma saatlerini döndüren getSecondaryOpeningHours() öğesini de içerir.

  • isOpen() – Yerin şu anda açık olup olmadığını gösteren bir boole. Herhangi bir saat belirtilmezse varsayılan değer şu an kullanılır. isOpen değeri yalnızca Place.Field.UTC_OFFSET ve Place.Field.OPENING_HOURS kullanılabilirse döndürülür. Doğru sonuçlar elde etmek için orijinal yer isteğinizdeki Place.Field.BUSINESS_STATUS ve Place.Field.UTC_OFFSET alanlarını isteyin. İstenmezse, işletmenin faaliyette olduğu varsayılır. isOpen ürününün Yer Ayrıntıları ile nasıl kullanılacağını öğrenmek için bu videoyu izleyin.

Bazı basit örnekler:

Java


final CharSequence name = place.getName();
final CharSequence address = place.getAddress();
final LatLng location = place.getLatLng();

      

Kotlin


val name = place.name
val address = place.address
val location = place.latLng

      

Kimliği kullanarak bir yer alma

Yer kimliği, bir yeri benzersiz şekilde tanımlayan metin tanımlayıcısıdır. Android için Yerler SDK'sında, Place.getId() yöntemini çağırarak bir yerin kimliğini alabilirsiniz. Otomatik Yer Tamamlama hizmeti de sağlanan arama sorgusu ve filtreyle eşleşen her bir yer için bir yer kimliği döndürür. Yer kimliğini saklayabilir ve daha sonra Place nesnesini almak için kullanabilirsiniz.

Bir yeri kimliğe göre almak için PlacesClient.fetchPlace() numaralı telefonu FetchPlaceRequest aralığından geçirin.

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

Aşağıdaki kod örneği, belirtilen yerle ilgili ayrıntıları almak için fetchPlace() yöntemini çağırmayı göstermektedir.

Java


// Define a Place ID.
final String placeId = "INSERT_PLACE_ID_HERE";

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

// 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();
    Log.i(TAG, "Place found: " + place.getName());
}).addOnFailureListener((exception) -> {
    if (exception instanceof ApiException) {
        final ApiException apiException = (ApiException) exception;
        Log.e(TAG, "Place not found: " + exception.getMessage());
        final int statusCode = apiException.getStatusCode();
        // TODO: Handle error with given status code.
    }
});

      

Kotlin


// Define a Place ID.
val placeId = "INSERT_PLACE_ID_HERE"

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

// 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
        Log.i(PlaceDetailsActivity.TAG, "Place found: ${place.name}")
    }.addOnFailureListener { exception: Exception ->
        if (exception is ApiException) {
            Log.e(TAG, "Place not found: ${exception.message}")
            val statusCode = exception.statusCode
            TODO("Handle error with given status code")
        }
    }

      

Açık durumda olma

PlacesClient.isOpen(IsOpenRequest request) yöntemi, görüşmede belirtilen zamana göre yerin açık olup olmadığını gösteren bir IsOpenResponse nesnesi döndürür.

Bu yöntem, IsOpenRequest türünde aşağıdakileri içeren tek bir bağımsız değişken alır:

  • Bir Place nesnesi veya yer kimliğini belirten bir dize.
  • 1970-01-01T00:00:00Z arasından saati milisaniye cinsinden belirten isteğe bağlı bir zaman değeri. Herhangi bir saat belirtilmezse varsayılan değer şu an kullanılır.

Bu yöntem, Place nesnesinde aşağıdaki alanların bulunmasını gerektirir:

  • Place.Field.BUSINESS_STATUS
  • Place.Field.CURRENT_OPENING_HOURS
  • Place.Field.OPENING_HOURS
  • Place.Field.UTC_OFFSET

Bu alanlar Place nesnesinde sağlanmazsa veya bir yer kimliği aktarırsanız yöntem, bu değerleri getirmek için PlacesClient.fetchPlace() öğesini kullanır. Gerekli alanlarda Yer nesnesi oluşturma hakkında daha fazla bilgi için Yer ayrıntıları bölümüne bakın.

Aşağıdaki örnekte bir yerin açık olup olmadığı belirlenir. Bu örnekte, yer kimliğini yalnızca isOpen() adresine iletebilirsiniz:

Java


@NonNull
Calendar isOpenCalendar = Calendar.getInstance();
String placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk";
IsOpenRequest isOpenRequest;

try {
    isOpenRequest = IsOpenRequest.newInstance(placeId, isOpenCalendar.getTimeInMillis());
} catch (IllegalArgumentException e) {
    e.printStackTrace();
    return;
}

Task<IsOpenResponse> placeTask = placesClient.isOpen(isOpenRequest);

placeTask.addOnSuccessListener(
        (response) ->
                isOpen = response.isOpen());
// ...

      

Kotlin


val isOpenCalendar: Calendar = Calendar.getInstance()
val placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk"

val request: IsOpenRequest = try {
    IsOpenRequest.newInstance(placeId, isOpenCalendar.timeInMillis)
} catch (e: IllegalArgumentException) {
    e.printStackTrace()
    return
}
val isOpenTask: Task<IsOpenResponse> = placesClient.isOpen(request)
isOpenTask.addOnSuccessListener { response ->
    val isOpen = response.isOpen
}
// ...

      

Bir sonraki örnekte, Place nesnesi geçirdiğiniz isOpen() işlevi gösteriliyor. Place nesnesi geçerli bir yer kimliği içermelidir:

Java


@NonNull
Calendar isOpenCalendar = Calendar.getInstance();
String placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk";
// Specify the required fields for an isOpen request.
List<Place.Field> placeFields = new ArrayList<>(Arrays.asList(
        Place.Field.BUSINESS_STATUS,
        Place.Field.CURRENT_OPENING_HOURS,
        Place.Field.ID,
        Place.Field.OPENING_HOURS,
        Place.Field.UTC_OFFSET
));

FetchPlaceRequest request = FetchPlaceRequest.newInstance(placeId, placeFields);
Task<FetchPlaceResponse> placeTask = placesClient.fetchPlace(request);

placeTask.addOnSuccessListener(
        (placeResponse) -> {
            Place place = placeResponse.getPlace();
            IsOpenRequest isOpenRequest;

            try {
                isOpenRequest = IsOpenRequest.newInstance(place, isOpenCalendar.getTimeInMillis());
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
                return;
            }
            Task<IsOpenResponse> isOpenTask = placesClient.isOpen(isOpenRequest);

            isOpenTask.addOnSuccessListener(
                    (isOpenResponse) -> isOpen = isOpenResponse.isOpen());
            // ...
        });
// ...

      

Kotlin


val isOpenCalendar: Calendar = Calendar.getInstance()
var place: Place
val placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk"
// Specify the required fields for an isOpen request.
val placeFields: List<Place.Field> = listOf(
    Place.Field.BUSINESS_STATUS,
    Place.Field.CURRENT_OPENING_HOURS,
    Place.Field.ID,
    Place.Field.OPENING_HOURS,
    Place.Field.UTC_OFFSET
)

val placeRequest: FetchPlaceRequest =
    FetchPlaceRequest.newInstance(placeId, placeFields)
val placeTask: Task<FetchPlaceResponse> = placesClient.fetchPlace(placeRequest)
placeTask.addOnSuccessListener { placeResponse ->
    place = placeResponse.place

    val isOpenRequest: IsOpenRequest = try {
        IsOpenRequest.newInstance(place, isOpenCalendar.timeInMillis)
    } catch (e: IllegalArgumentException) {
        e.printStackTrace()
        return@addOnSuccessListener
    }
    val isOpenTask: Task<IsOpenResponse> = placesClient.isOpen(isOpenRequest)
    isOpenTask.addOnSuccessListener { isOpenResponse ->
        val isOpen = isOpenResponse.isOpen
    }
    // ...
}
// ...

      

İlişkilendirmeleri uygulamanızda gösterme

Uygulama, yer bilgilerini görüntülediğinde ilişkilendirmeleri de göstermelidir. İlişkilendirmeler ile ilgili belgelere bakın.

Yer kimlikleri hakkında daha fazla bilgi

Android için Yerler SDK'sında kullanılan yer kimliği, Places API'de kullanılanla aynıdır. Her bir yer kimliği yalnızca bir yere işaret edebilir ancak tek bir yerin birden fazla yer kimliği olabilir. Bir yerin yeni bir yer kimliği almasına neden olabilecek başka durumlar vardır. Örneğin, bir işletme yeni bir konuma taşınırsa bu durum ortaya çıkabilir.

Bir yer kimliği belirterek bir yer isteğinde bulunurken, yanıtta her zaman aynı yeri alacağınızdan emin olabilirsiniz (yer hâlâ mevcutsa). Ancak yanıtın, isteğinizdekinden farklı bir yer kimliği içerebileceğini unutmayın.

Daha fazla bilgi için yer kimliğine genel bakış sayfasını inceleyin.