Android
Data objects
AndroidでのParseを使ったジオポイントクエリ実装ガイド
9 分
ジオクエリ はじめに このガイドでは、androidアプリケーションでparseを使用してgeopointクエリを実行する方法を学びます。 このチュートリアルでは、android studio arctic fox 2020 3 1で作成されたアプリを使用します。 compilesdk = 30 compilesdk = 30 、 minsdk = 23 minsdk = 23 と targetsdk = 30 targetsdk = 30 いつでも、このチュートリアルで構築された完全なandroidプロジェクトにアクセスできます。私たちのgithubリポジトリで kotlinの例リポジトリ javaの例リポジトリ 目標 back4appに保存されたジオポイントとandroidのジオロケーションを使用してジオクエリを実行します。 これが私たちが達成しようとしていることのプレビューです 前提条件 このチュートリアルを完了するには、以下が必要です: android studio back4appで作成されたアプリ。 注意 新しいparseアプリのチュートリアル を参照して、back4appでparseアプリを作成する方法を学んでください。 back4appに接続されたandroidアプリ。 注意 parse sdkのインストールチュートリアル を参照して、back4appに接続されたandroid studioプロジェクトを作成してください。 android 4 1(jelly bean)以上を実行しているデバイス(または 仮想デバイス )。 始めましょう! 次のステップの前に、 back4app back4app を私たちのアプリケーションに接続する必要があります。 appid appid と clientkey clientkey を back4app back4app から string xml string xml ファイルに保存し、その後、 parse parse を私たちの app java app java または app kt app kt ファイルで初期化します。 新しいparseアプリのチュートリアル を参照してください。もし、あなたのアプリに parse parse を初期化する方法がわからない場合は。 または、上記のgithubリンクで共有したプロジェクトをダウンロードし、 appid appid と clientkey clientkey の部分だけをあなたに合わせて編集することもできます。 1 back4appにデータを保存する このステップでは、 parse parse によって提供されたjsコンソールとjavascriptコードを使用してクラスを作成し、このクラスのクエリを作成します。 クラスを作成しましょう。これはこのガイドでのクエリのターゲットになります。parse jsコンソールでは、js sdkコマンドを使用してアプリケーションデータベースの内容を直接クエリし、更新するjavascriptコードを実行できます。以下のコードをjsコンソールから実行し、back4appにデータを挿入してください。 ダッシュボードのjsコンソールはこのように見えます 次に、以下の例の内容で city city クラスを作成してください 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(); 38 39 console log('success!'); 2 androidアプリからデータをクエリする クラスが populated されたので、geopointクエリを実行できます。ジャマイカのキングストンから最も近い結果を、 city city を使って、 parsequery wherenear parsequery wherenear メソッドを使用して、緯度18 01808695059913、経度 76 79894232253473で並べてみましょう 1 parsequery\<parseobject> query = new parsequery<>("city"); 2 query wherenear("location",new parsegeopoint(18 018086, 76 798942)); 3 query findinbackground((objects, e) > { 4 if (e==null){ 5 initdata(objects); 6 } else { 7 toast maketext(mainactivity this, e getlocalizedmessage(), toast length short) show(); 8 } 9 });1 val query = parsequery\<parseobject>("city") 2 query wherenear("location", parsegeopoint(18 018086, 76 798942)) 3 query findinbackground { objects list\<parseobject>?, e parseexception? > 4 if (e == null) { 5 initdata(objects!!) 6 } else { 7 toast maketext(this\@mainactivity, e localizedmessage, toast length short) 8 show() 9 } 1 0 } 今から、メソッドを使用してクエリを実行しましょう parsequery wherewithinkilometers parsequery wherewithinkilometers , これは、geopointフィールドが最大距離内にあるすべての結果を取得します。キングストンを再度参照として使用し、距離制限は3000 kmになります。 1 parsequery\<parseobject> query = new parsequery<>("city"); 2 query wherewithinkilometers("location",new parsegeopoint(18 018086, 76 798942),3000); 3 query findinbackground((objects, e) > { 4 if (e==null){ 5 initdata(objects); 6 } else { 7 toast maketext(mainactivity this, e getlocalizedmessage(), toast length short) show(); 8 } 9 });1 val query = parsequery\<parseobject>("city") 2 query wherewithinkilometers( 3 "location", 4 parsegeopoint(18 018086, 76 798942), 5 3000 0 6 ) 7 query findinbackground { objects list\<parseobject>?, e parseexception? > 8 if (e == null) { 9 initdata(objects!!) 10 } else { 11 toast maketext(this\@mainactivity, e localizedmessage, toast length short) 12 show() 13 } 14 } もう一つの便利なクエリメソッドは parsequery wherewithinpolygon parsequery wherewithinpolygon , これは、指定されたポリゴン内にあるgeopointフィールド値を持つ結果をクエリします。ポリゴンはgeopointsの配列(少なくとも3つ)で構成されます。ポリゴンのパスが開いている場合、parseは最後の点と最初の点を接続して自動的に閉じます。 この例では、南アメリカ大陸を大まかに含む単純なポリゴンを使用し、海にある5つの遠く離れたgeopointsで構成されます。 1 parsequery\<parseobject> query = new parsequery<>("city"); 2 3 parsegeopoint geopoint1 = new parsegeopoint(15 822238344514378, 72 42845934415942); 4 parsegeopoint geopoint2 = new parsegeopoint( 0 7433770196268968, 97 44765968406668); 5 parsegeopoint geopoint3 = new parsegeopoint( 59 997149373299166, 76 52969196322749); 6 parsegeopoint geopoint4 = new parsegeopoint( 9 488786415007201, 18 346101586021952); 7 parsegeopoint geopoint5 = new parsegeopoint(15 414859532811047, 60 00625459569375); 8 parsegeopoint geopoint6 = new parsegeopoint(41 015137, 28 97953); 9 10 list\<parsegeopoint> list = new arraylist<>(); 11 list add(geopoint1); 12 list add(geopoint2); 13 list add(geopoint3); 14 list add(geopoint4); 15 list add(geopoint5); 16 list add(geopoint6); 17 query wherewithinpolygon("location",list); 18 19 query findinbackground((objects, e) > { 20 if (e==null){ 21 initdata(objects); 22 } else { 23 toast maketext(mainactivity this, e getlocalizedmessage(), toast length short) show(); 24 } 25 });1 val query = parsequery\<parseobject>("city") 2 val geopoint1 = parsegeopoint(15 822238344514378, 72 42845934415942) 3 val geopoint2 = parsegeopoint( 0 7433770196268968, 97 44765968406668) 4 val geopoint3 = parsegeopoint( 59 997149373299166, 76 52969196322749) 5 val geopoint4 = parsegeopoint( 9 488786415007201, 18 346101586021952) 6 val geopoint5 = parsegeopoint(15 414859532811047, 60 00625459569375) 7 val geopoint6 = parsegeopoint(41 015137, 28 97953) 8 val list mutablelist\<parsegeopoint> = 9 arraylist() 10 list add(geopoint1) 11 list add(geopoint2) 12 list add(geopoint3) 13 list add(geopoint4) 14 list add(geopoint5) 15 list add(geopoint6) 16 query wherewithinpolygon("location", list) 17 query findinbackground { objects list\<parseobject>?, e parseexception? > 18 if (e == null) { 19 initdata(objects!!) 20 } else { 21 toast maketext(this\@mainactivity, e localizedmessage, toast length short) 22 show() 23 } 24 } 完了しました! このガイドの最後に、parseでのgeopointデータクエリの動作と、androidアプリからback4appでそれを実行する方法を学びました。次のガイドでは、parseでのユーザーの作成と管理方法を確認します。