diff options
Diffstat (limited to 'src/App.js')
| -rw-r--r-- | src/App.js | 206 |
1 files changed, 0 insertions, 206 deletions
diff --git a/src/App.js b/src/App.js deleted file mode 100644 index 39953d7..0000000 --- a/src/App.js +++ /dev/null @@ -1,206 +0,0 @@ -import React, { Component } from 'react'; -import Slider from 'rc-slider'; -import { DateTime } from 'luxon'; -import axios from 'axios'; -import mapboxgl from 'mapbox-gl'; - -import './App.css'; -import 'mapbox-gl/dist/mapbox-gl.css'; -import 'rc-slider/assets/index.css'; - -mapboxgl.accessToken = 'pk.eyJ1IjoieXV2YWRtIiwiYSI6ImNpcnMxbzBuaTAwZWdoa25oczlzZmkwbHcifQ.UHtLngbKm9O8945pJm23Nw'; - -const IMGS_BASE_URL = 'https://imgs.geshem.space/' - - -class App extends Component { - - constructor(props) { - super(props); - this.state = { - mapLoaded: false, - imgs: null, - res: 280, - slider: 9, - lng: 35, - lat: 31.9, - zoom: 6.3, - rasterCoords: { - 140: [ - [33.35317413, 33.27232471], - [36.32243686, 33.27232471], - [36.32243686, 30.72293428], - [33.35317413, 30.72293428] - ], - 280: [ - [31.93095218, 34.5156862], - [37.86644267, 34.5156862], - [37.86644267, 29.42911589], - [31.93095218, 29.42911589] - ] - }, - }; - } - - loadSources() { - const { imgs } = this.state; - let i = 0; - while (i < imgs['140'].length) { - this.addRadarSource('140', i, imgs['140'][i]) - this.addRadarLayer('140', i++) - } - i = 0; - while (i < imgs['280'].length) { - this.addRadarSource('280', i, imgs['280'][i]) - this.addRadarLayer('280', i++) - } - this.showRadarLayer('280', 9) - } - - loadRadarData() { - axios({ - url: IMGS_BASE_URL + 'imgs.json', - method: 'get', - }).then((res) => { - this.setState({ - imgs: res.data - }) - if (this.state.mapLoaded) { - this.loadSources(); - } - }).catch(function(error) { - console.log(error) - }) - } - - addRadarSource(res, i, url) { - this.map.addSource(`radar-${res}-${i}`, { - type: 'image', - url: IMGS_BASE_URL + url, - coordinates: this.state.rasterCoords[res] - }) - } - - addRadarLayer(res, i) { - this.map.addLayer({ - id: `radar-${res}-${i}`, - source: `radar-${res}-${i}`, - type: 'raster', - paint: { - 'raster-opacity': 0, - 'raster-opacity-transition': { - 'duration': 0 - } - } - }) - } - - showRadarLayer(res, i) { - this.map.setPaintProperty(`radar-${res}-${i}`, 'raster-opacity', 0.85); - } - - hideRadarLayer(res, i) { - this.map.setPaintProperty(`radar-${res}-${i}`, 'raster-opacity', 0); - } - - removeRadarLayer(res, i) { - this.map.removeLayer(`radar-${res}-${i}`) - } - - onChangeSlider(val) { - this.hideRadarLayer(this.state.res, this.state.slider); - this.setState({ slider: val }); - this.showRadarLayer(this.state.res, val); - } - - initMap() { - const { lng, lat, zoom } = this.state; - - this.map = new mapboxgl.Map({ - container: this.mapContainer, - style: 'mapbox://styles/mapbox/dark-v9', - maxZoom: 10, - minZoom: 5, - center: [lng, lat], - zoom: zoom, - hash: false - }); - - this.map.on('style.load', () => { - this.setState({ - mapLoaded: true - }); - if (this.state.imgs !== null) { - this.loadSources(); - } - }); - - this.map.on('zoom', () => { - const zoomIn = this.map.getZoom() > 7; - const from = zoomIn ? '280' : '140'; - const to = zoomIn ? '140' : '280'; - if (to !== this.state.res) { - this.hideRadarLayer(from, this.state.slider); - this.showRadarLayer(to, this.state.slider); - this.setState({ res: to }); - } - }); - } - - componentDidMount() { - this.loadRadarData(); - this.initMap(); - } - - getDateTime() { - const {imgs, res, slider} = this.state; - - if (imgs === null) { - return null; - } - - const ds = imgs[res][slider].substr(5, 13); - return DateTime.fromFormat(ds, 'yyyyMMdd/HHmm', {zone: 'utc'}).setZone('Asia/Jerusalem'); - } - - render() { - const handleStyle = { - height: 40, - width: 40, - border: 0, - marginTop: -10, - marginLeft: -20, - boxShadow: '.5px .5px 2px 1px rgba(0,0,0,.32)' - } - - const railStyle = { - height: 20, - backgroundColor: '#3498db' - } - - const trackStyle={ - display: 'none' - } - - const datetime = this.getDateTime(); - console.log(datetime); - const date = datetime ? datetime.toFormat('y-MM-dd') : ''; - const time = datetime ? datetime.toFormat('HH:mm') : ''; - - return ( - <div id="geshem"> - <div id="map" ref={el => this.mapContainer = el} className="absolute top right left bottom" /> - <div id="datetime"> - <div id="date">{ date }</div> - <div id="time">{ time }</div> - </div> - <div id="slider"> - <Slider mix={0} max={9} defaultValue={this.state.slider} handleStyle={handleStyle} - railStyle={railStyle} trackStyle={trackStyle} onChange={(val) => this.onChangeSlider(val)}/> - </div> - </div> - ); - } -} - -export default App; |
