어떻게 로컬 지리적 위치를 사용하여 우편 주소를 얻습니까
35581 단어 reactnativemobilejavascript
이 강좌에서, 우리는 장치의 현재 위치를 얻기 위해 React 본체 응용 프로그램에서 어떻게 기능을 실현하는지 이해한다.이를 위해 Expo에서 제공하는 API는
expo-location
라는 패키지로 구성됩니다.그리고 우리는 위치 좌표를 인간이 읽을 수 있는 우편 주소 형식으로 바꿀 것이다.소스 코드는 여기GitHub repo에서 확인할 수 있습니다.
선결 조건
이 자습서를 학습하려면 JavaScript/ES6을 숙지하고 로컬 개발 환경에서 다음 요구 사항을 충족해야 합니다.
12.x.x
.expo cli를 사용하여 React 네이티브 애플리케이션 만들기
expo-cli
를 사용하여 새로운React 원본 프로젝트를 만들고 이 프레젠테이션 프로그램 구축에 필요한 의존 항목을 설치합니다.이제 구현할 내용을 분석해 보겠습니다.npx expo init expo-geolocation-example
# navigate into that directory
cd expo-geolocation-example
yarn add @react-navigation/native @react-navigation/stack
# install dependencies with Expo specific package version
expo install expo-location react-native-gesture-handler react-native-reanimated react-native-screens react-native-safe-area-context @react-native-community/masked-view
이 의존항을 설치한 후, 두 개의 아날로그 화면을 만듭니다. 이것은 응용 프로그램의 두 핵심 화면이 될 것입니다.새 screens/
디렉터리를 만들고 첫 번째 화면 파일 Welcome.js
을 만듭니다.현재, 이 화면에는 이미지, 제목, 가상 아날로그 위치 주소가 표시됩니다.본문 뒤에 이 가상 아날로그 위치 주소는 현재 위치를 바탕으로 실제 주소를 표시합니다.이 파일에 다음 코드 세그먼트를 추가합니다.
import React, { useState, useEffect } from 'react';
import { StyleSheet, Text, View, Image } from 'react-native';
const Welcome = ({ navigation }) => {
return (
<View style={styles.container}>
<View style={styles.contentContainer}>
<Image source={require('../assets/geo.png')} style={styles.image} />
<Text style={styles.title}>What's your address?</Text>
</View>
<Text style={styles.text}>Mock Address</Text>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#070707',
alignItems: 'center',
paddingTop: 130
},
contentContainer: {
alignItems: 'center',
marginBottom: 20
},
image: {
width: 150,
height: 150,
resizeMode: 'contain',
marginBottom: 20
},
title: {
fontSize: 22,
fontWeight: '700',
color: '#FD0139'
},
text: {
fontSize: 20,
fontWeight: '400',
color: '#fff'
}
});
export default Welcome;
다음 코드 세그먼트를 사용하여 두 번째 화면 파일을 만듭니다Home.js
.import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
const Home = ({ navigation }) => {
return (
<View style={styles.container}>
<Text>Home</Text>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#070707',
alignItems: 'center',
justifyContent: 'center'
}
});
export default Home;
이 프레젠테이션 프로그램에 여러 개의 파일과 다른 내비게이션 방식이 없기 때문에 App.js
파일에 창고 내비게이션 용기를 연결합니다.나는 React 네비게이션 라이브러리를 어떻게 설정하고 사용하는지 소개하지 않을 것이다.이 주제에 대한 정보를 더 알고 싶으면 댓글How to Set Up and Use Navigators in React Native을 보세요.App.js
파일을 열고 다음을 추가합니다.import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
// Custom screens
import Welcome from './screens/Welcome';
import Home from './screens/Home';
const Stack = createStackNavigator();
export default function App() {
return (
<NavigationContainer>
<Stack.Navigator initialRouteName='Welcome' headerMode='none'>
<Stack.Screen name='Welcome' component={Welcome} />
<Stack.Screen name='Home' component={Home} />
</Stack.Navigator>
</NavigationContainer>
);
}
탐색기를 설정하면 터미널 창을 열고 명령을 실행할 수 있습니다expo start
.iOS 에뮬레이터, 안드로이드 에뮬레이터, Expo Go 클라이언트 프로그램을 선택해서 지금까지의 결과를 볼 수 있습니다.다음은 iOS 에뮬레이터에서 응용 프로그램의 현재 상태입니다.장치 위치 서비스가 활성화되었는지 확인
프레젠테이션 프로그램에서 우리가 실현하고자 하는 첫 번째 일은 장치의 위치 서비스가 활성화되었는지 확인하는 것이다.이를 위해
locationServiceEnabled
라는 상태 변수를 만듭니다.서비스의 상태를 검사하기 위해서
CheckIfLocationEnabled
라는 새로운 처리 프로그램을 만듭니다.expo-location
에는 Location.hasServicesEnabledAsync()
라는 비동기적인 방법이 있다.장치의 위치 서비스가 활성화되어 있으면, 부울 값true를 되돌려주고, 그렇지 않으면false를 되돌려줍니다.값이false이면 같은 값을 표시하는 경고 상자를 표시합니다.위치 서비스가 활성화되어 있으면 상태 변수의 값을 setLocationServiceEnabled
방법으로 업데이트합니다.그리고
useEffect
React 갈고리에서handler 방법을 사용합니다. 이 갈고리는 의존항이 없기 때문에 첫 번째 렌더링 후에만 터치합니다.수정
Welcome.js
화면은 다음과 같습니다.displayCurrentAddress
라는 상태 변수를 사용하여 아날로그 위치 주소 위치에 표시되는 자리 표시자 메시지를 확인합니다.장치의 현재 위치를 찾으면 업데이트됩니다.import React, { useState, useEffect } from 'react';
import { StyleSheet, Text, View, Image, Alert } from 'react-native';
import * as Location from 'expo-location';
const Welcome = ({ navigation }) => {
const [locationServiceEnabled, setLocationServiceEnabled] = useState(false);
const [displayCurrentAddress, setDisplayCurrentAddress] = useState(
'Wait, we are fetching you location...'
);
useEffect(() => {
CheckIfLocationEnabled();
}, []);
const CheckIfLocationEnabled = async () => {
let enabled = await Location.hasServicesEnabledAsync();
if (!enabled) {
Alert.alert(
'Location Service not enabled',
'Please enable your location services to continue',
[{ text: 'OK' }],
{ cancelable: false }
);
} else {
setLocationServiceEnabled(enabled);
}
};
return (
<View style={styles.container}>
<View style={styles.contentContainer}>
<Image source={require('../assets/geo.png')} style={styles.image} />
<Text style={styles.title}>What's your address?</Text>
</View>
<Text style={styles.text}>{displayCurrentAddress}</Text>
</View>
);
};
// styles remain same
export default Welcome;
iOS 에뮬레이터에서 테스트를 수행하려면 설정 > 개인 정보 보호 > 위치 서비스로 이동하십시오.위의 그림에서 보듯이, on이 나타나면, 그것을 클릭하고 위치 추적 서비스를 닫는지 확인하십시오.
지금 프로그램을 열면 경보 상자가 나타나는 것을 알 수 있습니다.
마찬가지로 Android 장치에서는 다음 메뉴에서 이 위치를 비활성화할 수 있습니다.
프로그램이 열릴 때 경고 메시지가 표시됩니다.
다음 섹션을 계속하기 전에 디바이스에 위치 서비스가 다시 설정되어 있는지 확인하십시오.
현재 위치 및 우편 주소 가져오기
위치 정보든 기타 민감한 정보든 장치에 접근할 정보를 요청할 필요가 있습니다.다행히도,
expo-location
장치의 현재 위치를 얻을 때 직접 사용할 수 있는 방법이 있습니다.디바이스의 현재 위치를 가져오고 애플리케이션 화면에 표시할 현재 주소(이름, 거리 이름, 도시 및 우편 번호 포함)에 대한 정보를 가져오는 방법에 대해 자세히 설명합니다.
GetCurrentLocation
라는 새로운 비동기 처리 프로그램을 만듭니다.앞의 코드 다음에 useEffect
갈고리에서 그것을 호출해야 합니다.requestPermissionsAsync
을 사용하여 장치를 요청한 사용자에게 이 위치의 권한을 부여합니다.만약 어떤 상황에서도 사용자가 거절한다면, 그들에게 같은 상황을 설명하는 경고 상자를 보여 주십시오.getCurrentPositionAsync
을 사용하여 장치 위치의 현재 좌표를 가져옵니다.이곳의 좌표는 위치를 나타내는 대상이다.reverseGeocodeAsync
라는 방법이 있습니다.이 결과를 사용하면 장치의 현재 주소를 표시하기 위해 setDisplayCurrentAddress
의 값을 업데이트할 수 있습니다.Welcome.js
의 코드 세그먼트는 다음과 같습니다.// first update the useEffect hook
useEffect(() => {
CheckIfLocationEnabled();
GetCurrentLocation();
}, []);
// create the handler method
const GetCurrentLocation = async () => {
let { status } = await Location.requestPermissionsAsync();
if (status !== 'granted') {
Alert.alert(
'Permission not granted',
'Allow the app to use location service.',
[{ text: 'OK' }],
{ cancelable: false }
);
}
let { coords } = await Location.getCurrentPositionAsync();
if (coords) {
const { latitude, longitude } = coords;
let response = await Location.reverseGeocodeAsync({
latitude,
longitude
});
for (let item of response) {
let address = `${item.name}, ${item.street}, ${item.postalCode}, ${item.city}`;
setDisplayCurrentAddress(address);
}
}
};
다음은 이 단계 이후의 출력입니다.전체 우편 주소는 JSON 형식의 대상이며 다음과 같은 필드가 있습니다(일부 필드는 여러 가지 상황에 적용될 수 있습니다).
Object {
"city": "Stockholm",
"country": "Sweden",
"district": "Stockholm City",
"isoCountryCode": "SE",
"name": "Gustav Adolfs torg",
"postalCode": "111 52",
"region": "Stockholm",
"street": "Gustav Adolfs torg",
"subregion": "Stockholm",
"timezone": "Europe/Stockholm",
}
위치를 가져오면 현재 우편 주소를 대상으로 보내고 setTimeout
기능을 사용하여 2초 지연 후 메인 화면으로 이동할 수 있습니다.문
setDisplayCurrentAddress(address)
뒤에 다음 코드 세그먼트를 추가합니다.if (address.length > 0) {
setTimeout(() => {
navigation.navigate('Home', { item: address });
}, 2000);
}
그리고 Home.js
파일을 업데이트하여 item
로부터 route.params
대상과 스타일을 가져옵니다.import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
const Home = ({ route }) => {
const { item } = route.params;
return (
<View style={styles.container}>
<View style={styles.contentContainer}>
<Text style={styles.title}>Home Delivery address: </Text>
<Text style={styles.text}>{item}</Text>
</View>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#070707',
alignItems: 'center',
justifyContent: 'center'
},
contentContainer: {
paddingHorizontal: 20,
alignItems: 'center'
},
title: {
fontSize: 22,
fontWeight: '700',
color: '#FD0139',
paddingBottom: 10
},
text: {
fontSize: 20,
fontWeight: '400',
color: '#fff'
}
});
export default Home;
다음은 최종 출력입니다.결론
이렇게!우리는 이 강좌가 당신에게 도움이 되기를 바랍니다.Expo 및 React 네이티브 애플리케이션에서 Location API를 사용할 수 있는 정보와 특정 용도에 사용할 수 있는 다른 소프트웨어 패키지에 대한 자세한 내용은 다음과 같은 참고 자료를 추가합니다.
Reference
이 문제에 관하여(어떻게 로컬 지리적 위치를 사용하여 우편 주소를 얻습니까), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jscrambler/how-to-use-react-native-geolocation-to-get-postal-address-361o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)