안녕하세요!
오늘은 저번 '[JAVA][Android] 기상청 API 조회하기'에 이어서 현재 위치의 최근 예보 데이터를 기상청 API로부터 받아보도록 하겠습니다.
stickode.tistory.com/100?category=917924
진행 순서는 다음과 같이 진행됩니다.
1. 현재 GPS 좌표값 구하기 및 기상청 격자 좌표 변환
2. 현재 날짜 및 시간 구하기
3. API로 부터 받은 문자열 JSON 형태로 변환
0. 필요 데이터 값 파악
기상청 동네예보 조회서비스 오픈 API활용가이드를 보면
요청 파라메터로 다음과 같이 필요합니다.
* serviceKey : 인증키
* numOfRows : 한 페이지 결과 수
* pageNo : 페이지 번호
* dataType : 응답자료 형식
* base_date : 발표일자
* base_time : 발표시각
* nx : 예보지점 X 좌표
* ny : 예보지점 Y 좌표
MainActivity.java
callback url 과 변경될 파라메터값을 변수화 시켜줍니다.
1. 현재 GPS 좌표값 구하기 및 기상청 격자 좌표 변환
기상청 API에 사용되는 좌표는 GPS로 받아오는 위도 경도 좌표값과 다르기 때문에 값 변환이 필요합니다.
1-1 GPS 좌표 구하기
먼저 좌표 변환에 필요한 현재 핸드폰의 GPS 좌표를 가져오도록 합니다.
GPS 좌표를 구해올 'GpsTracker' 클래스 파일을 생성해 줍니다.
* GpsTracker.java
1-2 격자 좌표 변환하기
기상청 API에서는 격자 좌표를 이용하기 때문에
GPS로 받은 위도 경도 좌표값을 넣으면 데이터 조회가 되지 않습니다.
활용 가이드 문서에는 C 프로그램 예제만 나오기에 자바 코드로 변환한 코드를 사용하겠습니다.
좌표값 변환을 위한 'TransLocalPoint' 클래스 파일을 생성해줍니다.
* TransLocalPoint.java
1-3 GPS 좌표 출력 및 격자 좌표 변환 사용
먼저 MainActivity 에 GPS 활성화 메소드들을 추가해 줍니다.
* MainActivity.java
다음으로 GPS 활성화 메소드와 미리 만들었던 GpsTracker, TransLocalPoint 클래스를 사용하도록 합니다.
2. 현재 날짜 및 시간 구하기
기상청 API 파라메터 중 현재 기준 예보 데이터를 받기 위해
base_date (발표일자), base_time(발표시각)에 들어갈 값으로
현재 날짜와 현재 시간을 받아오도록 합니다.
* MainActivity.java
날짜와 시간을 구할 때 기상청 API에서 받는 형태에 맞춰
날짜는 년도월일(yyyyMMdd),
시간은 시간대(HH00) - 11시일 경우 1100
+ 현재 시간대를 넣었을 경우 API 쪽 데이터베이스에 갱신이 안되있어 조회가 되지 않아,
1시간 전 데이터를 호출하도록 변경
3. API로 부터 받은 문자열 JSON 형태로 변환
앞에서 구한 날짜, 시간, 좌표를 변수에 넣고 데이터 타입은 JSON으로 요청합니다.
좌표의 경우 소수점이 포함되어있으면 호출이 되지 않기 때문에 소수점 아래의 숫자는 제외합니다.
* MainActivity.java
지난번 시간에 만들었던
API 데이터 요청을 위한 Http 통신 연결 부분에서
MainActivity에 작성한 NetworkTask 클래스 내 onPostExecute 메소드에 String으로 받은 응답값을 JSON 타입으로 변환하도록 합니다. (전역변수로 JSONObject json = null 선언 후 사용)
4. 실행
텍스트 뷰에 받아온 String 값을 JSON 형태로 변환하여 출력 되는지 확인해보도록 하겠습니다.
받아온 문자열을 JSON 형태로 변환하여 정상적으로 출력 되는 것을 보실 수 있습니다.
받아온 데이터를 활용하여
날씨에 따라 어플의 배경 이미지를 바꾸거나 데이터 값을 표기해주는 등 목적에 따라 사용할 수 있습니다.
참고 포스팅
* 동네예보 조회서비스 API 사용
stickode.com/detail.html?no=2104
* GPS 좌표 구하기
stickode.com/detail.html?no=2113
* GPS > 격자 좌표 변환 코드
stickode.com/detail.html?no=2114
* Tmap 지도 API HttpURLConnection를 사용하여 도보 길찾기 경로 Json으로 가져오기
stickode.com/detail.html?no=2062
'안드로이드 자바' 카테고리의 다른 글
[JAVA][Android] 원형 프로그레스바 타이머 (0) | 2021.05.18 |
---|---|
[JAVA][Android] 쉐이크 기능 만들기 (3) | 2021.05.15 |
[Java][Android] 안드로이드 다국어 지원 (0) | 2021.05.13 |
[JAVA][Android] Room DB 사용하기 (0) | 2021.05.11 |
[JAVA][Android] 기상청 API 조회하기 (2) | 2021.05.08 |