mirror of
https://github.com/visgl/react-map-gl.git
synced 2026-01-18 15:54:22 +00:00
93 lines
1.8 KiB
JavaScript
93 lines
1.8 KiB
JavaScript
import * as React from 'react';
|
|
import {useState} from 'react';
|
|
import {render} from 'react-dom';
|
|
import MapGL, {
|
|
Popup,
|
|
NavigationControl,
|
|
FullscreenControl,
|
|
ScaleControl,
|
|
GeolocateControl
|
|
} from 'react-map-gl';
|
|
|
|
import ControlPanel from './control-panel';
|
|
import Pins from './pins';
|
|
import CityInfo from './city-info';
|
|
|
|
import CITIES from '../../.data/cities.json';
|
|
|
|
const TOKEN = ''; // Set your mapbox token here
|
|
|
|
const geolocateStyle = {
|
|
top: 0,
|
|
left: 0,
|
|
padding: '10px'
|
|
};
|
|
|
|
const fullscreenControlStyle = {
|
|
top: 36,
|
|
left: 0,
|
|
padding: '10px'
|
|
};
|
|
|
|
const navStyle = {
|
|
top: 72,
|
|
left: 0,
|
|
padding: '10px'
|
|
};
|
|
|
|
const scaleControlStyle = {
|
|
bottom: 36,
|
|
left: 0,
|
|
padding: '10px'
|
|
};
|
|
|
|
export default function App() {
|
|
const [viewport, setViewport] = useState({
|
|
latitude: 40,
|
|
longitude: -100,
|
|
zoom: 3.5,
|
|
bearing: 0,
|
|
pitch: 0
|
|
});
|
|
const [popupInfo, setPopupInfo] = useState(null);
|
|
|
|
return (
|
|
<>
|
|
<MapGL
|
|
{...viewport}
|
|
width="100%"
|
|
height="100%"
|
|
mapStyle="mapbox://styles/mapbox/dark-v9"
|
|
onViewportChange={setViewport}
|
|
mapboxApiAccessToken={TOKEN}
|
|
>
|
|
<Pins data={CITIES} onClick={setPopupInfo} />
|
|
|
|
{popupInfo && (
|
|
<Popup
|
|
tipSize={5}
|
|
anchor="top"
|
|
longitude={popupInfo.longitude}
|
|
latitude={popupInfo.latitude}
|
|
closeOnClick={false}
|
|
onClose={setPopupInfo}
|
|
>
|
|
<CityInfo info={popupInfo} />
|
|
</Popup>
|
|
)}
|
|
|
|
<GeolocateControl style={geolocateStyle} />
|
|
<FullscreenControl style={fullscreenControlStyle} />
|
|
<NavigationControl style={navStyle} />
|
|
<ScaleControl style={scaleControlStyle} />
|
|
</MapGL>
|
|
|
|
<ControlPanel />
|
|
</>
|
|
);
|
|
}
|
|
|
|
export function renderToDom(container) {
|
|
render(<App />, container);
|
|
}
|