iOS
...
Data Objects
Mengelola Geoqueries dengan ParseGeoPoint di ParseSwift SDK
9 mnt
geoqueries pendahuluan kami menggunakan istilah geoqueries untuk merujuk pada jenis kueri di mana kondisi mereka melibatkan parsegeopoint parsegeopoint jenis bidang disarankan untuk menggunakan parsegeopoint parsegeopoint struktur untuk menyimpan data lokasi geografis di database back4app parseswift sdk parseswift sdk menyediakan serangkaian metode yang memungkinkan kami untuk mengkueri data sesuai dengan kondisi yang diterapkan pada parsegeopoint parsegeopoint tipe data prasyarat untuk menyelesaikan tutorial ini, anda akan membutuhkan sebuah aplikasi https //www back4app com/docs/get started/new parse app sebuah aplikasi ios dasar untuk menguji kueri tujuan untuk memahami cara mengkueri data menggunakan kondisi pada data lokasi geografis 1 tinjauan cepat tentang kelas query\<u> setiap kueri yang dilakukan pada database back4app dilakukan melalui kelas generik query\<u> query\<u> parameter generik u u (yang sesuai dengan parseobject parseobject protokol) adalah tipe data dari objek yang ingin kami ambil dari database diberikan tipe data seperti myobject myobject , kita mengambil objek objek ini dari database back4app dengan cara berikut 1 import parseswift 2 3 struct myobject parseobject { 4 5 } 6 7 let query = myobject query() 8 9 // executes the query asynchronously 10 query find { result in 11 // handle the result (of type result<\[myobject], parseerror>) 12 } anda dapat membaca lebih lanjut tentang query\<u> query\<u> kelas https //github com/parse community/parse swift 2 simpan beberapa data di back4app sebelum kita mulai mengeksekusi kueri, kita harus menyimpan beberapa data contoh di database back4app dengan mengikuti https //www back4app com/docs/ios/parse swift sdk/install sdk , anda dapat mengonfigurasi dan menghubungkan aplikasi ios contoh anda ke database back4app anda untuk panduan ini, kita akan menyimpan informasi tentang kota kita menggunakan struktur berikut untuk mengorganisir informasi kota 1 import parseswift 2 3 struct city parseobject { 4 5 6 var name string? // city's name 7 var location parsegeopoint? // it will store the city's coordinate on earth 8 } sekarang, kita melanjutkan untuk menyimpan data sampel langkah ini dapat diimplementasikan menggunakan swift atau langsung dari https //www youtube com/watch?v=nvwryrzbcma aplikasi anda di platform back4app //after setting up your xcode project, calling the following method should save some sample data on your back4app database 1 import parseswift 2 3 func setupsampledata() { 4 do { 5 // montevideo uruguay 6 = try city( 7 name "montevideo", 8 location parsegeopoint(coordinate cllocationcoordinate2d(latitude 34 85553195363169, longitude 56 207280375137955)) 9 ) save() 10 11 // brasĂlia brazil 12 = try city( 13 name "brasĂlia", 14 location parsegeopoint(coordinate cllocationcoordinate2d(latitude 15 79485821477289, longitude 47 88391074690196)) 15 ) save() 16 17 // bogotá colombia 18 = try city( 19 name "bogotá", 20 location parsegeopoint(coordinate cllocationcoordinate2d(latitude 4 69139880891712, longitude 74 06936691331047)) 21 ) save() 22 23 // mexico city mexico 24 = try city( 25 name "mexico city", 26 location parsegeopoint(coordinate cllocationcoordinate2d(latitude 19 400977162618933, longitude 99 13311378164776)) 27 ) save() 28 29 // washington, d c united states 30 = try city( 31 name "washington, d c ", 32 location parsegeopoint(coordinate cllocationcoordinate2d(latitude 38 930727220189944, longitude 77 04626261880388)) 33 ) save() 34 35 // ottawa canada 36 = try city( 37 name "ottawa", 38 location parsegeopoint(latitude 45 41102167733425, longitude 75 695414598736) 39 ) save() 40 } catch let error as parseerror { 41 print("\[parseswift error]", error message) 42 } catch { 43 print("\[error]", error localizeddescription) 44 } 45 } back4app's console //a quick way to insert elements on your back4app database is via the console located in your app’s api section once you are there, you can start running javascript code to save the sample data 1 // add city objects and create table 2 // note how geopoints are created, passing latitude and longitude as arguments 3 // montevideo 4 city = new parse object('city'); 5 city set('name', 'montevideo uruguay'); 6 city set('location', new parse geopoint( 34 85553195363169, 56 207280375137955)); 7 await city save(); 8 9 // brasĂlia 10 city = new parse object('city'); 11 city set('name', 'brasĂlia brazil'); 12 city set('location', new parse geopoint( 15 79485821477289, 47 88391074690196)); 13 await city save(); 14 15 // bogotá 16 city = new parse object('city'); 17 city set('name', 'bogotá colombia'); 18 city set('location', new parse geopoint(4 69139880891712, 74 06936691331047)); 19 await city save(); 20 21 // mexico city 22 city = new parse object('city'); 23 city set('name', 'mexico city mexico'); 24 city set('location', new parse geopoint(19 400977162618933, 99 13311378164776)); 25 await city save(); 26 27 // washington, d c 28 city = new parse object('city'); 29 city set('name', 'washington, d c usa'); 30 city set('location', new parse geopoint(38 930727220189944, 77 04626261880388)); 31 await city save(); 32 33 // ottawa 34 city = new parse object('city'); 35 city set('name', 'ottawa canada'); 36 city set('location', new parse geopoint(45 41102167733425, 75 695414598736)); 37 await city save(); 3 kuery data mengurutkan hasil dengan data contoh yang disimpan, kita dapat mulai melakukan berbagai jenis kueri untuk contoh pertama kita, kita akan memilih semua kota dan mengurutkannya tergantung seberapa jauh mereka dari titik geopoint referensi kita mengimplementasikan kueri ini dengan memberikan batasan pada query\<city> query\<city> objek metode near(key\ geopoint ) near(key\ geopoint ) yang tersedia melalui parseswift sdk parseswift sdk memungkinkan kita untuk membangun batasan tersebut sebagai argumen, kita memberikan nama field (biasanya disebut sebagai key key ) yang berisi geopoint geopoint referensi 1 // the reference geopoint will be kingston city jamaica 2 guard let kingstongeopoint = try? parsegeopoint(latitude 18 018086950599134, longitude 76 79894232253473) else { return } 3 4 let query = city query(near(key "location", geopoint kingstongeopoint)) // the method near(key\ geopoint ) returns the constraint needed to sort the query 5 6 let sortedcities \[city]? = try? query find() // executes the query synchronosuly and returns an array containing the cities properly sorted 7 8 query find { result in // executes the query asynchronosuly and returns a result<\[city], parseerror> type object to handle the results 9 switch result { 10 case success(let cities) 11 // cities = \[bogotá, washington dc, mexico city, ottawa, brasĂlia, montevideo] 12 case failure(let error) 13 // handle the error if something happened 14 } 15 } memilih hasil dalam wilayah tertentu misalkan kita ingin memilih kota kota dalam wilayah tertentu kita dapat mencapainya dengan batasan yang dibuat oleh metode withinkilometers(key\ geopoint\ distance ) withinkilometers(key\ geopoint\ distance ) sebagai argumen, kita mengirimkan nama field yang berisi lokasi kota, pusat wilayah (sebuah parsegeopoint parsegeopoint tipe data) dan jarak maksimum (dalam km ) sebuah kota dapat berada dari pusat wilayah ini untuk memilih semua kota yang paling jauh 3000km dari kingston jamaika, kita dapat melakukannya dengan cara berikut 1 let distance double = 3000 // km 2 guard let kingstongeopoint = try? parsegeopoint(latitude 18 018086950599134, longitude 76 79894232253473) else { return } 3 4 let query = city query(withinkilometers(key "location", geopoint kingstongeopoint, distance distance)) 5 // the method withinkilometers(key\ geopoint\ distance ) returns the constraint we need for this case 6 7 let sortedcities \[city]? = try? query find() // executes the query synchronosuly and returns an array containing the cities we are looking for (bogotá, washington dc and mexico city in this case) 8 9 query find { result in // executes the query asynchronosuly and returns a result<\[city], parseerror> type object to handle the results 10 switch result { 11 case success(let cities) 12 // cities = \[bogotá, washington dc, mexico city] 13 case failure(let error) 14 // handle the error if something happened 15 } 16 } selain itu, ketika jarak diberikan dalam mil alih alih kilometer, kita dapat menggunakan withinmiles(key\ geopoint\ distance\ sorted ) withinmiles(key\ geopoint\ distance\ sorted ) metode metode yang kurang umum, withinradians(key\ geopoint\ distance\ sorted ) withinradians(key\ geopoint\ distance\ sorted ) , juga tersedia jika jarak diberikan dalam radian penggunaannya sangat mirip dengan metode sebelumnya memilih hasil dalam poligon yang diberikan dalam contoh sebelumnya, kami memilih kota kota dalam suatu wilayah yang diwakili oleh wilayah berbentuk lingkaran jika kami memerlukan bentuk non lingkaran untuk wilayah tersebut, parseswift sdk parseswift sdk memungkinkan kami untuk membangun wilayah tersebut dari titik titik sudutnya sekarang, tujuan dari contoh ini adalah untuk memilih kota kota dalam poligon dengan lima titik titik titik ini dinyatakan menggunakan parsegeopoint parsegeopoint struct setelah kita membuat titik titik tersebut, kita menginstansiasi parsepolygon parsepolygon poligon ini kemudian diteruskan ke withinpolygon(key\ polygon ) withinpolygon(key\ polygon ) metode (yang disediakan oleh parseswift sdk parseswift sdk ) untuk membangun batasan yang akan memungkinkan kita untuk memilih kota kota dalam poligon ini 1 // the polygon where the selected cities are 2 let polygon parsepolygon? = { 3 do { 4 // we first instantiate the polygon vertices 5 let geopoint1 = try parsegeopoint(latitude 15 822238344514378, longitude 72 42845934415942) 6 let geopoint2 = try parsegeopoint(latitude 0 7433770196268968, longitude 97 44765968406668) 7 let geopoint3 = try parsegeopoint(latitude 59 997149373299166, longitude 76 52969196322749) 8 let geopoint4 = try parsegeopoint(latitude 9 488786415007201, longitude 18 346101586021952) 9 let geopoint5 = try parsegeopoint(latitude 15 414859532811047, longitude 60 00625459569375) 10 11 // next we compose the polygon 12 return try parsepolygon(\[geopoint1, geopoint2, geopoint3, geopoint4, geopoint5]) 13 } catch let error as parseerror { 14 print("failed to instantiate vertices \\(error message)") 15 return nil 16 } catch { 17 print("failed to instantiate vertices \\(error localizeddescription)") 18 return nil 19 } 20 }() 21 22 guard let safepolygon = polygon else { return } 23 24 let query = city query(withinpolygon(key "location", polygon safepolygon)) 25 // withinpolygon(key\ polygon ) returns the required constraint to apply on the query 26 27 let cities = try? query find() // executes the query synchronously 28 29 query find { result in // executes the query asynchronously and returns a result of type result<\[], parseerror> 30 // handle the result 31 } kesimpulan saat ini melakukan operasi pada data lokasi untuk menawarkan layanan kustom sangat penting back4app bersama dengan parseswift sdk parseswift sdk memudahkan untuk menerapkan jenis operasi tersebut