├── sh.exe.stackdump ├── Publish ├── Web │ ├── icon.ico │ ├── Pic │ │ ├── dot │ │ │ ├── c-1.png │ │ │ ├── cd0.png │ │ │ ├── cd1.png │ │ │ ├── cd2.png │ │ │ ├── cd3.png │ │ │ ├── cd4.png │ │ │ ├── cd5.png │ │ │ ├── cd6.png │ │ │ ├── cd7.png │ │ │ ├── cd8.png │ │ │ ├── cd9.png │ │ │ ├── ch0.png │ │ │ ├── ch1.png │ │ │ ├── ch2.png │ │ │ ├── ch3.png │ │ │ ├── ch4.png │ │ │ ├── ct0.png │ │ │ ├── ct1.png │ │ │ ├── ct2.png │ │ │ ├── ct3.png │ │ │ ├── ct4.png │ │ │ ├── ct5.png │ │ │ ├── ct6.png │ │ │ ├── ct7.png │ │ │ ├── ct8.png │ │ │ ├── ct9.png │ │ │ ├── d-1.png │ │ │ ├── dd0.png │ │ │ ├── dd1.png │ │ │ ├── dd2.png │ │ │ ├── dd3.png │ │ │ ├── dd4.png │ │ │ ├── dd5.png │ │ │ ├── dd6.png │ │ │ ├── dd7.png │ │ │ ├── dd8.png │ │ │ ├── dd9.png │ │ │ ├── dh0.png │ │ │ ├── dh1.png │ │ │ ├── dh2.png │ │ │ ├── dh3.png │ │ │ ├── dh4.png │ │ │ ├── dt0.png │ │ │ ├── dt1.png │ │ │ ├── dt2.png │ │ │ ├── dt3.png │ │ │ ├── dt4.png │ │ │ ├── dt5.png │ │ │ ├── dt6.png │ │ │ ├── dt7.png │ │ │ ├── dt8.png │ │ │ ├── dt9.png │ │ │ ├── cdn0.png │ │ │ ├── cdn1.png │ │ │ ├── cdn10.png │ │ │ ├── cdn11.png │ │ │ ├── cdn12.png │ │ │ ├── cdn2.png │ │ │ ├── cdn3.png │ │ │ ├── cdn4.png │ │ │ ├── cdn5.png │ │ │ ├── cdn6.png │ │ │ ├── cdn7.png │ │ │ ├── cdn8.png │ │ │ ├── cdn9.png │ │ │ ├── ddn0.png │ │ │ ├── ddn1.png │ │ │ ├── ddn10.png │ │ │ ├── ddn11.png │ │ │ ├── ddn12.png │ │ │ ├── ddn2.png │ │ │ ├── ddn3.png │ │ │ ├── ddn4.png │ │ │ ├── ddn5.png │ │ │ ├── ddn6.png │ │ │ ├── ddn7.png │ │ │ ├── ddn8.png │ │ │ └── ddn9.png │ │ └── icons │ │ │ ├── EPA.png │ │ │ ├── g0v.png │ │ │ ├── ppm.png │ │ │ ├── Airbox.png │ │ │ ├── Indie.png │ │ │ ├── LASS.jpg │ │ │ ├── LASS.png │ │ │ ├── PClogo.png │ │ │ ├── PM1.0.png │ │ │ ├── PM10.png │ │ │ ├── close.png │ │ │ ├── dust.png │ │ │ ├── epa2.png │ │ │ ├── fbgo-l.png │ │ │ ├── fbgo.JPG │ │ │ ├── home63.png │ │ │ ├── humi.png │ │ │ ├── indoor.png │ │ │ ├── temp.png │ │ │ ├── title.png │ │ │ ├── water.png │ │ │ ├── Webdino.jpg │ │ │ ├── Webduino.jpg │ │ │ ├── Webduino.png │ │ │ ├── addmore.png │ │ │ ├── humi_bar.png │ │ │ ├── outdoor.png │ │ │ ├── recruit2.png │ │ │ ├── temp_bar.png │ │ │ ├── verified.png │ │ │ ├── ProbeCube.png │ │ │ ├── airbox_logo.png │ │ │ ├── dust2_5_bar.png │ │ │ ├── forapp_logo.png │ │ │ ├── opendataks.jpg │ │ │ ├── apple-touch-icon.png │ │ │ ├── dust2_5_NASA_bar.png │ │ │ ├── probecube logo on PCB.png │ │ │ ├── apple-touch-icon-57x57.png │ │ │ ├── apple-touch-icon-76x76.png │ │ │ ├── apple-touch-icon-120x120.png │ │ │ ├── apple-touch-icon-152x152.png │ │ │ └── apple-touch-icon-180x180.png │ ├── sitemap.xml │ ├── Data │ │ ├── Indie_last.json │ │ ├── ProbeCube_last.json │ │ ├── History.html │ │ ├── LASS_last.json │ │ ├── Webduino_last.json │ │ ├── EPA_last.json │ │ └── Airbox_last.json │ ├── CSS │ │ └── style.css │ ├── recruit.html │ ├── JavaScript │ │ ├── History_main.js │ │ └── Map_main.js │ └── map.html ├── Fetch │ └── Data │ │ ├── Indie_RawData.json │ │ ├── ProbeCube_RawData.json │ │ └── EPA_RawData.json ├── WebServer.js └── FetchServer.js ├── licence └── README.md /sh.exe.stackdump: -------------------------------------------------------------------------------- 1 | Stack trace: 2 | Frame Function Args 3 | -------------------------------------------------------------------------------- /Publish/Web/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/icon.ico -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/c-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/c-1.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cd0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cd0.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cd1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cd1.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cd2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cd2.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cd3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cd3.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cd4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cd4.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cd5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cd5.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cd6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cd6.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cd7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cd7.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cd8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cd8.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cd9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cd9.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ch0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ch0.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ch1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ch1.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ch2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ch2.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ch3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ch3.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ch4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ch4.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ct0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ct0.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ct1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ct1.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ct2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ct2.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ct3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ct3.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ct4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ct4.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ct5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ct5.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ct6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ct6.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ct7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ct7.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ct8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ct8.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ct9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ct9.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/d-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/d-1.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dd0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dd0.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dd1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dd1.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dd2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dd2.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dd3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dd3.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dd4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dd4.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dd5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dd5.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dd6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dd6.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dd7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dd7.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dd8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dd8.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dd9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dd9.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dh0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dh0.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dh1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dh1.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dh2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dh2.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dh3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dh3.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dh4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dh4.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dt0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dt0.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dt1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dt1.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dt2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dt2.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dt3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dt3.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dt4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dt4.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dt5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dt5.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dt6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dt6.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dt7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dt7.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dt8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dt8.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/dt9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/dt9.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cdn0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cdn0.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cdn1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cdn1.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cdn10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cdn10.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cdn11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cdn11.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cdn12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cdn12.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cdn2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cdn2.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cdn3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cdn3.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cdn4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cdn4.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cdn5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cdn5.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cdn6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cdn6.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cdn7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cdn7.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cdn8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cdn8.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/cdn9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/cdn9.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ddn0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ddn0.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ddn1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ddn1.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ddn10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ddn10.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ddn11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ddn11.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ddn12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ddn12.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ddn2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ddn2.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ddn3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ddn3.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ddn4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ddn4.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ddn5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ddn5.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ddn6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ddn6.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ddn7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ddn7.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ddn8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ddn8.png -------------------------------------------------------------------------------- /Publish/Web/Pic/dot/ddn9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/dot/ddn9.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/EPA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/EPA.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/g0v.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/g0v.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/ppm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/ppm.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/Airbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/Airbox.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/Indie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/Indie.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/LASS.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/LASS.jpg -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/LASS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/LASS.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/PClogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/PClogo.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/PM1.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/PM1.0.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/PM10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/PM10.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/close.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/dust.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/dust.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/epa2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/epa2.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/fbgo-l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/fbgo-l.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/fbgo.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/fbgo.JPG -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/home63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/home63.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/humi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/humi.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/indoor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/indoor.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/temp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/temp.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/title.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/water.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/water.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/Webdino.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/Webdino.jpg -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/Webduino.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/Webduino.jpg -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/Webduino.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/Webduino.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/addmore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/addmore.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/humi_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/humi_bar.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/outdoor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/outdoor.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/recruit2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/recruit2.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/temp_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/temp_bar.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/verified.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/verified.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/ProbeCube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/ProbeCube.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/airbox_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/airbox_logo.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/dust2_5_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/dust2_5_bar.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/forapp_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/forapp_logo.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/opendataks.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/opendataks.jpg -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/apple-touch-icon.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/dust2_5_NASA_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/dust2_5_NASA_bar.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/probecube logo on PCB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/probecube logo on PCB.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/apple-touch-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/apple-touch-icon-57x57.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /Publish/Web/Pic/icons/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/immortalmice/Real-time-Air-Quality-Map/HEAD/Publish/Web/Pic/icons/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /Publish/Web/sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | http://g0vairmap.3203.info/map.html 11 | daily 12 | 1.00 13 | 14 | 15 | http://g0vairmap.3203.info/recruit.html 16 | 2016-03-22T10:52:07+00:00 17 | daily 18 | 0.80 19 | 20 | -------------------------------------------------------------------------------- /Publish/Web/Data/Indie_last.json: -------------------------------------------------------------------------------- 1 | [{"Channel_id":88846,"SiteGroup":"miaoski","Maker":"miaoski","Option":{"Temperature":"field2","Humidity":"field3","Dust2_5":"field1"},"SiteName":"miaoski-pm25","LatLng":{"lat":25.0283,"lng":121.4979},"RawData":{"created_at":"2016-03-30T10:26:24Z","entry_id":1213,"field1":"79","field2":"22","field3":"68"},"Data":{"Temperature":22,"Humidity":68,"Dust2_5":79,"Create_at":"2016-03-30T10:26:24Z"}},{"Channel_id":83508,"SiteGroup":"miaoski","Maker":"Kiang","Option":{"Temperature":"field2","Humidity":"field3","Dust2_5":"field1"},"SiteName":"kiang-pm25","LatLng":{"lat":23.006,"lng":120.218},"RawData":{"created_at":"2016-03-31T02:26:25Z","entry_id":2697,"field1":"66","field2":"25","field3":"68"},"Data":{"Temperature":25,"Humidity":68,"Dust2_5":66,"Create_at":"2016-03-31T02:26:25Z"}}] -------------------------------------------------------------------------------- /Publish/Web/CSS/style.css: -------------------------------------------------------------------------------- 1 | *{ 2 | font-family: "Microsoft JhengHei"; 3 | } 4 | p{ 5 | font-size: 18px; 6 | } 7 | .nav-pills > li.active > a { 8 | background-color: #5cb85c; 9 | } 10 | .nav-pills > li.active > a:hover { 11 | background-color: #5cb85c; 12 | } 13 | .nav a { 14 | color: #5cb85c; 15 | } 16 | .center{ 17 | border: 1px solid #cccccc; 18 | } 19 | .inline{ 20 | display: inline; 21 | } 22 | #infoBul{ 23 | width: 720px !important; 24 | height: 440px !important; 25 | padding: 16px; 26 | overflow: visible; 27 | background-color: #FFF; 28 | /*border: 3px solid rgba(72, 181, 233, 0.3);*/ 29 | border-radius: 10px; 30 | } 31 | #map, #picbardiv{ 32 | border-radius: 20px; 33 | } 34 | .his-field{ 35 | margin: 20px; 36 | padding: 20px; 37 | border: 1px solid rgba(72, 181, 233, 0.3); 38 | border-radius: 20px; 39 | } 40 | .vertical-center { 41 | min-height: 80%; 42 | display: flex; 43 | align-items: center; 44 | } 45 | .infoconsole{ 46 | font-size: 16px; 47 | } 48 | #map{ 49 | height: 85vh; 50 | } 51 | -------------------------------------------------------------------------------- /licence: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 immortalmice 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Publish/Fetch/Data/Indie_RawData.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "Channel_id" : 83508, 3 | "SiteGroup" : "miaoski", 4 | "Maker" : "Kiang", 5 | "Option" : { 6 | "Temperature" : "field2", 7 | "Humidity" : "field3", 8 | "Dust2_5" : "field1" 9 | } 10 | }, { 11 | "Channel_id" : 88846, 12 | "SiteGroup" : "miaoski", 13 | "Maker" : "miaoski", 14 | "Option" : { 15 | "Temperature" : "field2", 16 | "Humidity" : "field3", 17 | "Dust2_5" : "field1" 18 | } 19 | }, { 20 | "Channel_id" : 106666, 21 | "SiteGroup" : "CCU NEAT", 22 | "Maker" : "林俊翰", 23 | "Option" : { 24 | "Temperature" : "field1", 25 | "Humidity" : "field2", 26 | "Dust2_5" : "field3" 27 | } 28 | }, { 29 | "Channel_id" : 110747, 30 | "SiteGroup" : "CCU 100", 31 | "Maker" : "李皇辰", 32 | "Option" : { 33 | "Temperature" : "field1", 34 | "Humidity" : "field2", 35 | "Dust2_5" : "field3" 36 | } 37 | }, { 38 | "Channel_id" : 116320, 39 | "SiteGroup" : "ES-AIR", 40 | "Maker" : "Ethan", 41 | "Option" : { 42 | "Temperature" : "field5", 43 | "Humidity" : "field4", 44 | "Dust2_5" : "field1" 45 | } 46 | }, { 47 | "Channel_id" : 101099, 48 | "SiteGroup" : "ES-AIR", 49 | "Maker" : "CCU_ME", 50 | "Option" : { 51 | "Temperature" : "field6", 52 | "Humidity" : "field5", 53 | "Dust2_5" : "field1" 54 | } 55 | }, { 56 | "Channel_id" : 83205, 57 | "SiteGroup" : "KS-001", 58 | "Maker" : "D.T.Shaw", 59 | "Option" : { 60 | "Temperature" : "field4", 61 | "Humidity" : "field5", 62 | "Dust2_5" : "field7" 63 | } 64 | }] -------------------------------------------------------------------------------- /Publish/Fetch/Data/ProbeCube_RawData.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "Channel_id": 26769, 3 | "maker": "Lafudoci" 4 | }, { 5 | "Channel_id": 23139, 6 | "maker": "Lafudoci" 7 | }, { 8 | "Channel_id": 55620, 9 | "maker": "Pmking" 10 | }, { 11 | "Channel_id": 87638, 12 | "maker": "Immortalmice" 13 | }, { 14 | "Channel_id": 26677, 15 | "maker": "Lafudoci" 16 | }, { 17 | "Channel_id": 33497, 18 | "maker": "Lafudoci" 19 | }, { 20 | "Channel_id": 90022, 21 | "maker": "willgood" 22 | }, { 23 | "Channel_id": 97290, 24 | "maker": "willgood" 25 | }, { 26 | "Channel_id": 97292, 27 | "maker": "willgood" 28 | }, { 29 | "Channel_id": 33671, 30 | "maker": "+0" 31 | }, { 32 | "Channel_id": 98119, 33 | "maker": "海獅會害怕" 34 | }, { 35 | "Channel_id": 100743, 36 | "maker": "Youngjong" 37 | }, { 38 | "Channel_id": 101039, 39 | "maker": "lemon" 40 | }, { 41 | "Channel_id": 104435, 42 | "maker": "Lafudoci" 43 | }, { 44 | "Channel_id": 102101, 45 | "maker": "BOX" 46 | }, { 47 | "Channel_id": 103693, 48 | "maker": "清新龜龜" 49 | }, { 50 | "Channel_id": 103592, 51 | "maker": "elsksts" 52 | }, { 53 | "Channel_id": 33676, 54 | "maker": "Pmking" 55 | }, { 56 | "Channel_id": 116521, 57 | "maker": "+0" 58 | }, { 59 | "Channel_id": 107318, 60 | "maker": "大娘" 61 | }, { 62 | "Channel_id": 113078, 63 | "maker": "red" 64 | }, { 65 | "Channel_id": 128962, 66 | "maker": "knifeli" 67 | }, { 68 | "Channel_id": 103693, 69 | "maker": "清新龜龜" 70 | }, { 71 | "Channel_id": 143057, 72 | "maker": "Asper" 73 | }] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | g0v零時空汙觀測網 2 | ------ 3 | >整合各方空汙監測站的觀測資料與各種汙染源的排放資料以地圖視覺化呈現 4 | 清楚明瞭的即時空汙動態追蹤,以此達到排汙監督的社會效益 5 | 6 | 專案簡介 7 | ------ 8 | 9 | 緣由與欲解決之問題 10 | 最初的專案方向是在開發小型開源的arduino空氣品質監測器並組織一個非官方的共同觀測網 11 | 一路開發下來發現其實很多各路高手都在做類似的專案 12 | 但專案之間的資料並不互通且零散 13 | 各平台有各的優缺點,要著手去統一開發平台並不實際 14 | 所以決定把目標提高一個層次去整合各種觀測資源讓各空汙監測開發社群貢獻的效益最大化 15 | 16 | 專案最高原則 17 | ------ 18 | 整合各方空汙監測站的觀測資料與各種汙染源的排放資料以地圖視覺化呈現 19 | 清楚明瞭的即時空汙動態追蹤,以此達到排汙監督的社會效益 20 | 在最後並可彈性化統一輸出方便後續應用的資料格式(json, tabular data) 21 | 22 | 執行環境 23 | ------ 24 | 使用 [node.js](https://nodejs.org/en/) 作為編譯器,編譯並執行 WebServer.js 以及 FetchServer.js 兩個檔案 25 | 26 | node.js使用到的模板有 27 | * [express](http://expressjs.com/) 28 | * [fs](https://nodejs.org/api/fs.html) 29 | * [http](https://nodejs.org/api/http.html) 30 | * [querystring](https://nodejs.org/api/querystring.html) 31 | 32 | 在前端部分,使用到了以下的支援 33 | * [Google Maps Javascript API v3](https://developers.google.com/maps/documentation/javascript/) 34 | * [jQuery](https://jquery.com/) 35 | * [Bootstrap](http://getbootstrap.com/) 36 | * [InfoBubble.js](http://google-maps-utility-library-v3.googlecode.com/svn/trunk/infobubble/examples/example.html/) 37 | * [ThingSpeak APIs](https://thingspeak.com/) 38 | 39 | 環境安裝過程 40 | curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash - 41 | sudo apt-get install -y nodejs 42 | sudo npm install express --save -g 43 | sudo npm install file-system -g 44 | sudo npm install http -g 45 | sudo npm install query-string -g 46 | 47 | 運作簡介 48 | ------ 49 | FetchServer.js 會依據所登錄的站點類別,前去撈取最新一筆的資料,並整理放置於網頁提供範圍的目錄下(預設為/Web/Data/)
50 | 對於環保署站點,另外會上傳至ThiingSpeak已建立好的頻道
51 | 而 WebServer.js 則是提供網頁服務
52 | map.html 會抓取由FetchServer.js 整理好的json格式資料,展現於地圖上
53 | 另外非LASS站點可點擊視窗中的歷史資料翻找舊的資料,LASS站點則是連網往LASS專案的網頁
54 | 55 | 成果展現(已搬家) 56 | ------ 57 | http://g0vairmap.3203.info/ 58 | 59 | 60 | 註 61 | ------ 62 | G0V零時空污觀測網現已由[Asper](https://github.com/Asperhsu)接手後續開發及維護 63 | 新的網站網址為 https://v5.airmap.g0v.tw/#/map 64 | -------------------------------------------------------------------------------- /Publish/WebServer.js: -------------------------------------------------------------------------------- 1 | /* 2 | FileName : WebServer.js 3 | Author : Immortalmice 4 | */ 5 | 6 | /* Require Modules */ 7 | var express = require('express'); 8 | var fs = require('fs'); 9 | var https = require('https'); 10 | var app = express(); 11 | 12 | /* Global Variable */ 13 | var WorkDir = __dirname + '/Web/'; 14 | var DataDir = __dirname + '/Fetch/Data/'; 15 | var counter = 0; 16 | var AllData = {}; 17 | var jsonFinished = true; 18 | var SiteGroups = ["ProbeCube", "LASS", "EPA", "Indie", "Airbox", "Webduino"]; 19 | 20 | /* Callback Functions */ 21 | var to_index = function(request, response){ 22 | response.redirect('/map.html'); 23 | }; 24 | 25 | var to_history_page = function(request, response){ 26 | var chid; 27 | var type; 28 | if(request.query){ 29 | chid = parseInt(request.query.chid); 30 | type = request.query.type; 31 | }else{ 32 | sendresponse(response, '無法辨認的參數'); 33 | return; 34 | } 35 | 36 | var route = datadir_bytype(type); 37 | 38 | fs.readFile(route, function(err, data){ 39 | if(err){ 40 | console.log(err); 41 | sendresponse(response, '伺服器出現問題,請稍後在試,或連繫我們'); 42 | return; 43 | } 44 | try{ 45 | var chdata = JSON.parse(data); 46 | } 47 | catch(e){ 48 | console.log(e); 49 | sendresponse(response, '伺服器出現問題,請稍後在試,或連繫我們'); 50 | return; 51 | } 52 | var select = chdata.find(function(element, index, arrary){ 53 | return element.Channel_id == chid; 54 | }); 55 | if(select){ 56 | fs.readFile( WorkDir + '/Data/History.html', function(err, data){ 57 | if(err){ 58 | console.log(err); 59 | sendresponse(response, '伺服器出現問題,請稍後在試,或連繫我們'); 60 | return; 61 | } 62 | var strdata = data.toString(); 63 | strdata = strdata.replace(/CHID/g, select.Channel_id.toString()); 64 | strdata = strdata.replace(/_TYPE/g, select.SiteGroup.toString()); 65 | sendresponse(response, strdata); 66 | }); 67 | return; 68 | } 69 | sendresponse(response, '查找的頻道ID未被登錄,或類型參數有誤'); 70 | return; 71 | }); 72 | }; 73 | 74 | var to_map = function(request, response){ 75 | fs.readFile(WorkDir + '/map.html', function(err, data){ 76 | if(err){ 77 | console.log(err); 78 | sendresponse(response, '伺服器出現問題,請稍後在試,或連繫我們'); 79 | return; 80 | } 81 | var strdata = data.toString(); 82 | if(request.query){ 83 | var chid = parseInt(request.query.chid); 84 | var type = request.query.type; 85 | 86 | var route = datadir_bytype(type); 87 | if(!route){ 88 | sendresponse(response, strdata); 89 | return; 90 | } 91 | 92 | fs.readFile(route, function(err, data){ 93 | if(err){ 94 | console.log(err); 95 | sendresponse(response, '伺服器出現問題,請稍後在試,或連繫我們'); 96 | return; 97 | } 98 | try{ 99 | var chdata = JSON.parse(data); 100 | } 101 | catch(e){ 102 | console.log(e); 103 | sendresponse(response, '伺服器出現問題,請稍後在試,或連繫我們'); 104 | return; 105 | } 106 | var select = chdata.find(function(element, index, arrary){ 107 | return element.Channel_id === chid; 108 | }); 109 | if(select){ 110 | strdata = strdata.replace(/ORDER_CHANNEL/g, chid); 111 | } 112 | sendresponse(response, strdata); 113 | return; 114 | }); 115 | }else{ 116 | sendresponse(response, strdata); 117 | return; 118 | } 119 | }); 120 | }; 121 | 122 | var getAllJson = function(request, response){ 123 | if(jsonFinished){ 124 | jsonFinished = false; 125 | SiteGroups.forEach(function(element, index, arrary){ 126 | counter = 0; 127 | AllData = {}; 128 | fs.readFile( WorkDir + "Data/" + element + "_last.json", function(err, data){ 129 | if(err){ 130 | console.log(err); 131 | sendresponse(response, "伺服器出現問題,請稍後再試。"); 132 | return; 133 | } 134 | try{ 135 | AllData[element] = JSON.parse(data); 136 | } 137 | catch(e){ 138 | console.log(e); 139 | sendresponse(response, "伺服器出現問題,請稍後再試。"); 140 | return; 141 | } 142 | counter ++; 143 | if(counter === SiteGroups.length){ 144 | sendresponse(response, JSON.stringify(AllData)); 145 | jsonFinished = true; 146 | return; 147 | } 148 | }); 149 | }); 150 | }else{ 151 | sendresponse(response, "伺服器忙碌中,請稍後再試。"); 152 | return; 153 | } 154 | } 155 | 156 | 157 | /* Other Functions */ 158 | var sendresponse = function(response, info){ 159 | response.writeHead(200); 160 | response.write(info); 161 | response.end(); 162 | }; 163 | var datadir_bytype = function(str){ 164 | var route; 165 | if(str === "ProbeCube"){ 166 | route = WorkDir + '/Data/ProbeCube_last.json'; 167 | }else if(str === "EPA"){ 168 | route = WorkDir + '/Data/EPA_last.json'; 169 | }else{ 170 | route = WorkDir + '/Data/Indie_last.json'; 171 | } 172 | return route; 173 | } 174 | 175 | /* Set Server */ 176 | app.get('/map.html', to_map); 177 | app.get('/Data/History.html', to_history_page); 178 | app.get('/Data/All_last.json', getAllJson); 179 | 180 | app.use(express.static(WorkDir)); 181 | 182 | app.get('/', to_index); 183 | 184 | 185 | /* Start Server */ 186 | app.listen(80, function(){ 187 | console.log("HTTP server listening on port 80."); 188 | }); 189 | -------------------------------------------------------------------------------- /Publish/Web/Data/ProbeCube_last.json: -------------------------------------------------------------------------------- 1 | [{"SiteGroup":"ProbeCube","Channel_id":26677,"Maker":"Lafudoci","LatLng":{},"RawData":{},"Data":{}},{"SiteGroup":"ProbeCube","Channel_id":26769,"Maker":"Lafudoci","SiteName":"PC1_prototypeDemo","LatLng":{"lat":25.080261,"lng":121.572041},"RawData":{"created_at":"2016-03-31T12:34:01Z","entry_id":62013,"field1":"21.2","field2":"76.7","field4":"18.1","field5":"55","field6":"67"},"Data":{"Temperature":21.2,"Humidity":76.7,"Dust2_5":55,"Create_at":"2016-03-31T12:34:01Z"}},{"SiteGroup":"ProbeCube","Channel_id":23139,"Maker":"Lafudoci","SiteName":"PC2_長安社區","LatLng":{"lat":25.073006,"lng":121.699048},"RawData":{"created_at":"2016-03-31T12:34:01Z","entry_id":69769,"field1":"20.4","field2":"77.2","field4":"21.6","field5":"56","field6":"71","field8":null},"Data":{"Temperature":20.4,"Humidity":77.2,"Dust2_5":56,"Create_at":"2016-03-31T12:34:01Z"}},{"SiteGroup":"ProbeCube","Channel_id":97292,"Maker":"willgood","SiteName":"威爾古德居林咪地分你藍","LatLng":{"lat":25.053301,"lng":121.535827},"RawData":{"created_at":"2016-03-20T10:41:54Z","entry_id":11143,"field1":"23.60","field2":"58.00","field3":"0","field4":"7.44","field5":"22","field8":null},"Data":{"Temperature":23.6,"Humidity":58,"Dust2_5":22,"Create_at":"2016-03-20T10:41:54Z"}},{"SiteGroup":"ProbeCube","Channel_id":33497,"Maker":"Lafudoci","SiteName":"PC3_NTOU","LatLng":{"lat":25.149983,"lng":121.771799},"RawData":{"created_at":"2016-03-31T12:34:15Z","entry_id":28141,"field1":"20.2","field2":"73.0","field3":null,"field4":"7.1","field5":"42","field6":"58","field8":null},"Data":{"Temperature":20.2,"Humidity":73,"Dust2_5":42,"Create_at":"2016-03-31T12:34:15Z"}},{"SiteGroup":"ProbeCube","Channel_id":100743,"Maker":"Youngjong","SiteName":"茄萣站","LatLng":{"lat":22.913061,"lng":120.182946},"RawData":{"created_at":"2016-03-31T12:34:18Z","entry_id":12450,"field1":"22.80","field2":"77.90","field4":"0.00","field5":"66"},"Data":{"Temperature":22.8,"Humidity":77.9,"Dust2_5":66,"Create_at":"2016-03-31T12:34:18Z"}},{"SiteGroup":"ProbeCube","Channel_id":97290,"Maker":"willgood","SiteName":"威爾古德測試用葛雷","LatLng":{"lat":25.053301,"lng":121.535822},"RawData":{"created_at":"2016-03-31T12:31:25Z","entry_id":24412,"field1":"20.40","field2":"64.80","field3":"0","field4":"8.98","field5":"58","field8":null},"Data":{"Temperature":20.4,"Humidity":64.8,"Dust2_5":58,"Create_at":"2016-03-31T12:31:25Z"}},{"SiteGroup":"ProbeCube","Channel_id":102101,"Maker":"BOX","SiteName":"樹林分站","LatLng":{"lat":24.987154,"lng":121.417089},"RawData":{"created_at":"2016-03-31T12:34:26Z","entry_id":10493,"field1":"20.20","field2":"65.10","field3":"0","field4":"9.61","field5":"90","field8":null},"Data":{"Temperature":20.2,"Humidity":65.1,"Dust2_5":90,"Create_at":"2016-03-31T12:34:26Z"}},{"SiteGroup":"ProbeCube","Channel_id":33671,"Maker":"+0","SiteName":"plus0","LatLng":{"lat":25.151846,"lng":121.770009},"RawData":{"created_at":"2016-03-31T12:33:57Z","entry_id":217289,"field1":"21.20","field2":"63.50","field3":"0","field4":"6.84","field5":"16","field8":null},"Data":{"Temperature":21.2,"Humidity":63.5,"Dust2_5":16,"Create_at":"2016-03-31T12:33:57Z"}},{"SiteGroup":"ProbeCube","Channel_id":55620,"Maker":"Pmking","SiteName":"臺中市野生動物保育學會","LatLng":{"lat":24.112368,"lng":120.731058},"RawData":{"created_at":"2016-03-31T12:30:21Z","entry_id":50550,"field1":"25.60","field2":"60.70","field3":"0","field4":"60.47","field5":"50.00","field8":null},"Data":{"Temperature":25.6,"Humidity":60.7,"Dust2_5":50,"Create_at":"2016-03-31T12:30:21Z"}},{"SiteGroup":"ProbeCube","Channel_id":103693,"Maker":"清新龜龜","SiteName":"Yeeeeee","LatLng":{"lat":25.1355206,"lng":121.7883768},"RawData":{"created_at":"2016-03-31T12:33:29Z","entry_id":2573,"field1":"19.2","field2":"80.7","field4":"2.6","field5":"52","field6":"68"},"Data":{"Temperature":19.2,"Humidity":80.7,"Dust2_5":52,"Create_at":"2016-03-31T12:33:29Z"}},{"SiteGroup":"ProbeCube","Channel_id":87638,"Maker":"Immortalmice","SiteName":"Code_is_Hard","LatLng":{"lat":25.075559,"lng":121.698345},"RawData":{"created_at":"2016-03-09T15:57:18Z","entry_id":11881,"field1":"19.20","field2":"65.80","field3":"0","field4":"6.36","field5":"4","field6":null,"field7":null,"field8":null},"Data":{"Temperature":19.2,"Humidity":65.8,"Dust2_5":4,"Create_at":"2016-03-09T15:57:18Z"}},{"SiteGroup":"ProbeCube","Channel_id":98119,"Maker":"海獅會害怕","SiteName":"Sway_Dasar","LatLng":{"lat":25.003929,"lng":121.46946},"RawData":{"created_at":"2016-03-25T19:18:36Z","entry_id":16463,"field1":"17.30","field2":"68.10","field3":"0","field4":"10.07","field5":"20","field6":null,"field7":null,"field8":null},"Data":{"Temperature":17.3,"Humidity":68.1,"Dust2_5":20,"Create_at":"2016-03-25T19:18:36Z"}},{"SiteGroup":"ProbeCube","Channel_id":101039,"Maker":"lemon","SiteName":"PC5","LatLng":{"lat":24.768058,"lng":120.967176},"RawData":{"created_at":"2016-03-31T12:34:17Z","entry_id":11711,"field1":"20.6","field2":"70.9","field4":"3.2","field5":"84","field6":"104"},"Data":{"Temperature":20.6,"Humidity":70.9,"Dust2_5":84,"Create_at":"2016-03-31T12:34:17Z"}},{"SiteGroup":"ProbeCube","Channel_id":103592,"Maker":"elsksts","SiteName":"南港汐止邊邊","LatLng":{"lat":25.043186,"lng":121.619596},"RawData":{"created_at":"2016-03-31T12:34:05Z","entry_id":4177,"field1":"20.80","field2":"68.50","field3":"0","field4":"3.49","field5":"86","field8":null},"Data":{"Temperature":20.8,"Humidity":68.5,"Dust2_5":86,"Create_at":"2016-03-31T12:34:05Z"}}] -------------------------------------------------------------------------------- /Publish/Web/recruit.html: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 零時空汙觀測網 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 |
16 | 17 | 18 | 19 | 20 | 21 |
22 |
23 |
24 |
25 |

 為何需要自造測站

