Android
Data objects
คำแนะนำการใช้งาน GeoPoint Queries ใน Android บน Parse
9 นาที
geoqueries บทนำ ในคู่มือนี้ คุณจะได้เรียนรู้วิธีการทำการค้นหา geopoint บน parse ในแอปพลิเคชัน android บทเรียนนี้ใช้แอปที่สร้างขึ้นใน android studio arctic fox 2020 3 1 พร้อมกับ compilesdk = 30 compilesdk = 30 , minsdk = 23 minsdk = 23 และ targetsdk = 30 targetsdk = 30 ในทุกช่วงเวลา คุณสามารถเข้าถึงโปรเจกต์ android ที่สร้างขึ้นจากบทเรียนนี้ได้ที่ที่เก็บ github ของเรา ที่เก็บตัวอย่าง kotlin ที่เก็บตัวอย่าง java เป้าหมาย ทำการค้นหา geoqueries โดยใช้ geopoints ที่เก็บไว้บน back4app และ geolocation ของ android นี่คือภาพรวมของสิ่งที่เราจะทำให้สำเร็จ ข้อกำหนดเบื้องต้น ในการทำตามบทเรียนนี้ เราต้องการ android studio แอปที่สร้างขึ้นบน back4app หมายเหตุ ติดตาม บทเรียนการสร้าง parse app ใหม่ เพื่อเรียนรู้วิธีการสร้าง parse app บน back4app แอป android ที่เชื่อมต่อกับ back4app หมายเหตุ ติดตาม บทเรียนการติดตั้ง parse sdk เพื่อสร้างโปรเจกต์ android studio ที่เชื่อมต่อกับ back4app อุปกรณ์ (หรือ อุปกรณ์เสมือน ) ที่รัน 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 ในขั้นตอนนี้ เราจะสร้างคลาสด้วย js console และโค้ด javascript ที่จัดเตรียมโดย parse parse และเราจะสร้างคำค้นหาสำหรับคลาสนี้ มาสร้าง เมือง เมือง คลาส ซึ่งจะเป็นเป้าหมายของการค้นหาในคู่มือนี้ บน parse js console สามารถรันโค้ด javascript ได้โดยตรง โดยการค้นหาและอัปเดตเนื้อหาของฐานข้อมูลแอปพลิเคชันของคุณโดยใช้คำสั่ง js sdk รันโค้ดด้านล่างจาก js console ของคุณและแทรกข้อมูลลงใน back4app นี่คือรูปลักษณ์ของ js console ในแดชบอร์ดของคุณ ไปข้างหน้าและสร้าง เมือง เมือง คลาสด้วยเนื้อหาตัวอย่างต่อไปนี้ 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 ในคลาสนี้ได้ มาลองเริ่มต้นด้วยการจัดเรียง เมือง เมือง ผลลัพธ์โดยใกล้ที่สุดจากคิงส์ตันในจาเมกา (ละติจูด 18 01808695059913 และลองจิจูด 76 79894232253473) โดยใช้ parsequery wherenear parsequery wherenear วิธีการ 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 ตั้งอยู่ภายในระยะทางสูงสุด 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 } อีกหนึ่งวิธีการค้นหาที่มีประโยชน์คือ parsequery wherewithinpolygon parsequery wherewithinpolygon , ซึ่งจะค้นหาผลลัพธ์ที่ค่าฟิลด์ 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