คำแนะนำการใช้งาน GeoPoint Queries ใน Android บน Parse
9 นาที
geoqueries บทนำ ในคู่มือนี้ คุณจะได้เรียนรู้วิธีการทำการค้นหา geopoint บน parse ในแอปพลิเคชัน android บทเรียนนี้ใช้แอปที่สร้างขึ้นใน android studio arctic fox 2020 3 1 พร้อมกับ \<font color="#2166ae">compilesdk = 30\</font> , \<font color="#2166ae">minsdk = 23\</font> และ \<font color="#2166ae">targetsdk = 30\</font> ในทุกช่วงเวลา คุณสามารถเข้าถึงโปรเจกต์ android ที่สร้างขึ้นจากบทเรียนนี้ได้ที่ที่เก็บ github ของเรา ที่เก็บตัวอย่าง kotlin https //github com/templates back4app/android parse sdk kotlin ที่เก็บตัวอย่าง java https //github com/templates back4app/android parse sdk java เป้าหมาย ทำการค้นหา geoqueries โดยใช้ geopoints ที่เก็บไว้บน back4app และ geolocation ของ android นี่คือภาพรวมของสิ่งที่เราจะทำให้สำเร็จ ข้อกำหนดเบื้องต้น ในการทำตามบทเรียนนี้ เราต้องการ android studio https //developer android com/studio/index html แอปที่สร้างขึ้นบน back4app หมายเหตุ ติดตาม บทเรียนการสร้าง parse app ใหม่ https //www back4app com/docs/get started/new parse app เพื่อเรียนรู้วิธีการสร้าง parse app บน back4app แอป android ที่เชื่อมต่อกับ back4app หมายเหตุ ติดตาม บทเรียนการติดตั้ง parse sdk https //www back4app com/docs/android/parse android sdk เพื่อสร้างโปรเจกต์ android studio ที่เชื่อมต่อกับ back4app อุปกรณ์ (หรือ อุปกรณ์เสมือน https //developer android com/studio/run/managing avds html ) ที่รัน android 4 1 (jelly bean) หรือใหม่กว่า เริ่มกันเลย! ก่อนที่จะดำเนินการต่อ เราต้องเชื่อมต่อ \<font color="#2166ae">back4app\</font> กับแอปพลิเคชันของเรา คุณควรบันทึก \<font color="#2166ae">appid\</font> และ \<font color="#2166ae">clientkey\</font> จาก \<font color="#2166ae">back4app\</font> ไปยัง \<font color="#2166ae">string xml\</font> ไฟล์ และจากนั้นเริ่ม \<font color="#2166ae">parse\</font> ใน \<font color="#2166ae">app java\</font> หรือ \<font color="#2166ae">app kt\</font> ไฟล์。 ติดตาม คู่มือการสร้างแอป parse ใหม่ https //www back4app com/docs/android/parse android sdk หากคุณไม่รู้ว่าจะเริ่ม \<font color="#2166ae">parse\</font> ในแอปของคุณอย่างไร หรือคุณสามารถดาวน์โหลดโปรเจกต์ที่เราแชร์ลิงก์ github ข้างต้นและแก้ไขเฉพาะ \<font color="#2166ae">appid\</font> และ \<font color="#2166ae">clientkey\</font> ตามที่คุณต้องการ 1 บันทึกข้อมูลบางอย่างบน back4app ในขั้นตอนนี้ เราจะสร้างคลาสด้วย js console และโค้ด javascript ที่จัดเตรียมโดย \<font color="#2166ae">parse\</font> และเราจะสร้างคำค้นหาสำหรับคลาสนี้ มาสร้าง \<font color="#2166ae">เมือง\</font> คลาส ซึ่งจะเป็นเป้าหมายของการค้นหาในคู่มือนี้ บน parse js console สามารถรันโค้ด javascript ได้โดยตรง โดยการค้นหาและอัปเดตเนื้อหาของฐานข้อมูลแอปพลิเคชันของคุณโดยใช้คำสั่ง js sdk รันโค้ดด้านล่างจาก js console ของคุณและแทรกข้อมูลลงใน back4app นี่คือรูปลักษณ์ของ js console ในแดชบอร์ดของคุณ ไปข้างหน้าและสร้าง \<font color="#2166ae">เมือง\</font> คลาสด้วยเนื้อหาตัวอย่างต่อไปนี้ 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 ตอนนี้ที่คุณมีคลาสที่มีข้อมูลแล้ว เราสามารถทำการค้นหา geopoint ในคลาสนี้ได้ มาลองเริ่มต้นด้วยการจัดเรียง \<font color="#2166ae">เมือง\</font> ผลลัพธ์โดยใกล้ที่สุดจากคิงส์ตันในจาเมกา (ละติจูด 18 01808695059913 และลองจิจูด 76 79894232253473) โดยใช้ \<font color="#2166ae">parsequery wherenear\</font> วิธีการ 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 } ตอนนี้เรามาทำการค้นหาด้วยวิธีการ \<font color="#2166ae">parsequery wherewithinkilometers\</font> , ซึ่งจะดึงผลลัพธ์ทั้งหมดที่ฟิลด์ geopoint ตั้งอยู่ภายในระยะทางสูงสุด kingston จะถูกใช้เป็นข้อมูลอ้างอิงอีกครั้งและขีดจำกัดระยะทางจะอยู่ที่ 3000 กม 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 } อีกหนึ่งวิธีการค้นหาที่มีประโยชน์คือ \<font color="#2166ae">parsequery wherewithinpolygon\</font> , ซึ่งจะค้นหาผลลัพธ์ที่ค่าฟิลด์ geopoint อยู่ภายในรูปหลายเหลี่ยมที่กำหนด ซึ่งประกอบด้วยอาร์เรย์ของ geopoints (อย่างน้อยสามจุด) หากเส้นทางของรูปหลายเหลี่ยมเปิดอยู่ จะถูกปิดโดยอัตโนมัติโดย parse โดยการเชื่อมต่อจุดสุดท้ายและจุดแรก สำหรับตัวอย่างนี้ คุณจะใช้รูปหลายเหลี่ยมที่เรียบง่ายซึ่งครอบคลุมทวีปอเมริกาใต้ ประกอบด้วย geopoints ที่อยู่ห่างกัน 5 จุดในมหาสมุทร 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 } เสร็จแล้ว! ในตอนท้ายของคู่มือนี้ คุณได้เรียนรู้ว่า geopoint data queries ทำงานอย่างไรบน parse และวิธีการดำเนินการใน back4app จากแอป android ในคู่มือต่อไป คุณจะตรวจสอบวิธีการสร้างและจัดการผู้ใช้ใน parse