26 |

零時觀測網的任務為彙整官方與非官方的空氣品質觀測資料,測站的數量越多則可使空汙追蹤的解析度提高。 27 | 然而官方的大型測站在地理分布數量與更新頻率上並不足夠,社群自造的低成本物聯網感測器即是這時代的互補解決方案。

28 |
29 |
30 |
31 |
32 |

 立即加入空汙感測器自造社群的行列動手做:

33 |

以下為各社群自造感測器的方案,觀測到的資料皆可即時呈現於g0v零時空汙觀測網。

34 |
35 |
36 |
37 | 38 |
39 |
40 |

ProbeCube是基於開源硬體的物聯網專案,志在提供大眾可以輕鬆動手自造WiFi連網的空汙感測器方案,目前亦為g0v空汙觀測的支援性專案,推廣測站提高觀測網空汙追蹤能力。

41 |

( 42 | GitHub原始碼 | 43 | Hackpad共筆 | 44 | 社群討論 )

45 |
46 |
47 |
48 |
49 | 50 |
51 |
52 |

LASS是開源公益的環境感測器網路計畫,系統完成度高、門檻低,支援平台眾多,賦予Maker自行客製各種感測能力,所有感測資料皆自由開放以利各種衍生專案與應用。

53 |

( 54 | GitHub原始碼 | 55 | Hackpad共筆 | 56 | 社群討論 )

57 |
58 |
59 |
60 |
61 | 62 |
63 |
64 |

歡迎更多社群方案加入!

65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |

或者,你已有獨立開發的感測器想要分享即時觀測值給零時觀測網可 73 | 填寫此表單 與我們聯絡。

74 |
75 |
76 |

←返回地圖頁面

77 |
78 |
79 | 83 | 93 | 99 | 100 | -------------------------------------------------------------------------------- /Publish/Web/Data/History.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ProbePot 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 |
16 | 17 |
18 |
19 |
20 |
21 |
22 |
23 |

24 |
25 | 26 | 27 |
28 |
29 |

CHID

30 |

_TYPE

