Android
Data objects
안드로이드 앱에서 Parse 이용한 고급 GeoPoint 쿼리 방법
9 분
지오쿼리 소개 이 가이드에서는 android 애플리케이션에서 parse를 사용하여 geopoint 쿼리를 수행하는 방법을 배웁니다 이 튜토리얼은 compilesdk = 30 compilesdk = 30 로 생성된 android studio arctic fox 2020 3 1에서 만든 앱을 사용합니다 minsdk = 23 minsdk = 23 및 targetsdk = 30 targetsdk = 30 언제든지 이 튜토리얼로 구축된 전체 android 프로젝트에 대한 액세스를 github 리포지토리에서 확인할 수 있습니다 코틀린 예제 리포지토리 자바 예제 리포지토리 목표 back4app에 저장된 지오포인트와 android 지리 위치를 사용하여 지오쿼리를 수행합니다 우리가 달성할 목표의 미리보기는 다음과 같습니다 전제 조건 이 튜토리얼을 완료하려면 다음이 필요합니다 안드로이드 스튜디오 back4app에서 생성된 앱 참고 새 파스 앱 튜토리얼 을 따라 back4app에서 파스 앱을 만드는 방법을 배우세요 back4app에 연결된 안드로이드 앱 참고 파스 sdk 설치 튜토리얼 을 따라 back4app에 연결된 안드로이드 스튜디오 프로젝트를 만드세요 안드로이드 4 1 (젤리빈) 이상에서 실행되는 장치 (또는 가상 장치 ) 시작해봅시다! 다음 단계 전에, 우리는 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 콘솔과 자바스크립트 코드를 사용하여 클래스를 생성하고, 이 클래스에 대한 쿼리를 생성할 것입니다 클래스를 생성해 보겠습니다 이 클래스는 이 가이드에서 우리의 쿼리 대상이 될 것입니다 parse js 콘솔에서는 javascript 코드를 직접 실행하여 js sdk 명령을 사용하여 애플리케이션 데이터베이스 내용을 쿼리하고 업데이트할 수 있습니다 아래 코드를 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 앱에서 데이터 쿼리하기 이제 클래스에 데이터가 채워졌으므로, geopoint 쿼리를 수행할 수 있습니다 자메이카 킹스턴(위도 18 01808695059913, 경도 76 79894232253473)에서 가장 가까운 city city 결과를 정렬해 보겠습니다 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 필드가 최대 거리 내에 위치한 모든 결과를 검색합니다 킹스턴을 다시 참조로 사용하고 거리 제한은 3000km로 설정하겠습니다 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가 마지막 점과 첫 번째 점을 연결하여 자동으로 닫습니다 이 예제에서는 대략적으로 남미 대륙을 포함하는 간단한 다각형을 사용하며, 이는 바다에 있는 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에서 사용자를 생성하고 관리하는 방법을 확인할 것입니다