Yer Ayrıntıları

Avrupa Ekonomik Alanı (AEA) geliştiricileri

Android için Places SDK, uygulamanıza yerlerle ilgili zengin bilgiler sağlar. Bu bilgiler arasında yerin adı ve adresi, enlem/boylam koordinatları olarak belirtilen coğrafi konum, yer türü (ör. gece kulübü, evcil hayvan mağazası, müze) ve daha fazlası yer alır. Belirli bir yerle ilgili bu bilgilere erişmek için yer kimliğini kullanabilirsiniz. Yer kimliği, bir yeri benzersiz şekilde tanımlayan sabit bir tanımlayıcıdır.

Yer ayrıntıları

Place nesnesi, belirli bir yer hakkında bilgi sağlar. PlacesClient.fetchPlace() numaralı telefonu arayarak Place nesnesini bulabilirsiniz. Kimliğe göre yer alma rehberine göz atın.

Bir yer isteğinde bulunduğunuzda, hangi yer verilerinin döndürüleceğini belirtmeniz gerekir. Bunu yapmak için döndürülecek verileri belirten bir Place.Field değerleri listesi iletin. Bu liste, her istek için maliyeti etkilediğinden önemli bir husustur.

Yer verileri sonuçları boş olamayacağından yalnızca veri içeren yer sonuçları döndürülür. Örneğin, istenen bir yerde fotoğraf yoksa sonuçta photos alanı bulunmaz.

Aşağıdaki örnekte, bir istek tarafından döndürülen verileri belirtmek için üç Place.Field değeri listesi iletilmektedir:

Kotlin

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

Java

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

Yer nesnesi veri alanlarına erişme

Place nesnesini aldıktan sonra, istekte belirtilen veri alanlarına erişmek için nesnenin yöntemlerini kullanın. Alan Place nesnesinde yoksa ilgili yöntem null değerini döndürür. Kullanılabilir yöntemlerden bazılarının örnekleri aşağıda gösterilmiştir.

  • getAddress(): Yer adresinin okunabilir biçimi.
  • getAddressComponents(): Bu yer için List adres bileşeni. Bu bileşenler, bir yerin adresiyle ilgili yapılandırılmış bilgileri ayıklamak (ör. bir yerin bulunduğu şehri bulmak) amacıyla sağlanır. Adres biçimlendirme için bu bileşenleri kullanmayın. Bunun yerine, yerelleştirilmiş biçimlendirilmiş bir adres sağlayan getAddress() işlevini çağırın.
  • getId() – Yer için metin tanımlayıcısı. Yer kimlikleri hakkında daha fazla bilgiyi bu sayfanın devamında bulabilirsiniz.
  • getLatLng() – Yerleşim yerinin enlem ve boylam koordinatları olarak belirtilen coğrafi konumu.
  • getName() – Yerin adı.
  • getOpeningHours(): Yerle ilgili OpeningHours bilgisi. Haftanın her günü için açılış ve kapanış saatlerini temsil eden bir dize listesi döndürmek üzere OpeningHours.getWeekdayText() işlevini çağırın. OpeningHours.getPeriods(), getWeekdayText() tarafından sağlanan verilere eşdeğer olan daha ayrıntılı bilgiler içeren period nesnelerinin listesini döndürmek için çağrılır.

    Place nesnesi, önümüzdeki yedi gün boyunca bir yerin çalışma saatlerini döndüren getCurrentOpeningHours() yöntemini ve önümüzdeki yedi gün boyunca bir yerin ikincil çalışma saatlerini döndüren getSecondaryOpeningHours() yöntemini de içerir.

  • isOpen(): Yerin şu anda açık olup olmadığını belirten bir Boole değeri. Herhangi bir saat belirtilmezse varsayılan olarak "şimdi" değeri kullanılır. isOpen yalnızca hem Place.Field.UTC_OFFSET hem de Place.Field.OPENING_HOURS kullanılabilirse döndürülür. Doğru sonuçlar elde etmek için orijinal yer isteğinizde Place.Field.BUSINESS_STATUS ve Place.Field.UTC_OFFSET alanlarını isteyin. İstenmediği takdirde işletmenin faal olduğu varsayılır. isOpen ile yer ayrıntılarını nasıl kullanacağınızı öğrenmek için bu videoyu izleyin.

Bazı örnekler:

Kotlin

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

      

Java

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

      

Kimliğe göre yer alma

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

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

API, FetchPlaceResponse değerini Task içinde 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() işlevinin nasıl çağrıldığı gösterilmektedir.

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")
        }
    }

      

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.
    }
});

      

Açılma durumunu alma

PlacesClient.isOpen(IsOpenRequest request) yöntemi, çağrıda belirtilen saate göre yerin şu anda açık olup olmadığını belirten bir IsOpenResponse nesnesi döndürür.

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

  • Bir Place nesnesi veya bir yer kimliği belirten dize.
  • 1970-01-01T00:00:00Z tarihinden itibaren milisaniye cinsinden zamanı belirten isteğe bağlı bir zaman değeri. Herhangi bir saat belirtilmezse varsayılan olarak "şimdi" değeri 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 iletirseniz yöntem, bunları getirmek için PlacesClient.fetchPlace() kullanır. Gerekli alanlarla Place nesnesi oluşturma hakkında daha fazla bilgi için Yer ayrıntıları başlıklı makaleyi inceleyin.

Aşağıdaki örnekte bir yerin şu anda açık olup olmadığı belirlenir. Bu örnekte, yalnızca yer kimliğini isOpen()'ya iletiyorsunuz:

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
}
// ...

      

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());
// ...

      

Sonraki örnekte, Place nesnesi iletilen isOpen() işlevinin çağrılması gösterilmektedir. Place nesnesi geçerli bir yer kimliği içermelidir:

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
    }
    // ...
}
// ...

      

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());
            // ...
        });
// ...

      

Uygulamanızda ilişkilendirmeleri gösterme

Uygulamanız, yer yorumları da dahil olmak üzere yer bilgilerini gösterdiğinde tüm ilişkilendirmeleri de göstermelidir. Daha fazla bilgi için ilişkilendirmeler konusuna 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ılan tanımlayıcıyla aynıdır. Her yer kimliği yalnızca bir yeri ifade 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 da vardır. Örneğin, bir işletme yeni bir konuma taşındığında bu durum yaşanabilir.

Bir yer kimliği belirterek yer isteğinde bulunduğunuzda, yanıt olarak her zaman aynı yeri alacağınızdan emin olabilirsiniz (yer hala mevcutsa). Ancak yanıtın, isteğinizdeki yer kimliğinden farklı bir yer kimliği içerebileceğini unutmayın.

Daha fazla bilgi için yer kimliğine genel bakış başlıklı makaleyi inceleyin.