플러터는 크로스 플랫폼 모바일 앱 개발을 위한 프레임워크로, 위치 기반 서비스를 구현하는 것은 중요한 요소입니다. 이번 포스트에서는 플러터의 geolocator 패키지를 사용하여 반경 내 위치를 탐색하는 방법에 대해 알아보겠습니다.
geolocator 패키지란?
geolocator는 플러터에서 제공하는 위치 정보를 얻는 라이브러리입니다. 이 패키지를 사용하면 GPS 또는 네트워크를 통해 디바이스의 위치 정보를 얻을 수 있습니다. 반경 내 위치 탐색을 위해서는 geolocator 패키지를 추가하여 사용해야 합니다.
geolocator 패키지 설치하기
프로젝트의 pubspec.yaml
파일에 다음과 같이 geolocator 패키지를 추가합니다.
dependencies:
flutter:
sdk: flutter
geolocator: ^7.0.3 # 최신 버전 확인 필요
터미널에서 flutter pub get
명령을 실행하여 패키지를 다운로드 및 설치합니다.
반경 내 위치 탐색 구현하기
먼저, 위치 권한을 얻기 위해 android/app/src/main/AndroidManifest.xml
파일에서 다음 코드를 추가합니다.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.your_app">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
...
</application>
</manifest>
위치 권한은 안드로이드에서만 필요합니다. iOS는 별도의 설정이 필요하지 않습니다.
다음으로, 위치 정보를 사용할 화면에서 다음 코드를 추가하여 위치를 얻어오는 함수를 작성합니다.
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
class MyLocationPage extends StatefulWidget {
@override
_MyLocationPageState createState() => _MyLocationPageState();
}
class _MyLocationPageState extends State<MyLocationPage> {
Position _currentPosition;
@override
void initState() {
super.initState();
_getCurrentLocation();
}
void _getCurrentLocation() async {
var position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high);
setState(() {
_currentPosition = position;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('My Location'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Latitude: ${_currentPosition?.latitude}',
),
Text(
'Longitude: ${_currentPosition?.longitude}',
),
],
),
),
);
}
}
위의 코드는 MyLocationPage
를 StatefulWidget로 선언하고, initState() 메서드에서 _getCurrentLocation()
함수를 호출하여 위치 정보를 얻어오는 예제입니다. _getCurrentLocation()
함수는 Geolocator.getCurrentPosition()
메서드를 호출하여 위치 정보를 얻어온 후 _currentPosition
변수에 저장합니다. 이후 위젯을 빌드할 때 _currentPosition
값을 화면에 출력합니다.
이제 반경 내 위치 탐색을 위해 Geolocator.distanceBetween()
메서드를 사용하여 현재 위치와 비교할 위치 사이의 거리를 구할 수 있습니다. 예를 들어, 반경 1km 이내에 있는지 확인하려면 다음과 같이 코드를 추가합니다.
void _checkDistance() async {
var currentPosition = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high);
var targetPosition = Position(
latitude: 37.5, // 탐색할 위치의 위도
longitude: 127.0, // 탐색할 위치의 경도
);
var distance = await Geolocator.distanceBetween(
currentPosition.latitude, currentPosition.longitude,
targetPosition.latitude, targetPosition.longitude);
if (distance <= 1000) { // 1km(1000m) 이내에 있는 경우
// 반경 내에 위치함
} else {
// 반경 밖에 위치함
}
}
위의 예제에서는 _checkDistance()
함수를 호출하여 현재 위치와 targetPosition
의 거리를 구합니다. distanceBetween()
메서드의 인자로는 경도와 위도를 순서대로 전달해야 합니다. 이후 distance
변수의 값으로 반경 1km(1000m) 이내에 있는지 확인할 수 있습니다.
결론
이번 포스트에서는 플러터의 geolocator 패키지를 사용하여 반경 내 위치를 탐색하는 방법에 대해 알아보았습니다. geolocator를 사용하면 모바일 앱에서 위치 기반 서비스를 구현하는 것이 간단하고 편리해집니다. 위 예제를 기반으로 원하는 기능을 추가하여 위치 기반 앱을 개발해보세요!