728x90
카카오 지오코딩 사용을 위해 먼저 x, y, 좌표를 받아오겠다.
우선 geolocator 패키지를 설치해주겠습니다.
https://pub.dev/packages/geolocator
geolocator: ^9.0.2
설치 후 아래의 Location 클래스를 선언해준 뒤
import 'package:geolocator/geolocator.dart';
class Location {
double latitude = 0;
double longitude = 0;
Future<void> getCurrentLocation() async {
LocationPermission permission = await Geolocator.checkPermission();
// print(permission);
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
}
try {
Position position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high);
latitude = position.latitude;
longitude = position.longitude;
} catch (e) {
print(e);
}
}
}
아래와 같이 호출하여 현재 위치의 x,y 좌표값을 받아온다.
Location location = Location();
await location.getCurrentLocation();
print(location.longitude.toString());// 경도
print(location.latitude.toString()); // 위도
카카오 지오코딩을 사용 하기 위해서는 헤더에 값을 넣어야 한다.
지금은 Authorization 만 들어갔지만 나중에는 여러 값이 들어갈 수 있을것이다.
Future<String> setGeoAddress(String xvalue, String yvalue) async {
Map<String, String> headers = {
'Authorization': 'KakaoAK "개인 카카오 REST API 키"'
};
String path =
'https://dapi.kakao.com/v2/local/geo/coord2address.json?x=$xvalue&y=$yvalue&input_coord=WGS84';
Uri uri = Uri.parse(path);
String check = 'false';
final response = await http.get(uri, headers: headers);
if (response.statusCode == 200 &&
response.reasonPhrase.toString() == 'OK') {
String jsonData = response.body;
String addr =
jsonDecode(jsonData)['documents'][0]['road_address']['address_name'];
String addrJibeon =
jsonDecode(jsonData)['documents'][0]['address']['address_name'];
}
return check;
}
REST API를 이용하여 값을 받아왔다.
{
"meta": {
"total_count": 1
},
"documents": [{
"road_address": {
"address_name": "경기도 안성시 죽산면 죽산초교길 69-4",
"region_1depth_name": "경기",
"region_2depth_name": "안성시",
"region_3depth_name": "죽산면",
"road_name": "죽산초교길",
"underground_yn": "N",
"main_building_no": "69",
"sub_building_no": "4",
"building_name": "무지개아파트",
"zone_no": "17519"
},
"address": {
"address_name": "경기 안성시 죽산면 죽산리 343-1",
"region_1depth_name": "경기",
"region_2depth_name": "안성시",
"region_3depth_name": "죽산면 죽산리",
"mountain_yn": "N",
"main_address_no": "343",
"sub_address_no": "1",
"zip_code": ""
}
}]
}
값을 받아오면 아래와 같은 형태의 json 데이터를 받아오기 때문에
String jsonData = response.body;
String addr =
jsonDecode(jsonData)['documents'][0]['road_address']['address_name'];
String addrJibeon =
jsonDecode(jsonData)['documents'][0]['address']['address_name'];
와 같은 방식으로 도로명, 지번 주소만 가져와 사용하였다.
728x90
'Flutter & Dart' 카테고리의 다른 글
Flutter & Dart 플러터에서 API 호출하기: http vs dio 비교 가이드 (0) | 2023.08.18 |
---|---|
Flutter & Dart 플러터 바텀 네비게이션 구현하기: 자세한 가이드 (0) | 2023.08.18 |
Flutter & Dart 플러터에서 인앱 결제 구현하기: in_app_purchase 패키지 활용 가이드 (0) | 2023.08.18 |
Flutter & Dart Rest API 사용 (0) | 2023.02.10 |
Flutter & Dart 에서 정규표현식(Regular Expression) 사용하기 (0) | 2023.02.10 |