Bu dokümanda, istemci tarafı coğrafi sınırlamanın ne olduğu, ne zaman kullanılacağı ve bir mobil uygulamadaki kullanım alanlarına nasıl uygulanacağı açıklanmaktadır. Ayrıca, Google Gezinme SDK'sı kullanılarak Android'de bir örneğin nasıl uygulanacağı gösterilmektedir.
Şirketlerin genellikle bir mobil cihazın belirli bir alana ne zaman girdiğini veya bu alandan ne zaman ayrıldığını bilmesi gerekir. Bu, sanal coğrafi sınırlar korunarak veya Geofences, yazılımın bir cihaz sınırı aştığında etkinlikleri tetiklemesini sağlayan.
Belirli bir aracın ne zaman bir sınırı aştığını anlamak, aşağıdakiler gibi birden fazla kullanım alanı için önemlidir:
- Müşteri etkileşimi: İşletmeler, son kullanıcılara özel teklifler, etkinlikler veya yeni ürünler hakkında push bildirimleri göndermek için coğrafi sınırlamayı kullanabilir.
- Güvenlik ve emniyet: İşletmeler, coğrafi sınır belirlemeyi kullanarak veri merkezleri veya depolar gibi hassas alanların etrafında sanal çevreler oluşturabilir ve birileri alana girerse veya oradan ayrıldığında güvenlik personelini uyarabilir.
- Ulaştırma: İşletmeler, araçların konumunu takip etmek ve rotaları ile programları optimize etmek için coğrafi sınırlamayı kullanabilir.
Bu nedenle, istemciye yönelik bir uygulamada bu bölgelerin (poligonlar) nasıl temsil edileceğini bilmeniz önemlidir. Bu uygulama, cihaz konumunu izlemeli ve belirli bir coğrafi sınırı ihlal edip etmediğini kontrol etmelidir.
Kapsam
Bu belgede, coğrafi sınır çizmenin istemci tarafında uygulanmasına odaklanılmaktadır . Bu nedenle, istemci uygulamasında şunlar bulunmalıdır:
- Güvenlik ihlali olup olmadığını kontrol etmesi gereken poligonlar;
- Kullanıcının gerçek zamanlı konumu
- Mevcut konumun poligonlardan herhangi birinin içinde mi yoksa dışında mı olduğunu kontrol eden mantık.
Bu kılavuzda Android'deki örnekler yer almaktadır ancak iOS'te de bu işlemin eşdeğer yolları vardır. Android Konum Hizmeti, dairesel coğrafi çitler için yerleşik bir uygulamaya sahiptir. Bu uygulamayı burada görebilirsiniz. Aşağıdaki referans kod ve açıklama, daha karmaşık uygulamalar için başlangıç noktasıdır.
Navigation SDK
Navigasyon SDK'sı, sürücü uygulamasına eklenen yerel bir Android/iOS kitaplığıdır. Aşağıdakilerden sorumludur:
- Uygulamayı çalıştıran cihazdan yol fotoğrafı çekilen konumları alma Bu API, konumları en yakın yol segmentine çekmek için Google'ın yol ağını kullandığından ve bu da tahmini varış süresini çok daha doğru hale getirdiğinden, Android'in FusedLocationProvider'ından (FLP) daha hassastır. Ayrıca FLP'den diğer bilgileri de kullanır.
- Sürücülerin gerçek zamanlı trafiği ve diğer rota kısıtlamalarını dikkate alarak A noktasından B noktasına verimli bir şekilde ulaşmasına olanak tanıyan adım adım deneyim.
- Etkinlik işleyiciler ve kayıtlı geri aramalar aracılığıyla etkinlikleri tetikleme.
Dinleyiciler
Navigation SDK'da kullanabileceğiniz birçok dinleyici vardır. Birkaç örnek vermek gerekirse:
- RoadSnappedLocation sağlayıcısı aracılığıyla konum değişiklikleri.
- ReroutingListener aracılığıyla yeniden rota oluşturma etkinlikleri (kullanıcı U dönüşü, sola dönüş vb. atlar ve önerilen rotadan sapar).
- ArrivalListener aracılığıyla varış etkinlikleri (kullanıcı planlanan hedefe varır).
- Kalan mesafe ve TVS etkinlikleri (sürücü, hedefe varmak üzere olduğu zaman (sürücü sayacına göre, hedefe varmak üzere olduğunda bildirim alın) bildirim alın; bunların her ikisi de RemainingTimeOrDistanceChangedListener üzerinden mevcut.
Bu kılavuzda yalnızca RoadSnappedLocationProvider ve LocationListener kullanılmıştır.
İstemci Tarafı Coğrafi Sınır Çizme Çözümü
Şimdi istemci tarafı coğrafi sınırlama özelliği oluşturma adımlarını inceleyelim. Aşağıdaki örnekte, adım adım modunda çalışan bir Navigasyon SDK'sı ve rota üzerinde coğrafi çitimizi temsil eden bir poligon bulunmaktadır.
- Coğrafi çitler BigQuery'de depolanır ve arka uçunuz tarafından çekilir.
- Arka uç, coğrafi sınırları düzenli olarak Drive uygulamalarına aktarır.
- Sürücü rotayı izliyor ve sürücü uygulaması, coğrafi sınırda tetikleyici olup olmadığını düzenli olarak kontrol ediyor.
- Sürücü uygulaması, işlem yapabilmesi için arka uçta bir tetikleyici etkinliği bildirir.
Araç rota üzerinde hareket ederken uygulama, poligonun ihlal edilip edilmediğini düzenli olarak kontrol eder. Uygulama coğrafi sınırı aştığını algılarsa kullanıcı arayüzünde Geofence ihlal edildi yazan bir mesaj gösterilir.
Android-Maps-Utils için Bağımlılıkları Yapılandırma
Bu çözüm, Google Haritalar Android API'sını kullanan çok çeşitli uygulamalar için yararlı yardımcı programlar içeren açık kaynak bir kitaplık olan Android-Haritalar-Utils'i kullanır.
Bu kitaplık herkese açıktır, GitHub'da barındırılır. Şu adresten erişilebilir:
- Android: https://github.com/googlemaps/android-maps-utils
- iOS: https://github.com/googlemaps/google-maps-ios-utils
Bu kitaplığı Android uygulamanıza (bu dokümanın kapsamı) dahil etmek için build.gradle dosyanızı içerecek şekilde değiştirmeniz gerekir. Bu build.gradle dosyasının proje düzeyinde değil, oluşturduğunuz modül (uygulama) için olduğunu unutmayın.
dependencies {
...
// Utilities for Maps SDK for Android (requires Google Play Services)
implementation 'com.google.maps.android:android-maps-utils:2.3.0'
}
Ardından, Gradle'ı en son build.gradle dosyanızla senkronize ettikten sonra Java dosyanıza com.google.maps.android.PolyUtil dosyasını içe aktarabilirsiniz:
import com.google.android.gms.maps.model.PolygonOptions;
import com.google.maps.android.PolyUtil;
Coğrafi sınırlarınızı tanımlama
Burada PolygonOptions
değerinin de içe aktarıldığını unutmayın. Bunun nedeni, çokgeni göstermek için kullanılan ifadenin şudur:
mPolygonOptions = new PolygonOptions()
.add(new LatLng(29.4264525,-98.4948758))
.add(new LatLng(29.4267029,-98.4948758))
.add(new LatLng(29.4273742,-98.4945822))
.add(new LatLng(29.4264562,-98.4943592))
.fillColor(0x0000ff36)
.strokePattern(Arrays.asList(new Dash(45.0f), new Gap(10.0f)))
.strokeColor(Color.BLUE)
.strokeWidth(5);
Yukarıda görebileceğiniz gibi, burada önceden belirlenmiş koordinat - (enlem, boylam) çiftlerine sahip sabit bir çokgen tanımlıyoruz. Ancak gerçek senaryolarda, bu koordinatlar ve poligon tanımları çoğu zaman bir arka uç uç noktasından gelir ve muhtemelen uzaktan getirilecektir. Bu, poligonların uygulama tarafından anında oluşturulması gerektiği anlamına gelir.
PolygonOptions
öğesinde belirtilebilecek öğeler hakkında daha fazla bilgi için lütfen buraya göz atın.
Çokgenleri, Parçanızı veya Etkinliğinizi oluştururken tanımlamalısınız. Örneğin:
protected void onCreate(Bundle savedInstanceState) {
...
mPolygonOptions = new PolygonOptions()
.add(new LatLng(29.4264525,-98.4948758))
.add(new LatLng(29.4267029,-98.4948758))
.add(new LatLng(29.4273742,-98.4945822))
.add(new LatLng(29.4264562,-98.4943592))
.fillColor(0x0000ff36)
.strokePattern(Arrays.asList(new Dash(45.0f), new Gap(10.0f)))
.strokeColor(Color.BLUE)
.strokeWidth(5);
...// more code here
}
Konum Güncellemelerini dinleme
Coğrafi sınırlarınızı tanımladıktan sonra, söz konusu Navigasyon SDK'sında sözü edilen RoadSnappedLocationProvider
adlı etkinliğe abone olmak için bir konum güncelleme dinleyicisi oluşturmanız yeterlidir. Bu etkinlik, cihazın en son konumunu döndürür.
mLocListener = new RoadSnappedLocationProvider.LocationListener() {
@Override
public void onLocationChanged(Location snapped) {
LatLng snappedL = new LatLng(snapped.getLatitude(), snapped.getLongitude());
if(PolyUtil.containsLocation(snappedL, mPolygonOptions.getPoints(), true) && !mGeofenceBreached){
Log.d("Geofence", "Vehicle has breached the polygon");
}
}
@Override
public void onRawLocationUpdate(Location location) {
}
};
Android-Haritalar-Utils ile, alınan konumun önceden tanımlanmış poligon içinde olup olmadığını kontrol etmek için PolyUtil.containsLocation
öğesini kullanabilirsiniz. Aşağıdaki örnekte, coğrafi çiti temsil eden önceden tanımlanmış poligon kullanılmıştır ancak pratikte birden fazla poligonunuz olabilir ve bir döngü gerekebilir.
Alternatif Yaklaşım
Bu dokümanda, özel bir coğrafi çit (poligon) ihlalini kontrol eden istemci tarafı bir uygulamaya odaklanılmaktadır. Yine de arka ucunuzda bu tür kontrolleri yapmak isteyebileceğiniz senaryolar vardır.
Yani uygulama, konum güncellemelerini bir arka uca bildirecek ve daha sonra bu arka uç, söz konusu aracın belirli bir poligonu ihlal edip etmediğini kontrol edecektir. Dolayısıyla, doğrulamayı yapmak için istemci uygulamasına bağlı değildir.
Bu sorunu çözmek için aşağıdaki adımları uygulayabilirsiniz:
[Execution Environment] Server side geofencing architecture
Coğrafi sınır çizmeye sunucu tarafı yaklaşımını gösteren örnek bir mimari.
- Sürücü SDK'sını kullanan sürücü uygulaması, konum güncellemelerini Fleet Engine'a gönderir. Konum güncellemeleri ve uygulama içi gezinme, Navigasyon SDK'sı aracılığıyla gerçekleşir.
- Fleet Engine bu güncellemeleri Cloud Logging veya Pub/Sub'a gönderir.
- Arka uç bu konum sinyallerini toplar.
- Coğrafi çitler, arka uç tarafından analiz edilmek üzere BigQuery'de depolanır.
- Coğrafi sınır tetiklendikten sonra, Sürücü uygulamasına uyarılar gönderilir.
Bu mimaride Driver SDK ve Fleet Engine kullanılır. Fleet Engine, PubSub güncellemeleri yayınlayabilir ve Cloud Logging'de günlük girişleri oluşturabilir. Her iki durumda da araç konumu alınabilir.
Bu durumda arka uç, PubSub sırasını veya günlükleri okuyup araç güncellemelerini izleyebilir. Daha sonra, bir güncelleme olduğunda (veya kritikliğine bağlı olarak birkaç saniyede bir dakikada bir) arka uç, belirli bir aracın coğrafi sınırların içinde mi yoksa dışında mı olduğunu belirlemek için BigQuery GIS işlevlerini çağırabilir. Bir veya daha fazla coğrafi çit ihlal edilirse arka uç, dahili ardışık düzenleri veya diğer alakalı iş akışlarını tetikleyebilir.
Sonuç
Coğrafi sınır çizme, çeşitli amaçlar için kullanılabilen güçlü bir araçtır. İşletmeler, alakalı reklamlar ve tanıtımlarla son kullanıcıları hedeflemek, konuma dayalı hizmetler sunmak, ayrıca güvenlik düzeyini artırmak için coğrafi sınır çizmeyi kullanabilir.
Gezinme SDK'sı, bir yolculuk sırasında birçok önemli anı algılayabilen yararlı etkinlik işleyiciler sağlar. Şirketler genellikle belirli kullanım alanları için özel coğrafi çitler kullanmalıdır. Bu dokümanda, bunu yapmanın bir yolunu gösterdik ancak olasılıklar sonsuzdur. Hazırlayacağınız tasarımları sabırsızlıkla bekliyoruz.
Sonraki İşlemler
- Google Haritalar Platformu ile neler yapabileceğinizi keşfedin, öğrenin ve ilham alın webinar'ını görüntüleyin.
Önerilen Daha Fazla Okuma: