Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
e2492d0
express server set up
shaunwcolley May 18, 2019
ef42269
database config
May 18, 2019
fecbbb8
routes set up
shaunwcolley May 18, 2019
13691c9
Merge pull request #1 from rlorenzini/backend-routes
shaunwcolley May 18, 2019
c97d92c
post route set up
shaunwcolley May 18, 2019
b721d8a
getData get route
May 18, 2019
292d53c
Merge pull request #2 from rlorenzini/post-route
shaunwcolley May 18, 2019
62223a7
getData get route
May 18, 2019
d9971f7
Merge pull request #3 from rlorenzini/GetData
Gpriznar May 18, 2019
b1daf13
get route working
shaunwcolley May 18, 2019
24bafe8
Merge pull request #4 from rlorenzini/post-route
shaunwcolley May 18, 2019
c7a7077
resolve conflict
shaunwcolley May 18, 2019
d5ed83e
Merge pull request #5 from rlorenzini/post-route
shaunwcolley May 18, 2019
9dd364a
Merge pull request #7 from rlorenzini/mapstuff
rlorenzini May 18, 2019
b65997c
procfile created
shaunwcolley May 18, 2019
af334f4
Merge pull request #8 from rlorenzini/post-route
shaunwcolley May 18, 2019
2b02e48
get router for decibel threshold
May 18, 2019
eaa2f59
Merge pull request #9 from rlorenzini/decibelThreshold
Gpriznar May 18, 2019
c2a8b18
minor change
shaunwcolley May 18, 2019
c32a1d8
resolving conflict
shaunwcolley May 18, 2019
d1091c6
Merge pull request #10 from rlorenzini/post-route
shaunwcolley May 18, 2019
9dad926
added past twenty four hour get route
May 18, 2019
a497f9a
added stuff
May 18, 2019
8216e08
Merge pull request #11 from rlorenzini/PastTwentyFourHoursData
Gpriznar May 18, 2019
18fd438
db reading
rlorenzini May 18, 2019
c56dd1b
Merge pull request #12 from rlorenzini/development
rlorenzini May 18, 2019
90c16c8
Merge pull request #13 from rlorenzini/dbreader
rlorenzini May 18, 2019
cd84a6c
front end buttons
Gpriznar May 18, 2019
7dfe130
json now in geojson format
shaunwcolley May 18, 2019
356af42
Merge pull request #14 from rlorenzini/FrontEndButtons
Gpriznar May 18, 2019
f33ac4b
Merge branch 'development' into geojson-post
shaunwcolley May 18, 2019
2934575
Merge pull request #15 from rlorenzini/geojson-post
shaunwcolley May 18, 2019
d70b527
added db data and coordinates being sent to database
rlorenzini May 18, 2019
7d18d27
all data gets are geojson
shaunwcolley May 18, 2019
f6c975c
Merge branch 'development' into geojson-post
shaunwcolley May 18, 2019
b3b5fdf
Merge pull request #16 from rlorenzini/geojson-post
shaunwcolley May 18, 2019
312f2d7
Merge branch 'development' into dbdata
rlorenzini May 18, 2019
dc8d325
Merge pull request #17 from rlorenzini/dbdata
rlorenzini May 18, 2019
5c71e80
minor styling
rlorenzini May 18, 2019
e1e5289
Merge pull request #18 from rlorenzini/dbdata
rlorenzini May 18, 2019
6a165c2
no results
rlorenzini May 19, 2019
6ac3790
Merge pull request #19 from rlorenzini/development
rlorenzini May 19, 2019
8d8d4e1
Merge pull request #20 from rlorenzini/dbdata
rlorenzini May 19, 2019
c3df421
removed depricated button
rlorenzini May 19, 2019
40cd0a8
Merge branch 'development' of https://github.com/rlorenzini/hackathon…
rlorenzini May 19, 2019
68eddef
Update App.js
rlorenzini May 19, 2019
673035d
Merge branch 'dbdata' of https://github.com/rlorenzini/hackathon into…
rlorenzini May 19, 2019
b5441c3
Merge pull request #21 from rlorenzini/dbdata
rlorenzini May 19, 2019
60fefaf
ignore
rlorenzini May 19, 2019
5e00089
fixing styling
rlorenzini May 19, 2019
05ee359
Merge pull request #22 from rlorenzini/dBupdate
rlorenzini May 19, 2019
823df9b
initial
wysesean May 19, 2019
5f04e76
Merge pull request #23 from rlorenzini/feature/style
shaunwcolley May 19, 2019
e480022
quick and dirty style fixes
wysesean May 19, 2019
d92bf67
blah
wysesean May 19, 2019
44bff2b
fixes quote thing
wysesean May 19, 2019
e66cd69
Merge pull request #24 from rlorenzini/feature/final-map
Gpriznar May 19, 2019
f324af7
can now submit data to database
shaunwcolley May 19, 2019
7f4cfdb
now posts to database
shaunwcolley May 19, 2019
e31ca07
resolved conflicts
shaunwcolley May 19, 2019
0fc98b2
Merge pull request #25 from rlorenzini/post-route-client
shaunwcolley May 19, 2019
4d38ee0
Update readme.md
rlorenzini May 20, 2019
05370eb
Update readme.md
rlorenzini May 20, 2019
6c7b8f0
minor change
shaunwcolley May 20, 2019
cdeb61a
Update readme.md
rlorenzini May 20, 2019
ba50f9f
Merge branch 'development' into post-route-client
shaunwcolley May 20, 2019
f07e25d
Merge pull request #26 from rlorenzini/post-route-client
shaunwcolley May 20, 2019
bf617b2
Update readme.md
rlorenzini May 20, 2019
2ec2578
Add files via upload
rlorenzini May 20, 2019
ef0602c
Update readme.md
rlorenzini May 20, 2019
0ec350c
Update readme.md
rlorenzini May 20, 2019
1c51400
Update readme.md
rlorenzini May 20, 2019
716a55d
Update readme.md
rlorenzini May 20, 2019
fd99aa7
Update readme.md
rlorenzini May 20, 2019
f52388e
images
rlorenzini May 20, 2019
ea37dc7
Merge pull request #27 from rlorenzini/master
rlorenzini May 20, 2019
c18979d
Update readme.md
rlorenzini May 20, 2019
61fb1cd
Update readme.md
rlorenzini May 20, 2019
b887b1e
Update readme.md
rlorenzini May 20, 2019
6946081
update
rlorenzini May 20, 2019
c23c60a
stuff
rlorenzini May 20, 2019
1d8c5bd
stuff
rlorenzini May 20, 2019
8098670
Merge branch 'development' into master
rlorenzini May 20, 2019
61df0cc
Update readme.md
rlorenzini May 20, 2019
d9f8741
Update readme.md
rlorenzini May 20, 2019
380b42d
Merge pull request #28 from rlorenzini/master
rlorenzini May 20, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified .DS_Store
Binary file not shown.
6,124 changes: 3,274 additions & 2,850 deletions client/package-lock.json

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@
"version": "0.1.0",
"private": true,
"dependencies": {
"d3-request": "^1.0.6",
"decibel-meter": "^2.0.0",
"deck.gl": "^7.0.8",
"react": "^16.8.6",
"react-animations": "^1.0.0",
"react-bootstrap-sweetalert": "^4.4.1",
"react-dom": "^16.8.6",
"react-map-gl": "^4.1.2",
"react-scripts": "3.0.1",
Expand Down
6 changes: 4 additions & 2 deletions client/public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
<head>
<meta charset="utf-8" />
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico" />
<link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.54.0/mapbox-gl.css' rel='stylesheet' />
<link href="https://fonts.googleapis.com/css?family=Inconsolata|Open+Sans&display=swap" rel="stylesheet">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<!--
Expand All @@ -19,11 +21,11 @@
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>React App</title>
<title>Houston Noise Pollution</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<div id="root" style="height: 100%"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
Expand Down
240 changes: 176 additions & 64 deletions client/src/App.js
Original file line number Diff line number Diff line change
@@ -1,67 +1,179 @@
import React,{Component} from 'react';
// import logo from './logo.svg';
import './App.css';
import {MAPBOX_KEY} from "./.env.json"
import ReactMapGL from 'react-map-gl';
import SweetAlert from 'sweetalert2-react';

import styled from 'styled-components';

const AppContainer = styled.div`
width: 100vw;
height: 100vh;
`

const PopupButton = styled.button`
color: red;
background-color: orange;
width:100px;height:100px;
position: fixed;
top: 86vh;
left: 50%;
transform: translateX(-50%);
position: fixed;`

class App extends Component {
constructor(){
super()

this.state = {
height: window.innerHeight,
width: window.innerWidth,
show:false,
viewport: {
width: "100vw",
height: "100vh",
latitude: 29.7604,
longitude: -95.3698,
zoom: 10,
}
import React, { Component, Fragment } from "react";
import { render } from "react-dom";
import MapGL from "react-map-gl";
// import ControlPanel from "./control-panel";
import { json as requestJson } from "d3-request";
import { MAPBOX_KEY } from "./.env.json";
import { Sidebar } from "./Sidebar";
import { Legend } from "./Legend";
import { validateCoordinates } from "./validate-coordinates";
import { adjustBadValues } from "./adjust-bad-values";
import { PopupButton } from "./PopupButton";
import { PopupComponent } from "./Popup.js";

const HEATMAP_SOURCE_ID = "decibel-source";
const DATA_URL =
"https://noise-pollution-hackathon2019.herokuapp.com/api/getData";
// "https://docs.mapbox.com/mapbox-gl-js/assets/earthquakes.geojson"

export class App extends Component {
constructor(props) {
super(props);

this.state = {
viewport: {
width: "100vw",
height: "100vh",
latitude: 29.7604,
longitude: -95.2228,
zoom: 9
},
popup: false,
data: null
};

this._mapRef = React.createRef();
this._handleMapLoaded = this._handleMapLoaded.bind(this);
this._handlePopupOpen = this._handlePopupOpen.bind(this);
this._handlePopupClose = this._handlePopupClose.bind(this);
}

_mkFeatureCollection = features => {
return { type: "FeatureCollection", features };
};
}
handleClick=()=>{
this.setState({
visiblePopup:true
})
console.log(this.state.visiblePopup)
}
render(){
return (
<AppContainer>
<ReactMapGL
{...this.state.viewport}
mapboxApiAccessToken={MAPBOX_KEY}
onViewportChange={(viewport) => this.setState({viewport})}
/>
<PopupButton onClick={() => this.setState({show:true})}>POPUP</PopupButton>
<SweetAlert show={this.state.show}
title="POPUP"
text="STUFF"
onConfirm={()=>this.setState({show:false})}
/>
</AppContainer>
);
}

_mkHeatmapLayer = (id, source) => {
const MAX_ZOOM_LEVEL = 13;
return {
id,
source,
maxzoom: MAX_ZOOM_LEVEL,
type: "heatmap",
paint: {
// Increase the heatmap weight based on frequency and property magnitude
"heatmap-weight": {
property: "decibel",
type: "exponential",
stops: [[1, 0], [150, 1]]
},
// Increase the heatmap color weight weight by zoom level
// heatmap-intensity is a multiplier on top of heatmap-weight
"heatmap-intensity": [
"interpolate",
["linear"],
["zoom"],
0,
1,
MAX_ZOOM_LEVEL,
3
],
// Adjust the heatmap radius by zoom level
"heatmap-radius": [
"interpolate",
["linear"],
["zoom"],
0,
2,
MAX_ZOOM_LEVEL,
20
],
"heatmap-color": [
"interpolate",
["linear"],
["heatmap-density"],
0,
"rgba(236,222,239,0)",
0.2,
"#ffffb2",
0.4,
"#fecc5c",
0.6,
"#fd8d3c",
0.8,
"#f03b20",
1,
"#bd0026"
]
}
};
};

_onViewportChange = viewport => this.setState({ viewport });

_getMap = () => {
return this._mapRef.current ? this._mapRef.current.getMap() : null;
};

_handleMapLoaded = event => {
const map = this._getMap();

requestJson(DATA_URL, (error, response) => {
if (!error) {
response = {
...response,
features: response.features
.filter(validateCoordinates)
.map(adjustBadValues)
};
this.setState({
data: response
});
map.addSource(HEATMAP_SOURCE_ID, { type: "geojson", data: response });
map.addLayer(this._mkHeatmapLayer("heatmap-layer", HEATMAP_SOURCE_ID));
}
});
};

_handlePopupOpen() {
this.setState({
popup: true
});
}

_handlePopupClose() {
this.setState({
popup: false
});
}

_setMapData = features => {
const map = this._getMap();
map &&
map
.getSource(HEATMAP_SOURCE_ID)
.setData(this._mkFeatureCollection(features));
};

render() {
const { viewport } = this.state;
console.log(this.state);
return (
<Fragment>
<MapGL
ref={this._mapRef}
{...viewport}
width="100%"
height="100%"
style={{ position: "fixed" }}
mapStyle="mapbox://styles/mapbox/dark-v9"
onViewportChange={this._onViewportChange}
mapboxApiAccessToken={MAPBOX_KEY}
onLoad={this._handleMapLoaded}
/>
<Sidebar />
<div onClick={this._handlePopupOpen.bind(this)}>
<PopupButton />
</div>

{this.state.popup && (
<PopupComponent closePopup={this._handlePopupClose} />
)}
<Legend />
</Fragment>
);
}
}

export default App;
export function renderToDOM(container) {
render(<App />, container);
}
71 changes: 71 additions & 0 deletions client/src/Legend.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import React, { Fragment } from "react";
import styled from "styled-components";

const LegendContainer = styled.div`
position: fixed;
bottom: 0px;
left: calc(50% - 300px);

width: 250px;
height: 64px;
margin: 16px;
background: rgba(30, 30, 30, 1);
padding: 8px 16px 16px;
@media (max-width: 768px) {
left: 50%;
transform: translateX(-50%);
}
`;

const LegendSlideColors = styled.div`
display: flex;
flex: 1 1 100%;
height: 5px;
margin-top: 4px;
> * {
flex-basis: 20%;
}
`;

const SingleSlide = styled.div`
height: 5px;
width: 20%;
`;

const NumberTick = styled.div`
position: relative;
top: 4px;
left: 0;
color: white;
font-family: "Inconsolata", monospace;
`;

const Label = styled.label`
color: white;
font-family: "Inconsolata", monospace;
`;

const SlideColor = ({ color, number }) => {
return (
<Fragment>
<SingleSlide style={{ background: color }}>
<NumberTick>{number}</NumberTick>
</SingleSlide>
</Fragment>
);
};

export const Legend = () => {
return (
<LegendContainer>
<Label>Legend:</Label>
<LegendSlideColors>
<SlideColor color="#ffffb2" number={0} />
<SlideColor color="#fecc5c" number={50} />
<SlideColor color="#fd8d3c" number={75} />
<SlideColor color="#f03b20" number={100} />
<SlideColor color="#bd0026" number={150} />
</LegendSlideColors>
</LegendContainer>
);
};
Loading