산불 추적기 앱을 빌드하여 지도를 렌더링하는 방법 알아보기 - 2부
또한 전체 소스 코드는 here입니다.
첫 번째 부분에서 전단지를 사용하여 간단한 지도를 렌더링했습니다. 이제 이 지도에 일부 데이터(산불 데이터)를 표시합니다. 우리는 이것을 사용할 것입니다 NASA API .
이것은 키가 필요하지 않은 오픈 소스 API입니다. 멋진 API에 대한 정보에서 체크아웃NASA website할 수 있습니다.
이제 API에서 데이터를 가져오겠습니다. http 요청을 만드는 방법/패키지는 많지만 최신 브라우저에서 직접 사용할 수 있는 가져오기를 사용하겠습니다.
두 가지 일반적인 React 후크 useState 및 useEffect를 사용하여 API 요청을 만들고 응답 데이터를 설정합니다.
src 디렉터리 내의 app.js 파일에 다음 코드를 추가합니다.
const [eventData, setEventData] = useState([])
const [loading, setLoading] = useState(false)
useEffect(()=>{
const fetchEvents = async () =>{
setLoading(true)
const {events} = await (await
fetch('https://eonet.sci.gsfc.nasa.gov/api/v2.1/events')).json()
setEventData(events)
setLoading(false)
}
fetchEvents()
}, [])
이것은 API를 호출하고 상태를 설정하는 간단한 반응 항목이며 이해하기 어렵다면 react docs을 읽고 여기에서 다시 돌아올 것을 권장합니다!
이제 이전 게시물의 Map 구성 요소를 수정하여 eventData를 소품으로 사용하고 API가 응답을 반환하고 상태가 설정될 때까지 로더를 표시합니다.
이것은 우리의 app.js가 지금과 같이 보일 것입니다.
import Map from "./components/Map";
import "./App.css";
import { useState, useEffect } from "react";
import Header from './components/Header';
import Loader from './components/Loader';
function App() {
const [eventData, setEventData] = useState([])
const [loading, setLoading] = useState(false)
useEffect(()=>{
const fetchEvents = async () =>{
setLoading(true)
const {events} = await (await
fetch('https://eonet.sci.gsfc.nasa.gov/api/v2.1/events')).json()
setEventData(events)
setLoading(false)
}
fetchEvents()
}, [])
return (
<div>
<Header />
{ !loading ? <Map eventData={eventData} /> : <Loader /> }
</div>
);
}
export default App;
Tip : const {events} = await (await fetch('https://eonet.sci.gsfc.nasa.gov/api/v2.1/events')).json()
This is called object destructing, more details.
그리고 이것은 우리의 간단한 로더 구성 요소입니다. source code에서 해당 gif 파일을 얻을 수 있습니다.
import fireLoader from './fireLoader.gif'
const Loader = () => {
return (
<div className="loader">
<img src={fireLoader} alt='fireLoader'/>
<h2>Loading ...</h2>
</div>
)
}
export default Loader;
좋습니다. 이제 응답을 살펴보겠습니다. 폭풍, 산불, 사이클론 등과 같은 다양한 자연 현상에 대한 정보를 포함하는 이벤트 배열이 있음을 알 수 있습니다.
그러나 카테고리 객체 내에서 id가 8인 이벤트 배열의 산불 좌표만 필요합니다.
따라서 카테고리 객체 내에서 ID가 8인 모든 객체를 필터링해야 합니다.
이제 map 구성 요소를 약간 업데이트하여 eventData 소품을 사용하고 다음 코드를 Map 구성 요소에 추가해 보겠습니다.
// define constants
const NATURAL_EVENT_WILDFIRE = 8;
const Map = ({ center, zoom, eventData }) => {
const markers = eventData.map((event, key) => {
if (event.categories[0].id === NATURAL_EVENT_WILDFIRE) {
const [lng, lat] = event.geometries[0].coordinates;
return (
<LocationMarker key={key} lng={lng} lat={lat} info=
{event.title} />
);
}
});
알 수 있듯이 우리는 eventData 배열을 반복하고 id가 8인 개체를 찾고 경도 및 위도 배열과 이벤트 제목을 가져와 마커를 클릭할 때 산불에 대한 정보를 표시합니다.
이제 모든 위치 마커의 배열인 markers 배열을 렌더링합니다. 이제 지도 구성요소의 전체 코드입니다.
import React from "react";
import { MapContainer, TileLayer } from "react-leaflet";
import LocationMarker from "./LocationMarker";
// define constants
const NATURAL_EVENT_WILDFIRE = 8;
const Map = ({ center, zoom, eventData }) => {
const markers = eventData.map((event, key) => {
if (event.categories[0].id === NATURAL_EVENT_WILDFIRE) {
const [lng, lat] = event.geometries[0].coordinates;
return (
<LocationMarker key={key} lng={lng} lat={lat} info=
{event.title} />
);
}
});
return (
<MapContainer style={{ height: "100vh" }} center={center}
zoom={zoom}>
<TileLayer
attribution='© <a
href="http://osm.org/copyright">OpenStreetMap</a>
contributors'
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
/>
{markers}
</MapContainer>
);
};
Map.defaultProps = {
center: [42.3265, -122.8756],
zoom: 6,
};
export default Map;
이것이 우리 앱이 준비한 것입니다. 다음을 사용하여 앱 시작
yarn start
전단지로 할 수 있는 일이 너무 많고, 타일을 변경하고, 내비게이션 등을 제공할 수 있으며 가장 좋은 점은 오픈 소스라는 것입니다. 가능성은 무한합니다.
이 시리즈가 마음에 드셨기를 바라며 마음에 드셨다면 공유하고 저를 팔로우해주세요.
코로나 없는 새해 복 많이 받으세요!
Reference
이 문제에 관하여(산불 추적기 앱을 빌드하여 지도를 렌더링하는 방법 알아보기 - 2부), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/devnrj07/learn-to-render-maps-by-building-a-wildfire-tracker-app-part-2-go0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)