Giter Site home page Giter Site logo

map-viz's Introduction

武汉新型冠状病毒防疫信息收集平台-地图可视化项目

本项目负责平台的信息展示,可视化地理信息。

项目介绍

提供基于 ECharts 可视化库的前端组件。

1、提供一个完整独立的疫情地图组件

  • 目的&设计:创建一个独立的疫情地图可视化,有两个主要目标

    1. 地理精度:有市级地理粒度,最开始是一个全国地图的 heatmap,点击一个省重绘成省 map。(重绘参考
    • optional: 可能会做成县级精度,具体见讨论
    1. 时间信息:有时间轴,点击一个地区可以画出stacked area chart之类的疫情发展图 (确诊/疑似/死亡为不同层),也可以根据选择的时间点重绘地图。(时间轴参考案例)
  • 进度

  • 基础疫情地图,并用统计图(线图+ stacked area chart)显示疫情发展数据

  • 省市层级交互

  • 时间轴交互

  • 接入手动收集的省级数据

  • 疫情地图时间轴与统计图联动

2、提供一个通用地图组件

  • 目的:用于可视化各种不同地理信息(例如医院位置,酒店位置,etc.)
  • 使用:作为组件被前端调用,数据来自前端。

使用

npm install wuhan2020-mapviz

本地开发

配置

  1. 安装 Node.js
# clone the repo
git clone [email protected]:wuhan2020/map-viz.git

cd map-viz
# checkout react branch
git checkout react
# setup the npm env
npm install
# start the project
npm start

任务拆分&参与指南

合作指南参考(注意将 demo script 改成我们的 repo)

  1. 请在project 面板自行认领&self-assign issues(如果不能更改 assignee,请回复 issue 表示认领,我们会后面添加 assign)
  2. 对数据和设计如果有讨论请参见如下 issue:
  1. 如有其它建议请开 issue
  2. 参与更多讨论请加入slack 讨论组,我们在 channel #proj-map-visualization

技术栈

教程及有用链接

5 分钟上手 ECharts

echarts example

百度地图

坐标拾取

例子

百度迁徙

百度实时疫情数据

丁香园实时疫情数据

qq 实时疫情数据

临时接口

省市每日历史数据

百度实时疫情

百度迁徙

丁香园实时疫情

丁香园每分钟历史数据

丁香园其他

qq 实时+历史疫情

百度地图地址转经纬度

新闻收集接口

map-viz's People

Contributors

13ob0 avatar birdsofsummer avatar chenrui333 avatar dependabot[bot] avatar frank-zsy avatar hedgeh09 avatar lovepoem avatar oh-bala avatar pengzh0928 avatar ritaotao avatar shadowings-zy avatar shihao-wen avatar tongshuangwu avatar yagigo avatar yarray avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

map-viz's Issues

疫情地图接入时间信息+交互

目的&设计
创建一个独立的疫情地图可视化,有两个主要目标

  1. 地理精度:有市级地理粒度,最开始是一个全国地图的heatmap,点击一个省重绘成省map。(重绘参考
  2. 时间信息:有时间轴,点击一个地区可以画出stacked area chart之类的疫情发展图 (确诊/疑似/死亡为不同层),也可以根据选择的时间点重绘地图。(时间轴参考案例)

现状
疫情地图基础代码已经实现,请见VirusMap
还需要:

  • 添加时间信息
    • 做时间轴 (见 #55 ,后续改善需求见 #57 )
    • 数据统计stacked area chart/line chart
  • 实现交互
    • 点击省重绘省内地图/双击或提供按钮退出省内地图 (#47 #32 #27 ),
    • 点击地图省市县同时重绘stacked area chart
    • 点时间轴改变地图颜色

相关issue:
#22 现在的mockup数据不带时间信息,需要把API接入我们的代码,或者至少创建一个mock数据支持这部分的implementation

基础线图implementation + 改善

#50 已经添加了一个基础折线图。下面要做:

  • 纵轴加标签
  • 做成可以区分 确诊-疑似-死亡-治愈:确认+疑似做stacked bar chart方便辨认总数和趋势,死亡+治愈做折线图方便辨认分别的趋势。
  • 两个图上下对准统一放在地图左侧/右侧
  • 交互:点击时间轴的时候在线图上highlight出时间点

原issue: #23 因为已经做了大部分,把线图单独拆成一个issue。

收集已有的武汉疫情可视化/数据来源

自动计算color scale

现有的疫情地图是固定的color scale,因为有的省市人比较多有的比较少,写死color scale应该很快就会导致同色,自动算一下range然后做quartile binning应该会好一点?
code位置:VirusMap

改善现有的VirusMap基础时间轴

参见 #55 为地图增加时间轴

TODO(cr: @yarray

  • 当某一天数据缺失时,检查为何缺失,如果确实缺失,显式标注或者用前一天的数据
  • 手动切换时间(现在好像可以拖动不能点?)

创建点图+map展示其他地理信息

  • 目的:用于可视化各种不同地理信息(例如医院位置,酒店位置,etc.)
  • 使用:作为组件被前端调用,数据来自前端。
  • 基础设计:点图+地图-使用echarts+bmap,支持滚动缩放到具体坐标(参考例子
  • 交互
    • 不自带过滤等交互组件,上层应该自己创建checkbox, slider, etc. 过滤后数据传入地图组件可以重绘地图
    • 接受传入的mouseEvent,可以帮助做信息过滤及定位(e.g., 点击一个省选中它的信息)
    • (相关讨论)

相关:
#3 input API
#5 创建医院/酒店等带地理位置的mockup数据
#2 点图实例

改回地图的配色

现在的配色太红了,换回原来的:

            { min: 0, max: 0, color: '#EEFFEE' },
            { min: 1, lte: 10, color: '#FFFADD' },
            { gt: 10, lte: 50, color: '#FFDC90' },
            { gt: 50, lte: 100, color: '#FF9040' },
            { gt: 100, lte: 500, color: '#DD5C5C' },
            { gt: 500, lte: 1000, color: '#901010' },
            { gt: 1000, color: '#600000' }

疫情地图增加"当日增加"

加一个toggle按钮,可以在“迄今为止总量”和“今日增量”之间转换。
讨论:需不需要再加一个疑似和确诊的toggle?

更新疫情地图的交互

  • hover对手机交互不友好,考虑换成单击/双击/长按
  • 市级返回上级感觉不是很intuitive,考虑增加一个按钮?

Map的信息应该由我们这边提供?

我们现在的mock数据是:

{
  "name": "**",
  "mapUrl": "https://map-1252957949.cos.ap-guangzhou.myqcloud.com/china.json",
  "data": [{...}]
}

因为map信息是static的(而且我们map_data里已经有了)而且不是信息组存入的,我们code里应该自己带 地名->mapurl 的信息,不应该要求调用组件的人提供。

之前slack有小伙伴提过:

我之前做的地图是这样的
市级查询经纬度
全国300多个城市
可以做一个表city.json {"武汉":[经度,维度],....}
县级查询经纬度
因为有很多重名的县
需要用身份证前6位做key
{430200:"长沙县",...}
{
  430200:[经度,维度]
  ....
}

VirusMap的input数据格式?

如果我们已经有了确认的数据格式(现在调用里有用到confirmed之类的),那VirusMapProps里data的类型就不能是any[]了。要把这个类型固定下来吗?
还是我们还是像之前说的,让调用的人来输入哪些key要作为encoding(比如现在图上的颜色 colorKey="confirmed",还有hover tooltipKey={"cured": 治愈,"death":死亡})?
见数据格式设计的issue #3

疫情地图加深精度到县区级的数据

根据slack上与 @yarray @frank-zsy 讨论,现在尝试将疫情地图进一步细化到县级,数据会来自志愿者采集。

县级数据来源:https://shimo.im/sheets/88ddRDQRtjGp68XD/nkXxR

code上我初步能想到需要做的扩展:

  • 添加mockup数据,可以使用来自 #35 山东省数据
  • 决定县级 data interface,与省市级interface一起实现在patientStatInterface.ts,并在VirusMap.tsx中使用
  • VirusMap/VriusChart API: 由于数据来源变成数据组,还是要从上层接受输入,但只输入县级,省市级需要继续抓取。
  • 交互实现逻辑: 有地图+下级数据时支持下钻,没有时无法下钻 (点击下钻反应,可以有stats info update)

(其他的例如和时间轴及stats chart的交互应该可以自动支持新数据。欢迎大家补充)

相关:
#38 之前加到县级的提议
#35 一位朋友自己做的广东县区级可视化

我在运行npm start时遇到了问题

mi@DESKTOP-3GJBFFU MINGW64 ~/Desktop/map-viz (master)
$ npm start

[email protected] start C:\Users\mi\Desktop\map-viz
rm -rf dist/ && parcel source/index.html --open

'parcel' ▒▒▒▒▒ڲ▒▒▒▒ⲿ▒▒▒Ҳ▒▒▒ǿ▒▒▒▒еij▒▒▒
▒▒▒▒▒▒▒▒▒ļ▒▒▒
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start: rm -rf dist/ && parcel source/index.html --open
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\mi\AppData\Roaming\npm-cache_logs\2020-01-31T15_27_22_513Z-debug.log

通过 Github Actions 实现 CI

对于这个可视化项目,我们可以直接将网页host在 Github Pages 上。
再加上 Actions 来实现自动CI,自动部署,这样也方便其他人直接查看这个可视化项目~

复查疫情地图市级时间序列数据

搬运slack讨论
#48 @YagiGo 提到用省级时间加载在市级时间上,因为市级不是单独公布的,api里没有时间戳。
另外还需要做:

  • 还要根据需要在国家级或者省级整理成 array,现在是嵌套的 (cr: @yarray )

之前的相关issue: #22
如果做县级数据的相关issue: #52

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.