├── 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 |
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 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
或者,你已有獨立開發的感測器想要分享即時觀測值給零時觀測網可
73 | 填寫此表單 與我們聯絡。
74 |
75 |
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 |
111 |
112 |
113 |
117 |
118 |
請檢查你的網路狀態或稍後在試
119 |
120 |
121 |
122 |
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("");
35 | //$("#char").append("");
36 | $("#char").append("");
37 | $("#char").append("");
38 | //$("#char").append("");
39 |
40 | document.getElementById("field1").innerHTML += "";
41 | document.getElementById("field2").innerHTML += "";
42 | //document.getElementById("field3").innerHTML += "";
43 | //document.getElementById("field4").innerHTML += "";
44 | document.getElementById("field5").innerHTML += "";
45 | return;
46 | }
47 | function append_table(setting){
48 | $("#char").remove();
49 | $("#tablediv").remove();
50 | $("#cont").append("");
51 | document.getElementById("tablediv").innerHTML = "處理中"
52 | $.getJSON("https://thingspeak.com/channels/" + Channel_id + "/feeds.json", setting).success(function(data, xml){
53 | var table_str = ""
54 |
55 | table_str += "";
56 | table_str += "| Feed ID | ";
57 | table_str += "時間 (UTC) | ";
58 | table_str += "空氣溫度 (°C) | ";
59 | table_str += "相對濕度 (%) | ";
60 | //table_str += "有機汙染VoC (ppm) | ";
61 | table_str += "懸浮微粒PM2.5 (μg/m3) | ";
62 | table_str += "
";
63 |
64 | for(var i = data.feeds.length-1; i >= 0; i --){
65 | var feed = data.feeds[i];
66 | table_str += "";
67 | table_str += "| " + feed.entry_id + " | ";
68 | table_str += "" + feed.created_at.replace(/T/g, " ").replace(/Z/g, " ") + " | ";
69 | table_str += "" + feed['field' + (Element.Option ? (Element.Option.Temperature.charAt(5)) : '1')] + " | ";
70 | table_str += "" + feed['field' + (Element.Option ? (Element.Option.Humidity.charAt(5)) : '2')] + " | ";
71 | //table_str += "" + feed.field4 + " | ";
72 | table_str += "" + feed['field' + (Element.Option ? (Element.Option.Dust2_5.charAt(5)) : '5')] + " | ";
73 | table_str += "
";
74 | }
75 |
76 | table_str += "
";
77 |
78 | document.getElementById("tablediv").innerHTML = "資料表
";
79 | document.getElementById("tablediv").innerHTML += table_str;
80 | });
81 | }
82 | function field_set(field){
83 | fieldsetting = field;
84 | }
85 |
86 | function show_switch(type){
87 | if(type == 0){
88 | $("#typeswitch").text("表格模式");
89 | $("#typeswitch").attr({"onclick": "show_switch(1)"});
90 | append_frame();
91 | }else{
92 | $("#typeswitch").text("趨勢圖模式");
93 | $("#typeswitch").attr({"onclick": "show_switch(0)"});
94 | append_table();
95 | }
96 | }
97 |
98 | $(document).ready(function(){
99 | Channel_id = $("#theid").text();
100 | SiteGroup = $("#thety").text();
101 | console.log(SiteGroup);
102 | fixSiteGroup();
103 | console.log(SiteGroup);
104 | $.getJSON(SiteGroup + '_last.json').done(function(data){
105 | Element = data.find(function(element, index, arrary){
106 | return element.Channel_id == Channel_id;
107 | });
108 | console.log(Element);
109 | $("title").text(Element.SiteName + "歷史觀測資料");
110 | $("#chname").text(Element.SiteName).css({"color":"#AA7700", "font-size":"32px", "margin":"10px"});
111 | $("#map-btn").attr("onclick", "location.href=\'/map.html?type=" + $("#thety").text() + "&chid=" + Element.Channel_id + "\'");
112 | append_frame();
113 | }).fail(function(){
114 | $("#ErrorModal").modal();
115 | });
116 |
117 | $("#fieldset").submit(function(event){
118 | event.preventDefault();
119 | var k;
120 | if(fieldsetting == 5)
121 | k = 'Dust2_5';
122 | else if(fieldsetting == 1)
123 | k = 'Temperature';
124 | else if(fieldsetting == 2)
125 | k = 'Humidity';
126 | $("#f" + fieldsetting).attr("src", parse_frame_url((Element.Option ? (Element.Option[k].charAt(5)) : fieldsetting), {day: $("#day").val(), averge: $("#averge").val()}, k));
127 | $('#fieldModal').modal('hide');
128 | });
129 | $("#tableset").submit(function(event){
130 | event.preventDefault();
131 | var setting;
132 | if( $("#method").val() === "天數"){
133 | setting = {days: $("#tday").val()};
134 | }else if( $("#method").val() === "資料數量"){
135 | setting = {results: $("#result").val()};
136 | }else{
137 | setting = {start: $("#startdate").val() + "T" + $("#starttime").val() + ":00", end: $("#enddate").val() + "T" + $("#endtime").val() + ":00"};
138 | }
139 | append_table(setting);
140 | $('#tableModal').modal('hide');
141 | });
142 | $("#method").change(function(event){
143 | for(var i = 0; i <= 2; i ++){
144 | $(".tm").hide();
145 | }
146 | var selectm = "#" + ($("#method").val() === "天數" ? "tday" : $("#method").val() === "資料數量" ? "result" : "range" ) + "div";
147 | $(selectm).show();
148 | });
149 | });
--------------------------------------------------------------------------------
/Publish/Web/map.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 |
39 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
  圖層 