31 |
32 |
33 |
34 | 67 | 110 | 123 | 124 | 125 | -------------------------------------------------------------------------------- /Publish/Web/Data/LASS_last.json: -------------------------------------------------------------------------------- 1 | [{"SiteName":"FT1_037","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":23.33,"Humidity":70.36,"Dust2_5":103,"Create_at":"2016-03-31T10:07:08Z"},"LatLng":{"lat":25.0550516667,"lng":121.553456667},"RawData":{"device_id":"FT1_037","timestamp":"2016-03-31T10:07:08Z","s_d0":103,"s_d1":109,"s_t0":23.33,"s_h0":70.36,"gps_lat":25.0550516667,"gps_lon":121.553456667,"gps_num":15}},{"SiteName":"FT1_035","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":20.5,"Humidity":1,"Dust2_5":76,"Create_at":"2016-03-31T12:32:10Z"},"LatLng":{"lat":24.5893316667,"lng":120.871863333},"RawData":{"device_id":"FT1_035","timestamp":"2016-03-31T12:32:10Z","s_d0":76,"s_d1":94,"s_t0":20.5,"s_h0":1,"gps_lat":24.5893316667,"gps_lon":120.871863333,"gps_num":13}},{"SiteName":"FT1_028","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":15.1,"Humidity":99.9,"Dust2_5":86,"Create_at":"2016-03-31T12:31:17Z"},"LatLng":{"lat":24.975855,"lng":121.541041667},"RawData":{"device_id":"FT1_028","timestamp":"2016-03-31T12:31:17Z","s_d0":86,"s_d1":119,"s_t0":15.1,"s_h0":99.9,"gps_lat":24.975855,"gps_lon":121.541041667,"gps_num":13}},{"SiteName":"FT1_031","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":21,"Humidity":99.9,"Dust2_5":79,"Create_at":"2016-03-31T12:31:40Z"},"LatLng":{"lat":25.0849216667,"lng":121.573853333},"RawData":{"device_id":"FT1_031","timestamp":"2016-03-31T12:31:40Z","s_d0":79,"s_d1":100,"s_t0":21,"s_h0":99.9,"gps_lat":25.0849216667,"gps_lon":121.573853333,"gps_num":12}},{"SiteName":"FT1_001","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":20.6,"Humidity":1,"Dust2_5":76,"Create_at":"2016-03-31T12:31:50Z"},"LatLng":{"lat":25.0405783333,"lng":121.614963333},"RawData":{"device_id":"FT1_001","timestamp":"2016-03-31T12:31:50Z","s_d0":76,"s_d1":113,"s_t0":20.6,"s_h0":1,"gps_lat":25.0405783333,"gps_lon":121.614963333,"gps_num":13}},{"SiteName":"LASS_HANK","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":0,"Humidity":0,"Dust2_5":-1,"Create_at":"2016-03-31T09:52:36Z"},"LatLng":{"lat":24.80309,"lng":120.980205},"RawData":{"device_id":"LASS_HANK","timestamp":"2016-03-31T09:52:36Z","s_d0":-1,"s_d1":0,"s_t0":0,"s_h0":0,"gps_lat":24.80309,"gps_lon":120.980205,"gps_num":8}},{"SiteName":"FT1_053","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":27.9,"Humidity":71.5,"Dust2_5":72,"Create_at":"2016-03-31T12:32:03Z"},"LatLng":{"lat":22.6313766667,"lng":120.345071667},"RawData":{"device_id":"FT1_053","timestamp":"2016-03-31T12:32:03Z","s_d0":72,"s_d1":80,"s_t0":27.9,"s_h0":71.5,"gps_lat":22.6313766667,"gps_lon":120.345071667,"gps_num":17}},{"SiteName":"FT1_063","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":20.14,"Humidity":88.31,"Dust2_5":138,"Create_at":"2016-03-31T12:32:08Z"},"LatLng":{"lat":24.9845816667,"lng":121.518955},"RawData":{"device_id":"FT1_063","timestamp":"2016-03-31T12:32:08Z","s_d0":138,"s_d1":169,"s_t0":20.14,"s_h0":88.31,"gps_lat":24.9845816667,"gps_lon":121.518955,"gps_num":16}},{"SiteName":"LASS-PI_004","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":24.8,"Humidity":91.5,"Dust2_5":105,"Create_at":"2016-03-31T12:32:08Z"},"LatLng":{"lat":23.157585,"lng":120.172808333},"RawData":{"device_id":"LASS-PI_004","timestamp":"2016-03-31T12:32:08Z","s_d0":105,"s_d1":111,"s_t0":24.8,"s_h0":91.5,"gps_lat":23.157585,"gps_lon":120.172808333,"gps_num":13}},{"SiteName":"FT1_024","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":20.3,"Humidity":99.9,"Dust2_5":80,"Create_at":"2016-03-31T12:32:22Z"},"LatLng":{"lat":25.1065916667,"lng":121.732885},"RawData":{"device_id":"FT1_024","timestamp":"2016-03-31T12:32:22Z","s_d0":80,"s_d1":110,"s_t0":20.3,"s_h0":99.9,"gps_lat":25.1065916667,"gps_lon":121.732885,"gps_num":7}},{"SiteName":"FT1_044","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":21.2,"Humidity":99.9,"Dust2_5":92,"Create_at":"2016-03-31T12:31:29Z"},"LatLng":{"lat":25.0453883333,"lng":121.447133333},"RawData":{"device_id":"FT1_044","timestamp":"2016-03-31T12:31:29Z","s_d0":92,"s_d1":113,"s_t0":21.2,"s_h0":99.9,"gps_lat":25.0453883333,"gps_lon":121.447133333,"gps_num":16}},{"SiteName":"FT1_041","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":20.11,"Humidity":90.3,"Dust2_5":163,"Create_at":"2016-03-31T12:31:40Z"},"LatLng":{"lat":24.9850216667,"lng":121.517955},"RawData":{"device_id":"FT1_041","timestamp":"2016-03-31T12:31:40Z","s_d0":163,"s_d1":216,"s_t0":20.11,"s_h0":90.3,"gps_lat":24.9850216667,"gps_lon":121.517955,"gps_num":15}},{"SiteName":"FT1_015","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":0,"Humidity":0,"Dust2_5":55,"Create_at":"2016-03-31T12:31:43Z"},"LatLng":{"lat":23.95674,"lng":121.592898333},"RawData":{"device_id":"FT1_015","timestamp":"2016-03-31T12:31:43Z","s_d0":55,"s_d1":77,"s_t0":0,"s_h0":0,"gps_lat":23.95674,"gps_lon":121.592898333,"gps_num":12}},{"SiteName":"FT1_403","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":25.8,"Humidity":72.5,"Dust2_5":49,"Create_at":"2016-03-31T12:32:14Z"},"LatLng":{"lat":24.1427,"lng":120.65807},"RawData":{"device_id":"FT1_403","timestamp":"2016-03-31T12:32:14Z","s_d0":49,"s_d1":64,"s_t0":25.8,"s_h0":72.5,"gps_lat":24.1427,"gps_lon":120.65807,"gps_num":16}},{"SiteName":"FT1_017","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":21.1,"Humidity":83.8,"Dust2_5":80,"Create_at":"2016-03-31T12:31:47Z"},"LatLng":{"lat":25.009195,"lng":121.56165},"RawData":{"device_id":"FT1_017","timestamp":"2016-03-31T12:31:47Z","s_d0":80,"s_d1":105,"s_t0":21.1,"s_h0":83.8,"gps_lat":25.009195,"gps_lon":121.56165,"gps_num":16}},{"SiteName":"FT1_005","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":24.3,"Humidity":99.9,"Dust2_5":62,"Create_at":"2016-03-31T12:32:18Z"},"LatLng":{"lat":23.8481483333,"lng":120.286405},"RawData":{"device_id":"FT1_005","timestamp":"2016-03-31T12:32:18Z","s_d0":62,"s_d1":85,"s_t0":24.3,"s_h0":99.9,"gps_lat":23.8481483333,"gps_lon":120.286405,"gps_num":14}},{"SiteName":"FT1_022","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":25,"Humidity":18.8,"Dust2_5":40,"Create_at":"2016-03-31T12:31:48Z"},"LatLng":{"lat":24.1797683333,"lng":120.64873},"RawData":{"device_id":"FT1_022","timestamp":"2016-03-31T12:31:48Z","s_d0":40,"s_d1":47,"s_t0":25,"s_h0":18.8,"gps_lat":24.1797683333,"gps_lon":120.64873,"gps_num":6}},{"SiteName":"FT1_966","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":0,"Humidity":0,"Dust2_5":67,"Create_at":"2016-03-31T12:31:52Z"},"LatLng":{"lat":24.17544,"lng":120.668793333},"RawData":{"device_id":"FT1_966","timestamp":"2016-03-31T12:31:52Z","s_d0":67,"s_d1":80,"s_t0":0,"s_h0":0,"gps_lat":24.17544,"gps_lon":120.668793333,"gps_num":9}},{"SiteName":"FT1_032","SiteGroup":"LASS","Maker":"LASS","Data":{"Temperature":24.6,"Humidity":87.7,"Dust2_5":62,"Create_at":"2016-03-31T12:31:55Z"},"LatLng":{"lat":23.4649833333,"lng":120.24786},"RawData":{"device_id":"FT1_032","timestamp":"2016-03-31T12:31:55Z","s_d0":62,"s_d1":77,"s_t0":24.6,"s_h0":87.7,"gps_lat":23.4649833333,"gps_lon":120.24786,"gps_num":13}}] -------------------------------------------------------------------------------- /Publish/Web/Data/Webduino_last.json: -------------------------------------------------------------------------------- 1 | [{"SiteName":"u'瑞祥高中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'瑞祥高中 #1'"}},{"SiteName":"u'普門中學 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{"Dust2_5":38,"Create_at":"2016-03-31T09:30:30Z"},"LatLng":{"lat":22.7169545757,"lng":120.446400149},"RawData":{"SiteName":"u'普門中學 #1'","timestamp":"2016-03-31T09:30:30Z","PM2_5":38,"PM10":25,"gps_lat":22.7169545757,"gps_lon":120.446400149}},{"SiteName":"u'鹽埕國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{"Dust2_5":55,"Create_at":"2016-03-31T12:30:31Z"},"LatLng":{"lat":22.6237101467,"lng":120.287566345},"RawData":{"SiteName":"u'鹽埕國中 #1'","timestamp":"2016-03-31T12:30:31Z","PM2_5":55,"PM10":39,"gps_lat":22.6237101467,"gps_lon":120.287566345}},{"SiteName":"u'高雄市政府教育局 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'高雄市政府教育局 #1'"}},{"SiteName":"u'復華高中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'復華高中 #1'"}},{"SiteName":"u'梓官國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'梓官國中 #1'"}},{"SiteName":"u'前鎮高中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'前鎮高中 #1'"}},{"SiteName":"u'正興國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'正興國中 #1'"}},{"SiteName":"u'彌陀國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'彌陀國中 #1'"}},{"SiteName":"u'旗山國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{"Dust2_5":43,"Create_at":"2016-03-31T12:30:32Z"},"LatLng":{"lat":22.8808923151,"lng":120.481007877},"RawData":{"SiteName":"u'旗山國中 #1'","timestamp":"2016-03-31T12:30:32Z","PM2_5":43,"PM10":31,"gps_lat":22.8808923151,"gps_lon":120.481007877}},{"SiteName":"u'創新研發中心'","SiteGroup":"Webduino","Maker":"Webduino","Data":{"Dust2_5":70,"Create_at":"2016-03-31T12:30:30Z"},"LatLng":{"lat":22.6289741192,"lng":120.342131447},"RawData":{"SiteName":"u'創新研發中心'","timestamp":"2016-03-31T12:30:30Z","PM2_5":70,"PM10":47,"gps_lat":22.6289741192,"gps_lon":120.342131447}},{"SiteName":"u'獅甲國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{"Dust2_5":58,"Create_at":"2016-03-30T09:25:31Z"},"LatLng":{"lat":22.6050441356,"lng":120.308012564},"RawData":{"SiteName":"u'獅甲國中 #1'","timestamp":"2016-03-30T09:25:31Z","PM2_5":58,"PM10":44,"gps_lat":22.6050441356,"gps_lon":120.308012564}},{"SiteName":"u'大仁國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{"Dust2_5":31,"Create_at":"2016-03-31T12:30:32Z"},"LatLng":{"lat":22.6328495,"lng":120.3295446},"RawData":{"SiteName":"u'大仁國中 #1'","timestamp":"2016-03-31T12:30:32Z","PM2_5":31,"PM10":21,"gps_lat":22.6328495,"gps_lon":120.3295446}},{"SiteName":"u'鳳西國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'鳳西國中 #1'"}},{"SiteName":"u'中山國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'中山國中 #1'"}},{"SiteName":"u'文府國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{"Dust2_5":34,"Create_at":"2016-03-31T12:30:22Z"},"LatLng":{"lat":22.691916273,"lng":120.316043203},"RawData":{"SiteName":"u'文府國中 #1'","timestamp":"2016-03-31T12:30:22Z","PM2_5":34,"PM10":23,"gps_lat":22.691916273,"gps_lon":120.316043203}},{"SiteName":"u'楠梓國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{"Dust2_5":58,"Create_at":"2016-03-30T00:25:23Z"},"LatLng":{"lat":22.7351912239,"lng":120.327230717},"RawData":{"SiteName":"u'楠梓國中 #1'","timestamp":"2016-03-30T00:25:23Z","PM2_5":58,"PM10":44,"gps_lat":22.7351912239,"gps_lon":120.327230717}},{"SiteName":"u'忠孝國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'忠孝國中 #1'"}},{"SiteName":"u'鳳甲國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{"Dust2_5":43,"Create_at":"2016-03-31T12:30:19Z"},"LatLng":{"lat":22.6163670925,"lng":120.34235321},"RawData":{"SiteName":"u'鳳甲國中 #1'","timestamp":"2016-03-31T12:30:19Z","PM2_5":43,"PM10":30,"gps_lat":22.6163670925,"gps_lon":120.34235321}},{"SiteName":"u'臺灣產學策進會'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'臺灣產學策進會'"}},{"SiteName":"u'海佃國小'","SiteGroup":"Webduino","Maker":"Webduino","Data":{"Dust2_5":38,"Create_at":"2016-03-31T12:30:24Z"},"LatLng":{"lat":23.028752,"lng":120.199742},"RawData":{"SiteName":"u'海佃國小'","timestamp":"2016-03-31T12:30:24Z","PM2_5":38,"PM10":27,"gps_lat":23.028752,"gps_lon":120.199742}},{"SiteName":"u'鳳林國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'鳳林國中 #1'"}},{"SiteName":"u'中正高工 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{"Dust2_5":67,"Create_at":"2016-03-31T12:30:22Z"},"LatLng":{"lat":22.6107676546,"lng":120.317824714},"RawData":{"SiteName":"u'中正高工 #1'","timestamp":"2016-03-31T12:30:22Z","PM2_5":67,"PM10":46,"gps_lat":22.6107676546,"gps_lon":120.317824714}},{"SiteName":"u'中山國中'","SiteGroup":"Webduino","Maker":"Webduino","Data":{"Dust2_5":73,"Create_at":"2016-03-31T12:30:30Z"},"LatLng":{"lat":22.5665390455,"lng":120.355751699},"RawData":{"SiteName":"u'中山國中'","timestamp":"2016-03-31T12:30:30Z","PM2_5":73,"PM10":45,"gps_lat":22.5665390455,"gps_lon":120.355751699}},{"SiteName":"u'永安國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{"Dust2_5":60,"Create_at":"2016-03-31T12:30:13Z"},"LatLng":{"lat":22.822963271,"lng":120.240813029},"RawData":{"SiteName":"u'永安國中 #1'","timestamp":"2016-03-31T12:30:13Z","PM2_5":60,"PM10":44,"gps_lat":22.822963271,"gps_lon":120.240813029}},{"SiteName":"u'光華國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'光華國中 #1'"}},{"SiteName":"u'鳥松國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{"Dust2_5":54,"Create_at":"2016-03-30T00:14:31Z"},"LatLng":{"lat":22.6667073209,"lng":120.371654759},"RawData":{"SiteName":"u'鳥松國中 #1'","timestamp":"2016-03-30T00:14:31Z","PM2_5":54,"PM10":40,"gps_lat":22.6667073209,"gps_lon":120.371654759}},{"SiteName":"u'岡山國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'岡山國中 #1'"}},{"SiteName":"u'大寮國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'大寮國中 #1'"}},{"SiteName":"u'立志中學 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'立志中學 #1'"}},{"SiteName":"u'燕巢國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'燕巢國中 #1'"}},{"SiteName":"u'高雄資教中心 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'高雄資教中心 #1'"}},{"SiteName":"u'楠梓高中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'楠梓高中 #1'"}},{"SiteName":"u'測試機 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'測試機 #1'"}},{"SiteName":"u'興仁國中 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'興仁國中 #1'"}},{"SiteName":"u'桃園空汙 #1'","SiteGroup":"Webduino","Maker":"Webduino","Data":{"Dust2_5":14,"Create_at":"2016-03-31T06:40:31Z"},"LatLng":{"lat":25.0179715195,"lng":121.286936127},"RawData":{"SiteName":"u'桃園空汙 #1'","timestamp":"2016-03-31T06:40:31Z","PM2_5":14,"PM10":2,"gps_lat":25.0179715195,"gps_lon":121.286936127}},{"SiteName":"'Null'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"'Null'"}},{"SiteName":"u'桃園空汙'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'桃園空汙'"}},{"SiteName":"u'桃園空汙 #2'","SiteGroup":"Webduino","Maker":"Webduino","Data":{},"LatLng":{},"RawData":{"SiteName":"u'桃園空汙 #2'"}}] -------------------------------------------------------------------------------- /Publish/Web/JavaScript/History_main.js: -------------------------------------------------------------------------------- 1 | var Channel_id; 2 | var SiteGroup; 3 | var Element; 4 | 5 | var fieldsetting; 6 | 7 | function fixSiteGroup(){ 8 | if(SiteGroup !== "ProbeCube" && SiteGroup !== "EPA") 9 | SiteGroup = "Indie"; 10 | } 11 | function parse_frame_url(field, setting, fieldname){ 12 | console.log(fieldname); 13 | field = parseInt(field); 14 | var return_str = ("http://api.thingspeak.com/channels/" + Channel_id + "/charts/" + field); 15 | return_str += "?width=auto&height=auto"; 16 | if(fieldname === 'Temperature'){ 17 | return_str += "&title=空氣溫度&dynamic=true&type=spline&color=green&yaxis=°C"; 18 | }else if(fieldname === 'Humidity'){ 19 | return_str += "&title=相對濕度&dynamic=true&type=spline&color=blue&yaxis=RH%20%25"; 20 | }else if(fieldname === 'Dust2_5'){ 21 | return_str += "&title=懸浮微粒PM2.5&dynamic=true&type=spline&color=grey&yaxis=μg/m3&yaxismin=0"; 22 | } 23 | /*return_str += "&title=有機汙染VoC&dynamic=true&type=spline&color=darkred&yaxis=ppm&yaxismin=0";*/ 24 | if(setting){ 25 | return_str += "&days=" + (setting.day ? setting.day : 7) + "&median=" + setting.averge; 26 | }else{ 27 | return_str += "&days=7&average=30"; 28 | } 29 | return return_str; 30 | } 31 | function append_frame(){ 32 | $("#tablediv").remove(); 33 | $("#cont").append("
"); 34 | $("#char").append("

懸浮微粒PM2.5

"); 35 | //$("#char").append("

有機汙染VoC

"); 36 | $("#char").append("

空氣溫度

"); 37 | $("#char").append("

相對濕度

"); 38 | //$("#char").append("

土壤濕度

"); 39 | 40 | document.getElementById("field1").innerHTML += "
'); 189 | }else{ 190 | var device_id = element.SiteGroup !== "Airbox" ? element.SiteName : element.RawData.device_id; 191 | infos.children(':nth-child(6)').append(''); 192 | chart.children("img").remove(); 193 | chart.addClass('vertical-center'); 194 | chart.html('Ajax loader'); 195 | addSeries(device_id, 2000, '#808080'); 196 | } 197 | } 198 | function getChartUrl(element, type){ 199 | var field; 200 | if(element.Option){ 201 | field = element.Option[type].charAt(5); 202 | }else{ 203 | field = '5'; 204 | } 205 | if(type === "Dust2_5"){ 206 | return "http://api.thingspeak.com/channels/" + element.Channel_id + "/charts/" + field + "?width=auto&height=auto&title=細懸浮微粒PM2.5&days=1&average=30&dynamic=true&type=spline&color=grey&yaxismin=0&yaxis=μg/m3"; 207 | } 208 | } 209 | function timeOffset(time1, time2){ 210 | if(!time1 || !time2) 211 | return undefined; 212 | return time1 - time2; 213 | } 214 | function timegap(time){ 215 | var offset = timeOffset(now, new Date(time)); 216 | offset /= 1000; 217 | var value = Math.floor(offset); 218 | 219 | if(offset <= 0) 220 | return "0秒前更新"; 221 | 222 | offset /= 60; 223 | if(offset < 1) 224 | return (value + "秒前更新"); 225 | value = Math.floor(offset); 226 | 227 | offset /= 60; 228 | if(offset < 1) 229 | return (value + "分鐘前更新"); 230 | value = Math.floor(offset); 231 | 232 | offset /= 24; 233 | if(offset < 1) 234 | return (value + "小時前更新"); 235 | value = Math.floor(offset); 236 | 237 | offset /= 30; 238 | if(offset < 1) 239 | return (value + "天前更新"); 240 | value = Math.floor(offset); 241 | 242 | offset /= 12; 243 | if(offset < 1) 244 | return (value + "個月前更新"); 245 | value =Math.floor(offset); 246 | 247 | return (value + "年前更新"); 248 | } 249 | function applyShowOptions(Options){ 250 | for(var prop in Options) 251 | showOptions[prop] = Options[prop]; 252 | trafficLayer.setMap(showOptions.setTrafficLayer ? MainMap : undefined); 253 | $('#picbar').children('img').attr('src', 'Pic/icons/' + showOptions.showType + '_bar.png'); 254 | SitesData.forEach(function(element, index, arrary){ 255 | element.Marker.setIcon(IconUrl(element)); 256 | var visible = showOptions.displaySiteGroup[element.SiteGroup]; 257 | if(showOptions.timeRange != -1 && timeOffset(now, new Date(element.Data.Create_at)) > showOptions.timeRange) 258 | visible = false; 259 | element.Marker.setVisible(visible); 260 | }); 261 | return; 262 | } 263 | 264 | /* The following functions are not written by Immoratalmice */ 265 | function addChart(data) { 266 | // variable for the local date in milliseconds 267 | var localDate; 268 | var my_offset = new Date().getTimezoneOffset(); 269 | // specify the chart options 270 | var chartOptions = { 271 | chart: { 272 | renderTo: 'Chart', 273 | defaultSeriesType: 'spline', 274 | backgroundColor: '#ffffff', 275 | events: { } 276 | }, 277 | title: { text: '細懸浮微粒PM2.5' , useHTML: true}, 278 | plotOptions: { 279 | series: { 280 | marker: { radius: 3 }, 281 | animation: true, 282 | step: false, 283 | borderWidth: 0, 284 | turboThreshold: 0 285 | } 286 | }, 287 | tooltip: { 288 | // reformat the tooltips so that local times are displayed 289 | formatter: function() { 290 | var d = new Date(this.x + (my_offset*60000)); 291 | var n = (this.point.name === undefined) ? '' : '
' + this.point.name; 292 | return this.series.name + ':' + this.y + '' + n + '
' + d.toDateString() + '
' + d.toTimeString().replace(/\(.*\)/, ""); 293 | } 294 | }, 295 | xAxis: { 296 | type: 'datetime', 297 | title: { text: 'Date' , useHTML: true} 298 | }, 299 | yAxis: { title: { text: 'μg/m3' , useHTML: true} }, 300 | exporting: { enabled: false }, 301 | legend: { enabled: false }, 302 | credits: { 303 | text: '', 304 | href: '', 305 | style: { color: '#808080' } 306 | } 307 | }; 308 | // draw the chart 309 | var my_chart = new Highcharts.Chart(chartOptions); 310 | return my_chart; 311 | } 312 | // add a series to the chart 313 | function addSeries(device, results, color) { 314 | //var field_name = 'field' + field_number; 315 | var field_name = 'PM2_5'; 316 | // get the data with a webservice call 317 | $.getJSON('http://nrl.iis.sinica.edu.tw/LASS/history-hourly.php', {device_id: escape(device)}, function(data) { 318 | // blank array for holding chart data 319 | var chart_data = []; 320 | var sma_num = 5; 321 | var sma = []; 322 | var k = 0; 323 | // iterate through each feed 324 | $.each(data.feeds, function() { 325 | var point = new Highcharts.Point(); 326 | var value = this[field_name]; 327 | point.x = getChartDate(this.timestamp); 328 | point.y = parseFloat(value); 329 | // if a numerical value exists add it 330 | /*if (!isNaN(parseInt(value))) { 331 | sma[k%sma_num] = point.y; 332 | k = k+1; 333 | if (k>sma_num){ 334 | point.y = 0; 335 | for (var i=0;i this.MAXLENGTH) 366 | out = this.data.shift(); 367 | this.data.push('

' + str + '

'); 368 | $('#' + this.div).html(this.data.join('')); 369 | return out; 370 | } 371 | }; 372 | var updateTool = { 373 | gap : 10000, 374 | flag : true, 375 | btn : 'livebtn', 376 | start : function(){ 377 | this.flag = true; 378 | $("#" + this.btn).removeClass("btn-info"); 379 | $("#" + this.btn).addClass("btn-danger"); 380 | $("#" + this.btn).text("關閉即時更新"); 381 | $("#" + this.btn).attr("onclick", "updateTool.stop();"); 382 | this.update(); 383 | infoConsole.write('即時更新已開啟'); 384 | }, 385 | stop : function(){ 386 | this.flag = false; 387 | $("#" + this.btn).removeClass("btn-danger"); 388 | $("#" + this.btn).addClass("btn-warning"); 389 | $("#" + this.btn).attr("disabled", "disabled"); 390 | $("#" + this.btn).text("關閉中"); 391 | infoConsole.write('關閉即時更新中'); 392 | }, 393 | update : function(){ 394 | now = new Date(); 395 | SiteGroups.forEach(function(sg_element, sg_index, sg_arrary){ 396 | $.getJSON('/Data/' + sg_element + '_last.json').done(function(data){ 397 | var updates = 0; 398 | data.forEach(function(d_element, d_index, d_arrary){ 399 | var sdIndex = SitesData.findIndex(function(s_element, s_index, s_arrary){ 400 | return s_element.SiteName === d_element.SiteName; 401 | }); 402 | if(sdIndex && SitesData[sdIndex] && SitesData[sdIndex].Data.Create_at !== d_element.Data.Create_at){ 403 | for(var prop in d_element) 404 | SitesData[sdIndex][prop] = d_element[prop]; 405 | SitesData[sdIndex].Marker.setIcon(IconUrl(SitesData[sdIndex])); 406 | updates ++; 407 | } 408 | }); 409 | if(updates !== 0) 410 | infoConsole.write(sg_element + '站點已更新(' + updates + '/' + data.length + ')'); 411 | }); 412 | }); 413 | if(this.flag){ 414 | setTimeout("updateTool.update();", this.gap); 415 | }else{ 416 | $("#livebtn").removeClass("btn-warning"); 417 | $("#livebtn").addClass("btn-info"); 418 | $("#livebtn").text("開啟即時更新"); 419 | $("#livebtn").attr("onclick", "updateTool.start();"); 420 | $("#livebtn").removeAttr("disabled"); 421 | infoConsole.write('即時更新已關閉'); 422 | } 423 | } 424 | } 425 | 426 | /* Initialize */ 427 | function initialize(){ 428 | /* Set Map */ 429 | $("#map").css({"height" : $(window).height() - 170 + "px"}); 430 | 431 | var stylesGray = [ 432 | { 433 | stylers: [ 434 | { hue: "#00ffee" }, 435 | { saturation: -70 } 436 | ] 437 | },{ 438 | featureType: "road", 439 | elementType: "geometry", 440 | stylers: [ 441 | { lightness: 100 }, 442 | { visibility: "simplified" } 443 | ] 444 | },{ 445 | featureType: "road", 446 | elementType: "labels", 447 | stylers: [ 448 | { visibility: "off" } 449 | ] 450 | } 451 | ]; 452 | var mapOptions = { 453 | zoom: 8, 454 | center: new google.maps.LatLng(23.783832, 120.957181), 455 | styles: stylesGray, 456 | mapTypeControl: false 457 | }; 458 | trafficLayer = new google.maps.TrafficLayer(); 459 | trafficLayer.__proto__.set('opacity' , 0.1); 460 | /* Get Parameter */ 461 | if($("#order_channel").text() != "ORDER_CHANNEL"){ 462 | mapOptions.zoom = 14; 463 | } 464 | MainMap = new google.maps.Map(document.getElementById('map'), mapOptions); 465 | 466 | google.maps.event.addListener(MainMap, 'idle', function(){ 467 | if(firstLoad){ 468 | $("#Loading").hide(); 469 | $("#picbardiv").css({"position" : "absolute", "bottom" : "210px", "left" : "10px", "z-index": "2"}); 470 | $("#picbardiv").attr("hidden", false); 471 | $("#info_console_div").css({"position" : "absolute", "bottom" : "90px", "right" : "45px", "z-index": "2"}); 472 | $("#info_console_div").attr("hidden", false); 473 | $("#picbar").html(""); 474 | firstLoad = false; 475 | } 476 | }); 477 | 478 | SiteGroups.forEach(function(sg_element, sg_index, sg_arrary){ 479 | $.getJSON('/Data/' + sg_element + '_last.json').done(function(data){ 480 | data.forEach(function(d_element, d_index, d_arrary){ 481 | SitesData.push(CreateMarker(d_element)); 482 | }); 483 | infoConsole.write(data.length + '個' + sg_element + '站點已載入'); 484 | SiteGroups_isFinishedLoading ++; 485 | if(SiteGroups_isFinishedLoading === SiteGroups.length){ 486 | infoConsole.write('全數載入完成'); 487 | applyShowOptions(); 488 | } 489 | }); 490 | }); 491 | $("#FilterModal").submit(function(event){ 492 | event.preventDefault(); 493 | applyShowOptions( 494 | { 495 | displaySiteGroup : { 496 | ProbeCube : $("#PC").is(":checked"), 497 | EPA : $("#EPA").is(":checked"), 498 | LASS : $("#LA").is(":checked"), 499 | LASS4U : $("#LA4U").is(":checked"), 500 | Airbox : $("#AB").is(":checked"), 501 | miaoski : $("#miaoski").is(":checked"), 502 | "CCU NEAT" : $("#ccu").is(":checked"), 503 | "CCU 100" : $("#ccu100").is(":checked"), 504 | "ES-AIR" : $("#ES-AIR").is(":checked"), 505 | Webduino : $("#Webduino").is(":checked"), 506 | "KS-001" : $("#KS-001").is(":checked"), 507 | }, 508 | timeRange : parseInt($("#timeRange").val()), 509 | setTrafficLayer : $("#trafficLayerView").is(":checked") 510 | }); 511 | $('#FilterModal').modal('hide'); 512 | }); 513 | $("#showType").change(function(event){ 514 | event.preventDefault(); 515 | applyShowOptions({showType: $('#showType').val()}); 516 | }); 517 | $("#selectAll").click(function(event){ 518 | for(var i = 1; i <= $("#selections").children().length; i ++){ 519 | $("#selections").children("div:nth-child(" + i + ")").children("label:nth-child(1)").children("input:nth-child(1)").prop("checked", true); 520 | } 521 | }); 522 | $("#reverseSelect").click(function(event){ 523 | for(var i = 1; i <= $("#selections").children().length; i ++){ 524 | var ele = $("#selections").children("div:nth-child(" + i + ")").children("label:nth-child(1)").children("input:nth-child(1)"); 525 | ele.prop("checked", !ele.is(":checked")); 526 | } 527 | }); 528 | setTimeout('updateTool.start();', updateTool.gap); 529 | } -------------------------------------------------------------------------------- /Publish/FetchServer.js: -------------------------------------------------------------------------------- 1 | /* 2 | FileName : FetchServer.js 3 | Author : Immortalmice 4 | */ 5 | 6 | /* Require Modules */ 7 | var fs = require('fs'); 8 | var https = require('https'); 9 | var http = require('http'); 10 | var querystring = require('querystring'); 11 | 12 | /* Global Variable */ 13 | var SaveDir = __dirname + '/Web/Data/'; 14 | var WorkDir = __dirname + '/Fetch/'; 15 | 16 | var EPA_writeFileName = "EPA_last.json"; 17 | var EPA_RawData; 18 | var EPA_LastData = []; 19 | var EPA_isFinished = true; 20 | 21 | var ProbeCube_writeFileName = "ProbeCube_last.json"; 22 | var ProbeCube_RawData; 23 | var ProbeCube_LastData = []; 24 | var ProbeCube_isFinished = true; 25 | 26 | var LASS_writeFileName = "LASS_last.json"; 27 | var LASS_LastData = []; 28 | var LASS_isFinished = true; 29 | 30 | var LASS4U_writeFileName = "LASS4U_last.json"; 31 | var LASS4U_LastData = []; 32 | var LASS4U_isFinished = true; 33 | 34 | var Airbox_writeFileName = "Airbox_last.json"; 35 | var Airbox_LastData = []; 36 | var Airbox_isFinished = true; 37 | 38 | var Webduino_writeFileName = "Webduino_last.json"; 39 | var Webduino_LastData = []; 40 | var Webduino_isFinished = true; 41 | 42 | var Indie_writeFileName = "Indie_last.json"; 43 | var Indie_RawData; 44 | var Indie_LastData = []; 45 | var Indie_isFinished = true; 46 | var lastData = {}; 47 | 48 | var counter = 0; 49 | 50 | 51 | /* Function Packages */ 52 | var httpTools = { 53 | https_get : function (host, path, header, callback, onerror){ 54 | return https.get({ 55 | host: host, 56 | path: path, 57 | headers: header 58 | }, function(response) { 59 | // Continuously update stream with data 60 | var body = ''; 61 | response.on('data', function(d) { 62 | body += d; 63 | }); 64 | response.on('end', function() { 65 | if(callback) 66 | callback(body); 67 | }); 68 | }).on('error', function(err){ 69 | console.log(err); 70 | if(onerror) 71 | onerror(); 72 | }); 73 | }, 74 | https_get_json : function (host, path, callback, onerror){ 75 | this.https_get(host, path, {}, function(data){ 76 | try{ 77 | var parsed = JSON.parse(data); 78 | }catch(e){ 79 | console.log(e); 80 | if(callback) 81 | callback(undefined); 82 | } 83 | if(callback) 84 | callback(parsed); 85 | }, onerror); 86 | }, 87 | 88 | http_get : function (host, path, header, callback, onerror){ 89 | return http.get({ 90 | host: host, 91 | path: path, 92 | headers: header 93 | }, function(response) { 94 | // Continuously update stream with data 95 | var body = ''; 96 | response.on('data', function(d) { 97 | body += d; 98 | }); 99 | response.on('end', function() { 100 | if(callback) 101 | callback(body); 102 | }); 103 | }).on('error', function(err){ 104 | console.log(err); 105 | if(onerror) 106 | onerror(); 107 | }); 108 | }, 109 | http_get_json : function (host, path, callback, onerror){ 110 | this.http_get(host, path, {}, function(data){ 111 | try{ 112 | var parsed = JSON.parse(data); 113 | }catch(e){ 114 | console.log(e); 115 | if(callback) 116 | callback(undefined); 117 | } 118 | if(callback) 119 | callback(parsed); 120 | }, onerror); 121 | } 122 | }; 123 | var updateTools = { 124 | load_EPA : function(callback){ 125 | fs.readFile( WorkDir + 'Data/EPA_RawData.json', 'utf8', function(err, data){ 126 | if(err){ 127 | console.log(err); 128 | return; 129 | } 130 | EPA_RawData = JSON.parse(data); 131 | callback(); 132 | }); 133 | }, 134 | update_EPA : function(){ 135 | if(EPA_isFinished){ 136 | EPA_LastData = []; 137 | EPA_isFinished = false; 138 | httpTools.https_get_json("raw.githubusercontent.com", "/g0v-data/mirror/master/epa/aqx.json", function(data){ 139 | if(data){ 140 | EPA_Updates = 0; 141 | EPA_RawData.forEach(function(element, index, array){ 142 | httpTools.https_get_json('api.thingspeak.com', '/channels/' + element.Channel_id + '/feeds.json?results=1', function(response){ 143 | var obj = {}; 144 | for(var prop in element){ 145 | obj[prop] = element[prop]; 146 | } 147 | obj.SiteGroup = "EPA"; 148 | obj.Maker = 'EPA'; 149 | if(response){ 150 | obj.RawData = data.find(function(element, index, array){ 151 | return element.SiteName === obj.SiteName; 152 | }); 153 | obj.SiteName += "監測站"; 154 | if(obj.RawData){ 155 | obj.Data = { 156 | Dust2_5 : parseFloat(obj.RawData["PM2.5"]), 157 | Create_at : parse_time(obj.RawData.PublishTime) 158 | }; 159 | }else{ 160 | obj.RawData = {}; 161 | } 162 | if(response && response !== -1 && response.feeds && response.feeds[0]){ 163 | if(!obj.Data){ 164 | obj.Data = { 165 | Dust2_5 : parseFloat(response.feeds[0].field5), 166 | Create_at : response.feeds[0].created_at 167 | }; 168 | } 169 | }else if(!obj.Data){ 170 | obj.Data = {}; 171 | } 172 | if(obj.Data.Create_at && !(response.feeds && response.feeds[0] && (obj.Data.Create_at === response.feeds[0].created_at))){ 173 | var params_str = 'api_key=' + element.api_key; 174 | params_str += '&field5=' + obj.Data.Dust2_5; 175 | params_str += '&created_at=' + obj.Data.Create_at; 176 | console.log("No." + obj.SiteName + " params_str: " + params_str); 177 | httpTools.https_get_json('api.thingspeak.com', '/update?' + params_str, function(response_data){ 178 | console.log("No." + obj.SiteName + " Response: " + response_data + "params_str: " + params_str); 179 | }); 180 | } 181 | }else{ 182 | obj.RawData = {}; 183 | obj.Data = {}; 184 | console.log("[EPA] At request \"api.thingspeak.com/channels/" + element.Channel_id + "/feeds.json?results=1\" failed."); 185 | } 186 | delete obj.api_key; 187 | EPA_LastData.push(obj); 188 | updateTools.check_write_EPA(); 189 | }, function(){ 190 | var obj = {}; 191 | for(var prop in element){ 192 | obj[prop] = element[prop]; 193 | } 194 | obj.SiteGroup = "EPA"; 195 | obj.Maker = 'EPA'; 196 | obj.RawData = data.find(function(element, index, array){ 197 | return element.SiteName === obj.SiteName; 198 | }); 199 | obj.SiteName += "監測站"; 200 | if(obj.RawData){ 201 | obj.Data = { 202 | Dust2_5 : parseFloat(obj.RawData["PM2.5"]), 203 | Create_at : parse_time(obj.RawData.PublishTime) 204 | }; 205 | }else{ 206 | obj.Data = {}; 207 | } 208 | delete obj.api_key; 209 | EPA_LastData.push(obj); 210 | updateTools.check_write_EPA(); 211 | }); 212 | }); 213 | }else{ 214 | EPA_isFinished = true; 215 | console.log("[EPA] At request \"raw.githubusercontent.com/g0v-data/mirror/master/epa/aqx.json\" failed."); 216 | } 217 | }); 218 | }else{ 219 | console.log("[EPA] Does not finish update, wait for next run."); 220 | } 221 | }, 222 | check_write_EPA : function(){ 223 | if(EPA_LastData.length === EPA_RawData.length){ 224 | fs.writeFile(SaveDir + EPA_writeFileName, JSON.stringify(EPA_LastData), function(err){ 225 | if(err){ 226 | console.log(err); 227 | return; 228 | } 229 | console.log("[EPA] Finished Writing."); 230 | EPA_isFinished = true; 231 | }); 232 | } 233 | }, 234 | load_ProbeCube : function(callback){ 235 | fs.readFile( WorkDir + '/Data/ProbeCube_RawData.json', function(err, data){ 236 | if(err){ 237 | console.log(err); 238 | return; 239 | } 240 | ProbeCube_RawData = JSON.parse(data); 241 | callback(); 242 | }); 243 | }, 244 | update_ProbeCube : function(){ 245 | if(ProbeCube_isFinished){ 246 | ProbeCube_LastData = []; 247 | ProbeCube_isFinished = false; 248 | ProbeCube_RawData.forEach(function(element, index, array){ 249 | httpTools.https_get_json('thingspeak.com', '/channels/' + element.Channel_id + '/feeds.json?results=1', function(response){ 250 | if(response){ 251 | var obj = {}; 252 | obj.SiteGroup = "ProbeCube"; 253 | obj.Channel_id = element.Channel_id; 254 | obj.Maker = element.maker; 255 | if(response.channel){ 256 | obj.SiteName = response.channel.name; 257 | obj.LatLng = { 258 | lat : parseFloat(response.channel.latitude), 259 | lng : parseFloat(response.channel.longitude) 260 | }; 261 | }else{ 262 | obj.SiteName = undefined; 263 | obj.LatLng = { 264 | lat : undefined, 265 | lng : undefined 266 | }; 267 | } 268 | if(response && response != -1 && response.feeds && response.feeds[0]){ 269 | obj.RawData = response.feeds[0]; 270 | obj.Data = { 271 | Temperature : parseFloat(obj.RawData.field1), 272 | Humidity : parseFloat(obj.RawData.field2), 273 | Dust2_5 : parseFloat(obj.RawData.field5), 274 | Create_at : obj.RawData.created_at 275 | } 276 | }else{ 277 | obj.RawData = {}; 278 | obj.Data = { 279 | Temperature : undefined, 280 | Humidity : undefined, 281 | Dust2_5 : undefined, 282 | Create_at : undefined 283 | }; 284 | } 285 | }else{ 286 | var obj = {}; 287 | obj.SiteGroup = "ProbeCube"; 288 | obj.Channel_id = element.Channel_id; 289 | obj.Maker = element.maker; 290 | obj.SiteName = undefined; 291 | obj.LatLng = { 292 | lat : undefined, 293 | lng : undefined 294 | }; 295 | obj.RawData = {}; 296 | obj.Data = { 297 | Temperature : undefined, 298 | Humidity : undefined, 299 | Dust2_5 : undefined, 300 | Create_at : undefined 301 | }; 302 | console.log("[ProbeCube] At request \"api.thingspeak.com/channels/" + element.Channel_id + "/feeds.json?results=1\" failed."); 303 | } 304 | ProbeCube_LastData.push(obj); 305 | updateTools.check_write_ProbeCube(); 306 | }, function(){ 307 | var obj = {}; 308 | obj.SiteGroup = "ProbeCube"; 309 | obj.Channel_id = element.Channel_id; 310 | obj.Maker = element.maker; 311 | obj.RawData = {}; 312 | obj.Data = { 313 | Temperature : undefined, 314 | Humidity : undefined, 315 | Dust2_5 : undefined, 316 | Create_at : undefined 317 | } 318 | obj.SiteName = undefined; 319 | obj.LatLng = { 320 | lat : undefined, 321 | lng : undefined 322 | }; 323 | ProbeCube_LastData.push(obj); 324 | updateTools.check_write_ProbeCube(); 325 | }); 326 | }); 327 | }else{ 328 | console.log("[ProbeCube] Does not finish update, wait for next run."); 329 | } 330 | return; 331 | }, 332 | check_write_ProbeCube : function(){ 333 | if(ProbeCube_LastData.length === ProbeCube_RawData.length){ 334 | fs.writeFile(SaveDir + ProbeCube_writeFileName, JSON.stringify(ProbeCube_LastData), function(err){ 335 | if(err){ 336 | console.log(err); 337 | return; 338 | } 339 | console.log("[ProbeCube] Finished Writing."); 340 | ProbeCube_isFinished = true; 341 | }); 342 | } 343 | }, 344 | update_LASS : function(){ 345 | if(LASS_isFinished){ 346 | LASS_isFinished = false; 347 | LASS_LastData = []; 348 | httpTools.http_get_json('nrl.iis.sinica.edu.tw', '/LASS/last-all-lass.json', function(response){ 349 | if(response){ 350 | response.feeds.forEach(function(element, index, arrary){ 351 | var obj = {}; 352 | obj.SiteName = element.device_id; 353 | obj.SiteGroup = 'LASS'; 354 | obj.Maker = 'LASS'; 355 | obj.Data = { 356 | Temperature : element.s_t0, 357 | Humidity : element.s_h0, 358 | Dust2_5 : element.s_d0, 359 | Create_at : element.timestamp 360 | }; 361 | obj.LatLng = { 362 | lat : element.gps_lat, 363 | lng : element.gps_lon 364 | }; 365 | obj.RawData = element; 366 | LASS_LastData.push(obj); 367 | }); 368 | fs.writeFile(SaveDir + LASS_writeFileName, JSON.stringify(LASS_LastData), function(err){ 369 | if(err){ 370 | console.log(err); 371 | return; 372 | } 373 | console.log("[LASS] Finished Writing."); 374 | LASS_isFinished = true; 375 | }); 376 | }else{ 377 | LASS_isFinished = true; 378 | console.log("[LASS] At request \"nrl.iis.sinica.edu.tw/LASS/last-all-lass.json\" failed."); 379 | } 380 | }, function(err){ 381 | console.log(err); 382 | LASS_isFinished = true; 383 | console.log("[LASS] At request \"nrl.iis.sinica.edu.tw/LASS/last-all-lass.json\" failed."); 384 | }); 385 | }else{ 386 | console.log("[LASS] Does not finish update, wait for next run."); 387 | } 388 | }, 389 | update_LASS4U : function(){ 390 | if(LASS4U_isFinished){ 391 | LASS4U_isFinished = false; 392 | LASS4U_LastData = []; 393 | httpTools.http_get_json('nrl.iis.sinica.edu.tw', '/LASS/last-all-lass4u.json', function(response){ 394 | if(response){ 395 | response.feeds.forEach(function(element, index, arrary){ 396 | var obj = {}; 397 | obj.SiteName = element.device_id; 398 | obj.SiteGroup = 'LASS4U'; 399 | obj.Maker = 'LASS4U'; 400 | obj.Data = { 401 | Temperature : element.s_t0, 402 | Humidity : element.s_h0, 403 | Dust2_5 : element.s_d0, 404 | Create_at : element.timestamp 405 | }; 406 | obj.LatLng = { 407 | lat : element.gps_lat, 408 | lng : element.gps_lon 409 | }; 410 | obj.RawData = element; 411 | LASS4U_LastData.push(obj); 412 | }); 413 | fs.writeFile(SaveDir + LASS4U_writeFileName, JSON.stringify(LASS4U_LastData), function(err){ 414 | if(err){ 415 | console.log(err); 416 | return; 417 | } 418 | console.log("[LASS4U] Finished Writing."); 419 | LASS4U_isFinished = true; 420 | }); 421 | }else{ 422 | LASS4U_isFinished = true; 423 | console.log("[LASS4U] At request \"nrl.iis.sinica.edu.tw/LASS/last-all-lass4u.json\" failed."); 424 | } 425 | }, function(err){ 426 | console.log(err); 427 | LASS4U_isFinished = true; 428 | console.log("[LASS4U] At request \"nrl.iis.sinica.edu.tw/LASS/last-all-lass4u.json\" failed."); 429 | }); 430 | }else{ 431 | console.log("[LASS4U] Does not finish update, wait for next run."); 432 | } 433 | }, 434 | update_Webduino : function(){ 435 | if(Webduino_isFinished){ 436 | Webduino_isFinished = false; 437 | Webduino_LastData = []; 438 | httpTools.http_get_json('nrl.iis.sinica.edu.tw', '/LASS/last-all-webduino.json', function(response){ 439 | if(response){ 440 | response.feeds.forEach(function(element, index, arrary){ 441 | var obj = {}; 442 | obj.SiteName = element.SiteName; 443 | obj.SiteGroup = 'Webduino'; 444 | obj.Maker = 'Webduino'; 445 | obj.Data = { 446 | Temperature : undefined, 447 | Humidity : undefined, 448 | Dust2_5 : element.PM2_5, 449 | Create_at : element.timestamp 450 | }; 451 | obj.LatLng = { 452 | lat : element.gps_lat, 453 | lng : element.gps_lon 454 | }; 455 | obj.RawData = element; 456 | Webduino_LastData.push(obj); 457 | }); 458 | fs.writeFile(SaveDir + Webduino_writeFileName, JSON.stringify(Webduino_LastData), function(err){ 459 | if(err){ 460 | console.log(err); 461 | return; 462 | } 463 | console.log("[Webduino] Finished Writing."); 464 | Webduino_isFinished = true; 465 | }); 466 | }else{ 467 | Webduino_isFinished = true; 468 | console.log("[Webduino] At request \"nrl.iis.sinica.edu.tw/LASS/last-all-webduino.json\" failed."); 469 | } 470 | }, function(err){ 471 | console.log(err); 472 | Webduino_isFinished = true; 473 | console.log("[Webduino] At request \"nrl.iis.sinica.edu.tw/LASS/last-all-webduino.json\" failed."); 474 | }); 475 | }else{ 476 | console.log("[Webduino] Does not finish update, wait for next run."); 477 | } 478 | }, 479 | update_Airbox : function(){ 480 | if(Airbox_isFinished){ 481 | Airbox_isFinished = false; 482 | Airbox_LastData = []; 483 | httpTools.http_get_json('nrl.iis.sinica.edu.tw', '/LASS/last-all-airbox.json', function(response){ 484 | if(response){ 485 | response.feeds.forEach(function(element, index, arrary){ 486 | var obj = {}; 487 | obj.SiteName = element.SiteName; 488 | obj.SiteGroup = 'Airbox'; 489 | obj.Maker = 'Airbox'; 490 | obj.Data = { 491 | Temperature : element.s_t0, 492 | Humidity : element.s_h0, 493 | Dust2_5 : element.s_d0, 494 | Create_at : element.timestamp 495 | }; 496 | obj.LatLng = { 497 | lat : element.gps_lat, 498 | lng : element.gps_lon 499 | }; 500 | obj.RawData = element; 501 | Airbox_LastData.push(obj); 502 | }); 503 | fs.writeFile(SaveDir + Airbox_writeFileName, JSON.stringify(Airbox_LastData), function(err){ 504 | if(err){ 505 | console.log(err); 506 | return; 507 | } 508 | console.log("[Airbox] Finished Writing."); 509 | Airbox_isFinished = true; 510 | }); 511 | }else{ 512 | Airbox_isFinished = true; 513 | console.log("[Airbox] At request \"nrl.iis.sinica.edu.tw/LASS/last-all-airbox.json\" failed."); 514 | } 515 | }, function(err){ 516 | console.log(err); 517 | Airbox_isFinished = true; 518 | console.log("[Airbox] At request \"nrl.iis.sinica.edu.tw/LASS/last-all-airbox.json\" failed."); 519 | }); 520 | }else{ 521 | console.log("[Airbox] Does not finish update, wait for next run."); 522 | } 523 | }, 524 | load_Indie : function(callback){ 525 | fs.readFile( WorkDir + '/Data/Indie_RawData.json', function(err, data){ 526 | if(err){ 527 | console.log(err); 528 | return; 529 | } 530 | Indie_RawData = JSON.parse(data); 531 | callback(); 532 | }); 533 | }, 534 | update_Indie : function(){ 535 | if(Indie_isFinished){ 536 | Indie_LastData = []; 537 | Indie_isFinished = false; 538 | Indie_RawData.forEach(function(element, index, arrary){ 539 | httpTools.https_get_json('thingspeak.com', '/channels/' + element.Channel_id + '/feeds.json?results=1', function(response){ 540 | if (response) { 541 | var obj = element; 542 | if(response.channel){ 543 | obj.SiteName = response.channel.name; 544 | obj.LatLng = { 545 | lat : parseFloat(response.channel.latitude), 546 | lng : parseFloat(response.channel.longitude) 547 | }; 548 | }else{ 549 | obj.SiteName = undefined; 550 | obj.LatLng = { 551 | lat : undefined, 552 | lng : undefined 553 | }; 554 | } 555 | if(response && response != -1 && response.feeds && response.feeds[0]){ 556 | obj.RawData = response.feeds[0]; 557 | obj.Data = { 558 | Temperature : (element.Option.Temperature ? parseFloat(obj.RawData[element.Option.Temperature]) : undefined), 559 | Humidity : (element.Option.Humidity ? parseFloat(obj.RawData[element.Option.Humidity]) : undefined), 560 | Dust2_5 : (element.Option.Dust2_5 ? parseFloat(obj.RawData[element.Option.Dust2_5]) : undefined), 561 | Create_at : obj.RawData.created_at 562 | } 563 | }else{ 564 | obj.RawData = {}; 565 | obj.Data = { 566 | Temperature : undefined, 567 | Humidity : undefined, 568 | Dust2_5 : undefined, 569 | Create_at : undefined 570 | } 571 | } 572 | }else{ 573 | var obj = element; 574 | obj.SiteName = undefined; 575 | obj.LatLng = { 576 | lat : undefined, 577 | lng : undefined 578 | }; 579 | obj.RawData = {}; 580 | obj.Data = { 581 | Temperature : undefined, 582 | Humidity : undefined, 583 | Dust2_5 : undefined, 584 | Create_at : undefined 585 | }; 586 | console.log("[Indie] At request \"api.thingspeak.com/channels/" + element.Channel_id + "/feeds.json?results=1\" failed."); 587 | } 588 | Indie_LastData.push(obj); 589 | updateTools.check_write_Indie(); 590 | }, function(){ 591 | var obj = element; 592 | obj.RawData = {}; 593 | obj.Data = { 594 | Temperature : undefined, 595 | Humidity : undefined, 596 | Dust2_5 : undefined, 597 | Create_at : undefined 598 | } 599 | obj.SiteName = undefined; 600 | obj.LatLng = { 601 | lat : undefined, 602 | lng : undefined 603 | }; 604 | Indie_LastData.push(obj); 605 | updateTools.check_write_Indie(); 606 | }); 607 | }); 608 | }else{ 609 | console.log("[Indie] Does not finish update, wait for next run."); 610 | } 611 | }, 612 | check_write_Indie : function(){ 613 | if(Indie_LastData.length === Indie_RawData.length){ 614 | fs.writeFile(SaveDir + Indie_writeFileName, JSON.stringify(Indie_LastData), function(err){ 615 | if(err){ 616 | console.log(err); 617 | return; 618 | } 619 | console.log("[Indie] Finished Writing."); 620 | Indie_isFinished = true; 621 | }); 622 | } 623 | } 624 | }; 625 | 626 | /* Other Functions */ 627 | function parse_time(str, is_airbox){ 628 | var time = str.substring(0, 10) + " " + str.substring(11, 16) + ":00:00+08:00"; 629 | var return_obj = (new Date((new Date(time)).getTime() - (is_airbox ? 0 : 3600000))).toISOString(); 630 | return_obj = return_obj.substring(0, 19); 631 | return_obj += "Z"; 632 | return return_obj; 633 | } 634 | function Timerhandler(){ 635 | counter ++; 636 | updateTools.update_ProbeCube(); 637 | updateTools.update_LASS(); 638 | updateTools.update_LASS4U(); 639 | updateTools.update_Airbox(); 640 | updateTools.update_Indie(); 641 | updateTools.update_Webduino(); 642 | if(counter % 12 === 0){ 643 | updateTools.update_EPA(); 644 | } 645 | if(counter === 360){ 646 | counter = 0; 647 | } 648 | setTimeout(Timerhandler, 10000); 649 | } 650 | 651 | /* Process */ 652 | updateTools.load_EPA(updateTools.update_EPA); 653 | updateTools.load_ProbeCube(updateTools.update_ProbeCube); 654 | updateTools.load_Indie(updateTools.update_Indie); 655 | updateTools.update_LASS(); 656 | updateTools.update_LASS4U(); 657 | updateTools.update_Airbox(); 658 | updateTools.update_Webduino(); 659 | setTimeout(Timerhandler, 10000); -------------------------------------------------------------------------------- /Publish/Web/Data/EPA_last.json: -------------------------------------------------------------------------------- 1 | [{"SiteName":"大同監測站","Channel_id":87274,"LatLng":{"lng":121.513311,"lat":25.0632},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"8.21","County":"臺北市","FPMI":"7","MajorPollutant":"懸浮微粒","NO":"259.42","NO2":"69","NOx":"328.91","O3":"","PM10":"160","PM2.5":"65","PSI":"92","PublishTime":"2016-03-31 19:00","SiteName":"大同","SO2":"10","Status":"普通","WindDirec":"","WindSpeed":""},"Data":{"Dust2_5":65,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"基隆監測站","Channel_id":87258,"LatLng":{"lng":121.760056,"lat":25.129167},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"1.04","County":"基隆市","FPMI":"6","MajorPollutant":"懸浮微粒","NO":"24.63","NO2":"46","NOx":"70.41","O3":"1.6","PM10":"69","PM2.5":"52","PSI":"59","PublishTime":"2016-03-31 19:00","SiteName":"基隆","SO2":"5","Status":"普通","WindDirec":"265","WindSpeed":"0.8"},"Data":{"Dust2_5":52,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"板橋監測站","Channel_id":87264,"LatLng":{"lng":121.458667,"lat":25.012972},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"1.6","County":"新北市","FPMI":"9","MajorPollutant":"懸浮微粒","NO":"17.66","NO2":"61","NOx":"78.23","O3":"3.6","PM10":"160","PM2.5":"82","PSI":"92","PublishTime":"2016-03-31 19:00","SiteName":"板橋","SO2":"5.1","Status":"普通","WindDirec":"140","WindSpeed":"0.6"},"Data":{"Dust2_5":82,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"土城監測站","Channel_id":87263,"LatLng":{"lng":121.451861,"lat":24.982528},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"1.04","County":"新北市","FPMI":"9","MajorPollutant":"懸浮微粒","NO":"8.57","NO2":"48","NOx":"56.66","O3":"6.6","PM10":"144","PM2.5":"86","PSI":"84","PublishTime":"2016-03-31 19:00","SiteName":"土城","SO2":"4.3","Status":"普通","WindDirec":"143","WindSpeed":"1"},"Data":{"Dust2_5":86,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"士林監測站","Channel_id":87269,"LatLng":{"lng":121.515389,"lat":25.105417},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"1.16","County":"臺北市","FPMI":"5","MajorPollutant":"懸浮微粒","NO":"8.86","NO2":"59","NOx":"67.63","O3":"2.7","PM10":"136","PM2.5":"62","PSI":"82","PublishTime":"2016-03-31 19:00","SiteName":"士林","SO2":"2.3","Status":"普通","WindDirec":"114","WindSpeed":"0.7"},"Data":{"Dust2_5":62,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"新莊監測站","Channel_id":87265,"LatLng":{"lng":121.4325,"lat":25.037972},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"1.45","County":"新北市","FPMI":"7","MajorPollutant":"懸浮微粒","NO":"7.06","NO2":"62","NOx":"68.92","O3":"4","PM10":"146","PM2.5":"66","PSI":"84","PublishTime":"2016-03-31 19:00","SiteName":"新莊","SO2":"6.9","Status":"普通","WindDirec":"81","WindSpeed":"0.7"},"Data":{"Dust2_5":66,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"汐止監測站","Channel_id":87259,"LatLng":{"lng":121.6423,"lat":25.067131},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"1.15","County":"新北市","FPMI":"6","MajorPollutant":"懸浮微粒","NO":"9.17","NO2":"44","NOx":"53.22","O3":"10","PM10":"118","PM2.5":"60","PSI":"75","PublishTime":"2016-03-31 19:00","SiteName":"汐止","SO2":"2.7","Status":"普通","WindDirec":"184","WindSpeed":"0.6"},"Data":{"Dust2_5":60,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"菜寮監測站","Channel_id":87266,"LatLng":{"lng":121.481028,"lat":25.06895},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"1.73","County":"新北市","FPMI":"6","MajorPollutant":"懸浮微粒","NO":"15.79","NO2":"62","NOx":"77.71","O3":"2.5","PM10":"162","PM2.5":"68","PSI":"95","PublishTime":"2016-03-31 19:00","SiteName":"菜寮","SO2":"3.6","Status":"普通","WindDirec":"97","WindSpeed":"1"},"Data":{"Dust2_5":68,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"中山監測站","Channel_id":87270,"LatLng":{"lng":121.526528,"lat":25.062361},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"1.35","County":"臺北市","FPMI":"7","MajorPollutant":"懸浮微粒","NO":"15.42","NO2":"63","NOx":"78.09","O3":"2.1","PM10":"165","PM2.5":"65","PSI":"89","PublishTime":"2016-03-31 19:00","SiteName":"中山","SO2":"3.5","Status":"普通","WindDirec":"153","WindSpeed":"1.2"},"Data":{"Dust2_5":65,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"桃園監測站","Channel_id":87275,"LatLng":{"lng":121.319964,"lat":24.994789},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.91","County":"桃園市","FPMI":"8","MajorPollutant":"懸浮微粒","NO":"1.86","NO2":"48","NOx":"49.78","O3":"13","PM10":"139","PM2.5":"72","PSI":"83","PublishTime":"2016-03-31 19:00","SiteName":"桃園","SO2":"11","Status":"普通","WindDirec":"124","WindSpeed":"0.8"},"Data":{"Dust2_5":72,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"淡水監測站","Channel_id":87268,"LatLng":{"lng":121.449239,"lat":25.1645},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.82","County":"新北市","FPMI":"6","MajorPollutant":"懸浮微粒","NO":"1.8","NO2":"34","NOx":"36.22","O3":"17","PM10":"119","PM2.5":"51","PSI":"74","PublishTime":"2016-03-31 19:00","SiteName":"淡水","SO2":"1.5","Status":"普通","WindDirec":"","WindSpeed":""},"Data":{"Dust2_5":51,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"萬華監測站","Channel_id":87271,"LatLng":{"lng":121.507972,"lat":25.046503},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"1.36","County":"臺北市","FPMI":"7","MajorPollutant":"懸浮微粒","NO":"12.67","NO2":"55","NOx":"67.36","O3":"4.5","PM10":"146","PM2.5":"75","PSI":"86","PublishTime":"2016-03-31 19:00","SiteName":"萬華","SO2":"4.1","Status":"普通","WindDirec":"100","WindSpeed":"1.4"},"Data":{"Dust2_5":75,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"萬里監測站","Channel_id":87260,"LatLng":{"lng":121.689881,"lat":25.179667},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.4","County":"新北市","FPMI":"4","MajorPollutant":"懸浮微粒","NO":"1.8","NO2":"17","NOx":"19.27","O3":"36","PM10":"56","PM2.5":"33","PSI":"56","PublishTime":"2016-03-31 19:00","SiteName":"萬里","SO2":"3.4","Status":"普通","WindDirec":"36","WindSpeed":"0.7"},"Data":{"Dust2_5":33,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"觀音監測站","Channel_id":87279,"LatLng":{"lng":121.082761,"lat":25.035503},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.69","County":"桃園市","FPMI":"8","MajorPollutant":"懸浮微粒","NO":"2.36","NO2":"47","NOx":"49.14","O3":"15","PM10":"149","PM2.5":"81","PSI":"78","PublishTime":"2016-03-31 19:00","SiteName":"觀音","SO2":"6.7","Status":"普通","WindDirec":"97","WindSpeed":"0.8"},"Data":{"Dust2_5":81,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"林口監測站","Channel_id":87267,"LatLng":{"lng":121.376869,"lat":25.077197},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"1.14","County":"新北市","FPMI":"7","MajorPollutant":"懸浮微粒","NO":"19.41","NO2":"63","NOx":"82.25","O3":"2.5","PM10":"142","PM2.5":"74","PSI":"81","PublishTime":"2016-03-31 19:00","SiteName":"林口","SO2":"8.6","Status":"普通","WindDirec":"133","WindSpeed":"1.6"},"Data":{"Dust2_5":74,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"新店監測站","Channel_id":87262,"LatLng":{"lng":121.537778,"lat":24.977222},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"","County":"新北市","FPMI":"7","MajorPollutant":"懸浮微粒","NO":"","NO2":"","NOx":"","O3":"8","PM10":"114","PM2.5":"60","PSI":"79","PublishTime":"2016-03-31 19:00","SiteName":"新店","SO2":"2.7","Status":"普通","WindDirec":"151","WindSpeed":"2.7"},"Data":{"Dust2_5":60,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"松山監測站","Channel_id":87273,"LatLng":{"lng":121.578611,"lat":25.05},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"1.28","County":"臺北市","FPMI":"8","MajorPollutant":"懸浮微粒","NO":"19.94","NO2":"57","NOx":"77.35","O3":"4.5","PM10":"147","PM2.5":"70","PSI":"89","PublishTime":"2016-03-31 19:00","SiteName":"松山","SO2":"3.3","Status":"普通","WindDirec":"59","WindSpeed":"0.8"},"Data":{"Dust2_5":70,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"古亭監測站","Channel_id":87272,"LatLng":{"lng":121.529556,"lat":25.020608},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"1.58","County":"臺北市","FPMI":"9","MajorPollutant":"","NO":"27.14","NO2":"56","NOx":"83.38","O3":"3.7","PM10":"","PM2.5":"84","PSI":"0","PublishTime":"2016-03-31 19:00","SiteName":"古亭","SO2":"3.6","Status":"","WindDirec":"120","WindSpeed":"1.3"},"Data":{"Dust2_5":84,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"竹東監測站","Channel_id":87283,"LatLng":{"lng":121.088903,"lat":24.740644},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.71","County":"新竹縣","FPMI":"9","MajorPollutant":"懸浮微粒","NO":"1.84","NO2":"28","NOx":"30.29","O3":"19","PM10":"146","PM2.5":"83","PSI":"84","PublishTime":"2016-03-31 19:00","SiteName":"竹東","SO2":"3.7","Status":"普通","WindDirec":"160","WindSpeed":"0.9"},"Data":{"Dust2_5":83,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"頭份監測站","Channel_id":87285,"LatLng":{"lng":120.898572,"lat":24.696969},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.67","County":"苗栗縣","FPMI":"5","MajorPollutant":"懸浮微粒","NO":".83","NO2":"26","NOx":"27.1","O3":"35","PM10":"112","PM2.5":"52","PSI":"77","PublishTime":"2016-03-31 19:00","SiteName":"頭份","SO2":"3.4","Status":"普通","WindDirec":"78","WindSpeed":"0.9"},"Data":{"Dust2_5":52,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"大園監測站","Channel_id":87278,"LatLng":{"lng":121.201811,"lat":25.060344},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.77","County":"桃園市","FPMI":"7","MajorPollutant":"懸浮微粒","NO":"1.33","NO2":"50","NOx":"51.81","O3":"11","PM10":"158","PM2.5":"68","PSI":"82","PublishTime":"2016-03-31 19:00","SiteName":"大園","SO2":"4.8","Status":"普通","WindDirec":"135","WindSpeed":"1.4"},"Data":{"Dust2_5":68,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"龍潭監測站","Channel_id":87281,"LatLng":{"lng":121.21635,"lat":24.863869},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.68","County":"桃園市","FPMI":"10","MajorPollutant":"懸浮微粒","NO":"1.99","NO2":"27","NOx":"29.16","O3":"28","PM10":"121","PM2.5":"73","PSI":"84","PublishTime":"2016-03-31 19:00","SiteName":"龍潭","SO2":"4","Status":"普通","WindDirec":"47","WindSpeed":"0.5"},"Data":{"Dust2_5":73,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"湖口監測站","Channel_id":87282,"LatLng":{"lng":121.038653,"lat":24.900142},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.65","County":"新竹縣","FPMI":"7","MajorPollutant":"懸浮微粒","NO":"1.57","NO2":"36","NOx":"38","O3":"25","PM10":"120","PM2.5":"66","PSI":"72","PublishTime":"2016-03-31 19:00","SiteName":"湖口","SO2":"4.8","Status":"普通","WindDirec":"121","WindSpeed":"2.1"},"Data":{"Dust2_5":66,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"平鎮監測站","Channel_id":87280,"LatLng":{"lng":121.203986,"lat":24.952786},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.93","County":"桃園市","FPMI":"8","MajorPollutant":"懸浮微粒","NO":"2.72","NO2":"48","NOx":"50.25","O3":"18","PM10":"158","PM2.5":"65","PSI":"86","PublishTime":"2016-03-31 19:00","SiteName":"平鎮","SO2":"6.5","Status":"普通","WindDirec":"169","WindSpeed":"1.8"},"Data":{"Dust2_5":65,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"豐原監測站","Channel_id":87291,"LatLng":{"lng":120.741711,"lat":24.256586},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.7","County":"臺中市","FPMI":"8","MajorPollutant":"懸浮微粒","NO":"1.16","NO2":"28","NOx":"29.01","O3":"27","PM10":"84","PM2.5":"60","PSI":"64","PublishTime":"2016-03-31 19:00","SiteName":"豐原","SO2":"5.4","Status":"普通","WindDirec":"109","WindSpeed":"1.4"},"Data":{"Dust2_5":60,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"三義監測站","Channel_id":87288,"LatLng":{"lng":120.758833,"lat":24.382942},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.34","County":"苗栗縣","FPMI":"3","MajorPollutant":"懸浮微粒","NO":".84","NO2":"7.5","NOx":"8.34","O3":"39","PM10":"59","PM2.5":"29","PSI":"62","PublishTime":"2016-03-31 19:00","SiteName":"三義","SO2":"3","Status":"普通","WindDirec":"218","WindSpeed":"1.3"},"Data":{"Dust2_5":29,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"沙鹿監測站","Channel_id":87292,"LatLng":{"lng":120.568794,"lat":24.225628},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.73","County":"臺中市","FPMI":"8","MajorPollutant":"懸浮微粒","NO":"1.15","NO2":"29","NOx":"30.33","O3":"25","PM10":"70","PM2.5":"42","PSI":"73","PublishTime":"2016-03-31 19:00","SiteName":"沙鹿","SO2":"5.8","Status":"普通","WindDirec":"154","WindSpeed":"1.5"},"Data":{"Dust2_5":42,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"大里監測站","Channel_id":87293,"LatLng":{"lng":120.677689,"lat":24.099611},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.66","County":"臺中市","FPMI":"5","MajorPollutant":"懸浮微粒","NO":"2.84","NO2":"26","NOx":"28.76","O3":"30","PM10":"93","PM2.5":"28","PSI":"80","PublishTime":"2016-03-31 19:00","SiteName":"大里","SO2":"4.5","Status":"普通","WindDirec":"226","WindSpeed":"0.9"},"Data":{"Dust2_5":28,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"苗栗監測站","Channel_id":87287,"LatLng":{"lng":120.8202,"lat":24.565269},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.79","County":"苗栗縣","FPMI":"8","MajorPollutant":"懸浮微粒","NO":"2.69","NO2":"31","NOx":"34.07","O3":"29","PM10":"115","PM2.5":"61","PSI":"82","PublishTime":"2016-03-31 19:00","SiteName":"苗栗","SO2":"4","Status":"普通","WindDirec":"19","WindSpeed":"0.8"},"Data":{"Dust2_5":61,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"西屯監測站","Channel_id":87295,"LatLng":{"lng":120.616917,"lat":24.162197},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.94","County":"臺中市","FPMI":"6","MajorPollutant":"懸浮微粒","NO":"5.66","NO2":"55","NOx":"60.57","O3":"8.2","PM10":"76","PM2.5":"51","PSI":"64","PublishTime":"2016-03-31 19:00","SiteName":"西屯","SO2":"15","Status":"普通","WindDirec":"115","WindSpeed":"0.5"},"Data":{"Dust2_5":51,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"線西監測站","Channel_id":87297,"LatLng":{"lng":120.469061,"lat":24.131672},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.49","County":"彰化縣","FPMI":"10","MajorPollutant":"懸浮微粒","NO":"1.42","NO2":"22","NOx":"23.61","O3":"40","PM10":"102","PM2.5":"68","PSI":"78","PublishTime":"2016-03-31 19:00","SiteName":"線西","SO2":"5.8","Status":"普通","WindDirec":"152","WindSpeed":"1.2"},"Data":{"Dust2_5":68,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"忠明監測站","Channel_id":87294,"LatLng":{"lng":120.641092,"lat":24.151958},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.74","County":"臺中市","FPMI":"5","MajorPollutant":"懸浮微粒","NO":"2.45","NO2":"35","NOx":"37.38","O3":"25","PM10":"75","PM2.5":"37","PSI":"69","PublishTime":"2016-03-31 19:00","SiteName":"忠明","SO2":"5.4","Status":"普通","WindDirec":"170","WindSpeed":"1.1"},"Data":{"Dust2_5":37,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"二林監測站","Channel_id":87298,"LatLng":{"lng":120.409653,"lat":23.925175},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.35","County":"彰化縣","FPMI":"8","MajorPollutant":"懸浮微粒","NO":".87","NO2":"8.7","NOx":"9.53","O3":"54","PM10":"77","PM2.5":"45","PSI":"74","PublishTime":"2016-03-31 19:00","SiteName":"二林","SO2":"3.7","Status":"普通","WindDirec":"226","WindSpeed":"0.8"},"Data":{"Dust2_5":45,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"崙背監測站","Channel_id":87301,"LatLng":{"lng":120.348742,"lat":23.757547},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.38","County":"雲林縣","FPMI":"9","MajorPollutant":"懸浮微粒","NO":"0","NO2":"9.4","NOx":"9.43","O3":"56","PM10":"81","PM2.5":"62","PSI":"77","PublishTime":"2016-03-31 19:00","SiteName":"崙背","SO2":"1.6","Status":"普通","WindDirec":"358","WindSpeed":"1.5"},"Data":{"Dust2_5":62,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"斗六監測站","Channel_id":87300,"LatLng":{"lng":120.544994,"lat":23.711853},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.48","County":"雲林縣","FPMI":"9","MajorPollutant":"懸浮微粒","NO":"2.43","NO2":"17","NOx":"19.51","O3":"46","PM10":"92","PM2.5":"64","PSI":"76","PublishTime":"2016-03-31 19:00","SiteName":"斗六","SO2":"2.3","Status":"普通","WindDirec":"43","WindSpeed":"1.1"},"Data":{"Dust2_5":64,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"朴子監測站","Channel_id":87303,"LatLng":{"lng":120.24735,"lat":23.465308},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.47","County":"嘉義縣","FPMI":"10","MajorPollutant":"懸浮微粒","NO":".87","NO2":"15","NOx":"15.71","O3":"45","PM10":"113","PM2.5":"64","PSI":"86","PublishTime":"2016-03-31 19:00","SiteName":"朴子","SO2":"2.3","Status":"普通","WindDirec":"286","WindSpeed":"1"},"Data":{"Dust2_5":64,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"南投監測站","Channel_id":87299,"LatLng":{"lng":120.685306,"lat":23.913},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.66","County":"南投縣","FPMI":"7","MajorPollutant":"懸浮微粒","NO":"2.69","NO2":"25","NOx":"27.45","O3":"36","PM10":"112","PM2.5":"55","PSI":"78","PublishTime":"2016-03-31 19:00","SiteName":"南投","SO2":"3.2","Status":"普通","WindDirec":"301","WindSpeed":"1.3"},"Data":{"Dust2_5":55,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"臺西監測站","Channel_id":87304,"LatLng":{"lng":120.202842,"lat":23.717533},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.37","County":"雲林縣","FPMI":"9","MajorPollutant":"懸浮微粒","NO":"1.19","NO2":"11","NOx":"12.44","O3":"63","PM10":"87","PM2.5":"70","PSI":"70","PublishTime":"2016-03-31 19:00","SiteName":"臺西","SO2":"3.3","Status":"普通","WindDirec":"63","WindSpeed":"2.4"},"Data":{"Dust2_5":70,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"彰化監測站","Channel_id":87296,"LatLng":{"lng":120.541519,"lat":24.066},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.78","County":"彰化縣","FPMI":"7","MajorPollutant":"懸浮微粒","NO":"3.27","NO2":"28","NOx":"31.67","O3":"26","PM10":"81","PM2.5":"39","PSI":"76","PublishTime":"2016-03-31 19:00","SiteName":"彰化","SO2":"6.4","Status":"普通","WindDirec":"140","WindSpeed":"1"},"Data":{"Dust2_5":39,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"橋頭監測站","Channel_id":87311,"LatLng":{"lng":120.305689,"lat":22.757506},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.57","County":"高雄市","FPMI":"2","MajorPollutant":"懸浮微粒","NO":"1.32","NO2":"23","NOx":"24.78","O3":"50","PM10":"74","PM2.5":"30","PSI":"51","PublishTime":"2016-03-31 19:00","SiteName":"橋頭","SO2":"3.7","Status":"普通","WindDirec":"288","WindSpeed":"1.9"},"Data":{"Dust2_5":30,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"新港監測站","Channel_id":87302,"LatLng":{"lng":120.345531,"lat":23.554839},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.4","County":"嘉義縣","FPMI":"8","MajorPollutant":"懸浮微粒","NO":"1.47","NO2":"17","NOx":"18.54","O3":"50","PM10":"104","PM2.5":"55","PSI":"85","PublishTime":"2016-03-31 19:00","SiteName":"新港","SO2":"5.1","Status":"普通","WindDirec":"324","WindSpeed":"1.4"},"Data":{"Dust2_5":55,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"嘉義監測站","Channel_id":87305,"LatLng":{"lng":120.440833,"lat":23.462778},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.65","County":"嘉義市","FPMI":"6","MajorPollutant":"懸浮微粒","NO":".47","NO2":"27","NOx":"27.94","O3":"44","PM10":"99","PM2.5":"62","PSI":"69","PublishTime":"2016-03-31 19:00","SiteName":"嘉義","SO2":"6.3","Status":"普通","WindDirec":"300","WindSpeed":"1.3"},"Data":{"Dust2_5":62,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"安南監測站","Channel_id":87308,"LatLng":{"lng":120.2175,"lat":23.048197},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.43","County":"臺南市","FPMI":"9","MajorPollutant":"懸浮微粒","NO":".24","NO2":"12","NOx":"11.98","O3":"45","PM10":"69","PM2.5":"59","PSI":"68","PublishTime":"2016-03-31 19:00","SiteName":"安南","SO2":"2.8","Status":"普通","WindDirec":"312","WindSpeed":"1.7"},"Data":{"Dust2_5":59,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"善化監測站","Channel_id":87307,"LatLng":{"lng":120.297142,"lat":23.115097},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.4","County":"臺南市","FPMI":"6","MajorPollutant":"懸浮微粒","NO":".02","NO2":"13","NOx":"13.05","O3":"47","PM10":"71","PM2.5":"52","PSI":"62","PublishTime":"2016-03-31 19:00","SiteName":"善化","SO2":"2","Status":"普通","WindDirec":"326","WindSpeed":"1.4"},"Data":{"Dust2_5":52,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"大寮監測站","Channel_id":87314,"LatLng":{"lng":120.425081,"lat":22.565747},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.68","County":"高雄市","FPMI":"3","MajorPollutant":"","NO":"1.35","NO2":"25","NOx":"26.66","O3":"50","PM10":"63","PM2.5":"42","PSI":"50","PublishTime":"2016-03-31 19:00","SiteName":"大寮","SO2":"3.1","Status":"良好","WindDirec":"251","WindSpeed":"1.7"},"Data":{"Dust2_5":42,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"鳳山監測站","Channel_id":87313,"LatLng":{"lng":120.358083,"lat":22.627392},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.88","County":"高雄市","FPMI":"3","MajorPollutant":"懸浮微粒","NO":".58","NO2":"22","NOx":"22.28","O3":"51","PM10":"86","PM2.5":"39","PSI":"56","PublishTime":"2016-03-31 19:00","SiteName":"鳳山","SO2":"3.9","Status":"普通","WindDirec":"297","WindSpeed":"1.4"},"Data":{"Dust2_5":39,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"臺南監測站","Channel_id":87309,"LatLng":{"lng":120.202617,"lat":22.984581},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.6","County":"臺南市","FPMI":"","MajorPollutant":"懸浮微粒","NO":".66","NO2":"17","NOx":"17.38","O3":"53","PM10":"57","PM2.5":"46","PSI":"52","PublishTime":"2016-03-31 19:00","SiteName":"臺南","SO2":"2.3","Status":"普通","WindDirec":"321","WindSpeed":"2.2"},"Data":{"Dust2_5":46,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"仁武監測站","Channel_id":87312,"LatLng":{"lng":120.332631,"lat":22.689056},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.61","County":"高雄市","FPMI":"3","MajorPollutant":"懸浮微粒","NO":"1.4","NO2":"37","NOx":"38.36","O3":"45","PM10":"73","PM2.5":"49","PSI":"52","PublishTime":"2016-03-31 19:00","SiteName":"仁武","SO2":"4.2","Status":"普通","WindDirec":"310","WindSpeed":"1.9"},"Data":{"Dust2_5":49,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"美濃監測站","Channel_id":87310,"LatLng":{"lng":120.530542,"lat":22.883583},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.42","County":"高雄市","FPMI":"3","MajorPollutant":"","NO":"1.26","NO2":"14","NOx":"14.9","O3":"58","PM10":"57","PM2.5":"41","PSI":"48","PublishTime":"2016-03-31 19:00","SiteName":"美濃","SO2":"4.1","Status":"良好","WindDirec":"282","WindSpeed":"2"},"Data":{"Dust2_5":41,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"前鎮監測站","Channel_id":87319,"LatLng":{"lng":120.307564,"lat":22.605386},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.83","County":"高雄市","FPMI":"3","MajorPollutant":"懸浮微粒","NO":"1.64","NO2":"23","NOx":"24.92","O3":"56","PM10":"68","PM2.5":"42","PSI":"52","PublishTime":"2016-03-31 19:00","SiteName":"前鎮","SO2":"3.2","Status":"普通","WindDirec":"309","WindSpeed":"2.1"},"Data":{"Dust2_5":42,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"楠梓監測站","Channel_id":87316,"LatLng":{"lng":120.328289,"lat":22.733667},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.71","County":"高雄市","FPMI":"3","MajorPollutant":"懸浮微粒","NO":"","NO2":"","NOx":"","O3":"55","PM10":"108","PM2.5":"32","PSI":"64","PublishTime":"2016-03-31 19:00","SiteName":"楠梓","SO2":"3.2","Status":"普通","WindDirec":"295","WindSpeed":"1.6"},"Data":{"Dust2_5":32,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"新營監測站","Channel_id":87306,"LatLng":{"lng":120.31725,"lat":23.305633},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.47","County":"臺南市","FPMI":"8","MajorPollutant":"懸浮微粒","NO":".62","NO2":"17","NOx":"18.07","O3":"41","PM10":"97","PM2.5":"51","PSI":"73","PublishTime":"2016-03-31 19:00","SiteName":"新營","SO2":"2.8","Status":"普通","WindDirec":"3.9","WindSpeed":"1.3"},"Data":{"Dust2_5":51,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"潮州監測站","Channel_id":87322,"LatLng":{"lng":120.561175,"lat":22.523108},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.46","County":"屏東縣","FPMI":"1","MajorPollutant":"","NO":"1.3","NO2":"18","NOx":"19.4","O3":"39","PM10":"48","PM2.5":"12","PSI":"32","PublishTime":"2016-03-31 19:00","SiteName":"潮州","SO2":"3.2","Status":"良好","WindDirec":"300","WindSpeed":"1.9"},"Data":{"Dust2_5":12,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"左營監測站","Channel_id":87317,"LatLng":{"lng":120.292917,"lat":22.674861},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.4","County":"高雄市","FPMI":"3","MajorPollutant":"臭氧","NO":".79","NO2":"11","NOx":"12.09","O3":"77","PM10":"86","PM2.5":"42","PSI":"64","PublishTime":"2016-03-31 19:00","SiteName":"左營","SO2":"5","Status":"普通","WindDirec":"314","WindSpeed":"2.2"},"Data":{"Dust2_5":42,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"前金監測站","Channel_id":87318,"LatLng":{"lng":120.288086,"lat":22.632567},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.59","County":"高雄市","FPMI":"3","MajorPollutant":"臭氧","NO":".38","NO2":"15","NOx":"15.62","O3":"72","PM10":"95","PM2.5":"46","PSI":"60","PublishTime":"2016-03-31 19:00","SiteName":"前金","SO2":"4.1","Status":"普通","WindDirec":"323","WindSpeed":"2.1"},"Data":{"Dust2_5":46,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"恆春監測站","Channel_id":87323,"LatLng":{"lng":120.788928,"lat":21.958069},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.22","County":"屏東縣","FPMI":"2","MajorPollutant":"","NO":"1.58","NO2":"1.8","NOx":"3.34","O3":"51","PM10":"36","PM2.5":"11","PSI":"42","PublishTime":"2016-03-31 19:00","SiteName":"恆春","SO2":"1","Status":"良好","WindDirec":"320","WindSpeed":"4.4"},"Data":{"Dust2_5":11,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"屏東監測站","Channel_id":87321,"LatLng":{"lng":120.488033,"lat":22.673081},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.63","County":"屏東縣","FPMI":"3","MajorPollutant":"懸浮微粒","NO":"1.23","NO2":"23","NOx":"23.8","O3":"52","PM10":"82","PM2.5":"48","PSI":"54","PublishTime":"2016-03-31 19:00","SiteName":"屏東","SO2":"3.9","Status":"普通","WindDirec":"295","WindSpeed":"1.7"},"Data":{"Dust2_5":48,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"林園監測站","Channel_id":87315,"LatLng":{"lng":120.41175,"lat":22.4795},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.53","County":"高雄市","FPMI":"3","MajorPollutant":"","NO":".37","NO2":"25","NOx":"25.73","O3":"51","PM10":"49","PM2.5":"45","PSI":"43","PublishTime":"2016-03-31 19:00","SiteName":"林園","SO2":"14","Status":"良好","WindDirec":"318","WindSpeed":"1.8"},"Data":{"Dust2_5":45,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"新竹監測站","Channel_id":87284,"LatLng":{"lng":120.972075,"lat":24.805619},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.75","County":"新竹市","FPMI":"7","MajorPollutant":"懸浮微粒","NO":"1.55","NO2":"38","NOx":"39.37","O3":"23","PM10":"114","PM2.5":"59","PSI":"76","PublishTime":"2016-03-31 19:00","SiteName":"新竹","SO2":"3.7","Status":"普通","WindDirec":"85","WindSpeed":"1.3"},"Data":{"Dust2_5":59,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"小港監測站","Channel_id":87320,"LatLng":{"lng":120.337736,"lat":22.565833},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.63","County":"高雄市","FPMI":"4","MajorPollutant":"懸浮微粒","NO":"-.41","NO2":"28","NOx":"27.78","O3":"43","PM10":"89","PM2.5":"43","PSI":"58","PublishTime":"2016-03-31 19:00","SiteName":"小港","SO2":"5.8","Status":"普通","WindDirec":"308","WindSpeed":"2.5"},"Data":{"Dust2_5":43,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"陽明監測站","Channel_id":87326,"LatLng":{"lng":121.529583,"lat":25.182722},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.3","County":"臺北市","FPMI":"2","MajorPollutant":"","NO":".32","NO2":"1.4","NOx":"1.7","O3":"49","PM10":"20","PM2.5":"17","PSI":"41","PublishTime":"2016-03-31 19:00","SiteName":"陽明","SO2":"1.1","Status":"良好","WindDirec":"","WindSpeed":""},"Data":{"Dust2_5":17,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"花蓮監測站","Channel_id":87325,"LatLng":{"lng":121.599769,"lat":23.971306},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.5","County":"花蓮縣","FPMI":"2","MajorPollutant":"懸浮微粒","NO":".87","NO2":"11","NOx":"11.4","O3":"56","PM10":"71","PM2.5":"29","PSI":"51","PublishTime":"2016-03-31 19:00","SiteName":"花蓮","SO2":"1.7","Status":"普通","WindDirec":"47","WindSpeed":"2.2"},"Data":{"Dust2_5":29,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"臺東監測站","Channel_id":87324,"LatLng":{"lng":121.15045,"lat":22.755358},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.41","County":"臺東縣","FPMI":"","MajorPollutant":"","NO":"2.03","NO2":"5.1","NOx":"7.1","O3":"34","PM10":"33","PM2.5":"14","PSI":"0","PublishTime":"2016-03-31 15:00","SiteName":"臺東","SO2":"0.8","Status":"","WindDirec":"201","WindSpeed":"3.1"},"Data":{"Dust2_5":14,"Create_at":"2016-03-31T06:00:00Z"}},{"SiteName":"三重監測站","Channel_id":87329,"LatLng":{"lng":121.493806,"lat":25.072611},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"2.91","County":"新北市","FPMI":"7","MajorPollutant":"懸浮微粒","NO":"83.93","NO2":"64","NOx":"147.49","O3":"","PM10":"188","PM2.5":"66","PSI":"100","PublishTime":"2016-03-31 19:00","SiteName":"三重","SO2":"5","Status":"普通","WindDirec":"","WindSpeed":""},"Data":{"Dust2_5":66,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"中壢監測站","Channel_id":87330,"LatLng":{"lng":121.221667,"lat":24.953278},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"3.35","County":"桃園市","FPMI":"8","MajorPollutant":"懸浮微粒","NO":"68.23","NO2":"61","NOx":"129.24","O3":"7.2","PM10":"186","PM2.5":"69","PSI":"94","PublishTime":"2016-03-31 19:00","SiteName":"中壢","SO2":"7","Status":"普通","WindDirec":"188","WindSpeed":"1.4"},"Data":{"Dust2_5":69,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"宜蘭監測站","Channel_id":87327,"LatLng":{"lng":121.746394,"lat":24.747917},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.57","County":"宜蘭縣","FPMI":"3","MajorPollutant":"懸浮微粒","NO":".98","NO2":"17","NOx":"18.27","O3":"37","PM10":"61","PM2.5":"29","PSI":"53","PublishTime":"2016-03-31 19:00","SiteName":"宜蘭","SO2":"2.7","Status":"普通","WindDirec":"185","WindSpeed":"0.5"},"Data":{"Dust2_5":29,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"復興監測站","Channel_id":87333,"LatLng":{"lng":120.312017,"lat":22.608711},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.89","County":"高雄市","FPMI":"4","MajorPollutant":"臭氧","NO":"1.15","NO2":"23","NOx":"23.87","O3":"63","PM10":"74","PM2.5":"44","PSI":"53","PublishTime":"2016-03-31 19:00","SiteName":"復興","SO2":"3.9","Status":"普通","WindDirec":"250","WindSpeed":"1.1"},"Data":{"Dust2_5":44,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"馬祖監測站","Channel_id":87335,"LatLng":{"lng":119.949875,"lat":26.160469},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.42","County":"連江縣","FPMI":"8","MajorPollutant":"懸浮微粒","NO":"2.34","NO2":"17","NOx":"18.87","O3":"50","PM10":"63","PM2.5":"50","PSI":"64","PublishTime":"2016-03-31 19:00","SiteName":"馬祖","SO2":"2.1","Status":"普通","WindDirec":"61","WindSpeed":"2.2"},"Data":{"Dust2_5":50,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"埔里監測站","Channel_id":87334,"LatLng":{"lng":120.967903,"lat":23.968842},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.45","County":"南投縣","FPMI":"6","MajorPollutant":"懸浮微粒","NO":".71","NO2":"14","NOx":"14.38","O3":"48","PM10":"85","PM2.5":"49","PSI":"63","PublishTime":"2016-03-31 19:00","SiteName":"埔里","SO2":"0","Status":"普通","WindDirec":"296","WindSpeed":"2.1"},"Data":{"Dust2_5":49,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"永和監測站","Channel_id":87332,"LatLng":{"lng":121.516306,"lat":25.017},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"1.42","County":"新北市","FPMI":"7","MajorPollutant":"懸浮微粒","NO":"17.76","NO2":"52","NOx":"69.77","O3":"6.8","PM10":"109","PM2.5":"60","PSI":"81","PublishTime":"2016-03-31 19:00","SiteName":"永和","SO2":"3.1","Status":"普通","WindDirec":"119","WindSpeed":"1.1"},"Data":{"Dust2_5":60,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"金門監測站","Channel_id":87336,"LatLng":{"lng":118.312256,"lat":24.432133},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.49","County":"金門縣","FPMI":"9","MajorPollutant":"","NO":"1.57","NO2":"26","NOx":"27.47","O3":"53","PM10":"101","PM2.5":"70","PSI":"0","PublishTime":"2016-03-31 19:00","SiteName":"金門","SO2":"5.5","Status":"","WindDirec":"35","WindSpeed":"2.4"},"Data":{"Dust2_5":70,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"馬公監測站","Channel_id":87337,"LatLng":{"lng":119.566158,"lat":23.569031},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.46","County":"澎湖縣","FPMI":"4","MajorPollutant":"懸浮微粒","NO":".64","NO2":"8.7","NOx":"9.38","O3":"54","PM10":"58","PM2.5":"37","PSI":"60","PublishTime":"2016-03-31 19:00","SiteName":"馬公","SO2":"1.7","Status":"普通","WindDirec":"45","WindSpeed":"1.3"},"Data":{"Dust2_5":37,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"麥寮監測站","Channel_id":87340,"LatLng":{"lng":120.251825,"lat":23.753506},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.45","County":"雲林縣","FPMI":"9","MajorPollutant":"懸浮微粒","NO":"1.37","NO2":"11","NOx":"11.87","O3":"57","PM10":"115","PM2.5":"64","PSI":"104","PublishTime":"2016-03-31 19:00","SiteName":"麥寮","SO2":"2.2","Status":"不良","WindDirec":"41","WindSpeed":"1.2"},"Data":{"Dust2_5":64,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"關山監測站","Channel_id":87338,"LatLng":{"lng":121.161933,"lat":23.045083},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"","County":"臺東縣","FPMI":"2","MajorPollutant":"","NO":"1.27","NO2":"6.2","NOx":"7.5","O3":"29","PM10":"39","PM2.5":"15","PSI":"33","PublishTime":"2016-03-31 19:00","SiteName":"關山","SO2":"1.5","Status":"良好","WindDirec":"57","WindSpeed":"1.6"},"Data":{"Dust2_5":15,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"竹山監測站","Channel_id":87331,"LatLng":{"lng":120.677306,"lat":23.756389},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.39","County":"南投縣","FPMI":"7","MajorPollutant":"懸浮微粒","NO":"1","NO2":"14","NOx":"15.42","O3":"51","PM10":"103","PM2.5":"60","PSI":"75","PublishTime":"2016-03-31 19:00","SiteName":"竹山","SO2":"4.7","Status":"普通","WindDirec":"307","WindSpeed":"1.4"},"Data":{"Dust2_5":60,"Create_at":"2016-03-31T10:00:00Z"}},{"SiteName":"冬山監測站","Channel_id":87328,"LatLng":{"lng":121.792928,"lat":24.632203},"SiteGroup":"EPA","Maker":"EPA","RawData":{"CO":"0.52","County":"宜蘭縣","FPMI":"3","MajorPollutant":"懸浮微粒","NO":"1.92","NO2":"22","NOx":"23.44","O3":"30","PM10":"77","PM2.5":"32","PSI":"62","PublishTime":"2016-03-31 19:00","SiteName":"冬山","SO2":"3.3","Status":"普通","WindDirec":"76","WindSpeed":"1.3"},"Data":{"Dust2_5":32,"Create_at":"2016-03-31T10:00:00Z"}}] -------------------------------------------------------------------------------- /Publish/Web/Data/Airbox_last.json: -------------------------------------------------------------------------------- 1 | [{"SiteName":"東新國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.12,"Humidity":73,"Dust2_5":61,"Create_at":"2016-03-30T13:06:59Z"},"LatLng":{"lat":25.055,"lng":121.603},"RawData":{"device_id":"28C2DDDD41ED","timestamp":"2016-03-30T13:06:59Z","SiteName":"東新國小","s_d0":61,"s_t0":22.12,"s_h0":73,"gps_lat":25.055,"gps_lon":121.603,"gps_num":9}},{"SiteName":"南門國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22,"Humidity":76,"Dust2_5":69,"Create_at":"2016-03-30T14:04:25Z"},"LatLng":{"lat":25.035,"lng":121.509},"RawData":{"device_id":"28C2DDDD4785","timestamp":"2016-03-30T14:04:25Z","SiteName":"南門國小","s_d0":69,"s_t0":22,"s_h0":76,"gps_lat":25.035,"gps_lon":121.509,"gps_num":9}},{"SiteName":"IIS02","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":20.75,"Humidity":84,"Dust2_5":52,"Create_at":"2016-03-30T16:09:17Z"},"LatLng":{"lat":25.04,"lng":121.614},"RawData":{"device_id":"28C2DDDD4592","timestamp":"2016-03-30T16:09:17Z","SiteName":"IIS02","s_d0":52,"s_t0":20.75,"s_h0":84,"gps_lat":25.04,"gps_lon":121.614,"gps_num":9}},{"SiteName":"28C2DDDD434C","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.5,"Humidity":78,"Dust2_5":31,"Create_at":"2016-03-30T22:53:22Z"},"LatLng":{"lat":25.057,"lng":121.521},"RawData":{"device_id":"28C2DDDD434C","timestamp":"2016-03-30T22:53:22Z","SiteName":"28C2DDDD434C","s_d0":31,"s_t0":23.5,"s_h0":78,"gps_lat":25.057,"gps_lon":121.521,"gps_num":9}},{"SiteName":"南港國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22,"Humidity":148,"Dust2_5":71,"Create_at":"2016-03-31T05:46:23Z"},"LatLng":{"lat":25.056,"lng":121.609},"RawData":{"device_id":"28C2DDDD4367","timestamp":"2016-03-31T05:46:23Z","SiteName":"南港國小","s_d0":71,"s_t0":22,"s_h0":148,"gps_lat":25.056,"gps_lon":121.609,"gps_num":9}},{"SiteName":"28C2DDDD44A6","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":25.62,"Humidity":58,"Dust2_5":43,"Create_at":"2016-03-31T06:07:08Z"},"LatLng":{"lat":25.062,"lng":121.451},"RawData":{"device_id":"28C2DDDD44A6","timestamp":"2016-03-31T06:07:08Z","SiteName":"28C2DDDD44A6","s_d0":43,"s_t0":25.62,"s_h0":58,"gps_lat":25.062,"gps_lon":121.451,"gps_num":9}},{"SiteName":"IIS04","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24.75,"Humidity":69,"Dust2_5":58,"Create_at":"2016-03-31T06:43:59Z"},"LatLng":{"lat":25.04,"lng":121.614},"RawData":{"device_id":"28C2DDDD459C","timestamp":"2016-03-31T06:43:59Z","SiteName":"IIS04","s_d0":58,"s_t0":24.75,"s_h0":69,"gps_lat":25.04,"gps_lon":121.614,"gps_num":9}},{"SiteName":"逸仙國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":25,"Humidity":67,"Dust2_5":60,"Create_at":"2016-03-31T07:33:01Z"},"LatLng":{"lat":25.138,"lng":121.504},"RawData":{"device_id":"28C2DDDD4580","timestamp":"2016-03-31T07:33:01Z","SiteName":"逸仙國小","s_d0":60,"s_t0":25,"s_h0":67,"gps_lat":25.138,"gps_lon":121.504,"gps_num":9}},{"SiteName":"28C2DDDD4379","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":27.87,"Humidity":63,"Dust2_5":83,"Create_at":"2016-03-31T09:13:19Z"},"LatLng":{"lat":25.074,"lng":121.517},"RawData":{"device_id":"28C2DDDD4379","timestamp":"2016-03-31T09:13:19Z","SiteName":"28C2DDDD4379","s_d0":83,"s_t0":27.87,"s_h0":63,"gps_lat":25.074,"gps_lon":121.517,"gps_num":9}},{"SiteName":"龍山國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.12,"Humidity":80,"Dust2_5":99,"Create_at":"2016-03-31T10:12:25Z"},"LatLng":{"lat":25.036,"lng":121.496},"RawData":{"device_id":"28C2DDDD436C","timestamp":"2016-03-31T10:12:25Z","SiteName":"龍山國小","s_d0":99,"s_t0":22.12,"s_h0":80,"gps_lat":25.036,"gps_lon":121.496,"gps_num":9}},{"SiteName":"28C2DDDD42C7","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.12,"Humidity":79,"Dust2_5":117,"Create_at":"2016-03-31T10:15:24Z"},"LatLng":{"lat":24.983,"lng":121.534},"RawData":{"device_id":"28C2DDDD42C7","timestamp":"2016-03-31T10:15:24Z","SiteName":"28C2DDDD42C7","s_d0":117,"s_t0":22.12,"s_h0":79,"gps_lat":24.983,"gps_lon":121.534,"gps_num":9}},{"SiteName":"永樂國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.62,"Humidity":79,"Dust2_5":111,"Create_at":"2016-03-31T10:36:14Z"},"LatLng":{"lat":25.061,"lng":121.51},"RawData":{"device_id":"28C2DDDD4598","timestamp":"2016-03-31T10:36:14Z","SiteName":"永樂國小","s_d0":111,"s_t0":23.62,"s_h0":79,"gps_lat":25.061,"gps_lon":121.51,"gps_num":9}},{"SiteName":"IIS07","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.5,"Humidity":92,"Dust2_5":76,"Create_at":"2016-03-31T12:10:02Z"},"LatLng":{"lat":25.04,"lng":121.614},"RawData":{"device_id":"28C2DDDD4781","timestamp":"2016-03-31T12:10:02Z","SiteName":"IIS07","s_d0":76,"s_t0":22.5,"s_h0":92,"gps_lat":25.04,"gps_lon":121.614,"gps_num":9}},{"SiteName":"28C2DDDD47AE","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.12,"Humidity":81,"Dust2_5":92,"Create_at":"2016-03-31T12:14:38Z"},"LatLng":{"lat":25.035,"lng":121.575},"RawData":{"device_id":"28C2DDDD47AE","timestamp":"2016-03-31T12:14:38Z","SiteName":"28C2DDDD47AE","s_d0":92,"s_t0":23.12,"s_h0":81,"gps_lat":25.035,"gps_lon":121.575,"gps_num":9}},{"SiteName":"福德國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":21.87,"Humidity":90,"Dust2_5":87,"Create_at":"2016-03-31T12:30:02Z"},"LatLng":{"lat":25.038,"lng":121.586},"RawData":{"device_id":"28C2DDDD4566","timestamp":"2016-03-31T12:30:02Z","SiteName":"福德國小","s_d0":87,"s_t0":21.87,"s_h0":90,"gps_lat":25.038,"gps_lon":121.586,"gps_num":9}},{"SiteName":"永吉國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.37,"Humidity":89,"Dust2_5":92,"Create_at":"2016-03-31T12:24:32Z"},"LatLng":{"lat":25.043,"lng":121.579},"RawData":{"device_id":"28C2DDDD443A","timestamp":"2016-03-31T12:24:32Z","SiteName":"永吉國小","s_d0":92,"s_t0":22.37,"s_h0":89,"gps_lat":25.043,"gps_lon":121.579,"gps_num":9}},{"SiteName":"舊莊國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22,"Humidity":94,"Dust2_5":86,"Create_at":"2016-03-31T12:24:41Z"},"LatLng":{"lat":25.039,"lng":121.62},"RawData":{"device_id":"28C2DDDD4414","timestamp":"2016-03-31T12:24:41Z","SiteName":"舊莊國小","s_d0":86,"s_t0":22,"s_h0":94,"gps_lat":25.039,"gps_lon":121.62,"gps_num":9}},{"SiteName":"28C2DDDD40FA","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":30.37,"Humidity":52,"Dust2_5":38,"Create_at":"2016-03-31T12:24:45Z"},"LatLng":{"lat":25.044,"lng":121.516},"RawData":{"device_id":"28C2DDDD40FA","timestamp":"2016-03-31T12:24:45Z","SiteName":"28C2DDDD40FA","s_d0":38,"s_t0":30.37,"s_h0":52,"gps_lat":25.044,"gps_lon":121.516,"gps_num":9}},{"SiteName":"龍安國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23,"Humidity":83,"Dust2_5":97,"Create_at":"2016-03-31T12:25:34Z"},"LatLng":{"lat":25.024,"lng":121.534},"RawData":{"device_id":"28C2DDDD415C","timestamp":"2016-03-31T12:25:34Z","SiteName":"龍安國小","s_d0":97,"s_t0":23,"s_h0":83,"gps_lat":25.024,"gps_lon":121.534,"gps_num":9}},{"SiteName":"潭美國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.62,"Humidity":83,"Dust2_5":89,"Create_at":"2016-03-31T12:25:53Z"},"LatLng":{"lat":25.061,"lng":121.59},"RawData":{"device_id":"28C2DDDD4372","timestamp":"2016-03-31T12:25:53Z","SiteName":"潭美國小","s_d0":89,"s_t0":23.62,"s_h0":83,"gps_lat":25.061,"gps_lon":121.59,"gps_num":9}},{"SiteName":"永建國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.62,"Humidity":89,"Dust2_5":83,"Create_at":"2016-03-31T12:26:13Z"},"LatLng":{"lat":24.987,"lng":121.55},"RawData":{"device_id":"28C2DDDD4357","timestamp":"2016-03-31T12:26:13Z","SiteName":"永建國小","s_d0":83,"s_t0":23.62,"s_h0":89,"gps_lat":24.987,"gps_lon":121.55,"gps_num":9}},{"SiteName":"28C2DDDD4532","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":20.25,"Humidity":99,"Dust2_5":51,"Create_at":"2016-03-31T12:26:15Z"},"LatLng":{"lat":24.718,"lng":121.11},"RawData":{"device_id":"28C2DDDD4532","timestamp":"2016-03-31T12:26:15Z","SiteName":"28C2DDDD4532","s_d0":51,"s_t0":20.25,"s_h0":99,"gps_lat":24.718,"gps_lon":121.11,"gps_num":9}},{"SiteName":"環保局技術室","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.37,"Humidity":86,"Dust2_5":93,"Create_at":"2016-03-31T12:26:36Z"},"LatLng":{"lat":25.068,"lng":121.59},"RawData":{"device_id":"28C2DDDD452C","timestamp":"2016-03-31T12:26:36Z","SiteName":"環保局技術室","s_d0":93,"s_t0":22.37,"s_h0":86,"gps_lat":25.068,"gps_lon":121.59,"gps_num":9}},{"SiteName":"大屯國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":21.87,"Humidity":81,"Dust2_5":39,"Create_at":"2016-03-31T12:26:44Z"},"LatLng":{"lat":25.155,"lng":121.504},"RawData":{"device_id":"28C2DDDD441E","timestamp":"2016-03-31T12:26:44Z","SiteName":"大屯國小","s_d0":39,"s_t0":21.87,"s_h0":81,"gps_lat":25.155,"gps_lon":121.504,"gps_num":9}},{"SiteName":"28C2DDDD4363","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":25.37,"Humidity":65,"Dust2_5":330,"Create_at":"2016-03-31T12:26:50Z"},"LatLng":{"lat":25.05,"lng":121.443},"RawData":{"device_id":"28C2DDDD4363","timestamp":"2016-03-31T12:26:50Z","SiteName":"28C2DDDD4363","s_d0":330,"s_t0":25.37,"s_h0":65,"gps_lat":25.05,"gps_lon":121.443,"gps_num":9}},{"SiteName":"石牌國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.25,"Humidity":82,"Dust2_5":77,"Create_at":"2016-03-31T12:26:53Z"},"LatLng":{"lat":25.115,"lng":121.512},"RawData":{"device_id":"28C2DDDD4229","timestamp":"2016-03-31T12:26:53Z","SiteName":"石牌國小","s_d0":77,"s_t0":23.25,"s_h0":82,"gps_lat":25.115,"gps_lon":121.512,"gps_num":9}},{"SiteName":"環保局技術室","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.87,"Humidity":84,"Dust2_5":69,"Create_at":"2016-03-31T12:27:00Z"},"LatLng":{"lat":25.117,"lng":121.516},"RawData":{"device_id":"28C2DDDD43B8","timestamp":"2016-03-31T12:27:00Z","SiteName":"環保局技術室","s_d0":69,"s_t0":22.87,"s_h0":84,"gps_lat":25.117,"gps_lon":121.516,"gps_num":9}},{"SiteName":"28C2DDDD47C8","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24.62,"Humidity":70,"Dust2_5":78,"Create_at":"2016-03-31T12:27:21Z"},"LatLng":{"lat":25.045,"lng":121.613},"RawData":{"device_id":"28C2DDDD47C8","timestamp":"2016-03-31T12:27:21Z","SiteName":"28C2DDDD47C8","s_d0":78,"s_t0":24.62,"s_h0":70,"gps_lat":25.045,"gps_lon":121.613,"gps_num":9}},{"SiteName":"新民國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":26.62,"Humidity":63,"Dust2_5":48,"Create_at":"2016-03-31T12:27:23Z"},"LatLng":{"lat":25.022,"lng":121.532},"RawData":{"device_id":"28C2DDDD4359","timestamp":"2016-03-31T12:27:23Z","SiteName":"新民國小","s_d0":48,"s_t0":26.62,"s_h0":63,"gps_lat":25.022,"gps_lon":121.532,"gps_num":9}},{"SiteName":"IIS08","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.5,"Humidity":88,"Dust2_5":83,"Create_at":"2016-03-31T12:27:33Z"},"LatLng":{"lat":25.04,"lng":121.614},"RawData":{"device_id":"28C2DDDD457B","timestamp":"2016-03-31T12:27:33Z","SiteName":"IIS08","s_d0":83,"s_t0":22.5,"s_h0":88,"gps_lat":25.04,"gps_lon":121.614,"gps_num":9}},{"SiteName":"文昌國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24,"Humidity":76,"Dust2_5":78,"Create_at":"2016-03-31T12:27:37Z"},"LatLng":{"lat":25.099,"lng":121.521},"RawData":{"device_id":"28C2DDDD4239","timestamp":"2016-03-31T12:27:37Z","SiteName":"文昌國小","s_d0":78,"s_t0":24,"s_h0":76,"gps_lat":25.099,"gps_lon":121.521,"gps_num":9}},{"SiteName":"雙蓮國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23,"Humidity":81,"Dust2_5":103,"Create_at":"2016-03-31T12:27:42Z"},"LatLng":{"lat":25.061,"lng":121.517},"RawData":{"device_id":"28C2DDDD457E","timestamp":"2016-03-31T12:27:42Z","SiteName":"雙蓮國小","s_d0":103,"s_t0":23,"s_h0":81,"gps_lat":25.061,"gps_lon":121.517,"gps_num":9}},{"SiteName":"溫州國宅","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.25,"Humidity":85,"Dust2_5":94,"Create_at":"2016-03-31T12:28:02Z"},"LatLng":{"lat":25.019,"lng":121.532},"RawData":{"device_id":"28C2DDDD47C6","timestamp":"2016-03-31T12:28:02Z","SiteName":"溫州國宅","s_d0":94,"s_t0":22.25,"s_h0":85,"gps_lat":25.019,"gps_lon":121.532,"gps_num":9}},{"SiteName":"清江國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.5,"Humidity":81,"Dust2_5":58,"Create_at":"2016-03-31T12:28:03Z"},"LatLng":{"lat":25.126,"lng":121.507},"RawData":{"device_id":"28C2DDDD4246","timestamp":"2016-03-31T12:28:03Z","SiteName":"清江國小","s_d0":58,"s_t0":23.5,"s_h0":81,"gps_lat":25.126,"gps_lon":121.507,"gps_num":9}},{"SiteName":"萬興國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.12,"Humidity":84,"Dust2_5":83,"Create_at":"2016-03-31T12:28:15Z"},"LatLng":{"lat":24.989,"lng":121.576},"RawData":{"device_id":"28C2DDDD423C","timestamp":"2016-03-31T12:28:15Z","SiteName":"萬興國小","s_d0":83,"s_t0":22.12,"s_h0":84,"gps_lat":24.989,"gps_lon":121.576,"gps_num":9}},{"SiteName":"IIS09","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.5,"Humidity":82,"Dust2_5":76,"Create_at":"2016-03-31T12:28:21Z"},"LatLng":{"lat":25.04,"lng":121.614},"RawData":{"device_id":"28C2DDDD4780","timestamp":"2016-03-31T12:28:21Z","SiteName":"IIS09","s_d0":76,"s_t0":23.5,"s_h0":82,"gps_lat":25.04,"gps_lon":121.614,"gps_num":9}},{"SiteName":"28C2DDDD47D5","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":25.12,"Humidity":65,"Dust2_5":50,"Create_at":"2016-03-31T12:28:51Z"},"LatLng":{"lat":24.806,"lng":121.01},"RawData":{"device_id":"28C2DDDD47D5","timestamp":"2016-03-31T12:28:51Z","SiteName":"28C2DDDD47D5","s_d0":50,"s_t0":25.12,"s_h0":65,"gps_lat":24.806,"gps_lon":121.01,"gps_num":9}},{"SiteName":"玉成國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.5,"Humidity":87,"Dust2_5":98,"Create_at":"2016-03-31T12:28:53Z"},"LatLng":{"lat":25.053,"lng":121.593},"RawData":{"device_id":"28C2DDDD43FD","timestamp":"2016-03-31T12:28:53Z","SiteName":"玉成國小","s_d0":98,"s_t0":22.5,"s_h0":87,"gps_lat":25.053,"gps_lon":121.593,"gps_num":9}},{"SiteName":"立農國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.75,"Humidity":82,"Dust2_5":79,"Create_at":"2016-03-31T12:28:53Z"},"LatLng":{"lat":25.119,"lng":121.505},"RawData":{"device_id":"28C2DDDD41EB","timestamp":"2016-03-31T12:28:53Z","SiteName":"立農國小","s_d0":79,"s_t0":22.75,"s_h0":82,"gps_lat":25.119,"gps_lon":121.505,"gps_num":9}},{"SiteName":"28C2DDDD4416","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.75,"Humidity":88,"Dust2_5":71,"Create_at":"2016-03-31T12:28:58Z"},"LatLng":{"lat":25.016,"lng":121.536},"RawData":{"device_id":"28C2DDDD4416","timestamp":"2016-03-31T12:28:58Z","SiteName":"28C2DDDD4416","s_d0":71,"s_t0":22.75,"s_h0":88,"gps_lat":25.016,"gps_lon":121.536,"gps_num":9}},{"SiteName":"葫蘆國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.62,"Humidity":72,"Dust2_5":49,"Create_at":"2016-03-31T12:29:01Z"},"LatLng":{"lat":25.082,"lng":121.512},"RawData":{"device_id":"28C2DDDD4534","timestamp":"2016-03-31T12:29:01Z","SiteName":"葫蘆國小","s_d0":49,"s_t0":23.62,"s_h0":72,"gps_lat":25.082,"gps_lon":121.512,"gps_num":9}},{"SiteName":"光仁國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.25,"Humidity":81,"Dust2_5":101,"Create_at":"2016-03-31T12:29:21Z"},"LatLng":{"lat":25.021,"lng":121.5},"RawData":{"device_id":"28C2DDDD4376","timestamp":"2016-03-31T12:29:21Z","SiteName":"光仁國小","s_d0":101,"s_t0":23.25,"s_h0":81,"gps_lat":25.021,"gps_lon":121.5,"gps_num":9}},{"SiteName":"景興國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24,"Humidity":70,"Dust2_5":52,"Create_at":"2016-03-31T12:29:22Z"},"LatLng":{"lat":24.996,"lng":121.548},"RawData":{"device_id":"28C2DDDD4505","timestamp":"2016-03-31T12:29:22Z","SiteName":"景興國小","s_d0":52,"s_t0":24,"s_h0":70,"gps_lat":24.996,"gps_lon":121.548,"gps_num":9}},{"SiteName":"蓬萊國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24.37,"Humidity":80,"Dust2_5":87,"Create_at":"2016-03-31T12:29:33Z"},"LatLng":{"lat":25.056,"lng":121.516},"RawData":{"device_id":"28C2DDDD456C","timestamp":"2016-03-31T12:29:33Z","SiteName":"蓬萊國小","s_d0":87,"s_t0":24.37,"s_h0":80,"gps_lat":25.056,"gps_lon":121.516,"gps_num":9}},{"SiteName":"指南國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.75,"Humidity":68,"Dust2_5":44,"Create_at":"2016-03-30T06:36:42Z"},"LatLng":{"lat":24.976,"lng":121.584},"RawData":{"device_id":"28C2DDDD4418","timestamp":"2016-03-30T06:36:42Z","SiteName":"指南國小","s_d0":44,"s_t0":23.75,"s_h0":68,"gps_lat":24.976,"gps_lon":121.584,"gps_num":9}},{"SiteName":"雨聲國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":27.12,"Humidity":56,"Dust2_5":42,"Create_at":"2016-03-30T08:52:00Z"},"LatLng":{"lat":25.103,"lng":121.535},"RawData":{"device_id":"28C2DDDD4380","timestamp":"2016-03-30T08:52:00Z","SiteName":"雨聲國小","s_d0":42,"s_t0":27.12,"s_h0":56,"gps_lat":25.103,"gps_lon":121.535,"gps_num":9}},{"SiteName":"28C2DDDD4565","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":27.12,"Humidity":52,"Dust2_5":34,"Create_at":"2016-03-30T10:32:02Z"},"LatLng":{"lat":25.122,"lng":121.499},"RawData":{"device_id":"28C2DDDD4565","timestamp":"2016-03-30T10:32:02Z","SiteName":"28C2DDDD4565","s_d0":34,"s_t0":27.12,"s_h0":52,"gps_lat":25.122,"gps_lon":121.499,"gps_num":9}},{"SiteName":"28C2DDDD47B9","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":21.25,"Humidity":75,"Dust2_5":50,"Create_at":"2016-03-30T11:17:28Z"},"LatLng":{"lat":25.057,"lng":121.613},"RawData":{"device_id":"28C2DDDD47B9","timestamp":"2016-03-30T11:17:28Z","SiteName":"28C2DDDD47B9","s_d0":50,"s_t0":21.25,"s_h0":75,"gps_lat":25.057,"gps_lon":121.613,"gps_num":9}},{"SiteName":"西松國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.12,"Humidity":70,"Dust2_5":46,"Create_at":"2016-03-30T12:52:48Z"},"LatLng":{"lat":25.052,"lng":121.563},"RawData":{"device_id":"28C2DDDD450C","timestamp":"2016-03-30T12:52:48Z","SiteName":"西松國小","s_d0":46,"s_t0":23.12,"s_h0":70,"gps_lat":25.052,"gps_lon":121.563,"gps_num":9}},{"SiteName":"力行國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.12,"Humidity":68,"Dust2_5":43,"Create_at":"2016-03-30T14:27:02Z"},"LatLng":{"lat":24.98,"lng":121.56},"RawData":{"device_id":"28C2DDDD459D","timestamp":"2016-03-30T14:27:02Z","SiteName":"力行國小","s_d0":43,"s_t0":23.12,"s_h0":68,"gps_lat":24.98,"gps_lon":121.56,"gps_num":9}},{"SiteName":"博嘉國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":20,"Humidity":85,"Dust2_5":50,"Create_at":"2016-03-30T22:54:23Z"},"LatLng":{"lat":25.001,"lng":121.575},"RawData":{"device_id":"28C2DDDD4591","timestamp":"2016-03-30T22:54:23Z","SiteName":"博嘉國小","s_d0":50,"s_t0":20,"s_h0":85,"gps_lat":25.001,"gps_lon":121.575,"gps_num":9}},{"SiteName":"平等國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.75,"Humidity":63,"Dust2_5":39,"Create_at":"2016-03-30T23:46:06Z"},"LatLng":{"lat":25.129,"lng":121.576},"RawData":{"device_id":"28C2DDDD4373","timestamp":"2016-03-30T23:46:06Z","SiteName":"平等國小","s_d0":39,"s_t0":23.75,"s_h0":63,"gps_lat":25.129,"gps_lon":121.576,"gps_num":9}},{"SiteName":"三民國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23,"Humidity":75,"Dust2_5":76,"Create_at":"2016-03-31T00:11:36Z"},"LatLng":{"lat":25.063,"lng":121.564},"RawData":{"device_id":"28C2DDDD4345","timestamp":"2016-03-31T00:11:36Z","SiteName":"三民國小","s_d0":76,"s_t0":23,"s_h0":75,"gps_lat":25.063,"gps_lon":121.564,"gps_num":9}},{"SiteName":"28C2DDDD4617","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24.12,"Humidity":73,"Dust2_5":39,"Create_at":"2016-03-31T02:08:28Z"},"LatLng":{"lat":24.983,"lng":121.552},"RawData":{"device_id":"28C2DDDD4617","timestamp":"2016-03-31T02:08:28Z","SiteName":"28C2DDDD4617","s_d0":39,"s_t0":24.12,"s_h0":73,"gps_lat":24.983,"gps_lon":121.552,"gps_num":9}},{"SiteName":"28C2DDDD4333","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.62,"Humidity":76,"Dust2_5":135,"Create_at":"2016-03-31T02:32:52Z"},"LatLng":{"lat":25.031,"lng":121.565},"RawData":{"device_id":"28C2DDDD4333","timestamp":"2016-03-31T02:32:52Z","SiteName":"28C2DDDD4333","s_d0":135,"s_t0":23.62,"s_h0":76,"gps_lat":25.031,"gps_lon":121.565,"gps_num":9}},{"SiteName":"明湖國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.87,"Humidity":72,"Dust2_5":79,"Create_at":"2016-03-31T02:37:25Z"},"LatLng":{"lat":25.071,"lng":121.611},"RawData":{"device_id":"28C2DDDD4561","timestamp":"2016-03-31T02:37:25Z","SiteName":"明湖國小","s_d0":79,"s_t0":23.87,"s_h0":72,"gps_lat":25.071,"gps_lon":121.611,"gps_num":9}},{"SiteName":"28C2DDDD45E8","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":26.87,"Humidity":57,"Dust2_5":48,"Create_at":"2016-03-31T03:30:51Z"},"LatLng":{"lat":25.122,"lng":121.499},"RawData":{"device_id":"28C2DDDD45E8","timestamp":"2016-03-31T03:30:51Z","SiteName":"28C2DDDD45E8","s_d0":48,"s_t0":26.87,"s_h0":57,"gps_lat":25.122,"gps_lon":121.499,"gps_num":9}},{"SiteName":"28C2DDDD4465","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":25.37,"Humidity":62,"Dust2_5":40,"Create_at":"2016-03-31T06:13:49Z"},"LatLng":{"lat":25.062,"lng":121.451},"RawData":{"device_id":"28C2DDDD4465","timestamp":"2016-03-31T06:13:49Z","SiteName":"28C2DDDD4465","s_d0":40,"s_t0":25.37,"s_h0":62,"gps_lat":25.062,"gps_lon":121.451,"gps_num":9}},{"SiteName":"文山國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23,"Humidity":78,"Dust2_5":64,"Create_at":"2016-03-31T09:51:32Z"},"LatLng":{"lat":25.105,"lng":121.514},"RawData":{"device_id":"28C2DDDD4351","timestamp":"2016-03-31T09:51:32Z","SiteName":"文山國小","s_d0":64,"s_t0":23,"s_h0":78,"gps_lat":25.105,"gps_lon":121.514,"gps_num":9}},{"SiteName":"幸安國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.12,"Humidity":86,"Dust2_5":106,"Create_at":"2016-03-31T09:59:53Z"},"LatLng":{"lat":25.034,"lng":121.533},"RawData":{"device_id":"28C2DDDD437D","timestamp":"2016-03-31T09:59:53Z","SiteName":"幸安國小","s_d0":106,"s_t0":22.12,"s_h0":86,"gps_lat":25.034,"gps_lon":121.533,"gps_num":9}},{"SiteName":"天母國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.25,"Humidity":80,"Dust2_5":73,"Create_at":"2016-03-31T10:58:49Z"},"LatLng":{"lat":25.12,"lng":121.528},"RawData":{"device_id":"28C2DDDD4244","timestamp":"2016-03-31T10:58:49Z","SiteName":"天母國小","s_d0":73,"s_t0":23.25,"s_h0":80,"gps_lat":25.12,"gps_lon":121.528,"gps_num":9}},{"SiteName":"健康國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":30.75,"Humidity":55,"Dust2_5":63,"Create_at":"2016-03-31T11:20:39Z"},"LatLng":{"lat":25.056,"lng":121.562},"RawData":{"device_id":"28C2DDDD4378","timestamp":"2016-03-31T11:20:39Z","SiteName":"健康國小","s_d0":63,"s_t0":30.75,"s_h0":55,"gps_lat":25.056,"gps_lon":121.562,"gps_num":9}},{"SiteName":"建安國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.87,"Humidity":85,"Dust2_5":97,"Create_at":"2016-03-31T11:26:44Z"},"LatLng":{"lat":25.029,"lng":121.546},"RawData":{"device_id":"28C2DDDD4356","timestamp":"2016-03-31T11:26:44Z","SiteName":"建安國小","s_d0":97,"s_t0":22.87,"s_h0":85,"gps_lat":25.029,"gps_lon":121.546,"gps_num":9}},{"SiteName":"中山國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.25,"Humidity":87,"Dust2_5":108,"Create_at":"2016-03-31T11:45:10Z"},"LatLng":{"lat":25.063,"lng":121.526},"RawData":{"device_id":"28C2DDDD4413","timestamp":"2016-03-31T11:45:10Z","SiteName":"中山國小","s_d0":108,"s_t0":22.25,"s_h0":87,"gps_lat":25.063,"gps_lon":121.526,"gps_num":9}},{"SiteName":"士林國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.5,"Humidity":83,"Dust2_5":67,"Create_at":"2016-03-31T11:56:04Z"},"LatLng":{"lat":25.093,"lng":121.524},"RawData":{"device_id":"28C2DDDD457C","timestamp":"2016-03-31T11:56:04Z","SiteName":"士林國小","s_d0":67,"s_t0":23.5,"s_h0":83,"gps_lat":25.093,"gps_lon":121.524,"gps_num":9}},{"SiteName":"義方國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.12,"Humidity":89,"Dust2_5":62,"Create_at":"2016-03-31T11:56:38Z"},"LatLng":{"lat":25.141,"lng":121.509},"RawData":{"device_id":"28C2DDDD45A0","timestamp":"2016-03-31T11:56:38Z","SiteName":"義方國小","s_d0":62,"s_t0":22.12,"s_h0":89,"gps_lat":25.141,"gps_lon":121.509,"gps_num":9}},{"SiteName":"麗山國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24.37,"Humidity":72,"Dust2_5":52,"Create_at":"2016-03-31T12:15:08Z"},"LatLng":{"lat":25.083,"lng":121.572},"RawData":{"device_id":"28C2DDDD4597","timestamp":"2016-03-31T12:15:08Z","SiteName":"麗山國小","s_d0":52,"s_t0":24.37,"s_h0":72,"gps_lat":25.083,"gps_lon":121.572,"gps_num":9}},{"SiteName":"28C2DDDD47DB","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.87,"Humidity":75,"Dust2_5":69,"Create_at":"2016-03-31T12:30:04Z"},"LatLng":{"lat":25.002,"lng":121.55},"RawData":{"device_id":"28C2DDDD47DB","timestamp":"2016-03-31T12:30:04Z","SiteName":"28C2DDDD47DB","s_d0":69,"s_t0":23.87,"s_h0":75,"gps_lat":25.002,"gps_lon":121.55,"gps_num":9}},{"SiteName":"民生國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.75,"Humidity":82,"Dust2_5":92,"Create_at":"2016-03-31T12:19:35Z"},"LatLng":{"lat":25.056,"lng":121.552},"RawData":{"device_id":"28C2DDDD41FA","timestamp":"2016-03-31T12:19:35Z","SiteName":"民生國小","s_d0":92,"s_t0":22.75,"s_h0":82,"gps_lat":25.056,"gps_lon":121.552,"gps_num":9}},{"SiteName":"IIS05","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.12,"Humidity":99,"Dust2_5":87,"Create_at":"2016-03-31T12:21:01Z"},"LatLng":{"lat":25.04,"lng":121.614},"RawData":{"device_id":"28C2DDDD47C0","timestamp":"2016-03-31T12:21:01Z","SiteName":"IIS05","s_d0":87,"s_t0":22.12,"s_h0":99,"gps_lat":25.04,"gps_lon":121.614,"gps_num":9}},{"SiteName":"南湖國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.75,"Humidity":85,"Dust2_5":89,"Create_at":"2016-03-31T12:21:46Z"},"LatLng":{"lat":25.067,"lng":121.611},"RawData":{"device_id":"28C2DDDD434D","timestamp":"2016-03-31T12:21:46Z","SiteName":"南湖國小","s_d0":89,"s_t0":23.75,"s_h0":85,"gps_lat":25.067,"gps_lon":121.611,"gps_num":9}},{"SiteName":"公館國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":21.75,"Humidity":90,"Dust2_5":96,"Create_at":"2016-03-31T12:23:45Z"},"LatLng":{"lat":25.062,"lng":121.451},"RawData":{"device_id":"28C2DDDD4423","timestamp":"2016-03-31T12:23:45Z","SiteName":"公館國小","s_d0":96,"s_t0":21.75,"s_h0":90,"gps_lat":25.062,"gps_lon":121.451,"gps_num":9}},{"SiteName":"IIS03","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.25,"Humidity":87,"Dust2_5":84,"Create_at":"2016-03-31T12:30:01Z"},"LatLng":{"lat":25.04,"lng":121.614},"RawData":{"device_id":"28C2DDDD459E","timestamp":"2016-03-31T12:30:01Z","SiteName":"IIS03","s_d0":84,"s_t0":22.25,"s_h0":87,"gps_lat":25.04,"gps_lon":121.614,"gps_num":9}},{"SiteName":"福林國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23,"Humidity":81,"Dust2_5":71,"Create_at":"2016-03-31T12:30:12Z"},"LatLng":{"lat":25.097,"lng":121.53},"RawData":{"device_id":"28C2DDDD459A","timestamp":"2016-03-31T12:30:12Z","SiteName":"福林國小","s_d0":71,"s_t0":23,"s_h0":81,"gps_lat":25.097,"gps_lon":121.53,"gps_num":9}},{"SiteName":"IIS10","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.25,"Humidity":81,"Dust2_5":78,"Create_at":"2016-03-31T12:30:23Z"},"LatLng":{"lat":25.04,"lng":121.614},"RawData":{"device_id":"28C2DDDD47AD","timestamp":"2016-03-31T12:30:23Z","SiteName":"IIS10","s_d0":78,"s_t0":23.25,"s_h0":81,"gps_lat":25.04,"gps_lon":121.614,"gps_num":9}},{"SiteName":"信義國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23,"Humidity":88,"Dust2_5":85,"Create_at":"2016-03-31T12:24:39Z"},"LatLng":{"lat":25.031,"lng":121.563},"RawData":{"device_id":"28C2DDDD43FC","timestamp":"2016-03-31T12:24:39Z","SiteName":"信義國小","s_d0":85,"s_t0":23,"s_h0":88,"gps_lat":25.031,"gps_lon":121.563,"gps_num":9}},{"SiteName":"28C2DDDD4519","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24.25,"Humidity":64,"Dust2_5":45,"Create_at":"2016-03-31T12:24:43Z"},"LatLng":{"lat":24.78,"lng":120.995},"RawData":{"device_id":"28C2DDDD4519","timestamp":"2016-03-31T12:24:43Z","SiteName":"28C2DDDD4519","s_d0":45,"s_t0":24.25,"s_h0":64,"gps_lat":24.78,"gps_lon":120.995,"gps_num":9}},{"SiteName":"28C2DDDD45FC","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24.62,"Humidity":85,"Dust2_5":63,"Create_at":"2016-03-31T12:25:20Z"},"LatLng":{"lat":25.08,"lng":121.571},"RawData":{"device_id":"28C2DDDD45FC","timestamp":"2016-03-31T12:25:20Z","SiteName":"28C2DDDD45FC","s_d0":63,"s_t0":24.62,"s_h0":85,"gps_lat":25.08,"gps_lon":121.571,"gps_num":9}},{"SiteName":"28C2DDDD43F1","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24.12,"Humidity":69,"Dust2_5":70,"Create_at":"2016-03-31T12:25:25Z"},"LatLng":{"lat":25.044,"lng":121.517},"RawData":{"device_id":"28C2DDDD43F1","timestamp":"2016-03-31T12:25:25Z","SiteName":"28C2DDDD43F1","s_d0":70,"s_t0":24.12,"s_h0":69,"gps_lat":25.044,"gps_lon":121.517,"gps_num":9}},{"SiteName":"私立再興小學","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22,"Humidity":86,"Dust2_5":85,"Create_at":"2016-03-31T12:25:26Z"},"LatLng":{"lat":24.989,"lng":121.557},"RawData":{"device_id":"28C2DDDD47A4","timestamp":"2016-03-31T12:25:26Z","SiteName":"私立再興小學","s_d0":85,"s_t0":22,"s_h0":86,"gps_lat":24.989,"gps_lon":121.557,"gps_num":9}},{"SiteName":"富安國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24.25,"Humidity":79,"Dust2_5":91,"Create_at":"2016-03-31T12:25:32Z"},"LatLng":{"lat":25.105,"lng":121.482},"RawData":{"device_id":"28C2DDDD45A1","timestamp":"2016-03-31T12:25:32Z","SiteName":"富安國小","s_d0":91,"s_t0":24.25,"s_h0":79,"gps_lat":25.105,"gps_lon":121.482,"gps_num":9}},{"SiteName":"IIS01","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.75,"Humidity":105,"Dust2_5":75,"Create_at":"2016-03-31T12:25:43Z"},"LatLng":{"lat":25.04,"lng":121.614},"RawData":{"device_id":"28C2DDDD4331","timestamp":"2016-03-31T12:25:43Z","SiteName":"IIS01","s_d0":75,"s_t0":22.75,"s_h0":105,"gps_lat":25.04,"gps_lon":121.614,"gps_num":9}},{"SiteName":"28C2DDDD47CC","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23,"Humidity":86,"Dust2_5":77,"Create_at":"2016-03-31T12:25:49Z"},"LatLng":{"lat":25.053,"lng":121.535},"RawData":{"device_id":"28C2DDDD47CC","timestamp":"2016-03-31T12:25:49Z","SiteName":"28C2DDDD47CC","s_d0":77,"s_t0":23,"s_h0":86,"gps_lat":25.053,"gps_lon":121.535,"gps_num":9}},{"SiteName":"吉林國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.75,"Humidity":81,"Dust2_5":87,"Create_at":"2016-03-31T12:25:54Z"},"LatLng":{"lat":25.036,"lng":121.532},"RawData":{"device_id":"28C2DDDD458F","timestamp":"2016-03-31T12:25:54Z","SiteName":"吉林國小","s_d0":87,"s_t0":23.75,"s_h0":81,"gps_lat":25.036,"gps_lon":121.532,"gps_num":9}},{"SiteName":"濱江國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24.37,"Humidity":82,"Dust2_5":92,"Create_at":"2016-03-31T12:26:00Z"},"LatLng":{"lat":25.077,"lng":121.561},"RawData":{"device_id":"28C2DDDD4593","timestamp":"2016-03-31T12:26:00Z","SiteName":"濱江國小","s_d0":92,"s_t0":24.37,"s_h0":82,"gps_lat":25.077,"gps_lon":121.561,"gps_num":9}},{"SiteName":"28C2DDDD479A","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":26.62,"Humidity":89,"Dust2_5":88,"Create_at":"2016-03-31T12:26:11Z"},"LatLng":{"lat":23.706,"lng":120.533},"RawData":{"device_id":"28C2DDDD479A","timestamp":"2016-03-31T12:26:11Z","SiteName":"28C2DDDD479A","s_d0":88,"s_t0":26.62,"s_h0":89,"gps_lat":23.706,"gps_lon":120.533,"gps_num":9}},{"SiteName":"大直國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.75,"Humidity":84,"Dust2_5":87,"Create_at":"2016-03-31T12:26:12Z"},"LatLng":{"lat":25.08,"lng":121.546},"RawData":{"device_id":"28C2DDDD4594","timestamp":"2016-03-31T12:26:12Z","SiteName":"大直國小","s_d0":87,"s_t0":22.75,"s_h0":84,"gps_lat":25.08,"gps_lon":121.546,"gps_num":9}},{"SiteName":"大同國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23,"Humidity":151,"Dust2_5":103,"Create_at":"2016-03-31T12:26:27Z"},"LatLng":{"lat":25.064,"lng":121.517},"RawData":{"device_id":"28C2DDDD45A9","timestamp":"2016-03-31T12:26:27Z","SiteName":"大同國小","s_d0":103,"s_t0":23,"s_h0":151,"gps_lat":25.064,"gps_lon":121.517,"gps_num":9}},{"SiteName":"仁愛國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.5,"Humidity":82,"Dust2_5":90,"Create_at":"2016-03-31T12:26:30Z"},"LatLng":{"lat":25.035,"lng":121.551},"RawData":{"device_id":"28C2DDDD456A","timestamp":"2016-03-31T12:26:30Z","SiteName":"仁愛國小","s_d0":90,"s_t0":23.5,"s_h0":82,"gps_lat":25.035,"gps_lon":121.551,"gps_num":9}},{"SiteName":"28C2DDDD47DA","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24.25,"Humidity":72,"Dust2_5":49,"Create_at":"2016-03-31T12:26:34Z"},"LatLng":{"lat":25.109,"lng":121.539},"RawData":{"device_id":"28C2DDDD47DA","timestamp":"2016-03-31T12:26:34Z","SiteName":"28C2DDDD47DA","s_d0":49,"s_t0":24.25,"s_h0":72,"gps_lat":25.109,"gps_lon":121.539,"gps_num":9}},{"SiteName":"康寧國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.37,"Humidity":88,"Dust2_5":100,"Create_at":"2016-03-31T12:26:40Z"},"LatLng":{"lat":25.08,"lng":121.595},"RawData":{"device_id":"28C2DDDD43E5","timestamp":"2016-03-31T12:26:40Z","SiteName":"康寧國小","s_d0":100,"s_t0":22.37,"s_h0":88,"gps_lat":25.08,"gps_lon":121.595,"gps_num":9}},{"SiteName":"文湖國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.37,"Humidity":100,"Dust2_5":81,"Create_at":"2016-03-31T12:26:54Z"},"LatLng":{"lat":25.086,"lng":121.56},"RawData":{"device_id":"28C2DDDD4790","timestamp":"2016-03-31T12:26:54Z","SiteName":"文湖國小","s_d0":81,"s_t0":22.37,"s_h0":100,"gps_lat":25.086,"gps_lon":121.56,"gps_num":9}},{"SiteName":"28C2DDDD4343","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":27.75,"Humidity":74,"Dust2_5":83,"Create_at":"2016-03-31T12:27:00Z"},"LatLng":{"lat":23.498,"lng":120.457},"RawData":{"device_id":"28C2DDDD4343","timestamp":"2016-03-31T12:27:00Z","SiteName":"28C2DDDD4343","s_d0":83,"s_t0":27.75,"s_h0":74,"gps_lat":23.498,"gps_lon":120.457,"gps_num":9}},{"SiteName":"文化國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":25.12,"Humidity":65,"Dust2_5":46,"Create_at":"2016-03-31T12:27:02Z"},"LatLng":{"lat":25.137,"lng":121.496},"RawData":{"device_id":"28C2DDDD4349","timestamp":"2016-03-31T12:27:02Z","SiteName":"文化國小","s_d0":46,"s_t0":25.12,"s_h0":65,"gps_lat":25.137,"gps_lon":121.496,"gps_num":9}},{"SiteName":"興德國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.75,"Humidity":87,"Dust2_5":89,"Create_at":"2016-03-31T12:27:07Z"},"LatLng":{"lat":25.002,"lng":121.551},"RawData":{"device_id":"28C2DDDD4404","timestamp":"2016-03-31T12:27:07Z","SiteName":"興德國小","s_d0":89,"s_t0":22.75,"s_h0":87,"gps_lat":25.002,"gps_lon":121.551,"gps_num":9}},{"SiteName":"興隆國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.75,"Humidity":81,"Dust2_5":80,"Create_at":"2016-03-31T12:27:10Z"},"LatLng":{"lat":25.002,"lng":121.552},"RawData":{"device_id":"28C2DDDD4234","timestamp":"2016-03-31T12:27:10Z","SiteName":"興隆國小","s_d0":80,"s_t0":23.75,"s_h0":81,"gps_lat":25.002,"gps_lon":121.552,"gps_num":9}},{"SiteName":"訊舟科技","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":25.75,"Humidity":67,"Dust2_5":55,"Create_at":"2016-03-31T12:27:16Z"},"LatLng":{"lat":25.062,"lng":121.451},"RawData":{"device_id":"28C2DDDD41A0","timestamp":"2016-03-31T12:27:16Z","SiteName":"訊舟科技","s_d0":55,"s_t0":25.75,"s_h0":67,"gps_lat":25.062,"gps_lon":121.451,"gps_num":9}},{"SiteName":"敦化國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24,"Humidity":79,"Dust2_5":93,"Create_at":"2016-03-31T12:27:31Z"},"LatLng":{"lat":25.049,"lng":121.548},"RawData":{"device_id":"28C2DDDD400A","timestamp":"2016-03-31T12:27:31Z","SiteName":"敦化國小","s_d0":93,"s_t0":24,"s_h0":79,"gps_lat":25.049,"gps_lon":121.548,"gps_num":9}},{"SiteName":"忠孝國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":25,"Humidity":67,"Dust2_5":47,"Create_at":"2016-03-31T12:27:38Z"},"LatLng":{"lat":25.042,"lng":121.531},"RawData":{"device_id":"28C2DDDD4572","timestamp":"2016-03-31T12:27:38Z","SiteName":"忠孝國小","s_d0":47,"s_t0":25,"s_h0":67,"gps_lat":25.042,"gps_lon":121.531,"gps_num":9}},{"SiteName":"泉源國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.37,"Humidity":80,"Dust2_5":51,"Create_at":"2016-03-31T12:27:39Z"},"LatLng":{"lat":25.149,"lng":121.524},"RawData":{"device_id":"28C2DDDD4338","timestamp":"2016-03-31T12:27:39Z","SiteName":"泉源國小","s_d0":51,"s_t0":22.37,"s_h0":80,"gps_lat":25.149,"gps_lon":121.524,"gps_num":9}},{"SiteName":"28C2DDDD47AF","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":27.62,"Humidity":55,"Dust2_5":33,"Create_at":"2016-03-31T12:27:47Z"},"LatLng":{"lat":25.085,"lng":121.553},"RawData":{"device_id":"28C2DDDD47AF","timestamp":"2016-03-31T12:27:47Z","SiteName":"28C2DDDD47AF","s_d0":33,"s_t0":27.62,"s_h0":55,"gps_lat":25.085,"gps_lon":121.553,"gps_num":9}},{"SiteName":"日新國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24,"Humidity":69,"Dust2_5":53,"Create_at":"2016-03-31T12:27:48Z"},"LatLng":{"lat":25.054,"lng":121.517},"RawData":{"device_id":"28C2DDDD4236","timestamp":"2016-03-31T12:27:48Z","SiteName":"日新國小","s_d0":53,"s_t0":24,"s_h0":69,"gps_lat":25.054,"gps_lon":121.517,"gps_num":9}},{"SiteName":"大佳國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.37,"Humidity":80,"Dust2_5":80,"Create_at":"2016-03-31T12:27:50Z"},"LatLng":{"lat":25.073,"lng":121.536},"RawData":{"device_id":"28C2DDDD41B2","timestamp":"2016-03-31T12:27:50Z","SiteName":"大佳國小","s_d0":80,"s_t0":23.37,"s_h0":80,"gps_lat":25.073,"gps_lon":121.536,"gps_num":9}},{"SiteName":"雙溪國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":21.37,"Humidity":110,"Dust2_5":43,"Create_at":"2016-03-31T12:27:53Z"},"LatLng":{"lat":25.106,"lng":121.564},"RawData":{"device_id":"28C2DDDD435D","timestamp":"2016-03-31T12:27:53Z","SiteName":"雙溪國小","s_d0":43,"s_t0":21.37,"s_h0":110,"gps_lat":25.106,"gps_lon":121.564,"gps_num":9}},{"SiteName":"古亭國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.75,"Humidity":89,"Dust2_5":91,"Create_at":"2016-03-31T12:27:58Z"},"LatLng":{"lat":25.02,"lng":121.528},"RawData":{"device_id":"28C2DDDD41C0","timestamp":"2016-03-31T12:27:58Z","SiteName":"古亭國小","s_d0":91,"s_t0":22.75,"s_h0":89,"gps_lat":25.02,"gps_lon":121.528,"gps_num":9}},{"SiteName":"Realtek","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24.75,"Humidity":57,"Dust2_5":21,"Create_at":"2016-03-31T12:28:04Z"},"LatLng":{"lat":24.78,"lng":120.995},"RawData":{"device_id":"28C2DDDD4366","timestamp":"2016-03-31T12:28:04Z","SiteName":"Realtek","s_d0":21,"s_t0":24.75,"s_h0":57,"gps_lat":24.78,"gps_lon":120.995,"gps_num":9}},{"SiteName":"28C2DDDD433F","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23,"Humidity":70,"Dust2_5":50,"Create_at":"2016-03-31T12:28:24Z"},"LatLng":{"lat":25.087,"lng":121.462},"RawData":{"device_id":"28C2DDDD433F","timestamp":"2016-03-31T12:28:24Z","SiteName":"28C2DDDD433F","s_d0":50,"s_t0":23,"s_h0":70,"gps_lat":25.087,"gps_lon":121.462,"gps_num":9}},{"SiteName":"28C2DDDD4342","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":30.12,"Humidity":56,"Dust2_5":61,"Create_at":"2016-03-31T12:28:44Z"},"LatLng":{"lat":25.047,"lng":121.553},"RawData":{"device_id":"28C2DDDD4342","timestamp":"2016-03-31T12:28:44Z","SiteName":"28C2DDDD4342","s_d0":61,"s_t0":30.12,"s_h0":56,"gps_lat":25.047,"gps_lon":121.553,"gps_num":9}},{"SiteName":"萬福國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.25,"Humidity":89,"Dust2_5":98,"Create_at":"2016-03-31T12:28:45Z"},"LatLng":{"lat":25.005,"lng":121.537},"RawData":{"device_id":"28C2DDDD4571","timestamp":"2016-03-31T12:28:45Z","SiteName":"萬福國小","s_d0":98,"s_t0":22.25,"s_h0":89,"gps_lat":25.005,"gps_lon":121.537,"gps_num":9}},{"SiteName":"台北市立大學附設實驗國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.12,"Humidity":84,"Dust2_5":120,"Create_at":"2016-03-31T12:28:46Z"},"LatLng":{"lat":25.035,"lng":121.515},"RawData":{"device_id":"28C2DDDD4588","timestamp":"2016-03-31T12:28:46Z","SiteName":"台北市立大學附設實驗國小","s_d0":120,"s_t0":23.12,"s_h0":84,"gps_lat":25.035,"gps_lon":121.515,"gps_num":9}},{"SiteName":"28C2DDDD477E","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":26.25,"Humidity":63,"Dust2_5":53,"Create_at":"2016-03-31T12:28:47Z"},"LatLng":{"lat":25.051,"lng":121.511},"RawData":{"device_id":"28C2DDDD477E","timestamp":"2016-03-31T12:28:47Z","SiteName":"28C2DDDD477E","s_d0":53,"s_t0":26.25,"s_h0":63,"gps_lat":25.051,"gps_lon":121.511,"gps_num":9}},{"SiteName":"東門國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.37,"Humidity":87,"Dust2_5":90,"Create_at":"2016-03-31T12:28:56Z"},"LatLng":{"lat":25.038,"lng":121.52},"RawData":{"device_id":"28C2DDDD4233","timestamp":"2016-03-31T12:28:56Z","SiteName":"東門國小","s_d0":90,"s_t0":23.37,"s_h0":87,"gps_lat":25.038,"gps_lon":121.52,"gps_num":9}},{"SiteName":"28C2DDDD434E","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24.25,"Humidity":62,"Dust2_5":50,"Create_at":"2016-03-31T12:28:59Z"},"LatLng":{"lat":25.041,"lng":121.522},"RawData":{"device_id":"28C2DDDD434E","timestamp":"2016-03-31T12:28:59Z","SiteName":"28C2DDDD434E","s_d0":50,"s_t0":24.25,"s_h0":62,"gps_lat":25.041,"gps_lon":121.522,"gps_num":9}},{"SiteName":"萬大國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24.25,"Humidity":100,"Dust2_5":99,"Create_at":"2016-03-31T12:29:00Z"},"LatLng":{"lat":25.023,"lng":121.499},"RawData":{"device_id":"28C2DDDD455E","timestamp":"2016-03-31T12:29:00Z","SiteName":"萬大國小","s_d0":99,"s_t0":24.25,"s_h0":100,"gps_lat":25.023,"gps_lon":121.499,"gps_num":9}},{"SiteName":"28C2DDDD4369","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.37,"Humidity":79,"Dust2_5":85,"Create_at":"2016-03-31T12:29:08Z"},"LatLng":{"lat":25.048,"lng":121.486},"RawData":{"device_id":"28C2DDDD4369","timestamp":"2016-03-31T12:29:08Z","SiteName":"28C2DDDD4369","s_d0":85,"s_t0":23.37,"s_h0":79,"gps_lat":25.048,"gps_lon":121.486,"gps_num":9}},{"SiteName":"中正國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24,"Humidity":78,"Dust2_5":102,"Create_at":"2016-03-31T12:29:30Z"},"LatLng":{"lat":25.05,"lng":121.538},"RawData":{"device_id":"28C2DDDD4536","timestamp":"2016-03-31T12:29:30Z","SiteName":"中正國小","s_d0":102,"s_t0":24,"s_h0":78,"gps_lat":25.05,"gps_lon":121.538,"gps_num":9}},{"SiteName":"金華國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":22.37,"Humidity":83,"Dust2_5":86,"Create_at":"2016-03-31T12:29:31Z"},"LatLng":{"lat":25.032,"lng":121.527},"RawData":{"device_id":"28C2DDDD43ED","timestamp":"2016-03-31T12:29:31Z","SiteName":"金華國小","s_d0":86,"s_t0":22.37,"s_h0":83,"gps_lat":25.032,"gps_lon":121.527,"gps_num":9}},{"SiteName":"28C2DDDD4491","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":26.5,"Humidity":61,"Dust2_5":50,"Create_at":"2016-03-31T12:29:40Z"},"LatLng":{"lat":25.062,"lng":121.451},"RawData":{"device_id":"28C2DDDD4491","timestamp":"2016-03-31T12:29:40Z","SiteName":"28C2DDDD4491","s_d0":50,"s_t0":26.5,"s_h0":61,"gps_lat":25.062,"gps_lon":121.451,"gps_num":9}},{"SiteName":"吳興國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":24.5,"Humidity":77,"Dust2_5":51,"Create_at":"2016-03-31T12:29:42Z"},"LatLng":{"lat":25.025,"lng":121.568},"RawData":{"device_id":"28C2DDDD4350","timestamp":"2016-03-31T12:29:42Z","SiteName":"吳興國小","s_d0":51,"s_t0":24.5,"s_h0":77,"gps_lat":25.025,"gps_lon":121.568,"gps_num":9}},{"SiteName":"東湖國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23,"Humidity":83,"Dust2_5":87,"Create_at":"2016-03-31T12:29:45Z"},"LatLng":{"lat":25.069,"lng":121.615},"RawData":{"device_id":"28C2DDDD4149","timestamp":"2016-03-31T12:29:45Z","SiteName":"東湖國小","s_d0":87,"s_t0":23,"s_h0":83,"gps_lat":25.069,"gps_lon":121.615,"gps_num":9}},{"SiteName":"木柵國小","SiteGroup":"Airbox","Maker":"Airbox","Data":{"Temperature":23.12,"Humidity":85,"Dust2_5":94,"Create_at":"2016-03-31T12:29:46Z"},"LatLng":{"lat":24.99,"lng":121.569},"RawData":{"device_id":"28C2DDDD4354","timestamp":"2016-03-31T12:29:46Z","SiteName":"木柵國小","s_d0":94,"s_t0":23.12,"s_h0":85,"gps_lat":24.99,"gps_lon":121.569,"gps_num":9}}] --------------------------------------------------------------------------------