|
|
12 months ago | |
|---|---|---|
| .. | ||
| README.md | 12 months ago | |
| assignment.md | 12 months ago | |
README.md
Coğrafi Çitler
Sketchnote: Nitya Narasimhan. Daha büyük bir versiyon için resme tıklayın.
Bu video, coğrafi çitlerin ne olduğunu ve Azure Maps'te nasıl kullanılacağını anlatıyor. Bu dersin konuları:
🎥 Videoyu izlemek için yukarıdaki resme tıklayın
Ders Öncesi Test
Giriş
Son 3 derste, çiftliğinizden işleme merkezine ürün taşıyan kamyonların konumunu IoT kullanarak takip ettiniz. GPS verilerini yakaladınız, buluta gönderip depoladınız ve harita üzerinde görselleştirdiniz. Tedarik zincirinizin verimliliğini artırmanın bir sonraki adımı, bir kamyon işleme merkezine yaklaşırken bir uyarı almak olacaktır. Böylece, araç geldiğinde boşaltma ekibi forkliftler ve diğer ekipmanlarla hazır olabilir. Bu şekilde hızlı bir şekilde boşaltma yapılabilir ve kamyon ile sürücünün bekleme süresi için ödeme yapmanız gerekmez.
Bu derste, coğrafi çitler hakkında bilgi edineceksiniz - işleme merkezine 2 km'lik bir sürüş mesafesi gibi tanımlanmış coğrafi bölgeler. Ayrıca GPS koordinatlarının bir coğrafi çitin içinde mi yoksa dışında mı olduğunu test etmeyi öğreneceksiniz. Böylece GPS sensörünüzün bir alana ulaşıp ulaşmadığını veya bir alandan ayrıldığını görebilirsiniz.
Bu derste şunları ele alacağız:
- Coğrafi çitler nedir
- Bir coğrafi çit tanımlama
- Noktaları bir coğrafi çite karşı test etme
- Sunucusuz koddan coğrafi çitler kullanma
🗑 Bu proje için son ders, bu nedenle bu dersi ve ödevi tamamladıktan sonra bulut hizmetlerinizi temizlemeyi unutmayın. Ödevi tamamlamak için hizmetlere ihtiyacınız olacak, bu yüzden önce ödevi tamamladığınızdan emin olun.
Gerekirse projenizi temizleme rehberine başvurabilirsiniz.
Coğrafi Çitler Nedir?
Coğrafi çit, gerçek dünyadaki bir coğrafi bölge için sanal bir sınırdır. Coğrafi çitler, bir nokta ve bir yarıçap olarak tanımlanan daireler (örneğin bir binanın etrafında 100m genişliğinde bir daire) veya bir okul bölgesi, şehir sınırları, üniversite veya ofis kampüsü gibi bir alanı kapsayan çokgenler olabilir.
💁 Belki de farkında olmadan coğrafi çitler kullanmış olabilirsiniz. iOS hatırlatıcılar uygulaması veya Google Keep'te bir konuma dayalı hatırlatıcı ayarladıysanız, bir coğrafi çit kullanmışsınızdır. Bu uygulamalar, verilen konuma dayalı bir coğrafi çit oluşturur ve telefonunuz coğrafi çite girdiğinde sizi uyarır.
Bir aracın bir coğrafi çitin içinde mi yoksa dışında mı olduğunu bilmek istemenizin birçok nedeni vardır:
- Boşaltma hazırlığı - bir aracın sahaya geldiğine dair bir bildirim almak, ekibin aracı boşaltmaya hazır olmasını sağlar ve araç bekleme süresini azaltır. Bu, bir sürücünün daha az bekleme süresiyle bir günde daha fazla teslimat yapmasını sağlayabilir.
- Vergi uyumu - Yeni Zelanda gibi bazı ülkeler, yalnızca kamu yollarında sürüş sırasında araç ağırlığına dayalı olarak dizel araçlar için yol vergisi alır. Coğrafi çitler kullanarak kamu yollarında sürülen kilometreyi, çiftlikler veya ağaç kesim alanları gibi özel yollarla karşılaştırabilirsiniz.
- Hırsızlık izleme - bir araç yalnızca belirli bir alanda kalmalıysa, örneğin bir çiftlikte, ve coğrafi çitten çıkarsa, çalınmış olabilir.
- Konum uyumu - bir iş sahasının, çiftliğin veya fabrikanın bazı bölümleri belirli araçlar için yasak olabilir. Örneğin, yapay gübre ve pestisit taşıyan araçların organik ürün yetiştirilen tarlalardan uzak tutulması gerekebilir. Bir coğrafi çite girilirse, araç uyum dışıdır ve sürücü bilgilendirilebilir.
✅ Coğrafi çitler için başka kullanım alanları düşünebilir misiniz?
Son derste GPS verilerini görselleştirmek için kullandığınız Azure Maps hizmeti, coğrafi çitler tanımlamanıza ve ardından bir noktanın coğrafi çitin içinde mi yoksa dışında mı olduğunu test etmenize olanak tanır.
Bir Coğrafi Çit Tanımlama
Coğrafi çitler, önceki derste haritaya eklenen noktalarla aynı şekilde GeoJSON kullanılarak tanımlanır. Bu durumda, Point değerlerinden oluşan bir FeatureCollection yerine, bir Polygon içeren bir FeatureCollection olacaktır.
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-122.13393688201903,
47.63829579223815
],
[
-122.13389128446579,
47.63782047131512
],
[
-122.13240802288054,
47.63783312249837
],
[
-122.13238388299942,
47.63829037035086
],
[
-122.13393688201903,
47.63829579223815
]
]
]
},
"properties": {
"geometryId": "1"
}
}
]
}
Çokgendeki her nokta, bir dizideki bir uzunluk ve enlem çifti olarak tanımlanır ve bu noktalar, coordinates olarak ayarlanan bir dizide bulunur. Önceki derste bir Point için coordinates, enlem ve boylam içeren bir dizi idi. Bir Polygon için ise, uzunluk ve enlem içeren dizilerden oluşan bir dizidir.
💁 Unutmayın, GeoJSON noktalar için
boylam, enlemkullanır,enlem, boylamdeğil.
Çokgen koordinatları dizisi, çokgendeki nokta sayısından her zaman 1 fazla girişe sahiptir. Son giriş, çokgeni kapatmak için ilk girişle aynıdır. Örneğin, bir dikdörtgen için 5 nokta olacaktır.
Yukarıdaki resimde bir dikdörtgen var. Çokgen koordinatları, sol üstteki 47,-122'den başlar, sonra sağa 47,-121'e gider, sonra aşağıya 46,-121'e, sonra sola 46,-122'ye ve sonra başlangıç noktasına, yani 47,-122'ye geri döner. Bu, çokgene 5 nokta verir - sol üst, sağ üst, sağ alt, sol alt ve sonra sol üst noktayı kapatmak için.
✅ Evinizin veya okulunuzun etrafında bir GeoJSON çokgeni oluşturmaya çalışın. GeoJSON.io gibi bir araç kullanabilirsiniz.
Görev - Bir Coğrafi Çit Tanımlama
Azure Maps'te bir coğrafi çit kullanmak için önce Azure Maps hesabınıza yüklenmesi gerekir. Yüklendikten sonra, coğrafi çite karşı bir noktayı test etmek için kullanabileceğiniz benzersiz bir kimlik alırsınız. Coğrafi çitleri Azure Maps'e yüklemek için haritalar web API'sini kullanmanız gerekir. Azure Maps web API'sini curl adlı bir araç kullanarak çağırabilirsiniz.
🎓 Curl, web uç noktalarına karşı istekler yapmak için bir komut satırı aracıdır.
-
Linux, macOS veya Windows 10'un yeni bir sürümünü kullanıyorsanız, muhtemelen curl zaten yüklüdür. Curl'ün yüklü olup olmadığını kontrol etmek için terminalinizden veya komut satırından aşağıdaki komutu çalıştırın:
curl --versionCurl için sürüm bilgilerini görmüyorsanız, curl indirme sayfasından yüklemeniz gerekir.
💁 Postman konusunda deneyimliyseniz, tercihinize bağlı olarak onu kullanabilirsiniz.
-
Bir çokgen içeren bir GeoJSON dosyası oluşturun. Bunu GPS sensörünüzle test edeceğiniz için, mevcut konumunuzun etrafında bir çokgen oluşturun. Bunu, yukarıda verilen GeoJSON örneğini manuel olarak düzenleyerek veya GeoJSON.io gibi bir araç kullanarak yapabilirsiniz.
GeoJSON,
Polygontüründe birgeometryiçeren birFeatureCollectioniçermelidir.Ayrıca,
geometryöğesiyle aynı seviyede birpropertiesöğesi eklemeniz GEREKİR ve bu öğe birgeometryIdiçermelidir:"properties": { "geometryId": "1" }GeoJSON.io kullanıyorsanız, bu öğeyi boş
propertiesöğesine manuel olarak eklemeniz gerekecektir. Bunu, JSON dosyasını indirdikten sonra veya uygulamadaki JSON düzenleyicisinde yapabilirsiniz.Bu
geometryIdbu dosyada benzersiz olmalıdır. Birden fazla coğrafi çiti, aynı GeoJSON dosyasındaki birFeatureCollectioniçindeki birden fazlaFeatureolarak yükleyebilirsiniz. Ancak her birinin farklı birgeometryIdolması gerekir. Çokgenler, farklı bir dosyadan farklı bir zamanda yüklendiyse aynıgeometryIdye sahip olabilir. -
Bu dosyayı
geofence.jsonolarak kaydedin ve terminalinizde veya konsolunuzda kaydedildiği yere gidin. -
Coğrafi Çit oluşturmak için aşağıdaki curl komutunu çalıştırın:
curl --request POST 'https://atlas.microsoft.com/mapData/upload?api-version=1.0&dataFormat=geojson&subscription-key=<subscription_key>' \ --header 'Content-Type: application/json' \ --include \ --data @geofence.jsonURL'deki
<subscription_key>öğesini Azure Maps hesabınızın API anahtarıyla değiştirin.URL,
https://atlas.microsoft.com/mapData/uploadAPI'si aracılığıyla harita verilerini yüklemek için kullanılır. Çağrı, hangi Azure Maps API'sinin kullanılacağını belirtmek için birapi-versionparametresi içerir. Bu, API'nin zaman içinde değişmesine ancak geriye dönük uyumluluğu korumasına olanak tanır. Yüklenen veri formatıgeojsonolarak ayarlanır.Bu, yükleme API'sine POST isteğini çalıştırır ve
locationadlı bir başlık içeren yanıt başlıklarının bir listesini döndürür.content-type: application/json location: https://us.atlas.microsoft.com/mapData/operations/1560ced6-3a80-46f2-84b2-5b1531820eab?api-version=1.0 x-ms-azuremaps-region: West US 2 x-content-type-options: nosniff strict-transport-security: max-age=31536000; includeSubDomains x-cache: CONFIG_NOCACHE date: Sat, 22 May 2021 21:34:57 GMT content-length: 0🎓 Bir web uç noktasını çağırırken, çağrıya
?ardındankey=valueolarak anahtar-değer çiftleri ekleyerek parametreler geçirebilirsiniz. Anahtar-değer çiftlerini&ile ayırabilirsiniz. -
Azure Maps bunu hemen işlemez, bu nedenle yükleme isteğinin tamamlanıp tamamlanmadığını kontrol etmek için
locationbaşlığında verilen URL'yi kullanmanız gerekir. Bu konuma bir GET isteği yaparak durumu görebilirsiniz. Azure Maps hesabınızın API anahtarını ekleyereklocationURL'sinin sonuna&subscription-key=<subscription_key>eklemeniz gerekir.<subscription_key>öğesini Azure Maps hesabınızın API anahtarıyla değiştirin ve aşağıdaki komutu çalıştırın:curl --request GET '<location>&subscription-key=<subscription_key>'<location>öğesinilocationbaşlığının değeriyle ve<subscription_key>öğesini Azure Maps hesabınızın API anahtarıyla değiştirin. -
Yanıttaki
statusdeğerini kontrol edin. EğerSucceededdeğilse, bir dakika bekleyin ve tekrar deneyin. -
Durum
Succeededolarak döndüğünde, yanıttakiresourceLocationöğesine bakın. Bu, GeoJSON nesnesi için benzersiz kimlik (UDID) ayrıntılarını içerir. UDID,metadata/öğesinden sonra gelen veapi-versionöğesini içermeyen değerdir. Örneğin,resourceLocationşu şekilde olsaydı:{ "resourceLocation": "https://us.atlas.microsoft.com/mapData/metadata/7c3776eb-da87-4c52-ae83-caadf980323a?api-version=1.0" }UDID
7c3776eb-da87-4c52-ae83-caadf980323aolurdu.Bu UDID'nin bir kopyasını saklayın, çünkü coğrafi çiti test etmek için buna ihtiyacınız olacak.
Noktaları Bir Coğrafi Çite Karşı Test Etme
Çokgen Azure Maps'e yüklendikten sonra, bir noktanın coğrafi çitin içinde mi yoksa dışında mı olduğunu test edebilirsiniz. Bunu, coğrafi çitin UDID'sini ve test edilecek noktanın enlem ve boylamını geçirerek bir web API isteği yaparak gerçekleştirirsiniz.
Bu isteği yaparken, searchBuffer adlı bir değer de geçirebilirsiniz. Bu, sonuçları döndürürken Maps API'nin ne kadar hassas olması gerektiğini belirtir. Bunun nedeni, GPS'in mükemmel bir şekilde doğru olmaması ve bazen konumların metrelerce veya daha fazla sapma gösterebilmesidir. Arama tamponu için varsayılan değer 50m'dir, ancak 0m ile 500m arasında değerler ayarlayabilirsiniz.
API çağrısından dönen sonuçlarda, sonuçlardan biri coğrafi çitin kenarına en yakın noktaya ölçülen bir distance değeridir. Bu değer, nokta coğrafi çitin dışındaysa pozitif, içindeyse negatif olur. Bu mesafe arama tamponundan küçükse, gerçek mesafe metre cinsinden döndürülür. Aksi takdirde değer 999 veya -999 olur. 999, noktanın coğrafi çitin dışında arama tamponundan daha fazla olduğu anlamına gelir. -999, noktanın coğrafi çitin içinde arama tamponundan daha fazla olduğu anlamına gelir.
Yukarıdaki resimde, coğrafi çitin etrafında 50m arama tamponu var.
- Coğrafi çitin merkezindeki bir nokta, arama tamponunun içinde, mesafesi -999.
- Arama tamponunun dışında olan bir nokta, mesafesi 999.
- Coğrafi çitin içinde ve arama tamponunun içinde olan bir nokta, coğrafi çitten 6m uzaklıkta, mesafesi 6m.
- Coğrafi çitin dışında ve arama tamponunun içinde olan bir nokta, coğrafi çitten 39m uzaklıkta, mesafesi 39m.
Coğrafi çitin kenarına olan mesafeyi bilmek ve bunu araç konumuna dayalı kararlar alırken diğer bilgilerle, örneğin diğer GPS okumaları, hız ve yol verileriyle birleştirmek önemlidir.
Örneğin, bir aracın bir coğrafi çitin yanından geçen bir yolda ilerlediğini gösteren GPS okumalarını hayal edin. Eğer tek bir GPS değeri yanlışsa ve aracı coğrafi çitin içinde gösteriyorsa, bu değer görmezden gelinebilir.
Yukarıdaki görselde, Microsoft kampüsünün bir kısmını kapsayan bir jeoçit bulunmaktadır. Kırmızı çizgi, 520 boyunca ilerleyen bir kamyonu ve GPS okumalarını gösteren daireleri temsil eder. Bu okumaların çoğu doğru ve 520 boyunca yer alırken, bir tanesi jeoçitin içinde yanlış bir okuma olarak görünmektedir. Bu okumanın doğru olması mümkün değildir - kamyonun 520'den kampüse aniden sapıp, ardından tekrar 520'ye dönmesi için yollar yoktur. Bu jeoçiti kontrol eden kod, jeoçit testi sonuçlarına göre işlem yapmadan önce önceki okumaları dikkate almalıdır.
✅ Bir GPS okumasının doğru kabul edilip edilemeyeceğini kontrol etmek için hangi ek verilere ihtiyaç duyarsınız?
Görev - noktaları bir jeoçite karşı test etme
-
Web API sorgusu için URL'yi oluşturmakla başlayın. Format şu şekildedir:
https://atlas.microsoft.com/spatial/geofence/json?api-version=1.0&deviceId=gps-sensor&subscription-key=<subscription-key>&udid=<UDID>&lat=<lat>&lon=<lon><subscription_key>kısmını Azure Maps hesabınızın API anahtarı ile değiştirin.<UDID>kısmını önceki görevdeki jeoçitin UDID'si ile değiştirin.<lat>ve<lon>kısmını test etmek istediğiniz enlem ve boylam ile değiştirin.Bu URL, GeoJSON kullanılarak tanımlanan bir jeoçiti sorgulamak için
https://atlas.microsoft.com/spatial/geofence/jsonAPI'sini kullanır.1.0API sürümünü hedefler.deviceIdparametresi gereklidir ve enlem ve boylamın geldiği cihazın adı olmalıdır.Varsayılan arama tamponu 50m'dir ve bunu
searchBuffer=<distance>ek parametresini geçirerek değiştirebilirsiniz.<distance>değerini metre cinsinden 0 ile 500 arasında bir mesafeye ayarlayın. -
Bu URL'ye bir GET isteği yapmak için curl kullanın:
curl --request GET '<URL>'💁 Eğer
BadRequestyanıt kodu alırsanız ve hata şu şekilde olursa:Invalid GeoJSON: All feature properties should contain a geometryId, which is used for identifying the geofence.GeoJSON'unuzda
geometryIdiçerenpropertiesbölümü eksiktir. GeoJSON'unuzu düzeltmeniz, ardından yukarıdaki adımları tekrarlayarak yeniden yüklemeniz ve yeni bir UDID almanız gerekecek. -
Yanıt, jeoçiti oluşturmak için kullanılan GeoJSON'da tanımlanan her bir çokgen için bir
geometrieslistesi içerecektir. Her bir geometri,distance,nearestLatvenearestLonolmak üzere 3 ilgi alanına sahip alana sahiptir.{ "geometries": [ { "deviceId": "gps-sensor", "udId": "7c3776eb-da87-4c52-ae83-caadf980323a", "geometryId": "1", "distance": 999.0, "nearestLat": 47.645875, "nearestLon": -122.142713 } ], "expiredGeofenceGeometryId": [], "invalidPeriodGeofenceGeometryId": [] }-
nearestLatvenearestLon, test edilen konuma en yakın jeoçitin kenarındaki bir noktanın enlem ve boylamıdır. -
distance, test edilen konumdan jeoçitin kenarındaki en yakın noktaya olan mesafedir. Negatif sayılar jeoçitin içinde, pozitif sayılar dışında anlamına gelir. Bu değer 50'den (varsayılan arama tamponu) küçük veya 999 olacaktır.
-
-
Bu işlemi jeoçitin içinde ve dışında bulunan konumlarla birden fazla kez tekrarlayın.
Sunucusuz koddan jeoçitleri kullanma
Artık IoT Hub GPS olay verilerini jeoçite karşı test etmek için Functions uygulamanıza yeni bir tetikleyici ekleyebilirsiniz.
Tüketici grupları
Önceki derslerden hatırlayacağınız gibi, IoT Hub, hub tarafından alınan ancak işlenmeyen olayları yeniden oynatmanıza izin verir. Ancak birden fazla tetikleyici bağlanırsa ne olur? Hangi tetikleyicinin hangi olayları işlediğini nasıl bilecek?
Cevap şu ki, bilemez! Bunun yerine, olayları okumak için birden fazla ayrı bağlantı tanımlayabilirsiniz ve her biri okunmamış mesajların yeniden oynatılmasını yönetebilir. Bunlara tüketici grupları denir. Uç noktaya bağlandığınızda, bağlanmak istediğiniz tüketici grubunu belirtebilirsiniz. Uygulamanızın her bir bileşeni farklı bir tüketici grubuna bağlanacaktır.
Teorik olarak her tüketici grubuna 5 uygulama bağlanabilir ve mesajlar geldiğinde hepsi mesajları alır. En iyi uygulama, her tüketici grubuna yalnızca bir uygulamanın erişmesini sağlamak, böylece yinelenen mesaj işleme önlenir ve yeniden başlatıldığında tüm sıraya alınmış mesajlar doğru şekilde işlenir. Örneğin, Functions uygulamanızı hem yerel olarak hem de bulutta çalıştırırsanız, her ikisi de mesajları işler ve bu da depolama hesabında yinelenen blobların saklanmasına yol açar.
Önceki derste oluşturduğunuz IoT Hub tetikleyicisinin function.json dosyasını incelerseniz, olay hub tetikleyici bağlama bölümünde tüketici grubunu göreceksiniz:
"consumerGroup": "$Default"
Bir IoT Hub oluşturduğunuzda, varsayılan olarak $Default tüketici grubu oluşturulur. Ek bir tetikleyici eklemek isterseniz, bunu yeni bir tüketici grubu kullanarak ekleyebilirsiniz.
💁 Bu derste, GPS verilerini depolamak için kullanılan işlevden farklı bir işlev kullanarak jeoçiti test edeceksiniz. Bu, tüketici gruplarını nasıl kullanacağınızı ve kodu daha okunabilir ve anlaşılır hale getirmek için nasıl ayıracağınızı göstermek içindir. Üretim uygulamasında bunu yapmanın birçok yolu vardır - her ikisini bir işlevde birleştirmek, depolama hesabındaki bir tetikleyiciyi kullanarak jeoçiti kontrol etmek için bir işlev çalıştırmak veya birden fazla işlev kullanmak. 'Doğru yol' yoktur, bu uygulamanızın geri kalanına ve ihtiyaçlarınıza bağlıdır.
Görev - yeni bir tüketici grubu oluşturma
-
IoT Hub için
geofenceadlı yeni bir tüketici grubu oluşturmak için aşağıdaki komutu çalıştırın:az iot hub consumer-group create --name geofence \ --hub-name <hub_name><hub_name>kısmını IoT Hub için kullandığınız ad ile değiştirin. -
IoT Hub için tüm tüketici gruplarını görmek isterseniz, aşağıdaki komutu çalıştırın:
az iot hub consumer-group list --output table \ --hub-name <hub_name><hub_name>kısmını IoT Hub için kullandığınız ad ile değiştirin. Bu, tüm tüketici gruplarını listeleyecektir.Name ResourceGroup -------- --------------- $Default gps-sensor geofence gps-sensor
💁 Önceki derste IoT Hub olay monitörünü çalıştırdığınızda,
$Defaulttüketici grubuna bağlandı. Bu nedenle olay monitörünü ve bir olay tetikleyicisini aynı anda çalıştıramazsınız. Her işlev uygulaması için diğer tüketici gruplarını kullanabilir ve$Defaultgrubunu olay monitörü için saklayabilirsiniz.
Görev - yeni bir IoT Hub tetikleyici oluşturma
-
Daha önceki derste oluşturduğunuz
gps-triggerişlev uygulamasına yeni bir IoT Hub olay tetikleyici ekleyin. Bu işlevigeofence-triggerolarak adlandırın. -
function.jsondosyasındaki IoT Hub bağlantı dizesini yapılandırın.local.settings.jsondosyası, Functions uygulamasındaki tüm tetikleyiciler arasında paylaşılır. -
function.jsondosyasındakiconsumerGroupdeğerini yenigeofencetüketici grubunu referans alacak şekilde güncelleyin:"consumerGroup": "geofence" -
Bu tetikleyicide Azure Maps hesabınızın abonelik anahtarını kullanmanız gerekecek, bu yüzden
local.settings.jsondosyasınaMAPS_KEYadlı yeni bir giriş ekleyin. -
Functions uygulamasını çalıştırarak bağlandığından ve mesajları işlediğinden emin olun. Önceki dersten
iot-hub-triggerda çalışacak ve blobları depolamaya yükleyecektir.Blob depolamada yinelenen GPS okumalarını önlemek için bulutta çalışan Functions uygulamanızı durdurabilirsiniz. Bunu yapmak için aşağıdaki komutu kullanın:
az functionapp stop --resource-group gps-sensor \ --name <functions_app_name><functions_app_name>kısmını Functions uygulamanız için kullandığınız ad ile değiştirin.Daha sonra aşağıdaki komutla yeniden başlatabilirsiniz:
az functionapp start --resource-group gps-sensor \ --name <functions_app_name><functions_app_name>kısmını Functions uygulamanız için kullandığınız ad ile değiştirin.
Görev - tetikleyiciden jeoçiti test etme
Bu derste daha önce bir noktanın jeoçitin içinde mi dışında mı olduğunu görmek için curl kullanarak bir jeoçiti sorguladınız. Benzer bir web isteğini tetikleyicinizin içinden yapabilirsiniz.
-
Jeoçiti sorgulamak için UDID'sine ihtiyacınız var.
local.settings.jsondosyasınaGEOFENCE_UDIDadlı yeni bir giriş ekleyin ve bu değeri girin. -
Yeni
geofence-triggertetikleyicisinin__init__.pydosyasını açın. -
Dosyanın üst kısmına aşağıdaki import'u ekleyin:
import json import os import requestsrequestspaketi, web API çağrıları yapmanıza olanak tanır. Azure Maps'in bir Python SDK'sı yoktur, Python kodundan kullanmak için web API çağrıları yapmanız gerekir. -
mainmetodunun başına aşağıdaki 2 satırı ekleyerek Maps abonelik anahtarını alın:maps_key = os.environ['MAPS_KEY'] geofence_udid = os.environ['GEOFENCE_UDID'] -
for event in eventsdöngüsünün içine aşağıdaki kodu ekleyerek her olaydan enlem ve boylamı alın:event_body = json.loads(event.get_body().decode('utf-8')) lat = event_body['gps']['lat'] lon = event_body['gps']['lon']Bu kod, olay gövdesindeki JSON'u bir sözlüğe dönüştürür ve ardından
gpsalanındanlatvelondeğerlerini çıkarır. -
requestskullanırken, curl ile yaptığınız gibi uzun bir URL oluşturmak yerine, yalnızca URL kısmını kullanabilir ve parametreleri bir sözlük olarak geçirebilirsiniz. Çağrılacak URL'yi tanımlamak ve parametreleri yapılandırmak için aşağıdaki kodu ekleyin:url = 'https://atlas.microsoft.com/spatial/geofence/json' params = { 'api-version': 1.0, 'deviceId': 'gps-sensor', 'subscription-key': maps_key, 'udid' : geofence_udid, 'lat' : lat, 'lon' : lon }paramssözlüğündeki öğeler, curl ile web API'yi çağırırken kullandığınız anahtar-değer çiftleriyle eşleşecektir. -
Web API'yi çağırmak için aşağıdaki kod satırlarını ekleyin:
response = requests.get(url, params=params) response_body = json.loads(response.text)Bu, URL'yi parametrelerle çağırır ve bir yanıt nesnesi alır.
-
Bunun altına aşağıdaki kodu ekleyin:
distance = response_body['geometries'][0]['distance'] if distance == 999: logging.info('Point is outside geofence') elif distance > 0: logging.info(f'Point is just outside geofence by a distance of {distance}m') elif distance == -999: logging.info(f'Point is inside geofence') else: logging.info(f'Point is just inside geofence by a distance of {distance}m')Bu kod, 1 geometri varsayar ve bu tek geometriden mesafeyi çıkarır. Ardından mesafeye göre farklı mesajlar kaydeder.
-
Bu kodu çalıştırın. GPS koordinatlarının jeoçitin içinde mi dışında mı olduğunu, eğer 50m içinde ise mesafeyi günlük çıktısında göreceksiniz. GPS sensörünüzün konumuna göre farklı jeoçitlerle bu kodu deneyin, sensörü hareket ettirmeyi deneyin (örneğin bir mobil telefonun WiFi'sine bağlı veya sanal IoT cihazında farklı koordinatlarla) ve değişimi gözlemleyin.
-
Hazır olduğunuzda, bu kodu buluttaki Functions uygulamanıza dağıtın. Yeni Uygulama Ayarlarını dağıtmayı unutmayın.
⚠️ Proje 2, ders 5'teki Uygulama Ayarlarını yükleme talimatlarına gerekirse buradan bakabilirsiniz.
💁 Bu kodu code/functions klasöründe bulabilirsiniz.
🚀 Meydan Okuma
Bu derste, tek bir çokgen içeren bir GeoJSON dosyası kullanarak bir jeoçit eklediniz. Farklı geometryId değerlerine sahip birden fazla çokgen içeren bir GeoJSON dosyası yüklemeyi deneyin ve GPS koordinatlarının hangi çokgene en yakın veya içinde olduğunu bulmak için kodunuzu ayarlayın.
Ders Sonrası Test
İnceleme ve Kendi Kendine Çalışma
- Jeoçitler ve bazı kullanım alanları hakkında daha fazla bilgi için Wikipedia'daki Jeoçit sayfasını okuyun.
- Azure Maps jeoçit API'si hakkında daha fazla bilgi için Microsoft Azure Maps Spatial - Get Geofence belgelerini okuyun.
- Tüketici grupları hakkında daha fazla bilgi için Azure Event Hubs'daki Özellikler ve Terminoloji - Olay Tüketicileri belgelerini okuyun.
Ödev
Twilio kullanarak bildirim gönderin
Feragatname:
Bu belge, Co-op Translator adlı yapay zeka çeviri hizmeti kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlıklar içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlama veya yanlış yorumlamalardan sorumlu değiliz.