59 |
60 |
66 |
67 |
68 |
69 |
73 |
74 |
75 |
載入中
76 |
80 |
81 |
82 |
83 |
84 |
183 |
197 |
198 |
199 |
200 |
203 |
204 |
    本網頁所呈現之PM2.5濃度為即時數值,而行政院環境保護署所訂定之國家標準是24小時平均值,其空品測站數據是以「移動平均值」計算。
205 |
(移動平均值計算方式:0.5 × 前12小時平均 + 0.5 × 前4小時平均)
206 |
207 |
208 |
209 |
210 | ORDER_CHANNEL
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
--------------------------------------------------------------------------------
/Publish/Fetch/Data/EPA_RawData.json:
--------------------------------------------------------------------------------
1 | [{
2 | "SiteName": "基隆",
3 | "Channel_id": 87258,
4 | "api_key": "***",
5 | "LatLng": {
6 | "lng": 121.7600560000,
7 | "lat": 25.1291670000
8 | }
9 | }, {
10 | "SiteName": "汐止",
11 | "Channel_id": 87259,
12 | "api_key": "***",
13 | "LatLng": {
14 | "lng": 121.6423000000,
15 | "lat": 25.0671310000
16 | }
17 | }, {
18 | "SiteName": "萬里",
19 | "Channel_id": 87260,
20 | "api_key": "***",
21 | "LatLng": {
22 | "lng": 121.6898810000,
23 | "lat": 25.1796670000
24 | }
25 | }, {
26 | "SiteName": "新店",
27 | "Channel_id": 87262,
28 | "api_key": "***",
29 | "LatLng": {
30 | "lng": 121.5377780000,
31 | "lat": 24.9772220000
32 | }
33 | }, {
34 | "SiteName": "土城",
35 | "Channel_id": 87263,
36 | "api_key": "***",
37 | "LatLng": {
38 | "lng": 121.4518610000,
39 | "lat": 24.9825280000
40 | }
41 | }, {
42 | "SiteName": "板橋",
43 | "Channel_id": 87264,
44 | "api_key": "***",
45 | "LatLng": {
46 | "lng": 121.4586670000,
47 | "lat": 25.0129720000
48 | }
49 | }, {
50 | "SiteName": "新莊",
51 | "Channel_id": 87265,
52 | "api_key": "***",
53 | "LatLng": {
54 | "lng": 121.4325000000,
55 | "lat": 25.0379720000
56 | }
57 | }, {
58 | "SiteName": "菜寮",
59 | "Channel_id": 87266,
60 | "api_key": "***",
61 | "LatLng": {
62 | "lng": 121.4810280000,
63 | "lat": 25.0689500000
64 | }
65 | }, {
66 | "SiteName": "林口",
67 | "Channel_id": 87267,
68 | "api_key": "***",
69 | "LatLng": {
70 | "lng": 121.3768690000,
71 | "lat": 25.0771970000
72 | }
73 | }, {
74 | "SiteName": "淡水",
75 | "Channel_id": 87268,
76 | "api_key": "***",
77 | "LatLng": {
78 | "lng": 121.4492390000,
79 | "lat": 25.1645000000
80 | }
81 | }, {
82 | "SiteName": "士林",
83 | "Channel_id": 87269,
84 | "api_key": "***",
85 | "LatLng": {
86 | "lng": 121.5153890000,
87 | "lat": 25.1054170000
88 | }
89 | }, {
90 | "SiteName": "中山",
91 | "Channel_id": 87270,
92 | "api_key": "***",
93 | "LatLng": {
94 | "lng": 121.5265280000,
95 | "lat": 25.0623610000
96 | }
97 | }, {
98 | "SiteName": "萬華",
99 | "Channel_id": 87271,
100 | "api_key": "***",
101 | "LatLng": {
102 | "lng": 121.5079720000,
103 | "lat": 25.0465030000
104 | }
105 | }, {
106 | "SiteName": "古亭",
107 | "Channel_id": 87272,
108 | "api_key": "***",
109 | "LatLng": {
110 | "lng": 121.5295560000,
111 | "lat": 25.0206080000
112 | }
113 | }, {
114 | "SiteName": "松山",
115 | "Channel_id": 87273,
116 | "api_key": "***",
117 | "LatLng": {
118 | "lng": 121.5786110000,
119 | "lat": 25.0500000000
120 | }
121 | }, {
122 | "SiteName": "大同",
123 | "Channel_id": 87274,
124 | "api_key": "***",
125 | "LatLng": {
126 | "lng": 121.5133110000,
127 | "lat": 25.0632000000
128 | }
129 | }, {
130 | "SiteName": "桃園",
131 | "Channel_id": 87275,
132 | "api_key": "***",
133 | "LatLng": {
134 | "lng": 121.3199640000,
135 | "lat": 24.9947890000
136 | }
137 | }, {
138 | "SiteName": "大園",
139 | "Channel_id": 87278,
140 | "api_key": "***",
141 | "LatLng": {
142 | "lng": 121.2018110000,
143 | "lat": 25.0603440000
144 | }
145 | }, {
146 | "SiteName": "觀音",
147 | "Channel_id": 87279,
148 | "api_key": "***",
149 | "LatLng": {
150 | "lng": 121.0827610000,
151 | "lat": 25.0355030000
152 | }
153 | }, {
154 | "SiteName": "平鎮",
155 | "Channel_id": 87280,
156 | "api_key": "***",
157 | "LatLng": {
158 | "lng": 121.2039860000,
159 | "lat": 24.9527860000
160 | }
161 | }, {
162 | "SiteName": "龍潭",
163 | "Channel_id": 87281,
164 | "api_key": "***",
165 | "LatLng": {
166 | "lng": 121.2163500000,
167 | "lat": 24.8638690000
168 | }
169 | }, {
170 | "SiteName": "湖口",
171 | "Channel_id": 87282,
172 | "api_key": "***",
173 | "LatLng": {
174 | "lng": 121.0386530000,
175 | "lat": 24.9001420000
176 | }
177 | }, {
178 | "SiteName": "竹東",
179 | "Channel_id": 87283,
180 | "api_key": "***",
181 | "LatLng": {
182 | "lng": 121.0889030000,
183 | "lat": 24.7406440000
184 | }
185 | }, {
186 | "SiteName": "新竹",
187 | "Channel_id": 87284,
188 | "api_key": "***",
189 | "LatLng": {
190 | "lng": 120.9720750000,
191 | "lat": 24.8056190000
192 | }
193 | }, {
194 | "SiteName": "頭份",
195 | "Channel_id": 87285,
196 | "api_key": "***",
197 | "LatLng": {
198 | "lng": 120.8985720000,
199 | "lat": 24.6969690000
200 | }
201 | }, {
202 | "SiteName": "苗栗",
203 | "Channel_id": 87287,
204 | "api_key": "***",
205 | "LatLng": {
206 | "lng": 120.8202000000,
207 | "lat": 24.5652690000
208 | }
209 | }, {
210 | "SiteName": "三義",
211 | "Channel_id": 87288,
212 | "api_key": "***",
213 | "LatLng": {
214 | "lng": 120.7588330000,
215 | "lat": 24.3829420000
216 | }
217 | }, {
218 | "SiteName": "豐原",
219 | "Channel_id": 87291,
220 | "api_key": "***",
221 | "LatLng": {
222 | "lng": 120.7417110000,
223 | "lat": 24.2565860000
224 | }
225 | }, {
226 | "SiteName": "沙鹿",
227 | "Channel_id": 87292,
228 | "api_key": "***",
229 | "LatLng": {
230 | "lng": 120.5687940000,
231 | "lat": 24.2256280000
232 | }
233 | }, {
234 | "SiteName": "大里",
235 | "Channel_id": 87293,
236 | "api_key": "***",
237 | "LatLng": {
238 | "lng": 120.6776890000,
239 | "lat": 24.0996110000
240 | }
241 | }, {
242 | "SiteName": "忠明",
243 | "Channel_id": 87294,
244 | "api_key": "***",
245 | "LatLng": {
246 | "lng": 120.6410920000,
247 | "lat": 24.1519580000
248 | }
249 | }, {
250 | "SiteName": "西屯",
251 | "Channel_id": 87295,
252 | "api_key": "***",
253 | "LatLng": {
254 | "lng": 120.6169170000,
255 | "lat": 24.1621970000
256 | }
257 | }, {
258 | "SiteName": "彰化",
259 | "Channel_id": 87296,
260 | "api_key": "***",
261 | "LatLng": {
262 | "lng": 120.5415190000,
263 | "lat": 24.0660000000
264 | }
265 | }, {
266 | "SiteName": "線西",
267 | "Channel_id": 87297,
268 | "api_key": "***",
269 | "LatLng": {
270 | "lng": 120.4690610000,
271 | "lat": 24.1316720000
272 | }
273 | }, {
274 | "SiteName": "二林",
275 | "Channel_id": 87298,
276 | "api_key": "***",
277 | "LatLng": {
278 | "lng": 120.4096530000,
279 | "lat": 23.9251750000
280 | }
281 | }, {
282 | "SiteName": "南投",
283 | "Channel_id": 87299,
284 | "api_key": "***",
285 | "LatLng": {
286 | "lng": 120.6853060000,
287 | "lat": 23.9130000000
288 | }
289 | }, {
290 | "SiteName": "斗六",
291 | "Channel_id": 87300,
292 | "api_key": "***",
293 | "LatLng": {
294 | "lng": 120.5449940000,
295 | "lat": 23.7118530000
296 | }
297 | }, {
298 | "SiteName": "崙背",
299 | "Channel_id": 87301,
300 | "api_key": "***",
301 | "LatLng": {
302 | "lng": 120.3487420000,
303 | "lat": 23.7575470000
304 | }
305 | }, {
306 | "SiteName": "新港",
307 | "Channel_id": 87302,
308 | "api_key": "***",
309 | "LatLng": {
310 | "lng": 120.3455310000,
311 | "lat": 23.5548390000
312 | }
313 | }, {
314 | "SiteName": "朴子",
315 | "Channel_id": 87303,
316 | "api_key": "***",
317 | "LatLng": {
318 | "lng": 120.2473500000,
319 | "lat": 23.4653080000
320 | }
321 | }, {
322 | "SiteName": "臺西",
323 | "Channel_id": 87304,
324 | "api_key": "***",
325 | "LatLng": {
326 | "lng": 120.2028420000,
327 | "lat": 23.7175330000
328 | }
329 | }, {
330 | "SiteName": "嘉義",
331 | "Channel_id": 87305,
332 | "api_key": "***",
333 | "LatLng": {
334 | "lng": 120.4408330000,
335 | "lat": 23.4627780000
336 | }
337 | }, {
338 | "SiteName": "新營",
339 | "Channel_id": 87306,
340 | "api_key": "***",
341 | "LatLng": {
342 | "lng": 120.3172500000,
343 | "lat": 23.3056330000
344 | }
345 | }, {
346 | "SiteName": "善化",
347 | "Channel_id": 87307,
348 | "api_key": "***",
349 | "LatLng": {
350 | "lng": 120.2971420000,
351 | "lat": 23.1150970000
352 | }
353 | }, {
354 | "SiteName": "安南",
355 | "Channel_id": 87308,
356 | "api_key": "***",
357 | "LatLng": {
358 | "lng": 120.2175000000,
359 | "lat": 23.0481970000
360 | }
361 | }, {
362 | "SiteName": "臺南",
363 | "Channel_id": 87309,
364 | "api_key": "***",
365 | "LatLng": {
366 | "lng": 120.2026170000,
367 | "lat": 22.9845810000
368 | }
369 | }, {
370 | "SiteName": "美濃",
371 | "Channel_id": 87310,
372 | "api_key": "***",
373 | "LatLng": {
374 | "lng": 120.5305420000,
375 | "lat": 22.8835830000
376 | }
377 | }, {
378 | "SiteName": "橋頭",
379 | "Channel_id": 87311,
380 | "api_key": "***",
381 | "LatLng": {
382 | "lng": 120.3056890000,
383 | "lat": 22.7575060000
384 | }
385 | }, {
386 | "SiteName": "仁武",
387 | "Channel_id": 87312,
388 | "api_key": "***",
389 | "LatLng": {
390 | "lng": 120.3326310000,
391 | "lat": 22.6890560000
392 | }
393 | }, {
394 | "SiteName": "鳳山",
395 | "Channel_id": 87313,
396 | "api_key": "***",
397 | "LatLng": {
398 | "lng": 120.3580830000,
399 | "lat": 22.6273920000
400 | }
401 | }, {
402 | "SiteName": "大寮",
403 | "Channel_id": 87314,
404 | "api_key": "***",
405 | "LatLng": {
406 | "lng": 120.4250810000,
407 | "lat": 22.5657470000
408 | }
409 | }, {
410 | "SiteName": "林園",
411 | "Channel_id": 87315,
412 | "api_key": "***",
413 | "LatLng": {
414 | "lng": 120.4117500000,
415 | "lat": 22.4795000000
416 | }
417 | }, {
418 | "SiteName": "楠梓",
419 | "Channel_id": 87316,
420 | "api_key": "***",
421 | "LatLng": {
422 | "lng": 120.3282890000,
423 | "lat": 22.7336670000
424 | }
425 | }, {
426 | "SiteName": "左營",
427 | "Channel_id": 87317,
428 | "api_key": "***",
429 | "LatLng": {
430 | "lng": 120.2929170000,
431 | "lat": 22.6748610000
432 | }
433 | }, {
434 | "SiteName": "前金",
435 | "Channel_id": 87318,
436 | "api_key": "***",
437 | "LatLng": {
438 | "lng": 120.2880860000,
439 | "lat": 22.6325670000
440 | }
441 | }, {
442 | "SiteName": "前鎮",
443 | "Channel_id": 87319,
444 | "api_key": "***",
445 | "LatLng": {
446 | "lng": 120.3075640000,
447 | "lat": 22.6053860000
448 | }
449 | }, {
450 | "SiteName": "小港",
451 | "Channel_id": 87320,
452 | "api_key": "***",
453 | "LatLng": {
454 | "lng": 120.3377360000,
455 | "lat": 22.5658330000
456 | }
457 | }, {
458 | "SiteName": "屏東",
459 | "Channel_id": 87321,
460 | "api_key": "***",
461 | "LatLng": {
462 | "lng": 120.4880330000,
463 | "lat": 22.6730810000
464 | }
465 | }, {
466 | "SiteName": "潮州",
467 | "Channel_id": 87322,
468 | "api_key": "***",
469 | "LatLng": {
470 | "lng": 120.5611750000,
471 | "lat": 22.5231080000
472 | }
473 | }, {
474 | "SiteName": "恆春",
475 | "Channel_id": 87323,
476 | "api_key": "***",
477 | "LatLng": {
478 | "lng": 120.7889280000,
479 | "lat": 21.9580690000
480 | }
481 | }, {
482 | "SiteName": "臺東",
483 | "Channel_id": 87324,
484 | "api_key": "***",
485 | "LatLng": {
486 | "lng": 121.1504500000,
487 | "lat": 22.7553580000
488 | }
489 | }, {
490 | "SiteName": "花蓮",
491 | "Channel_id": 87325,
492 | "api_key": "***",
493 | "LatLng": {
494 | "lng": 121.5997690000,
495 | "lat": 23.9713060000
496 | }
497 | }, {
498 | "SiteName": "陽明",
499 | "Channel_id": 87326,
500 | "api_key": "***",
501 | "LatLng": {
502 | "lng": 121.5295830000,
503 | "lat": 25.1827220000
504 | }
505 | }, {
506 | "SiteName": "宜蘭",
507 | "Channel_id": 87327,
508 | "api_key": "***",
509 | "LatLng": {
510 | "lng": 121.7463940000,
511 | "lat": 24.7479170000
512 | }
513 | }, {
514 | "SiteName": "冬山",
515 | "Channel_id": 87328,
516 | "api_key": "***",
517 | "LatLng": {
518 | "lng": 121.7929280000,
519 | "lat": 24.6322030000
520 | }
521 | }, {
522 | "SiteName": "三重",
523 | "Channel_id": 87329,
524 | "api_key": "***",
525 | "LatLng": {
526 | "lng": 121.4938060000,
527 | "lat": 25.0726110000
528 | }
529 | }, {
530 | "SiteName": "中壢",
531 | "Channel_id": 87330,
532 | "api_key": "***",
533 | "LatLng": {
534 | "lng": 121.2216670000,
535 | "lat": 24.9532780000
536 | }
537 | }, {
538 | "SiteName": "竹山",
539 | "Channel_id": 87331,
540 | "api_key": "***",
541 | "LatLng": {
542 | "lng": 120.6773060000,
543 | "lat": 23.7563890000
544 | }
545 | }, {
546 | "SiteName": "永和",
547 | "Channel_id": 87332,
548 | "api_key": "***",
549 | "LatLng": {
550 | "lng": 121.5163060000,
551 | "lat": 25.0170000000
552 | }
553 | }, {
554 | "SiteName": "復興",
555 | "Channel_id": 87333,
556 | "api_key": "***",
557 | "LatLng": {
558 | "lng": 120.3120170000,
559 | "lat": 22.6087110000
560 | }
561 | }, {
562 | "SiteName": "埔里",
563 | "Channel_id": 87334,
564 | "api_key": "***",
565 | "LatLng": {
566 | "lng": 120.9679030000,
567 | "lat": 23.9688420000
568 | }
569 | }, {
570 | "SiteName": "馬祖",
571 | "Channel_id": 87335,
572 | "api_key": "***",
573 | "LatLng": {
574 | "lng": 119.9498750000,
575 | "lat": 26.1604690000
576 | }
577 | }, {
578 | "SiteName": "金門",
579 | "Channel_id": 87336,
580 | "api_key": "***",
581 | "LatLng": {
582 | "lng": 118.3122560000,
583 | "lat": 24.4321330000
584 | }
585 | }, {
586 | "SiteName": "馬公",
587 | "Channel_id": 87337,
588 | "api_key": "***",
589 | "LatLng": {
590 | "lng": 119.5661580000,
591 | "lat": 23.5690310000
592 | }
593 | }, {
594 | "SiteName": "關山",
595 | "Channel_id": 87338,
596 | "api_key": "***",
597 | "LatLng": {
598 | "lng": 121.1619330000,
599 | "lat": 23.0450830000
600 | }
601 | }, {
602 | "SiteName": "麥寮",
603 | "Channel_id": 87340,
604 | "api_key": "***",
605 | "LatLng": {
606 | "lng": 120.2518250000,
607 | "lat": 23.7535060000
608 | }
609 | }]
--------------------------------------------------------------------------------
/Publish/Web/JavaScript/Map_main.js:
--------------------------------------------------------------------------------
1 | /*
2 | FileName : Map_main.js
3 | Author : Immortalmice
4 | */
5 |
6 | /* Global Variable */
7 | var SiteGroups = ['ProbeCube', 'EPA', 'LASS', 'LASS4U', 'Indie', 'Airbox', 'Webduino'];
8 | var SiteGroups_isFinishedLoading = 0;
9 | var SitesData = [];
10 |
11 | var MainMap;
12 | var trafficLayer;
13 | var firstLoad = true;
14 | var showOptions = {
15 | showType : "dust2_5",
16 | displaySiteGroup : {
17 | ProbeCube : true,
18 | EPA : true,
19 | LASS : true,
20 | LASS4U : true,
21 | miaoski : true,
22 | Airbox : true,
23 | "CCU NEAT" : true,
24 | "CCU 100" : true,
25 | "ES-AIR" : true,
26 | Webduino : true,
27 | "KS-001" : true
28 | },
29 | timeRange : 14400000,
30 | setTrafficLayer: false
31 | };
32 | var topInfoBubble = undefined;
33 |
34 | var now = new Date();
35 |
36 |
37 | var temp_gap = [0, 5, 10, 15, 20, 25, 30, 35, 40];
38 | var humi_gap = [20, 40, 60, 80];
39 | var dust2_5_gap = [11, 23, 35, 41, 47, 53, 58, 64, 70];
40 | var dust2_5_NASA_gap = [0, 3, 5, 8, 10, 13, 15, 18, 20, 35, 50, 65];
41 |
42 | var groupUrl = {
43 | LASS: "https://github.com/LinkItONEDevGroup/LASS",
44 | ProbeCube: "https://github.com/Lafudoci/ProbeCube",
45 | AirBox: undefined,
46 | EPA: "http://taqm.epa.gov.tw/taqm/tw/Pm25Index.aspx",
47 | Pilot: "https://github.com/miaoski/pm25"
48 | };
49 |
50 | /* Suport Functions */
51 | function CreateMarker(element){
52 | var obj = element;
53 | obj.InfoBubble = new InfoBubble({
54 | map : MainMap,
55 | content : '',
56 | padding : 0,
57 | borderRadius : 20
58 | });
59 | obj.Marker = new google.maps.Marker({
60 | position : new google.maps.LatLng(element.LatLng.lat, element.LatLng.lng),
61 | map : MainMap,
62 | title : "ID: " + element.Channel_id,
63 | icon : IconUrl(element),
64 | clickable : true,
65 | opacity : 0.8
66 | });
67 | google.maps.event.addListener(obj.Marker, 'click', function(){
68 | console.log(obj);
69 | if(topInfoBubble){
70 | topInfoBubble.close();
71 | $('#infoBul').remove();
72 | }
73 | obj.InfoBubble.setMinWidth(725);
74 | obj.InfoBubble.setMinHeight(445);
75 | google.maps.event.addListener(obj.InfoBubble, 'domready', function(){
76 | setInfoBubbleContent(obj);
77 | });
78 | obj.InfoBubble.open(MainMap, obj.Marker);
79 | topInfoBubble = obj.InfoBubble;
80 | });
81 | if(element.Channel_id == $("#order_channel").text())
82 | MainMap.setCenter(obj.Marker.getPosition());
83 | return obj;
84 | }
85 | function IconUrl(element){
86 | var str = 'Pic/dot/';
87 | if(element.SiteGroup !== "EPA"){
88 | str += 'c';
89 | }else{
90 | str += 'd';
91 | }
92 | var value, arrary;
93 | if(showOptions.showType === "dust2_5"){
94 | str += 'd';
95 | value = element.Data.Dust2_5;
96 | arrary = dust2_5_gap;
97 | }else if(showOptions.showType === "dust2_5_NASA"){
98 | str += 'dn';
99 | value = element.Data.Dust2_5;
100 | arrary = dust2_5_NASA_gap;
101 | }else if(showOptions.showType === "temp"){
102 | str += 't';
103 | value = element.Data.Temperature;
104 | arrary = temp_gap;
105 | }else if(showOptions.showType === "humi"){
106 | str += 'h';
107 | value = element.Data.Humidity;
108 | arrary = humi_gap;
109 | }
110 | if(!value && value !== 0){
111 | return str.substring(0, 9) + '-1.png';
112 | }
113 | for(var i = 0; i <= arrary.length-1; i ++){
114 | if(value <= arrary[i])
115 | return str + i + '.png';
116 | }
117 | return str + arrary.length + '.png';
118 | }
119 | function fixSiteGroup(str){
120 | for(var i = 0; i <= SiteGroups.length-1; i ++){
121 | if(str === 'LASS4U')
122 | return 'LASS'
123 | if(str === SiteGroups[i])
124 | return str;
125 | }
126 | return 'Indie';
127 | }
128 | function showRawData(SiteName){
129 | var Site = SitesData.find(function(element, index, arrary){
130 | return element.SiteName === SiteName;
131 | });
132 | var RawData = Site.RawData;
133 | var table_str = "";
134 | table_str += "";
135 | table_str += "| 欄位 | ";
136 | table_str += "值 | ";
137 | table_str += "
";
138 |
139 | for(var prop in RawData){
140 | if(Site.SiteGroup === "Airbox" && prop === "device_id")
141 | continue;
142 | table_str += "";
143 | table_str += "| " + prop + " | ";
144 | table_str += "" + RawData[prop] + " | ";
145 | table_str += "
";
146 | }
147 | $("#RawDataTable").html(table_str);
148 | $("#RawDataModal").modal('show');
149 | }
150 | function setInfoBubbleContent(element){
151 | var closeButton = $("[src='http://maps.gstatic.com/intl/en_us/mapfiles/iw_close.gif']");
152 | closeButton.attr({src : "Pic/icons/close.png"});
153 | closeButton.css({width : "30px", height : "30px", right : "-10px", top : "-10px"});
154 | var infoBul = $('#infoBul');
155 | infoBul.html("");
156 | infoBul.children().append('' + element.SiteName + '
');
157 | infoBul.children().append('
');
158 | if(element.SiteGroup !== 'LASS'){
159 | $("#thingspeakurl").attr("href", "http://api.thingspeak.com/channels/" + element.Channel_id );
160 | }else{
161 | $("#thingspeakurl").attr("href", 'http://nrl.iis.sinica.edu.tw/LASS/show.php?device_id=' + element.SiteName);
162 | }
163 | infoBul.append("");
164 | infoBul.children(':nth-child(2)').append("");
165 | infoBul.children(':nth-child(2)').append("");
166 | var infos = infoBul.children(':nth-child(2)').children(':nth-child(1)');
167 | infos.css({'padding-right' : '0px'});
168 | infos.append("");
169 | for(var i = 0; i <= 4; i ++)
170 | infos.append("");
171 | infos.children(':nth-child(2)').append('
');
172 | infos.children(':nth-child(2)').append('空氣溫度   
');
173 | infos.children(':nth-child(2)').append('' + ((element.Data.Temperature || element.Data.Temperature === 0) ? element.Data.Temperature.toFixed(1) : '--') + ' °C
');
174 | infos.children(':nth-child(3)').append('
');
175 | infos.children(':nth-child(3)').append('相對濕度   
');
176 | infos.children(':nth-child(3)').append('' + ((element.Data.Humidity || element.Data.Humidity === 0) ? element.Data.Humidity.toFixed(0) : '--') + ' %
');
177 | infos.children(':nth-child(4)').append('
');
178 | infos.children(':nth-child(4)').append('PM2.5   
');
179 | infos.children(':nth-child(4)').append('' + ((element.Data.Dust2_5 || element.Data.Dust2_5 === 0) ? element.Data.Dust2_5.toFixed(0) : '--') + ' μg/m3
');
180 | infos.children(':nth-child(5)').append('');
181 | infos.children(':nth-child(6)').css({'padding-top' : '20px', 'padding-right' : '0px'});
182 | infos.children(':nth-child(6)').append('' + timegap(element.Data.Create_at) + '
');
183 | var chart = infoBul.children(':nth-child(2)').children(':nth-child(2)');
184 | $('#Chart').remove();
185 | chart.attr('id', 'Chart');
186 | if(element.SiteGroup !== "LASS" && element.SiteGroup !== "LASS4U" && element.SiteGroup !== "Airbox" && element.SiteGroup !== "Webduino"){
187 | infos.children(':nth-child(6)').append('');
188 | chart.html('');
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('
');
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}}]
--------------------------------------------------------------------------------