WebGL Earth颱風監測web應用

文章首發於本人微信公眾號:WebGL Eearth颱風監測web應用

前言

花了一天時間,開發了一個基於WebGL Eearth的颱風監測系統,寫這個web應用的目的有兩個:

1、我在github上創建了@viseye組織已經一段時間,但是遲遲沒有項目,於是近期打算寫一個

2、另一個原因是我再知乎開了可視化編程專欄,文章偶爾需要繼續更新,就得找些東西來寫

相關地址:

  • github @viseye:viseye · GitHub

  • 知乎可視化編程專欄:可視化編程 - 知乎專欄

  • VisEye Website: Website by viseye

  • 個人微信公眾號id:giscafer

颱風監測web應用webglearth-typhoon

運行截圖

下圖GIF格式,有動畫,點擊圖片即可播放

Demo Url

在線demo:Website by viseye

建議使用支持WebGL HTML5的瀏覽器打開,IE10+或新版Google Chrome等

iPhone 瀏覽器和微信(IOS)內置瀏覽器測試可打開

實現

  • 1、服務端

    服務端使用nodejs搭建伺服器,提供前端數據請求的api介面,目前部署於BAE

app.js代碼如下,主要是使用express搭建一個簡單的server

/** * app entry */"use strict"const path=require("path");const express=require("express");const bodyParser=require("body-parser");const Typhoon=require("node-typhoon");const app=express();app.set("port",(process.env.PORT || 3000));app.use("",express.static(path.join(__dirname,"public")));app.use(bodyParser.json());app.use(bodyParser.urlencoded({extended:true}));// Additional middleware which will set headers that we need on each request.app.use((req, res, next)=>{ res.setHeader("Access-Control-Allow-Origin", "*"); // Disable caching so we"ll always get the latest comments. res.setHeader("Cache-Control", "no-cache"); next();});//get real-time typhoon information app.get("/api/typhoonActivity",(req,res)=>{ Typhoon.typhoonActivity().then(info=>{ res.send(info); }).catch(err=>{ res.send(err); });});//get historical typhoon information app.get("/api/typhoonList",(req,res)=>{ let year=new Date().getFullYear(); Typhoon.typhoonList(year).then(info=>{ res.send(info); }).catch(err=>{ res.send(err); });});app.listen(app.get("port"),()=>{ console.log("Server started: http://localhost:"+app.get("port")+"/");});

  • 2、中間件 node-typhoon

中間件說的是nodejs的·middleware·,·webglearth-typhoon·使用了個人自己封裝的node-typhoon(已發布到npm),提供了獲取實時颱風的介面,以及歷史颱風信息的介面,目前版本是v1.0.0,後期會更新。

如下數據結果是今天(2016年10月15日11:53:33)獲取的颱風信息,兩個颱風從太平洋方向過來

[ { "enname": "SARIKA", "lat": "14.40", "lng": "124.30", "movedirection": "西北西", "movespeed": "22", "name": "莎莉嘉", "power": "12", "pressure": "970", "radius10": "100", "radius7": "220", "speed": "35", "strong": "颱風", "tfid": "201621", "time": "2016-10-15 11:00:00", "timeformate": "10月15日11時" }, { "enname": "HAIMA", "lat": "8.20", "lng": "143.90", "movedirection": "北西", "movespeed": "22", "name": "海馬", "power": "8", "pressure": "998", "radius10": null, "radius7": "200", "speed": "18", "strong": "熱帶風暴", "tfid": "201622", "time": "2016-10-15 08:00:00", "timeformate": "10月15日8時" }]

更多見:node-typhoon

  • 3、前端 webglearth2

    官方介紹:

    webglearth2 - WebGL Earth 2 - the source code of the project,There is an extremely easy to use JavaScript API - fully mimicking LeafletJS.

webglearth2是一個開源虛擬地球web應用程序,可以運行在任何支持HTML5 WebGL標準的web瀏覽器上,以及移動設備,如iPhone,iPad或基於Android的手機也會支持。此外提供LeafletJS封裝的地圖API。

傳送門:GitHub - webglearth/webglearth2: WebGL Earth 2

webglearth-typhoon實現整個思路:

前端載入虛擬三維球+地圖後,通過調用nodejs伺服器中node-typhoon提供的Api獲取颱風信息,數據返回前端後,組裝好,通過marker和氣泡彈窗展示信息的方式載入到地圖。This is all~

TODO

1、加上歷史颱風查詢展示;

2、實時颱風路徑情況

(感興趣的同學可以一起開發)

總結

總結一下用到的技術

  • JavaScript+HTML5+CSS 網頁必須的,不多說
  • JavaScript新標準ES6,源碼可能用了一些ES6的新特性書寫
  • WebGL
  • LeafletJS 一個地圖JavaScript庫
  • Nodejs 服務端

好像都是JavaScript~~~

源碼

Github:GitHub - viseye/webglearth-typhoon: A typhoon web application base on WebGL Earth

愛學習、愛分享的同學,可關注個人微信公眾號(id:giscafer)


推薦閱讀:

有誰可以說說「燈光遙感」?
Python · cv2(零)

TAG:可视化 | WebGIS | GIS地理信息系统 |