본문 바로가기
Flutter & Dart

Flutter & Dart 카카오 지오코딩 사용

by Sudarii 2023. 2. 14.
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