diff --git a/components/Drawer/index.vue b/components/Drawer/index.vue deleted file mode 100755 index f24e427..0000000 --- a/components/Drawer/index.vue +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/components/DrawerItem/index.vue b/components/DrawerItem/index.vue deleted file mode 100755 index ae7daa7..0000000 --- a/components/DrawerItem/index.vue +++ /dev/null @@ -1,79 +0,0 @@ - - - - - diff --git a/components/Latest/index.vue b/components/Latest/index.vue new file mode 100755 index 0000000..0a27e1f --- /dev/null +++ b/components/Latest/index.vue @@ -0,0 +1,174 @@ + + + + + \ No newline at end of file diff --git a/components/Map/index.vue b/components/Map/index.vue index b4cd227..52cc654 100755 --- a/components/Map/index.vue +++ b/components/Map/index.vue @@ -10,15 +10,13 @@ export default { props: { data: Object }, - data() { - return {} - }, methods: { createMap(token) { const self = this const mapboxgl = require('mapbox-gl/dist/mapbox-gl') mapboxgl.accessToken = token + let popup let totals let markers = {} let markersOnScreen = {} @@ -32,8 +30,6 @@ export default { zoom: 1.6 }) - map.addControl(new mapboxgl.NavigationControl()) - const addLayers = map => { map.addSource('covid', { type: 'geojson', @@ -98,48 +94,24 @@ export default { }) } - map.on('style.load', function() { - addLayers(map) - }) - - map.on('click', 'clusters', function(e) { - var features = map.queryRenderedFeatures(e.point, { - layers: ['clusters'] - }) - var clusterId = features[0].properties.cluster_id - map - .getSource('covid') - .getClusterExpansionZoom(clusterId, function(err, zoom) { - if (err) return - - map.easeTo({ - center: features[0].geometry.coordinates, - zoom: zoom - }) - }) - - self.$gtag('event', 'click', { - event_category: 'clustered', - event_label: 'clustered click', - value: clusterId - }) - }) - - map.on('click', 'unclustered-point', function(e) { - let coordinates = e.features[0].geometry.coordinates.slice() + const getTitle = e => { const country = e.features[0].properties.country const province = e.features[0].properties.province const title = (province ? `${province}, ` : '') + country + return title + } + + const showPopup = (title, e) => { + let coordinates = e.features[0].geometry.coordinates.slice() const cc = e.features[0].properties.confirmed_count const rc = e.features[0].properties.recovered_count const dc = e.features[0].properties.dead_count - const last_update = e.features[0].properties.last_update while (Math.abs(e.lngLat.lng - coordinates[0]) > 180) { coordinates[0] += e.lngLat.lng > coordinates[0] ? 360 : -360 } - new mapboxgl.Popup() + popup = new mapboxgl.Popup() .setLngLat(coordinates) .setHTML(` - - + `) .addTo(map) - + } + + map.on('style.load', _ => addLayers(map)) + + map.on('click', 'clusters', e => { + var features = map.queryRenderedFeatures(e.point, { + layers: ['clusters'] + }) + var clusterId = features[0].properties.cluster_id + map + .getSource('covid') + .getClusterExpansionZoom(clusterId, function(err, zoom) { + if (err) return + + map.easeTo({ + center: features[0].geometry.coordinates, + zoom: zoom + }) + }) + + self.$gtag('event', 'click', { + event_category: 'clustered', + event_label: 'clustered click', + value: clusterId + }) + }) + + map.on('click', 'unclustered-point', e => { + const title = getTitle(e) + showPopup(title, e) self.$gtag('event', 'click', { event_category: 'unclustered', event_label: 'unclustered click', @@ -170,12 +170,26 @@ export default { map.on('mouseenter', 'clusters', _ => map.getCanvas().style.cursor = 'pointer') map.on('mouseleave', 'clusters', _ => map.getCanvas().style.cursor = '') - map.on('mouseenter', 'unclustered-point', _ => map.getCanvas().style.cursor = 'pointer') - map.on('mouseleave', 'unclustered-point', _ => map.getCanvas().style.cursor = '') + + map.on('mouseenter', 'unclustered-point', e => { + const title = getTitle(e) + showPopup(title, e) + map.getCanvas().style.cursor = 'pointer' + self.$gtag('event', 'mouseenter', { + event_category: 'unclustered', + event_label: 'unclustered mouseenter', + value: title + }) + }) + + map.on('mouseleave', 'unclustered-point', _ => { + map.getCanvas().style.cursor = '' + popup.remove() + }) } }, mounted() { - if (process.env.accessToken) this.createMap(process.env.accessToken) + if (process.env.MAPBOX_TOKEN) this.createMap(process.env.MAPBOX_TOKEN) } } @@ -188,52 +202,59 @@ export default { width: 100%; height: 100%; - .mapboxgl-ctrl-top-right { + .mapboxgl-ctrl-bottom-left { .mapboxgl-ctrl { - margin-top: 26px; + margin: 0 0 16px 24px; + } + } + + .mapboxgl-ctrl-attrib { + &.mapboxgl-compact { + margin: 0 24px 14px 0; } } } /deep/ .popup { margin: 0 16px 0 8px; + &_title { margin-top: 4px; margin-bottom: 8px; font-size: 16px; } + &_item { + span { font-weight: 700; font-size: 14px; + &:first-child { font-weight: 300; } } + &.item_confirmed { + .value { color: #ffa500; } } + &.item_recovered { + .value { color: #66a266; } } + &.item_dead { + .value { color: #b20000; } } } - &_last-update { - border-top: 1px solid #cccccc; - margin-top: 5px; - padding-top: 5px; - - span { - font-weight: 700; - } - } } \ No newline at end of file diff --git a/components/Overview/index.vue b/components/Overview/index.vue new file mode 100755 index 0000000..520940a --- /dev/null +++ b/components/Overview/index.vue @@ -0,0 +1,432 @@ + + + + + \ No newline at end of file diff --git a/components/Results/index.vue b/components/Results/index.vue deleted file mode 100755 index 6fc8609..0000000 --- a/components/Results/index.vue +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/components/Search/index.vue b/components/Search/index.vue index d5ff1ce..2ed751b 100755 --- a/components/Search/index.vue +++ b/components/Search/index.vue @@ -1,106 +1,104 @@ \ No newline at end of file diff --git a/plugins/vue-apexcharts.js b/plugins/vue-apexcharts.js new file mode 100755 index 0000000..6896aaa --- /dev/null +++ b/plugins/vue-apexcharts.js @@ -0,0 +1,6 @@ +import Vue from 'vue' +import VueApexCharts from 'vue-apexcharts' + +Vue.use(VueApexCharts) +Vue.component('apexchart', VueApexCharts) + diff --git a/plugins/vue-chartjs.js b/plugins/vue-chartjs.js deleted file mode 100755 index 8507ed9..0000000 --- a/plugins/vue-chartjs.js +++ /dev/null @@ -1,10 +0,0 @@ -import Vue from 'vue' -import { Line } from 'vue-chartjs' - -Vue.component('LineChart', { - extends: Line, - props: [ 'chartData', 'options' ], - mounted() { - this.renderChart(this.chartData, this.options) - } -}) diff --git a/static/font.js b/static/font.js new file mode 100644 index 0000000..864aa17 --- /dev/null +++ b/static/font.js @@ -0,0 +1,13 @@ +WebFontConfig = { + google: { + families: ['Roboto:300,400,700&display=swap'] + } +} +;(function(){ + var wf = document.createElement('script') + wf.src = 'https://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js' + wf.type = 'text/javascript' + wf.async = 'true' + var s = document.getElementsByTagName('script')[0] + s.parentNode.insertBefore(wf, s) +})() diff --git a/static/latest.json b/static/latest.json new file mode 100644 index 0000000..0a0823f --- /dev/null +++ b/static/latest.json @@ -0,0 +1 @@ +{"latest":{"confirmed":197146,"deaths":7905,"recovered":80840}} diff --git a/static/location-14.json b/static/location-14.json new file mode 100644 index 0000000..b40f17b --- /dev/null +++ b/static/location-14.json @@ -0,0 +1 @@ +{"location":{"coordinates":{"latitude":"13","longitude":"122"},"country":"Philippines","country_code":"PH","id":14,"latest":{"confirmed":187,"deaths":12,"recovered":5},"province":"","timelines":{"confirmed":{"latest":187,"timeline":{"2020-01-22T00:00:00Z":0,"2020-01-23T00:00:00Z":0,"2020-01-24T00:00:00Z":0,"2020-01-25T00:00:00Z":0,"2020-01-26T00:00:00Z":0,"2020-01-27T00:00:00Z":0,"2020-01-28T00:00:00Z":0,"2020-01-29T00:00:00Z":0,"2020-01-30T00:00:00Z":1,"2020-01-31T00:00:00Z":1,"2020-02-01T00:00:00Z":1,"2020-02-02T00:00:00Z":2,"2020-02-03T00:00:00Z":2,"2020-02-04T00:00:00Z":2,"2020-02-05T00:00:00Z":2,"2020-02-06T00:00:00Z":2,"2020-02-07T00:00:00Z":3,"2020-02-08T00:00:00Z":3,"2020-02-09T00:00:00Z":3,"2020-02-10T00:00:00Z":3,"2020-02-11T00:00:00Z":3,"2020-02-12T00:00:00Z":3,"2020-02-13T00:00:00Z":3,"2020-02-14T00:00:00Z":3,"2020-02-15T00:00:00Z":3,"2020-02-16T00:00:00Z":3,"2020-02-17T00:00:00Z":3,"2020-02-18T00:00:00Z":3,"2020-02-19T00:00:00Z":3,"2020-02-20T00:00:00Z":3,"2020-02-21T00:00:00Z":3,"2020-02-22T00:00:00Z":3,"2020-02-23T00:00:00Z":3,"2020-02-24T00:00:00Z":3,"2020-02-25T00:00:00Z":3,"2020-02-26T00:00:00Z":3,"2020-02-27T00:00:00Z":3,"2020-02-28T00:00:00Z":3,"2020-02-29T00:00:00Z":3,"2020-03-01T00:00:00Z":3,"2020-03-02T00:00:00Z":3,"2020-03-03T00:00:00Z":3,"2020-03-04T00:00:00Z":3,"2020-03-05T00:00:00Z":3,"2020-03-06T00:00:00Z":5,"2020-03-07T00:00:00Z":6,"2020-03-08T00:00:00Z":10,"2020-03-09T00:00:00Z":20,"2020-03-10T00:00:00Z":33,"2020-03-11T00:00:00Z":49,"2020-03-12T00:00:00Z":52,"2020-03-13T00:00:00Z":64,"2020-03-14T00:00:00Z":111,"2020-03-15T00:00:00Z":140,"2020-03-16T00:00:00Z":142,"2020-03-17T00:00:00Z":187}},"deaths":{"latest":12,"timeline":{"2020-01-22T00:00:00Z":0,"2020-01-23T00:00:00Z":0,"2020-01-24T00:00:00Z":0,"2020-01-25T00:00:00Z":0,"2020-01-26T00:00:00Z":0,"2020-01-27T00:00:00Z":0,"2020-01-28T00:00:00Z":0,"2020-01-29T00:00:00Z":0,"2020-01-30T00:00:00Z":0,"2020-01-31T00:00:00Z":0,"2020-02-01T00:00:00Z":0,"2020-02-02T00:00:00Z":1,"2020-02-03T00:00:00Z":1,"2020-02-04T00:00:00Z":1,"2020-02-05T00:00:00Z":1,"2020-02-06T00:00:00Z":1,"2020-02-07T00:00:00Z":1,"2020-02-08T00:00:00Z":1,"2020-02-09T00:00:00Z":1,"2020-02-10T00:00:00Z":1,"2020-02-11T00:00:00Z":1,"2020-02-12T00:00:00Z":1,"2020-02-13T00:00:00Z":1,"2020-02-14T00:00:00Z":1,"2020-02-15T00:00:00Z":1,"2020-02-16T00:00:00Z":1,"2020-02-17T00:00:00Z":1,"2020-02-18T00:00:00Z":1,"2020-02-19T00:00:00Z":1,"2020-02-20T00:00:00Z":1,"2020-02-21T00:00:00Z":1,"2020-02-22T00:00:00Z":1,"2020-02-23T00:00:00Z":1,"2020-02-24T00:00:00Z":1,"2020-02-25T00:00:00Z":1,"2020-02-26T00:00:00Z":1,"2020-02-27T00:00:00Z":1,"2020-02-28T00:00:00Z":1,"2020-02-29T00:00:00Z":1,"2020-03-01T00:00:00Z":1,"2020-03-02T00:00:00Z":1,"2020-03-03T00:00:00Z":1,"2020-03-04T00:00:00Z":1,"2020-03-05T00:00:00Z":1,"2020-03-06T00:00:00Z":1,"2020-03-07T00:00:00Z":1,"2020-03-08T00:00:00Z":1,"2020-03-09T00:00:00Z":1,"2020-03-10T00:00:00Z":1,"2020-03-11T00:00:00Z":1,"2020-03-12T00:00:00Z":2,"2020-03-13T00:00:00Z":5,"2020-03-14T00:00:00Z":8,"2020-03-15T00:00:00Z":11,"2020-03-16T00:00:00Z":12,"2020-03-17T00:00:00Z":12}},"recovered":{"latest":5,"timeline":{"2020-01-22T00:00:00Z":0,"2020-01-23T00:00:00Z":0,"2020-01-24T00:00:00Z":0,"2020-01-25T00:00:00Z":0,"2020-01-26T00:00:00Z":0,"2020-01-27T00:00:00Z":0,"2020-01-28T00:00:00Z":0,"2020-01-29T00:00:00Z":0,"2020-01-30T00:00:00Z":0,"2020-01-31T00:00:00Z":0,"2020-02-01T00:00:00Z":0,"2020-02-02T00:00:00Z":0,"2020-02-03T00:00:00Z":0,"2020-02-04T00:00:00Z":0,"2020-02-05T00:00:00Z":0,"2020-02-06T00:00:00Z":0,"2020-02-07T00:00:00Z":0,"2020-02-08T00:00:00Z":0,"2020-02-09T00:00:00Z":0,"2020-02-10T00:00:00Z":0,"2020-02-11T00:00:00Z":0,"2020-02-12T00:00:00Z":1,"2020-02-13T00:00:00Z":1,"2020-02-14T00:00:00Z":1,"2020-02-15T00:00:00Z":1,"2020-02-16T00:00:00Z":1,"2020-02-17T00:00:00Z":1,"2020-02-18T00:00:00Z":1,"2020-02-19T00:00:00Z":1,"2020-02-20T00:00:00Z":1,"2020-02-21T00:00:00Z":1,"2020-02-22T00:00:00Z":1,"2020-02-23T00:00:00Z":1,"2020-02-24T00:00:00Z":1,"2020-02-25T00:00:00Z":1,"2020-02-26T00:00:00Z":1,"2020-02-27T00:00:00Z":1,"2020-02-28T00:00:00Z":1,"2020-02-29T00:00:00Z":1,"2020-03-01T00:00:00Z":1,"2020-03-02T00:00:00Z":1,"2020-03-03T00:00:00Z":1,"2020-03-04T00:00:00Z":1,"2020-03-05T00:00:00Z":1,"2020-03-06T00:00:00Z":1,"2020-03-07T00:00:00Z":1,"2020-03-08T00:00:00Z":1,"2020-03-09T00:00:00Z":1,"2020-03-10T00:00:00Z":2,"2020-03-11T00:00:00Z":2,"2020-03-12T00:00:00Z":2,"2020-03-13T00:00:00Z":2,"2020-03-14T00:00:00Z":2,"2020-03-15T00:00:00Z":2,"2020-03-16T00:00:00Z":2,"2020-03-17T00:00:00Z":5}}}}} diff --git a/static/location-16.json b/static/location-16.json new file mode 100644 index 0000000..e2e7b34 --- /dev/null +++ b/static/location-16.json @@ -0,0 +1 @@ +{"location":{"coordinates":{"latitude":"43","longitude":"12"},"country":"Italy","country_code":"IT","id":16,"last_updated":"2020-03-21T10:48:02.564699Z","latest":{"confirmed":47021,"deaths":4032,"recovered":4440},"province":"","timelines":{"confirmed":{"latest":47021,"timeline":{"2020-01-22T00:00:00Z":0,"2020-01-23T00:00:00Z":0,"2020-01-24T00:00:00Z":0,"2020-01-25T00:00:00Z":0,"2020-01-26T00:00:00Z":0,"2020-01-27T00:00:00Z":0,"2020-01-28T00:00:00Z":0,"2020-01-29T00:00:00Z":0,"2020-01-30T00:00:00Z":0,"2020-01-31T00:00:00Z":2,"2020-02-01T00:00:00Z":2,"2020-02-02T00:00:00Z":2,"2020-02-03T00:00:00Z":2,"2020-02-04T00:00:00Z":2,"2020-02-05T00:00:00Z":2,"2020-02-06T00:00:00Z":2,"2020-02-07T00:00:00Z":3,"2020-02-08T00:00:00Z":3,"2020-02-09T00:00:00Z":3,"2020-02-10T00:00:00Z":3,"2020-02-11T00:00:00Z":3,"2020-02-12T00:00:00Z":3,"2020-02-13T00:00:00Z":3,"2020-02-14T00:00:00Z":3,"2020-02-15T00:00:00Z":3,"2020-02-16T00:00:00Z":3,"2020-02-17T00:00:00Z":3,"2020-02-18T00:00:00Z":3,"2020-02-19T00:00:00Z":3,"2020-02-20T00:00:00Z":3,"2020-02-21T00:00:00Z":20,"2020-02-22T00:00:00Z":62,"2020-02-23T00:00:00Z":155,"2020-02-24T00:00:00Z":229,"2020-02-25T00:00:00Z":322,"2020-02-26T00:00:00Z":453,"2020-02-27T00:00:00Z":655,"2020-02-28T00:00:00Z":888,"2020-02-29T00:00:00Z":1128,"2020-03-01T00:00:00Z":1694,"2020-03-02T00:00:00Z":2036,"2020-03-03T00:00:00Z":2502,"2020-03-04T00:00:00Z":3089,"2020-03-05T00:00:00Z":3858,"2020-03-06T00:00:00Z":4636,"2020-03-07T00:00:00Z":5883,"2020-03-08T00:00:00Z":7375,"2020-03-09T00:00:00Z":9172,"2020-03-10T00:00:00Z":10149,"2020-03-11T00:00:00Z":12462,"2020-03-12T00:00:00Z":12462,"2020-03-13T00:00:00Z":17660,"2020-03-14T00:00:00Z":21157,"2020-03-15T00:00:00Z":24747,"2020-03-16T00:00:00Z":27980,"2020-03-17T00:00:00Z":31506,"2020-03-18T00:00:00Z":35713,"2020-03-19T00:00:00Z":41035,"2020-03-20T00:00:00Z":47021}},"deaths":{"latest":4032,"timeline":{"2020-01-22T00:00:00Z":0,"2020-01-23T00:00:00Z":0,"2020-01-24T00:00:00Z":0,"2020-01-25T00:00:00Z":0,"2020-01-26T00:00:00Z":0,"2020-01-27T00:00:00Z":0,"2020-01-28T00:00:00Z":0,"2020-01-29T00:00:00Z":0,"2020-01-30T00:00:00Z":0,"2020-01-31T00:00:00Z":0,"2020-02-01T00:00:00Z":0,"2020-02-02T00:00:00Z":0,"2020-02-03T00:00:00Z":0,"2020-02-04T00:00:00Z":0,"2020-02-05T00:00:00Z":0,"2020-02-06T00:00:00Z":0,"2020-02-07T00:00:00Z":0,"2020-02-08T00:00:00Z":0,"2020-02-09T00:00:00Z":0,"2020-02-10T00:00:00Z":0,"2020-02-11T00:00:00Z":0,"2020-02-12T00:00:00Z":0,"2020-02-13T00:00:00Z":0,"2020-02-14T00:00:00Z":0,"2020-02-15T00:00:00Z":0,"2020-02-16T00:00:00Z":0,"2020-02-17T00:00:00Z":0,"2020-02-18T00:00:00Z":0,"2020-02-19T00:00:00Z":0,"2020-02-20T00:00:00Z":0,"2020-02-21T00:00:00Z":1,"2020-02-22T00:00:00Z":2,"2020-02-23T00:00:00Z":3,"2020-02-24T00:00:00Z":7,"2020-02-25T00:00:00Z":10,"2020-02-26T00:00:00Z":12,"2020-02-27T00:00:00Z":17,"2020-02-28T00:00:00Z":21,"2020-02-29T00:00:00Z":29,"2020-03-01T00:00:00Z":34,"2020-03-02T00:00:00Z":52,"2020-03-03T00:00:00Z":79,"2020-03-04T00:00:00Z":107,"2020-03-05T00:00:00Z":148,"2020-03-06T00:00:00Z":197,"2020-03-07T00:00:00Z":233,"2020-03-08T00:00:00Z":366,"2020-03-09T00:00:00Z":463,"2020-03-10T00:00:00Z":631,"2020-03-11T00:00:00Z":827,"2020-03-12T00:00:00Z":827,"2020-03-13T00:00:00Z":1266,"2020-03-14T00:00:00Z":1441,"2020-03-15T00:00:00Z":1809,"2020-03-16T00:00:00Z":2158,"2020-03-17T00:00:00Z":2503,"2020-03-18T00:00:00Z":2978,"2020-03-19T00:00:00Z":3405,"2020-03-20T00:00:00Z":4032}},"recovered":{"latest":4440,"timeline":{"2020-01-22T00:00:00Z":0,"2020-01-23T00:00:00Z":0,"2020-01-24T00:00:00Z":0,"2020-01-25T00:00:00Z":0,"2020-01-26T00:00:00Z":0,"2020-01-27T00:00:00Z":0,"2020-01-28T00:00:00Z":0,"2020-01-29T00:00:00Z":0,"2020-01-30T00:00:00Z":0,"2020-01-31T00:00:00Z":0,"2020-02-01T00:00:00Z":0,"2020-02-02T00:00:00Z":0,"2020-02-03T00:00:00Z":0,"2020-02-04T00:00:00Z":0,"2020-02-05T00:00:00Z":0,"2020-02-06T00:00:00Z":0,"2020-02-07T00:00:00Z":0,"2020-02-08T00:00:00Z":0,"2020-02-09T00:00:00Z":0,"2020-02-10T00:00:00Z":0,"2020-02-11T00:00:00Z":0,"2020-02-12T00:00:00Z":0,"2020-02-13T00:00:00Z":0,"2020-02-14T00:00:00Z":0,"2020-02-15T00:00:00Z":0,"2020-02-16T00:00:00Z":0,"2020-02-17T00:00:00Z":0,"2020-02-18T00:00:00Z":0,"2020-02-19T00:00:00Z":0,"2020-02-20T00:00:00Z":0,"2020-02-21T00:00:00Z":0,"2020-02-22T00:00:00Z":1,"2020-02-23T00:00:00Z":2,"2020-02-24T00:00:00Z":1,"2020-02-25T00:00:00Z":1,"2020-02-26T00:00:00Z":3,"2020-02-27T00:00:00Z":45,"2020-02-28T00:00:00Z":46,"2020-02-29T00:00:00Z":46,"2020-03-01T00:00:00Z":83,"2020-03-02T00:00:00Z":149,"2020-03-03T00:00:00Z":160,"2020-03-04T00:00:00Z":276,"2020-03-05T00:00:00Z":414,"2020-03-06T00:00:00Z":523,"2020-03-07T00:00:00Z":589,"2020-03-08T00:00:00Z":622,"2020-03-09T00:00:00Z":724,"2020-03-10T00:00:00Z":724,"2020-03-11T00:00:00Z":1045,"2020-03-12T00:00:00Z":1045,"2020-03-13T00:00:00Z":1439,"2020-03-14T00:00:00Z":1966,"2020-03-15T00:00:00Z":2335,"2020-03-16T00:00:00Z":2749,"2020-03-17T00:00:00Z":2941,"2020-03-18T00:00:00Z":4025,"2020-03-19T00:00:00Z":4440,"2020-03-20T00:00:00Z":4440}}}}} diff --git a/static/locations.json b/static/locations.json new file mode 100644 index 0000000..ef44c9e --- /dev/null +++ b/static/locations.json @@ -0,0 +1 @@ +{"locations":[{"coordinates":{"latitude":"15","longitude":"101"},"country":"Thailand","country_code":"TH","id":0,"latest":{"confirmed":177,"deaths":1,"recovered":41},"province":""},{"coordinates":{"latitude":"36","longitude":"138"},"country":"Japan","country_code":"JP","id":1,"latest":{"confirmed":878,"deaths":29,"recovered":144},"province":""},{"coordinates":{"latitude":"1.2833","longitude":"103.8333"},"country":"Singapore","country_code":"SG","id":2,"latest":{"confirmed":266,"deaths":0,"recovered":114},"province":""},{"coordinates":{"latitude":"28.1667","longitude":"84.25"},"country":"Nepal","country_code":"NP","id":3,"latest":{"confirmed":1,"deaths":0,"recovered":1},"province":""},{"coordinates":{"latitude":"2.5","longitude":"112.5"},"country":"Malaysia","country_code":"MY","id":4,"latest":{"confirmed":673,"deaths":2,"recovered":49},"province":""},{"coordinates":{"latitude":"49.2827","longitude":"-123.1207"},"country":"Canada","country_code":"CA","id":5,"latest":{"confirmed":103,"deaths":4,"recovered":4},"province":"British Columbia"},{"coordinates":{"latitude":"-33.8688","longitude":"151.2093"},"country":"Australia","country_code":"AU","id":6,"latest":{"confirmed":210,"deaths":4,"recovered":4},"province":"New South Wales"},{"coordinates":{"latitude":"-37.8136","longitude":"144.9631"},"country":"Australia","country_code":"AU","id":7,"latest":{"confirmed":94,"deaths":0,"recovered":8},"province":"Victoria"},{"coordinates":{"latitude":"-28.0167","longitude":"153.4"},"country":"Australia","country_code":"AU","id":8,"latest":{"confirmed":78,"deaths":0,"recovered":8},"province":"Queensland"},{"coordinates":{"latitude":"11.55","longitude":"104.9167"},"country":"Cambodia","country_code":"KH","id":9,"latest":{"confirmed":33,"deaths":0,"recovered":1},"province":""},{"coordinates":{"latitude":"7","longitude":"81"},"country":"Sri Lanka","country_code":"LK","id":10,"latest":{"confirmed":44,"deaths":0,"recovered":1},"province":""},{"coordinates":{"latitude":"51","longitude":"9"},"country":"Germany","country_code":"DE","id":11,"latest":{"confirmed":9257,"deaths":24,"recovered":67},"province":""},{"coordinates":{"latitude":"64","longitude":"26"},"country":"Finland","country_code":"FI","id":12,"latest":{"confirmed":321,"deaths":0,"recovered":10},"province":""},{"coordinates":{"latitude":"24","longitude":"54"},"country":"United Arab Emirates","country_code":"AE","id":13,"latest":{"confirmed":98,"deaths":0,"recovered":23},"province":""},{"coordinates":{"latitude":"13","longitude":"122"},"country":"Philippines","country_code":"PH","id":14,"latest":{"confirmed":187,"deaths":12,"recovered":5},"province":""},{"coordinates":{"latitude":"21","longitude":"78"},"country":"India","country_code":"IN","id":15,"latest":{"confirmed":142,"deaths":3,"recovered":14},"province":""},{"coordinates":{"latitude":"43","longitude":"12"},"country":"Italy","country_code":"IT","id":16,"latest":{"confirmed":31506,"deaths":2503,"recovered":2941},"province":""},{"coordinates":{"latitude":"63","longitude":"16"},"country":"Sweden","country_code":"SE","id":17,"latest":{"confirmed":1190,"deaths":7,"recovered":1},"province":""},{"coordinates":{"latitude":"40","longitude":"-4"},"country":"Spain","country_code":"ES","id":18,"latest":{"confirmed":11748,"deaths":533,"recovered":1028},"province":""},{"coordinates":{"latitude":"-34.9285","longitude":"138.6007"},"country":"Australia","country_code":"AU","id":19,"latest":{"confirmed":29,"deaths":0,"recovered":3},"province":"South Australia"},{"coordinates":{"latitude":"50.8333","longitude":"4"},"country":"Belgium","country_code":"BE","id":20,"latest":{"confirmed":1243,"deaths":10,"recovered":1},"province":""},{"coordinates":{"latitude":"26","longitude":"30"},"country":"Egypt","country_code":"EG","id":21,"latest":{"confirmed":196,"deaths":4,"recovered":32},"province":""},{"coordinates":{"latitude":"35.4437","longitude":"139.638"},"country":"Australia","country_code":"AU","id":22,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"From Diamond Princess"},{"coordinates":{"latitude":"33.8547","longitude":"35.8623"},"country":"Lebanon","country_code":"LB","id":23,"latest":{"confirmed":120,"deaths":3,"recovered":3},"province":""},{"coordinates":{"latitude":"33","longitude":"44"},"country":"Iraq","country_code":"IQ","id":24,"latest":{"confirmed":154,"deaths":11,"recovered":32},"province":""},{"coordinates":{"latitude":"21","longitude":"57"},"country":"Oman","country_code":"OM","id":25,"latest":{"confirmed":24,"deaths":0,"recovered":9},"province":""},{"coordinates":{"latitude":"33","longitude":"65"},"country":"Afghanistan","country_code":"AF","id":26,"latest":{"confirmed":22,"deaths":0,"recovered":1},"province":""},{"coordinates":{"latitude":"26.0275","longitude":"50.55"},"country":"Bahrain","country_code":"BH","id":27,"latest":{"confirmed":228,"deaths":1,"recovered":81},"province":""},{"coordinates":{"latitude":"29.5","longitude":"47.75"},"country":"Kuwait","country_code":"KW","id":28,"latest":{"confirmed":130,"deaths":0,"recovered":9},"province":""},{"coordinates":{"latitude":"28.0339","longitude":"1.6596"},"country":"Algeria","country_code":"DZ","id":29,"latest":{"confirmed":60,"deaths":4,"recovered":12},"province":""},{"coordinates":{"latitude":"45.1","longitude":"15.2"},"country":"Croatia","country_code":"HR","id":30,"latest":{"confirmed":65,"deaths":0,"recovered":4},"province":""},{"coordinates":{"latitude":"46.8182","longitude":"8.2275"},"country":"Switzerland","country_code":"CH","id":31,"latest":{"confirmed":2700,"deaths":27,"recovered":4},"province":""},{"coordinates":{"latitude":"47.5162","longitude":"14.5501"},"country":"Austria","country_code":"AT","id":32,"latest":{"confirmed":1332,"deaths":3,"recovered":1},"province":""},{"coordinates":{"latitude":"31","longitude":"35"},"country":"Israel","country_code":"IL","id":33,"latest":{"confirmed":337,"deaths":0,"recovered":11},"province":""},{"coordinates":{"latitude":"30.3753","longitude":"69.3451"},"country":"Pakistan","country_code":"PK","id":34,"latest":{"confirmed":236,"deaths":0,"recovered":2},"province":""},{"coordinates":{"latitude":"-14.235","longitude":"-51.9253"},"country":"Brazil","country_code":"BR","id":35,"latest":{"confirmed":321,"deaths":1,"recovered":2},"province":""},{"coordinates":{"latitude":"42.3154","longitude":"43.3569"},"country":"Georgia","country_code":"GE","id":36,"latest":{"confirmed":34,"deaths":0,"recovered":1},"province":""},{"coordinates":{"latitude":"39.0742","longitude":"21.8243"},"country":"Greece","country_code":"GR","id":37,"latest":{"confirmed":387,"deaths":5,"recovered":8},"province":""},{"coordinates":{"latitude":"41.6086","longitude":"21.7453"},"country":"North Macedonia","country_code":"MK","id":38,"latest":{"confirmed":26,"deaths":0,"recovered":1},"province":""},{"coordinates":{"latitude":"60.472","longitude":"8.4689"},"country":"Norway","country_code":"NO","id":39,"latest":{"confirmed":1463,"deaths":3,"recovered":1},"province":""},{"coordinates":{"latitude":"45.9432","longitude":"24.9668"},"country":"Romania","country_code":"RO","id":40,"latest":{"confirmed":184,"deaths":0,"recovered":16},"province":""},{"coordinates":{"latitude":"58.5953","longitude":"25.0136"},"country":"Estonia","country_code":"EE","id":41,"latest":{"confirmed":225,"deaths":0,"recovered":1},"province":""},{"coordinates":{"latitude":"43.9424","longitude":"12.4578"},"country":"San Marino","country_code":"SM","id":42,"latest":{"confirmed":109,"deaths":7,"recovered":4},"province":""},{"coordinates":{"latitude":"53.7098","longitude":"27.9534"},"country":"Belarus","country_code":"BY","id":43,"latest":{"confirmed":36,"deaths":0,"recovered":3},"province":""},{"coordinates":{"latitude":"64.9631","longitude":"-19.0208"},"country":"Iceland","country_code":"IS","id":44,"latest":{"confirmed":220,"deaths":1,"recovered":0},"province":""},{"coordinates":{"latitude":"55.1694","longitude":"23.8813"},"country":"Lithuania","country_code":"LT","id":45,"latest":{"confirmed":25,"deaths":0,"recovered":1},"province":""},{"coordinates":{"latitude":"23.6345","longitude":"-102.5528"},"country":"Mexico","country_code":"MX","id":46,"latest":{"confirmed":82,"deaths":0,"recovered":4},"province":""},{"coordinates":{"latitude":"-40.9006","longitude":"174.886"},"country":"New Zealand","country_code":"NZ","id":47,"latest":{"confirmed":12,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"9.082","longitude":"8.6753"},"country":"Nigeria","country_code":"NG","id":48,"latest":{"confirmed":3,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"-31.9505","longitude":"115.8605"},"country":"Australia","country_code":"AU","id":49,"latest":{"confirmed":31,"deaths":1,"recovered":0},"province":"Western Australia"},{"coordinates":{"latitude":"53.1424","longitude":"-7.6921"},"country":"Ireland","country_code":"IE","id":50,"latest":{"confirmed":223,"deaths":2,"recovered":5},"province":""},{"coordinates":{"latitude":"49.8153","longitude":"6.1296"},"country":"Luxembourg","country_code":"LU","id":51,"latest":{"confirmed":140,"deaths":1,"recovered":0},"province":""},{"coordinates":{"latitude":"43.7333","longitude":"7.4167"},"country":"Monaco","country_code":"MC","id":52,"latest":{"confirmed":7,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"25.3548","longitude":"51.1839"},"country":"Qatar","country_code":"QA","id":53,"latest":{"confirmed":439,"deaths":0,"recovered":4},"province":""},{"coordinates":{"latitude":"-1.8312","longitude":"-78.1834"},"country":"Ecuador","country_code":"EC","id":54,"latest":{"confirmed":58,"deaths":2,"recovered":0},"province":""},{"coordinates":{"latitude":"40.1431","longitude":"47.5769"},"country":"Azerbaijan","country_code":"AZ","id":55,"latest":{"confirmed":28,"deaths":1,"recovered":6},"province":""},{"coordinates":{"latitude":"40.0691","longitude":"45.0382"},"country":"Armenia","country_code":"AM","id":56,"latest":{"confirmed":78,"deaths":0,"recovered":1},"province":""},{"coordinates":{"latitude":"18.7357","longitude":"-70.1627"},"country":"Dominican Republic","country_code":"DO","id":57,"latest":{"confirmed":21,"deaths":1,"recovered":0},"province":""},{"coordinates":{"latitude":"-0.7893","longitude":"113.9213"},"country":"Indonesia","country_code":"ID","id":58,"latest":{"confirmed":172,"deaths":5,"recovered":8},"province":""},{"coordinates":{"latitude":"39.3999","longitude":"-8.2245"},"country":"Portugal","country_code":"PT","id":59,"latest":{"confirmed":448,"deaths":1,"recovered":3},"province":""},{"coordinates":{"latitude":"42.5063","longitude":"1.5218"},"country":"Andorra","country_code":"AD","id":60,"latest":{"confirmed":39,"deaths":0,"recovered":1},"province":""},{"coordinates":{"latitude":"-41.4545","longitude":"145.9707"},"country":"Australia","country_code":"AU","id":61,"latest":{"confirmed":7,"deaths":0,"recovered":0},"province":"Tasmania"},{"coordinates":{"latitude":"56.8796","longitude":"24.6032"},"country":"Latvia","country_code":"LV","id":62,"latest":{"confirmed":49,"deaths":0,"recovered":1},"province":""},{"coordinates":{"latitude":"31.7917","longitude":"-7.0926"},"country":"Morocco","country_code":"MA","id":63,"latest":{"confirmed":38,"deaths":2,"recovered":1},"province":""},{"coordinates":{"latitude":"24","longitude":"45"},"country":"Saudi Arabia","country_code":"SA","id":64,"latest":{"confirmed":171,"deaths":0,"recovered":6},"province":""},{"coordinates":{"latitude":"14.4974","longitude":"-14.4524"},"country":"Senegal","country_code":"SN","id":65,"latest":{"confirmed":26,"deaths":0,"recovered":2},"province":""},{"coordinates":{"latitude":"-38.4161","longitude":"-63.6167"},"country":"Argentina","country_code":"AR","id":66,"latest":{"confirmed":68,"deaths":2,"recovered":3},"province":""},{"coordinates":{"latitude":"-35.6751","longitude":"-71.543"},"country":"Chile","country_code":"CL","id":67,"latest":{"confirmed":201,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"31.24","longitude":"36.51"},"country":"Jordan","country_code":"JO","id":68,"latest":{"confirmed":34,"deaths":0,"recovered":1},"province":""},{"coordinates":{"latitude":"48.3794","longitude":"31.1656"},"country":"Ukraine","country_code":"UA","id":69,"latest":{"confirmed":14,"deaths":2,"recovered":0},"province":""},{"coordinates":{"latitude":"47.1625","longitude":"19.5033"},"country":"Hungary","country_code":"HU","id":70,"latest":{"confirmed":50,"deaths":1,"recovered":2},"province":""},{"coordinates":{"latitude":"-12.4634","longitude":"130.8456"},"country":"Australia","country_code":"AU","id":71,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":"Northern Territory"},{"coordinates":{"latitude":"47.14","longitude":"9.55"},"country":"Liechtenstein","country_code":"LI","id":72,"latest":{"confirmed":7,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"51.9194","longitude":"19.1451"},"country":"Poland","country_code":"PL","id":73,"latest":{"confirmed":238,"deaths":5,"recovered":13},"province":""},{"coordinates":{"latitude":"34","longitude":"9"},"country":"Tunisia","country_code":"TN","id":74,"latest":{"confirmed":24,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"43.9159","longitude":"17.6791"},"country":"Bosnia and Herzegovina","country_code":"BA","id":75,"latest":{"confirmed":26,"deaths":0,"recovered":2},"province":""},{"coordinates":{"latitude":"46.1512","longitude":"14.9955"},"country":"Slovenia","country_code":"SI","id":76,"latest":{"confirmed":275,"deaths":1,"recovered":0},"province":""},{"coordinates":{"latitude":"-30.5595","longitude":"22.9375"},"country":"South Africa","country_code":"ZA","id":77,"latest":{"confirmed":62,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"27.5142","longitude":"90.4336"},"country":"Bhutan","country_code":"BT","id":78,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"3.848","longitude":"11.5021"},"country":"Cameroon","country_code":"CM","id":79,"latest":{"confirmed":10,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"4.5709","longitude":"-74.2973"},"country":"Colombia","country_code":"CO","id":80,"latest":{"confirmed":65,"deaths":0,"recovered":1},"province":""},{"coordinates":{"latitude":"9.7489","longitude":"-83.7534"},"country":"Costa Rica","country_code":"CR","id":81,"latest":{"confirmed":41,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"-9.19","longitude":"-75.0152"},"country":"Peru","country_code":"PE","id":82,"latest":{"confirmed":117,"deaths":0,"recovered":1},"province":""},{"coordinates":{"latitude":"44.0165","longitude":"21.0059"},"country":"Serbia","country_code":"RS","id":83,"latest":{"confirmed":65,"deaths":0,"recovered":1},"province":""},{"coordinates":{"latitude":"48.669","longitude":"19.699"},"country":"Slovakia","country_code":"SK","id":84,"latest":{"confirmed":72,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"8.6195","longitude":"0.8248"},"country":"Togo","country_code":"TG","id":85,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"35.9375","longitude":"14.3754"},"country":"Malta","country_code":"MT","id":86,"latest":{"confirmed":38,"deaths":0,"recovered":2},"province":""},{"coordinates":{"latitude":"14.6415","longitude":"-61.0242"},"country":"Martinique","country_code":"MQ","id":87,"latest":{"confirmed":16,"deaths":1,"recovered":0},"province":""},{"coordinates":{"latitude":"42.7339","longitude":"25.4858"},"country":"Bulgaria","country_code":"BG","id":88,"latest":{"confirmed":67,"deaths":2,"recovered":0},"province":""},{"coordinates":{"latitude":"3.2028","longitude":"73.2207"},"country":"Maldives","country_code":"MV","id":89,"latest":{"confirmed":13,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"23.685","longitude":"90.3563"},"country":"Bangladesh","country_code":"BD","id":90,"latest":{"confirmed":10,"deaths":0,"recovered":3},"province":""},{"coordinates":{"latitude":"-23.4425","longitude":"-58.4438"},"country":"Paraguay","country_code":"PY","id":91,"latest":{"confirmed":9,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"51.2538","longitude":"-85.3232"},"country":"Canada","country_code":"CA","id":92,"latest":{"confirmed":185,"deaths":1,"recovered":5},"province":"Ontario"},{"coordinates":{"latitude":"53.9333","longitude":"-116.5765"},"country":"Canada","country_code":"CA","id":93,"latest":{"confirmed":74,"deaths":0,"recovered":0},"province":"Alberta"},{"coordinates":{"latitude":"52.9399","longitude":"-73.5491"},"country":"Canada","country_code":"CA","id":94,"latest":{"confirmed":74,"deaths":0,"recovered":0},"province":"Quebec"},{"coordinates":{"latitude":"41.1533","longitude":"20.1683"},"country":"Albania","country_code":"AL","id":95,"latest":{"confirmed":55,"deaths":1,"recovered":0},"province":""},{"coordinates":{"latitude":"35.1264","longitude":"33.4299"},"country":"Cyprus","country_code":"CY","id":96,"latest":{"confirmed":46,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"4.5353","longitude":"114.7277"},"country":"Brunei","country_code":"BN","id":97,"latest":{"confirmed":56,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"47.4009","longitude":"-121.4905"},"country":"US","country_code":"US","id":98,"latest":{"confirmed":1076,"deaths":55,"recovered":1},"province":"Washington"},{"coordinates":{"latitude":"42.1657","longitude":"-74.9481"},"country":"US","country_code":"US","id":99,"latest":{"confirmed":1706,"deaths":13,"recovered":0},"province":"New York"},{"coordinates":{"latitude":"36.1162","longitude":"-119.6816"},"country":"US","country_code":"US","id":100,"latest":{"confirmed":698,"deaths":12,"recovered":6},"province":"California"},{"coordinates":{"latitude":"42.2302","longitude":"-71.5301"},"country":"US","country_code":"US","id":101,"latest":{"confirmed":218,"deaths":0,"recovered":1},"province":"Massachusetts"},{"coordinates":{"latitude":"35.4437","longitude":"139.638"},"country":"US","country_code":"US","id":102,"latest":{"confirmed":47,"deaths":0,"recovered":0},"province":"Diamond Princess"},{"coordinates":{"latitude":"37.6489","longitude":"-122.6655"},"country":"US","country_code":"US","id":103,"latest":{"confirmed":21,"deaths":0,"recovered":0},"province":"Grand Princess"},{"coordinates":{"latitude":"33.0406","longitude":"-83.6431"},"country":"US","country_code":"US","id":104,"latest":{"confirmed":146,"deaths":1,"recovered":0},"province":"Georgia"},{"coordinates":{"latitude":"39.0598","longitude":"-105.3111"},"country":"US","country_code":"US","id":105,"latest":{"confirmed":160,"deaths":2,"recovered":0},"province":"Colorado"},{"coordinates":{"latitude":"27.7663","longitude":"-81.6868"},"country":"US","country_code":"US","id":106,"latest":{"confirmed":216,"deaths":6,"recovered":0},"province":"Florida"},{"coordinates":{"latitude":"40.2989","longitude":"-74.521"},"country":"US","country_code":"US","id":107,"latest":{"confirmed":267,"deaths":3,"recovered":1},"province":"New Jersey"},{"coordinates":{"latitude":"44.572","longitude":"-122.0709"},"country":"US","country_code":"US","id":108,"latest":{"confirmed":66,"deaths":1,"recovered":0},"province":"Oregon"},{"coordinates":{"latitude":"31.0545","longitude":"-97.5635"},"country":"US","country_code":"US","id":109,"latest":{"confirmed":110,"deaths":1,"recovered":0},"province":"Texas"},{"coordinates":{"latitude":"40.3495","longitude":"-88.9861"},"country":"US","country_code":"US","id":110,"latest":{"confirmed":161,"deaths":1,"recovered":2},"province":"Illinois"},{"coordinates":{"latitude":"40.5908","longitude":"-77.2098"},"country":"US","country_code":"US","id":111,"latest":{"confirmed":112,"deaths":0,"recovered":0},"province":"Pennsylvania"},{"coordinates":{"latitude":"42.0115","longitude":"-93.2105"},"country":"US","country_code":"US","id":112,"latest":{"confirmed":23,"deaths":0,"recovered":0},"province":"Iowa"},{"coordinates":{"latitude":"39.0639","longitude":"-76.8021"},"country":"US","country_code":"US","id":113,"latest":{"confirmed":60,"deaths":0,"recovered":3},"province":"Maryland"},{"coordinates":{"latitude":"35.6301","longitude":"-79.8064"},"country":"US","country_code":"US","id":114,"latest":{"confirmed":64,"deaths":0,"recovered":0},"province":"North Carolina"},{"coordinates":{"latitude":"33.8569","longitude":"-80.945"},"country":"US","country_code":"US","id":115,"latest":{"confirmed":47,"deaths":1,"recovered":0},"province":"South Carolina"},{"coordinates":{"latitude":"35.7478","longitude":"-86.6923"},"country":"US","country_code":"US","id":116,"latest":{"confirmed":74,"deaths":0,"recovered":0},"province":"Tennessee"},{"coordinates":{"latitude":"37.7693","longitude":"-78.17"},"country":"US","country_code":"US","id":117,"latest":{"confirmed":67,"deaths":2,"recovered":0},"province":"Virginia"},{"coordinates":{"latitude":"33.7298","longitude":"-111.4312"},"country":"US","country_code":"US","id":118,"latest":{"confirmed":20,"deaths":0,"recovered":1},"province":"Arizona"},{"coordinates":{"latitude":"39.8494","longitude":"-86.2583"},"country":"US","country_code":"US","id":119,"latest":{"confirmed":30,"deaths":2,"recovered":0},"province":"Indiana"},{"coordinates":{"latitude":"37.6681","longitude":"-84.6701"},"country":"US","country_code":"US","id":120,"latest":{"confirmed":26,"deaths":1,"recovered":1},"province":"Kentucky"},{"coordinates":{"latitude":"38.8974","longitude":"-77.0268"},"country":"US","country_code":"US","id":121,"latest":{"confirmed":22,"deaths":0,"recovered":0},"province":"District of Columbia"},{"coordinates":{"latitude":"38.3135","longitude":"-117.0554"},"country":"US","country_code":"US","id":122,"latest":{"confirmed":56,"deaths":1,"recovered":0},"province":"Nevada"},{"coordinates":{"latitude":"43.4525","longitude":"-71.5639"},"country":"US","country_code":"US","id":123,"latest":{"confirmed":26,"deaths":0,"recovered":0},"province":"New Hampshire"},{"coordinates":{"latitude":"45.6945","longitude":"-93.9002"},"country":"US","country_code":"US","id":124,"latest":{"confirmed":60,"deaths":0,"recovered":0},"province":"Minnesota"},{"coordinates":{"latitude":"41.1254","longitude":"-98.2681"},"country":"US","country_code":"US","id":125,"latest":{"confirmed":21,"deaths":0,"recovered":0},"province":"Nebraska"},{"coordinates":{"latitude":"40.3888","longitude":"-82.7649"},"country":"US","country_code":"US","id":126,"latest":{"confirmed":67,"deaths":0,"recovered":0},"province":"Ohio"},{"coordinates":{"latitude":"41.6809","longitude":"-71.5118"},"country":"US","country_code":"US","id":127,"latest":{"confirmed":23,"deaths":0,"recovered":0},"province":"Rhode Island"},{"coordinates":{"latitude":"44.2685","longitude":"-89.6165"},"country":"US","country_code":"US","id":128,"latest":{"confirmed":72,"deaths":0,"recovered":1},"province":"Wisconsin"},{"coordinates":{"latitude":"41.5978","longitude":"-72.7554"},"country":"US","country_code":"US","id":129,"latest":{"confirmed":68,"deaths":0,"recovered":0},"province":"Connecticut"},{"coordinates":{"latitude":"21.0943","longitude":"-157.4983"},"country":"US","country_code":"US","id":130,"latest":{"confirmed":10,"deaths":0,"recovered":0},"province":"Hawaii"},{"coordinates":{"latitude":"35.5653","longitude":"-96.9289"},"country":"US","country_code":"US","id":131,"latest":{"confirmed":19,"deaths":0,"recovered":0},"province":"Oklahoma"},{"coordinates":{"latitude":"40.15","longitude":"-111.8624"},"country":"US","country_code":"US","id":132,"latest":{"confirmed":51,"deaths":0,"recovered":0},"province":"Utah"},{"coordinates":{"latitude":"12.2383","longitude":"-1.5616"},"country":"Burkina Faso","country_code":"BF","id":133,"latest":{"confirmed":15,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"41.9029","longitude":"12.4534"},"country":"Holy See","country_code":"VA","id":134,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"46.8625","longitude":"103.8467"},"country":"Mongolia","country_code":"MN","id":135,"latest":{"confirmed":5,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"8.538","longitude":"-80.7821"},"country":"Panama","country_code":"PA","id":136,"latest":{"confirmed":69,"deaths":1,"recovered":0},"province":""},{"coordinates":{"latitude":"38.5266","longitude":"-96.7265"},"country":"US","country_code":"US","id":137,"latest":{"confirmed":18,"deaths":1,"recovered":0},"province":"Kansas"},{"coordinates":{"latitude":"31.1695","longitude":"-91.8678"},"country":"US","country_code":"US","id":138,"latest":{"confirmed":196,"deaths":4,"recovered":0},"province":"Louisiana"},{"coordinates":{"latitude":"38.4561","longitude":"-92.2884"},"country":"US","country_code":"US","id":139,"latest":{"confirmed":11,"deaths":0,"recovered":0},"province":"Missouri"},{"coordinates":{"latitude":"44.0459","longitude":"-72.7107"},"country":"US","country_code":"US","id":140,"latest":{"confirmed":12,"deaths":0,"recovered":0},"province":"Vermont"},{"coordinates":{"latitude":"61.3707","longitude":"-152.4044"},"country":"US","country_code":"US","id":141,"latest":{"confirmed":3,"deaths":0,"recovered":0},"province":"Alaska"},{"coordinates":{"latitude":"34.9697","longitude":"-92.3731"},"country":"US","country_code":"US","id":142,"latest":{"confirmed":22,"deaths":0,"recovered":0},"province":"Arkansas"},{"coordinates":{"latitude":"39.3185","longitude":"-75.5071"},"country":"US","country_code":"US","id":143,"latest":{"confirmed":16,"deaths":0,"recovered":0},"province":"Delaware"},{"coordinates":{"latitude":"44.2405","longitude":"-114.4788"},"country":"US","country_code":"US","id":144,"latest":{"confirmed":8,"deaths":0,"recovered":0},"province":"Idaho"},{"coordinates":{"latitude":"44.6939","longitude":"-69.3819"},"country":"US","country_code":"US","id":145,"latest":{"confirmed":32,"deaths":0,"recovered":0},"province":"Maine"},{"coordinates":{"latitude":"43.3266","longitude":"-84.5361"},"country":"US","country_code":"US","id":146,"latest":{"confirmed":65,"deaths":0,"recovered":0},"province":"Michigan"},{"coordinates":{"latitude":"32.7416","longitude":"-89.6787"},"country":"US","country_code":"US","id":147,"latest":{"confirmed":21,"deaths":0,"recovered":0},"province":"Mississippi"},{"coordinates":{"latitude":"46.9219","longitude":"-110.4544"},"country":"US","country_code":"US","id":148,"latest":{"confirmed":9,"deaths":0,"recovered":0},"province":"Montana"},{"coordinates":{"latitude":"34.8405","longitude":"-106.2485"},"country":"US","country_code":"US","id":149,"latest":{"confirmed":23,"deaths":0,"recovered":0},"province":"New Mexico"},{"coordinates":{"latitude":"47.5289","longitude":"-99.784"},"country":"US","country_code":"US","id":150,"latest":{"confirmed":3,"deaths":0,"recovered":0},"province":"North Dakota"},{"coordinates":{"latitude":"44.2998","longitude":"-99.4388"},"country":"US","country_code":"US","id":151,"latest":{"confirmed":11,"deaths":1,"recovered":0},"province":"South Dakota"},{"coordinates":{"latitude":"38.4912","longitude":"-80.9545"},"country":"US","country_code":"US","id":152,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":"West Virginia"},{"coordinates":{"latitude":"42.756","longitude":"-107.3025"},"country":"US","country_code":"US","id":153,"latest":{"confirmed":11,"deaths":0,"recovered":0},"province":"Wyoming"},{"coordinates":{"latitude":"30.9756","longitude":"112.2707"},"country":"China","country_code":"CN","id":154,"latest":{"confirmed":67799,"deaths":3111,"recovered":56003},"province":"Hubei"},{"coordinates":{"latitude":"32","longitude":"53"},"country":"Iran","country_code":"IR","id":155,"latest":{"confirmed":16169,"deaths":988,"recovered":5389},"province":""},{"coordinates":{"latitude":"36","longitude":"128"},"country":"Korea, South","country_code":"KR","id":156,"latest":{"confirmed":8320,"deaths":81,"recovered":1407},"province":""},{"coordinates":{"latitude":"46.2276","longitude":"2.2137"},"country":"France","country_code":"FR","id":157,"latest":{"confirmed":7652,"deaths":148,"recovered":12},"province":"France"},{"coordinates":{"latitude":"23.3417","longitude":"113.4244"},"country":"China","country_code":"CN","id":158,"latest":{"confirmed":1364,"deaths":8,"recovered":1307},"province":"Guangdong"},{"coordinates":{"latitude":"33.882","longitude":"113.614"},"country":"China","country_code":"CN","id":159,"latest":{"confirmed":1273,"deaths":22,"recovered":1250},"province":"Henan"},{"coordinates":{"latitude":"29.1832","longitude":"120.0934"},"country":"China","country_code":"CN","id":160,"latest":{"confirmed":1232,"deaths":1,"recovered":1216},"province":"Zhejiang"},{"coordinates":{"latitude":"27.6104","longitude":"111.7088"},"country":"China","country_code":"CN","id":161,"latest":{"confirmed":1018,"deaths":4,"recovered":1014},"province":"Hunan"},{"coordinates":{"latitude":"31.8257","longitude":"117.2264"},"country":"China","country_code":"CN","id":162,"latest":{"confirmed":990,"deaths":6,"recovered":984},"province":"Anhui"},{"coordinates":{"latitude":"27.614","longitude":"115.7221"},"country":"China","country_code":"CN","id":163,"latest":{"confirmed":935,"deaths":1,"recovered":934},"province":"Jiangxi"},{"coordinates":{"latitude":"36.3427","longitude":"118.1498"},"country":"China","country_code":"CN","id":164,"latest":{"confirmed":761,"deaths":7,"recovered":746},"province":"Shandong"},{"coordinates":{"latitude":"35.4437","longitude":"139.638"},"country":"Cruise Ship","country_code":"XX","id":165,"latest":{"confirmed":696,"deaths":7,"recovered":325},"province":"Diamond Princess"},{"coordinates":{"latitude":"32.9711","longitude":"119.455"},"country":"China","country_code":"CN","id":166,"latest":{"confirmed":631,"deaths":0,"recovered":631},"province":"Jiangsu"},{"coordinates":{"latitude":"30.0572","longitude":"107.874"},"country":"China","country_code":"CN","id":167,"latest":{"confirmed":576,"deaths":6,"recovered":570},"province":"Chongqing"},{"coordinates":{"latitude":"30.6171","longitude":"102.7103"},"country":"China","country_code":"CN","id":168,"latest":{"confirmed":540,"deaths":3,"recovered":520},"province":"Sichuan"},{"coordinates":{"latitude":"47.862","longitude":"127.7615"},"country":"China","country_code":"CN","id":169,"latest":{"confirmed":482,"deaths":13,"recovered":456},"province":"Heilongjiang"},{"coordinates":{"latitude":"56.2639","longitude":"9.5018"},"country":"Denmark","country_code":"DK","id":170,"latest":{"confirmed":977,"deaths":4,"recovered":1},"province":"Denmark"},{"coordinates":{"latitude":"40.1824","longitude":"116.4142"},"country":"China","country_code":"CN","id":171,"latest":{"confirmed":456,"deaths":8,"recovered":369},"province":"Beijing"},{"coordinates":{"latitude":"31.202","longitude":"121.4491"},"country":"China","country_code":"CN","id":172,"latest":{"confirmed":358,"deaths":3,"recovered":325},"province":"Shanghai"},{"coordinates":{"latitude":"39.549","longitude":"116.1306"},"country":"China","country_code":"CN","id":173,"latest":{"confirmed":318,"deaths":6,"recovered":310},"province":"Hebei"},{"coordinates":{"latitude":"26.0789","longitude":"117.9874"},"country":"China","country_code":"CN","id":174,"latest":{"confirmed":296,"deaths":1,"recovered":295},"province":"Fujian"},{"coordinates":{"latitude":"23.8298","longitude":"108.7881"},"country":"China","country_code":"CN","id":175,"latest":{"confirmed":253,"deaths":2,"recovered":248},"province":"Guangxi"},{"coordinates":{"latitude":"35.1917","longitude":"108.8701"},"country":"China","country_code":"CN","id":176,"latest":{"confirmed":246,"deaths":3,"recovered":236},"province":"Shaanxi"},{"coordinates":{"latitude":"24.974","longitude":"101.487"},"country":"China","country_code":"CN","id":177,"latest":{"confirmed":176,"deaths":2,"recovered":172},"province":"Yunnan"},{"coordinates":{"latitude":"19.1959","longitude":"109.7453"},"country":"China","country_code":"CN","id":178,"latest":{"confirmed":168,"deaths":6,"recovered":161},"province":"Hainan"},{"coordinates":{"latitude":"26.8154","longitude":"106.8748"},"country":"China","country_code":"CN","id":179,"latest":{"confirmed":147,"deaths":2,"recovered":144},"province":"Guizhou"},{"coordinates":{"latitude":"39.3054","longitude":"117.323"},"country":"China","country_code":"CN","id":180,"latest":{"confirmed":136,"deaths":3,"recovered":133},"province":"Tianjin"},{"coordinates":{"latitude":"37.5777","longitude":"112.2922"},"country":"China","country_code":"CN","id":181,"latest":{"confirmed":133,"deaths":0,"recovered":133},"province":"Shanxi"},{"coordinates":{"latitude":"37.8099","longitude":"101.0583"},"country":"China","country_code":"CN","id":182,"latest":{"confirmed":133,"deaths":2,"recovered":91},"province":"Gansu"},{"coordinates":{"latitude":"22.3","longitude":"114.2"},"country":"China","country_code":"CN","id":183,"latest":{"confirmed":162,"deaths":4,"recovered":88},"province":"Hong Kong"},{"coordinates":{"latitude":"41.2956","longitude":"122.6085"},"country":"China","country_code":"CN","id":184,"latest":{"confirmed":125,"deaths":1,"recovered":120},"province":"Liaoning"},{"coordinates":{"latitude":"43.6661","longitude":"126.1923"},"country":"China","country_code":"CN","id":185,"latest":{"confirmed":93,"deaths":1,"recovered":92},"province":"Jilin"},{"coordinates":{"latitude":"49.8175","longitude":"15.473"},"country":"Czechia","country_code":"CZ","id":186,"latest":{"confirmed":396,"deaths":0,"recovered":3},"province":""},{"coordinates":{"latitude":"41.1129","longitude":"85.2401"},"country":"China","country_code":"CN","id":187,"latest":{"confirmed":76,"deaths":3,"recovered":73},"province":"Xinjiang"},{"coordinates":{"latitude":"44.0935","longitude":"113.9448"},"country":"China","country_code":"CN","id":188,"latest":{"confirmed":75,"deaths":1,"recovered":73},"province":"Inner Mongolia"},{"coordinates":{"latitude":"37.2692","longitude":"106.1655"},"country":"China","country_code":"CN","id":189,"latest":{"confirmed":75,"deaths":0,"recovered":75},"province":"Ningxia"},{"coordinates":{"latitude":"23.7","longitude":"121"},"country":"Taiwan*","country_code":"TW","id":190,"latest":{"confirmed":77,"deaths":1,"recovered":22},"province":""},{"coordinates":{"latitude":"16","longitude":"108"},"country":"Vietnam","country_code":"VN","id":191,"latest":{"confirmed":66,"deaths":0,"recovered":16},"province":""},{"coordinates":{"latitude":"60","longitude":"90"},"country":"Russia","country_code":"RU","id":192,"latest":{"confirmed":114,"deaths":0,"recovered":8},"province":""},{"coordinates":{"latitude":"35.7452","longitude":"95.9956"},"country":"China","country_code":"CN","id":193,"latest":{"confirmed":18,"deaths":0,"recovered":18},"province":"Qinghai"},{"coordinates":{"latitude":"22.1667","longitude":"113.55"},"country":"China","country_code":"CN","id":194,"latest":{"confirmed":12,"deaths":0,"recovered":10},"province":"Macau"},{"coordinates":{"latitude":"47.4116","longitude":"28.3699"},"country":"Moldova","country_code":"MD","id":195,"latest":{"confirmed":30,"deaths":0,"recovered":1},"province":""},{"coordinates":{"latitude":"-16.2902","longitude":"-63.5887"},"country":"Bolivia","country_code":"BO","id":196,"latest":{"confirmed":11,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"61.8926","longitude":"-6.9118"},"country":"Denmark","country_code":"DK","id":197,"latest":{"confirmed":47,"deaths":0,"recovered":0},"province":"Faroe Islands"},{"coordinates":{"latitude":"18.0708","longitude":"-63.0501"},"country":"France","country_code":"FR","id":198,"latest":{"confirmed":2,"deaths":0,"recovered":0},"province":"St Martin"},{"coordinates":{"latitude":"15.2","longitude":"-86.2419"},"country":"Honduras","country_code":"HN","id":199,"latest":{"confirmed":8,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"49.3723","longitude":"-2.3644"},"country":"United Kingdom","country_code":"GB","id":200,"latest":{"confirmed":6,"deaths":0,"recovered":0},"province":"Channel Islands"},{"coordinates":{"latitude":"46.5653","longitude":"-66.4619"},"country":"Canada","country_code":"CA","id":201,"latest":{"confirmed":8,"deaths":0,"recovered":0},"province":"New Brunswick"},{"coordinates":{"latitude":"31.6927","longitude":"88.0924"},"country":"China","country_code":"CN","id":202,"latest":{"confirmed":1,"deaths":0,"recovered":1},"province":"Tibet"},{"coordinates":{"latitude":"-4.0383","longitude":"21.7587"},"country":"Congo (Kinshasa)","country_code":"CD","id":203,"latest":{"confirmed":3,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"7.54","longitude":"-5.5471"},"country":"Cote d'Ivoire","country_code":"CI","id":204,"latest":{"confirmed":5,"deaths":0,"recovered":1},"province":""},{"coordinates":{"latitude":"17.9","longitude":"-62.8333"},"country":"France","country_code":"FR","id":205,"latest":{"confirmed":3,"deaths":0,"recovered":0},"province":"Saint Barthelemy"},{"coordinates":{"latitude":"18.1096","longitude":"-77.2975"},"country":"Jamaica","country_code":"JM","id":206,"latest":{"confirmed":12,"deaths":0,"recovered":2},"province":""},{"coordinates":{"latitude":"38.9637","longitude":"35.2433"},"country":"Turkey","country_code":"TR","id":207,"latest":{"confirmed":47,"deaths":1,"recovered":0},"province":""},{"coordinates":{"latitude":"36.1408","longitude":"-5.3536"},"country":"United Kingdom","country_code":"GB","id":208,"latest":{"confirmed":3,"deaths":0,"recovered":1},"province":"Gibraltar"},{"coordinates":{"latitude":"47.6477","longitude":"-122.6413"},"country":"US","country_code":"US","id":209,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Kitsap, WA"},{"coordinates":{"latitude":"38.3105","longitude":"-121.9018"},"country":"US","country_code":"US","id":210,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Solano, CA"},{"coordinates":{"latitude":"37.0454","longitude":"-121.958"},"country":"US","country_code":"US","id":211,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Santa Cruz, CA"},{"coordinates":{"latitude":"38.5025","longitude":"-122.2654"},"country":"US","country_code":"US","id":212,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Napa, CA"},{"coordinates":{"latitude":"34.3705","longitude":"-119.1391"},"country":"US","country_code":"US","id":213,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Ventura, CA"},{"coordinates":{"latitude":"42.4097","longitude":"-71.8571"},"country":"US","country_code":"US","id":214,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Worcester, MA"},{"coordinates":{"latitude":"33.9191","longitude":"-84.0167"},"country":"US","country_code":"US","id":215,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Gwinnett, GA"},{"coordinates":{"latitude":"33.7956","longitude":"-84.2279"},"country":"US","country_code":"US","id":216,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"DeKalb, GA"},{"coordinates":{"latitude":"37.5455","longitude":"-82.7779"},"country":"US","country_code":"US","id":217,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Floyd, GA"},{"coordinates":{"latitude":"33.4502","longitude":"-84.4803"},"country":"US","country_code":"US","id":218,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Fayette, GA"},{"coordinates":{"latitude":"32.4893","longitude":"-94.8521"},"country":"US","country_code":"US","id":219,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Gregg, TX"},{"coordinates":{"latitude":"40.2589","longitude":"-74.124"},"country":"US","country_code":"US","id":220,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Monmouth, NJ"},{"coordinates":{"latitude":"40.0712","longitude":"-74.8649"},"country":"US","country_code":"US","id":221,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Burlington, NJ"},{"coordinates":{"latitude":"39.9259","longitude":"-75.1196"},"country":"US","country_code":"US","id":222,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Camden, NJ"},{"coordinates":{"latitude":"40.8568","longitude":"-74.1285"},"country":"US","country_code":"US","id":223,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Passaic, NJ"},{"coordinates":{"latitude":"40.6976","longitude":"-74.2632"},"country":"US","country_code":"US","id":224,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Union, NJ"},{"coordinates":{"latitude":"39.6553","longitude":"-106.8287"},"country":"US","country_code":"US","id":225,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Eagle, CO"},{"coordinates":{"latitude":"40.6956","longitude":"-105.5943"},"country":"US","country_code":"US","id":226,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Larimer, CO"},{"coordinates":{"latitude":"39.6203","longitude":"-104.3326"},"country":"US","country_code":"US","id":227,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Arapahoe, CO"},{"coordinates":{"latitude":"38.5458","longitude":"-106.9253"},"country":"US","country_code":"US","id":228,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Gunnison, CO"},{"coordinates":{"latitude":"41.9879","longitude":"-88.4016"},"country":"US","country_code":"US","id":229,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Kane, IL"},{"coordinates":{"latitude":"41.0458","longitude":"-75.2479"},"country":"US","country_code":"US","id":230,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Monroe, PA"},{"coordinates":{"latitude":"39.9526","longitude":"-75.1652"},"country":"US","country_code":"US","id":231,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Philadelphia, PA"},{"coordinates":{"latitude":"36.8508","longitude":"-76.2859"},"country":"US","country_code":"US","id":232,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Norfolk, VA"},{"coordinates":{"latitude":"38.8816","longitude":"-77.091"},"country":"US","country_code":"US","id":233,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Arlington, VA"},{"coordinates":{"latitude":"38.2042","longitude":"-77.6078"},"country":"US","country_code":"US","id":234,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Spotsylvania, VA"},{"coordinates":{"latitude":"39.0768","longitude":"-77.6536"},"country":"US","country_code":"US","id":235,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Loudoun, VA"},{"coordinates":{"latitude":"38.7849","longitude":"-76.8721"},"country":"US","country_code":"US","id":236,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Prince George's, MD"},{"coordinates":{"latitude":"41.3912","longitude":"-95.4778"},"country":"US","country_code":"US","id":237,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Pottawattamie, IA"},{"coordinates":{"latitude":"34.2465","longitude":"-80.607"},"country":"US","country_code":"US","id":238,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Camden, NC"},{"coordinates":{"latitude":"32.0575","longitude":"-111.6661"},"country":"US","country_code":"US","id":239,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Pima, AZ"},{"coordinates":{"latitude":"41.4277","longitude":"-85.355"},"country":"US","country_code":"US","id":240,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Noble, IN"},{"coordinates":{"latitude":"39.8522","longitude":"-77.2865"},"country":"US","country_code":"US","id":241,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Adams, IN"},{"coordinates":{"latitude":"40.0106","longitude":"-86.4997"},"country":"US","country_code":"US","id":242,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Boone, IN"},{"coordinates":{"latitude":"43.0186","longitude":"-89.5498"},"country":"US","country_code":"US","id":243,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Dane, WI"},{"coordinates":{"latitude":"44.7509","longitude":"-92.3814"},"country":"US","country_code":"US","id":244,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Pierce, WI"},{"coordinates":{"latitude":"41.4339","longitude":"-81.6758"},"country":"US","country_code":"US","id":245,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Cuyahoga, OH"},{"coordinates":{"latitude":"41.2603","longitude":"-111.9522"},"country":"US","country_code":"US","id":246,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Weber, UT"},{"coordinates":{"latitude":"43.0279","longitude":"-73.135"},"country":"US","country_code":"US","id":247,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Bennington County, VT"},{"coordinates":{"latitude":"44.8254","longitude":"-93.7842"},"country":"US","country_code":"US","id":248,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Carver County, MN"},{"coordinates":{"latitude":"26.8946","longitude":"-81.9098"},"country":"US","country_code":"US","id":249,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Charlotte County, FL"},{"coordinates":{"latitude":"34.2515","longitude":"-84.4803"},"country":"US","country_code":"US","id":250,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Cherokee County, GA"},{"coordinates":{"latitude":"33.1795","longitude":"-96.493"},"country":"US","country_code":"US","id":251,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Collin County, TX"},{"coordinates":{"latitude":"38.1938","longitude":"-85.6435"},"country":"US","country_code":"US","id":252,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Jefferson County, KY"},{"coordinates":{"latitude":"29.6499","longitude":"-90.1121"},"country":"US","country_code":"US","id":253,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Jefferson Parish, LA"},{"coordinates":{"latitude":"40.7909","longitude":"-121.8474"},"country":"US","country_code":"US","id":254,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Shasta County, CA"},{"coordinates":{"latitude":"34.8606","longitude":"-81.9535"},"country":"US","country_code":"US","id":255,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Spartanburg County, SC"},{"coordinates":{"latitude":"38.4333","longitude":"-84.3542"},"country":"US","country_code":"US","id":256,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Harrison County, KY"},{"coordinates":{"latitude":"41.6699","longitude":"-91.5984"},"country":"US","country_code":"US","id":257,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Johnson County, IA"},{"coordinates":{"latitude":"42.3118","longitude":"-73.1822"},"country":"US","country_code":"US","id":258,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Berkshire County, MA"},{"coordinates":{"latitude":"36.1343","longitude":"-86.822"},"country":"US","country_code":"US","id":259,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Davidson County, TN"},{"coordinates":{"latitude":"43.1261","longitude":"-123.2492"},"country":"US","country_code":"US","id":260,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Douglas County, OR"},{"coordinates":{"latitude":"36.9859","longitude":"-119.2321"},"country":"US","country_code":"US","id":261,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Fresno County, CA"},{"coordinates":{"latitude":"39.5839","longitude":"-76.3637"},"country":"US","country_code":"US","id":262,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Harford County, MD"},{"coordinates":{"latitude":"39.8065","longitude":"-86.5401"},"country":"US","country_code":"US","id":263,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Hendricks County, IN"},{"coordinates":{"latitude":"40.7453","longitude":"-74.0535"},"country":"US","country_code":"US","id":264,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Hudson County, NJ"},{"coordinates":{"latitude":"38.8454","longitude":"-94.8521"},"country":"US","country_code":"US","id":265,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Johnson County, KS"},{"coordinates":{"latitude":"47.175","longitude":"-120.9319"},"country":"US","country_code":"US","id":266,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Kittitas County, WA"},{"coordinates":{"latitude":"27.4799","longitude":"-82.3452"},"country":"US","country_code":"US","id":267,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Manatee County, FL"},{"coordinates":{"latitude":"44.8446","longitude":"-122.5927"},"country":"US","country_code":"US","id":268,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Marion County, OR"},{"coordinates":{"latitude":"30.5773","longitude":"-86.6611"},"country":"US","country_code":"US","id":269,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Okaloosa County, FL"},{"coordinates":{"latitude":"34.0132","longitude":"-85.1479"},"country":"US","country_code":"US","id":270,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Polk County, GA"},{"coordinates":{"latitude":"33.9533","longitude":"-117.3961"},"country":"US","country_code":"US","id":271,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Riverside County, CA"},{"coordinates":{"latitude":"35.1269","longitude":"-89.9253"},"country":"US","country_code":"US","id":272,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Shelby County, TN"},{"coordinates":{"latitude":"38.6103","longitude":"-90.4125"},"country":"US","country_code":"US","id":273,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"St. Louis County, MO"},{"coordinates":{"latitude":"40.9849","longitude":"-72.6151"},"country":"US","country_code":"US","id":274,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Suffolk County, NY"},{"coordinates":{"latitude":"41.8586","longitude":"-74.3118"},"country":"US","country_code":"US","id":275,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Ulster County, NY"},{"coordinates":{"latitude":"29.028","longitude":"-81.0755"},"country":"US","country_code":"US","id":276,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Volusia County, FL"},{"coordinates":{"latitude":"38.9085","longitude":"-77.2405"},"country":"US","country_code":"US","id":277,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Fairfax County, VA"},{"coordinates":{"latitude":"42.9931","longitude":"-71.0498"},"country":"US","country_code":"US","id":278,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Rockingham County, NH"},{"coordinates":{"latitude":"38.9072","longitude":"-77.0369"},"country":"US","country_code":"US","id":279,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Washington, D.C."},{"coordinates":{"latitude":"40.229","longitude":"-75.3879"},"country":"US","country_code":"US","id":280,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Montgomery County, PA"},{"coordinates":{"latitude":"37.6017","longitude":"-121.7195"},"country":"US","country_code":"US","id":281,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Alameda County, CA"},{"coordinates":{"latitude":"26.1901","longitude":"-80.3659"},"country":"US","country_code":"US","id":282,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Broward County, FL"},{"coordinates":{"latitude":"26.663","longitude":"-81.9535"},"country":"US","country_code":"US","id":283,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Lee County, FL"},{"coordinates":{"latitude":"32.8162","longitude":"-111.2845"},"country":"US","country_code":"US","id":284,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Pinal County, AZ"},{"coordinates":{"latitude":"41.1489","longitude":"-73.983"},"country":"US","country_code":"US","id":285,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Rockland County, NY"},{"coordinates":{"latitude":"43.0324","longitude":"-73.936"},"country":"US","country_code":"US","id":286,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Saratoga County, NY"},{"coordinates":{"latitude":"32.7957","longitude":"-79.7848"},"country":"US","country_code":"US","id":287,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Charleston County, SC"},{"coordinates":{"latitude":"45.7466","longitude":"-122.5194"},"country":"US","country_code":"US","id":288,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Clark County, WA"},{"coordinates":{"latitude":"33.8999","longitude":"-84.5641"},"country":"US","country_code":"US","id":289,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Cobb County, GA"},{"coordinates":{"latitude":"40.9629","longitude":"-112.0953"},"country":"US","country_code":"US","id":290,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Davis County, UT"},{"coordinates":{"latitude":"38.9108","longitude":"-104.4723"},"country":"US","country_code":"US","id":291,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"El Paso County, CO"},{"coordinates":{"latitude":"21.307","longitude":"-157.8584"},"country":"US","country_code":"US","id":292,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Honolulu County, HI"},{"coordinates":{"latitude":"42.3345","longitude":"-122.7647"},"country":"US","country_code":"US","id":293,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Jackson County, OR"},{"coordinates":{"latitude":"47.7425","longitude":"-123.304"},"country":"US","country_code":"US","id":294,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Jefferson County, WA"},{"coordinates":{"latitude":"34.3672","longitude":"-80.5883"},"country":"US","country_code":"US","id":295,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Kershaw County, SC"},{"coordinates":{"latitude":"42.6953","longitude":"-121.6142"},"country":"US","country_code":"US","id":296,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Klamath County, OR"},{"coordinates":{"latitude":"37.2519","longitude":"-119.6963"},"country":"US","country_code":"US","id":297,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Madera County, CA"},{"coordinates":{"latitude":"47.0676","longitude":"-122.1295"},"country":"US","country_code":"US","id":298,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Pierce County, WA"},{"coordinates":{"latitude":"36.1593","longitude":"-95.941"},"country":"US","country_code":"US","id":299,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Tulsa County, OK"},{"coordinates":{"latitude":"39.2587","longitude":"-104.9389"},"country":"US","country_code":"US","id":300,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Douglas County, CO"},{"coordinates":{"latitude":"41.8882","longitude":"-71.4774"},"country":"US","country_code":"US","id":301,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Providence County, RI"},{"coordinates":{"latitude":"35.7211","longitude":"-79.1781"},"country":"US","country_code":"US","id":302,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Chatham County, NC"},{"coordinates":{"latitude":"39.9078","longitude":"-75.3879"},"country":"US","country_code":"US","id":303,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Delaware County, PA"},{"coordinates":{"latitude":"41.3148","longitude":"-96.1951"},"country":"US","country_code":"US","id":304,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Douglas County, NE"},{"coordinates":{"latitude":"38.0606","longitude":"-84.4803"},"country":"US","country_code":"US","id":305,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Fayette County, KY"},{"coordinates":{"latitude":"39.8362","longitude":"-86.1752"},"country":"US","country_code":"US","id":306,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Marion County, IN"},{"coordinates":{"latitude":"42.4672","longitude":"-71.2874"},"country":"US","country_code":"US","id":307,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Middlesex County, MA"},{"coordinates":{"latitude":"40.6546","longitude":"-73.5594"},"country":"US","country_code":"US","id":308,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Nassau County, NY"},{"coordinates":{"latitude":"44.9964","longitude":"-93.0616"},"country":"US","country_code":"US","id":309,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Ramsey County, MN"},{"coordinates":{"latitude":"40.5608","longitude":"-119.6035"},"country":"US","country_code":"US","id":310,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Washoe County, NV"},{"coordinates":{"latitude":"41.6739","longitude":"-75.2479"},"country":"US","country_code":"US","id":311,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Wayne County, PA"},{"coordinates":{"latitude":"38.7646","longitude":"-121.9018"},"country":"US","country_code":"US","id":312,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Yolo County, CA"},{"coordinates":{"latitude":"37.3541","longitude":"-121.9552"},"country":"US","country_code":"US","id":313,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Santa Clara County, CA"},{"coordinates":{"latitude":"36.0796","longitude":"-115.094"},"country":"US","country_code":"US","id":314,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Clark County, NV"},{"coordinates":{"latitude":"29.5693","longitude":"-95.8143"},"country":"US","country_code":"US","id":315,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Fort Bend County, TX"},{"coordinates":{"latitude":"47.1981","longitude":"-119.3732"},"country":"US","country_code":"US","id":316,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Grant County, WA"},{"coordinates":{"latitude":"30.769","longitude":"-86.9824"},"country":"US","country_code":"US","id":317,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Santa Rosa County, FL"},{"coordinates":{"latitude":"35.9179","longitude":"-86.8622"},"country":"US","country_code":"US","id":318,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Williamson County, TN"},{"coordinates":{"latitude":"40.7128","longitude":"-74.006"},"country":"US","country_code":"US","id":319,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"New York County, NY"},{"coordinates":{"latitude":"39.1547","longitude":"-77.2405"},"country":"US","country_code":"US","id":320,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Montgomery County, MD"},{"coordinates":{"latitude":"42.3601","longitude":"-71.0589"},"country":"US","country_code":"US","id":321,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Suffolk County, MA"},{"coordinates":{"latitude":"39.7392","longitude":"-104.9903"},"country":"US","country_code":"US","id":322,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Denver County, CO"},{"coordinates":{"latitude":"39.5912","longitude":"-106.064"},"country":"US","country_code":"US","id":323,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Summit County, CO"},{"coordinates":{"latitude":"40.9263","longitude":"-74.077"},"country":"US","country_code":"US","id":324,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Bergen County, NJ"},{"coordinates":{"latitude":"29.7752","longitude":"-95.3103"},"country":"US","country_code":"US","id":325,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Harris County, TX"},{"coordinates":{"latitude":"37.7749","longitude":"-122.4194"},"country":"US","country_code":"US","id":326,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"San Francisco County, CA"},{"coordinates":{"latitude":"37.8534","longitude":"-121.9018"},"country":"US","country_code":"US","id":327,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Contra Costa County, CA"},{"coordinates":{"latitude":"33.7879","longitude":"-117.8531"},"country":"US","country_code":"US","id":328,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Orange County, CA"},{"coordinates":{"latitude":"42.1767","longitude":"-71.1449"},"country":"US","country_code":"US","id":329,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Norfolk County, MA"},{"coordinates":{"latitude":"33.2918","longitude":"-112.4291"},"country":"US","country_code":"US","id":330,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Maricopa County, AZ"},{"coordinates":{"latitude":"35.8032","longitude":"-78.5661"},"country":"US","country_code":"US","id":331,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Wake County, NC"},{"coordinates":{"latitude":"41.122","longitude":"-73.7949"},"country":"US","country_code":"US","id":332,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Westchester County, NY"},{"coordinates":{"latitude":"43.9088","longitude":"-71.826"},"country":"US","country_code":"US","id":333,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Grafton County, NH"},{"coordinates":{"latitude":"27.9904","longitude":"-82.3018"},"country":"US","country_code":"US","id":334,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Hillsborough, FL"},{"coordinates":{"latitude":"39.0916","longitude":"-120.8039"},"country":"US","country_code":"US","id":335,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Placer County, CA"},{"coordinates":{"latitude":"37.563","longitude":"-122.3255"},"country":"US","country_code":"US","id":336,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"San Mateo, CA"},{"coordinates":{"latitude":"38.578","longitude":"-122.9888"},"country":"US","country_code":"US","id":337,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Sonoma County, CA"},{"coordinates":{"latitude":"45.775","longitude":"-118.7606"},"country":"US","country_code":"US","id":338,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Umatilla, OR"},{"coordinates":{"latitude":"33.8034","longitude":"-84.3963"},"country":"US","country_code":"US","id":339,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Fulton County, GA"},{"coordinates":{"latitude":"45.547","longitude":"-123.1386"},"country":"US","country_code":"US","id":340,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Washington County, OR"},{"coordinates":{"latitude":"48.033","longitude":"-121.8339"},"country":"US","country_code":"US","id":341,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Snohomish County, WA"},{"coordinates":{"latitude":"40.745","longitude":"-123.8695"},"country":"US","country_code":"US","id":342,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Humboldt County, CA"},{"coordinates":{"latitude":"38.4747","longitude":"-121.3542"},"country":"US","country_code":"US","id":343,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Sacramento County, CA"},{"coordinates":{"latitude":"32.7157","longitude":"-117.1611"},"country":"US","country_code":"US","id":344,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"San Diego County, CA"},{"coordinates":{"latitude":"36.5761","longitude":"-120.9876"},"country":"US","country_code":"US","id":345,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"San Benito, CA"},{"coordinates":{"latitude":"34.0522","longitude":"-118.2437"},"country":"US","country_code":"US","id":346,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Los Angeles, CA"},{"coordinates":{"latitude":"47.6062","longitude":"-122.3321"},"country":"US","country_code":"US","id":347,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"King County, WA"},{"coordinates":{"latitude":"41.7377","longitude":"-87.6976"},"country":"US","country_code":"US","id":348,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Cook County, IL"},{"coordinates":{"latitude":"48.4242","longitude":"-121.7114"},"country":"US","country_code":"US","id":349,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Skagit, WA"},{"coordinates":{"latitude":"46.8646","longitude":"-122.7696"},"country":"US","country_code":"US","id":350,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Thurston, WA"},{"coordinates":{"latitude":"48.1976","longitude":"-122.5795"},"country":"US","country_code":"US","id":351,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Island, WA"},{"coordinates":{"latitude":"48.8787","longitude":"-121.9719"},"country":"US","country_code":"US","id":352,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Whatcom, WA"},{"coordinates":{"latitude":"38.0834","longitude":"-122.7633"},"country":"US","country_code":"US","id":353,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Marin, CA"},{"coordinates":{"latitude":"38.196","longitude":"-120.6805"},"country":"US","country_code":"US","id":354,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Calaveras, CA"},{"coordinates":{"latitude":"37.5091","longitude":"-120.9876"},"country":"US","country_code":"US","id":355,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Stanislaus, CA"},{"coordinates":{"latitude":"36.6066","longitude":"-120.189"},"country":"US","country_code":"US","id":356,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"San Joaquin, CA"},{"coordinates":{"latitude":"42.632","longitude":"-70.7829"},"country":"US","country_code":"US","id":357,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Essex, MA"},{"coordinates":{"latitude":"30.7917","longitude":"-82.0843"},"country":"US","country_code":"US","id":358,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Charlton, GA"},{"coordinates":{"latitude":"26.07","longitude":"-81.4279"},"country":"US","country_code":"US","id":359,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Collier, FL"},{"coordinates":{"latitude":"27.8764","longitude":"-82.7779"},"country":"US","country_code":"US","id":360,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Pinellas, FL"},{"coordinates":{"latitude":"29.7938","longitude":"-82.4944"},"country":"US","country_code":"US","id":361,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Alachua, FL"},{"coordinates":{"latitude":"30.5927","longitude":"-81.8224"},"country":"US","country_code":"US","id":362,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Nassau, FL"},{"coordinates":{"latitude":"28.3232","longitude":"-82.4319"},"country":"US","country_code":"US","id":363,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Pasco, FL"},{"coordinates":{"latitude":"32.7767","longitude":"-96.797"},"country":"US","country_code":"US","id":364,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Dallas, TX"},{"coordinates":{"latitude":"32.7732","longitude":"-97.3517"},"country":"US","country_code":"US","id":365,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Tarrant, TX"},{"coordinates":{"latitude":"30.3883","longitude":"-95.6963"},"country":"US","country_code":"US","id":366,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Montgomery, TX"},{"coordinates":{"latitude":"40.5726","longitude":"-74.4927"},"country":"US","country_code":"US","id":367,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Middlesex, NJ"},{"coordinates":{"latitude":"39.58","longitude":"-105.2663"},"country":"US","country_code":"US","id":368,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Jefferson, CO"},{"coordinates":{"latitude":"45.5146","longitude":"-122.5863"},"country":"US","country_code":"US","id":369,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Multnomah, OR"},{"coordinates":{"latitude":"44.9267","longitude":"-123.4919"},"country":"US","country_code":"US","id":370,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Polk, OR"},{"coordinates":{"latitude":"43.8325","longitude":"-121.2617"},"country":"US","country_code":"US","id":371,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Deschutes, OR"},{"coordinates":{"latitude":"42.3334","longitude":"-88.2668"},"country":"US","country_code":"US","id":372,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"McHenry, IL"},{"coordinates":{"latitude":"42.3689","longitude":"-87.8272"},"country":"US","country_code":"US","id":373,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Lake, IL"},{"coordinates":{"latitude":"40.4108","longitude":"-75.2479"},"country":"US","country_code":"US","id":374,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Bucks, PA"},{"coordinates":{"latitude":"37.7772","longitude":"-77.5161"},"country":"US","country_code":"US","id":375,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Hanover, VA"},{"coordinates":{"latitude":"34.7253","longitude":"-80.6771"},"country":"US","country_code":"US","id":376,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Lancaster, SC"},{"coordinates":{"latitude":"36.4933","longitude":"-82.3452"},"country":"US","country_code":"US","id":377,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Sullivan, TN"},{"coordinates":{"latitude":"39.4638","longitude":"-86.1345"},"country":"US","country_code":"US","id":378,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Johnson, IN"},{"coordinates":{"latitude":"40.4483","longitude":"-86.1345"},"country":"US","country_code":"US","id":379,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Howard, IN"},{"coordinates":{"latitude":"41.6228","longitude":"-86.3377"},"country":"US","country_code":"US","id":380,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"St. Joseph, IN"},{"coordinates":{"latitude":"42.6712","longitude":"-97.8722"},"country":"US","country_code":"US","id":381,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Knox, NE"},{"coordinates":{"latitude":"40.8685","longitude":"-81.2519"},"country":"US","country_code":"US","id":382,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Stark, OH"},{"coordinates":{"latitude":"45.3293","longitude":"-93.2197"},"country":"US","country_code":"US","id":383,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Anoka, MN"},{"coordinates":{"latitude":"43.9952","longitude":"-92.3814"},"country":"US","country_code":"US","id":384,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Olmsted, MN"},{"coordinates":{"latitude":"40.8298","longitude":"-110.9984"},"country":"US","country_code":"US","id":385,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Summit, UT"},{"coordinates":{"latitude":"41.256","longitude":"-73.3709"},"country":"US","country_code":"US","id":386,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Fairfield, CT"},{"coordinates":{"latitude":"41.7866","longitude":"-73.2765"},"country":"US","country_code":"US","id":387,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Litchfield, CT"},{"coordinates":{"latitude":"29.9511","longitude":"-90.0715"},"country":"US","country_code":"US","id":388,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Orleans, LA"},{"coordinates":{"latitude":"43.8901","longitude":"-102.2548"},"country":"US","country_code":"US","id":389,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Pennington, SD"},{"coordinates":{"latitude":"44.4797","longitude":"-98.2213"},"country":"US","country_code":"US","id":390,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Beadle, SD"},{"coordinates":{"latitude":"43.0985","longitude":"-98.3965"},"country":"US","country_code":"US","id":391,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Charles Mix, SD"},{"coordinates":{"latitude":"43.7242","longitude":"-98.2213"},"country":"US","country_code":"US","id":392,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Davison, SD"},{"coordinates":{"latitude":"43.6632","longitude":"-96.8351"},"country":"US","country_code":"US","id":393,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Minnehaha, SD"},{"coordinates":{"latitude":"42.9815","longitude":"-97.8722"},"country":"US","country_code":"US","id":394,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Bon Homme, SD"},{"coordinates":{"latitude":"33.8837","longitude":"-106.7235"},"country":"US","country_code":"US","id":395,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Socorro, NM"},{"coordinates":{"latitude":"35.0178","longitude":"-106.6291"},"country":"US","country_code":"US","id":396,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Bernalillo, NM"},{"coordinates":{"latitude":"42.5922","longitude":"-83.3362"},"country":"US","country_code":"US","id":397,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Oakland, MI"},{"coordinates":{"latitude":"42.2791","longitude":"-83.3362"},"country":"US","country_code":"US","id":398,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"Wayne, MI"},{"coordinates":{"latitude":"39.5393","longitude":"-75.6674"},"country":"US","country_code":"US","id":399,"latest":{"confirmed":0,"deaths":0,"recovered":0},"province":"New Castle, DE"},{"coordinates":{"latitude":"22","longitude":"-80"},"country":"Cuba","country_code":"CU","id":400,"latest":{"confirmed":5,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"5","longitude":"-58.75"},"country":"Guyana","country_code":"GY","id":401,"latest":{"confirmed":7,"deaths":1,"recovered":0},"province":""},{"coordinates":{"latitude":"-35.4735","longitude":"149.0124"},"country":"Australia","country_code":"AU","id":402,"latest":{"confirmed":2,"deaths":0,"recovered":0},"province":"Australian Capital Territory"},{"coordinates":{"latitude":"55.3781","longitude":"-3.436"},"country":"United Kingdom","country_code":"GB","id":403,"latest":{"confirmed":1950,"deaths":55,"recovered":52},"province":"United Kingdom"},{"coordinates":{"latitude":"48.0196","longitude":"66.9237"},"country":"Kazakhstan","country_code":"KZ","id":404,"latest":{"confirmed":33,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"-17.6797","longitude":"149.4068"},"country":"France","country_code":"FR","id":405,"latest":{"confirmed":3,"deaths":0,"recovered":0},"province":"French Polynesia"},{"coordinates":{"latitude":"53.7609","longitude":"-98.8139"},"country":"Canada","country_code":"CA","id":406,"latest":{"confirmed":8,"deaths":0,"recovered":0},"province":"Manitoba"},{"coordinates":{"latitude":"52.9399","longitude":"-106.4509"},"country":"Canada","country_code":"CA","id":407,"latest":{"confirmed":7,"deaths":0,"recovered":0},"province":"Saskatchewan"},{"coordinates":{"latitude":"9.145","longitude":"40.4897"},"country":"Ethiopia","country_code":"ET","id":408,"latest":{"confirmed":5,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"12.8628","longitude":"30.2176"},"country":"Sudan","country_code":"SD","id":409,"latest":{"confirmed":1,"deaths":1,"recovered":0},"province":""},{"coordinates":{"latitude":"9.9456","longitude":"-9.6966"},"country":"Guinea","country_code":"GN","id":410,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"12.5211","longitude":"-69.9683"},"country":"Aruba","country_code":"AW","id":411,"latest":{"confirmed":3,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"37.6489","longitude":"-122.6655"},"country":"Canada","country_code":"CA","id":412,"latest":{"confirmed":8,"deaths":0,"recovered":0},"province":"Grand Princess"},{"coordinates":{"latitude":"-0.0236","longitude":"37.9062"},"country":"Kenya","country_code":"KE","id":413,"latest":{"confirmed":3,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"17.0608","longitude":"-61.7964"},"country":"Antigua and Barbuda","country_code":"AG","id":414,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"32.3182","longitude":"-86.9023"},"country":"US","country_code":"US","id":415,"latest":{"confirmed":39,"deaths":0,"recovered":0},"province":"Alabama"},{"coordinates":{"latitude":"-32.5228","longitude":"-55.7658"},"country":"Uruguay","country_code":"UY","id":416,"latest":{"confirmed":29,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"7.9465","longitude":"-1.0232"},"country":"Ghana","country_code":"GH","id":417,"latest":{"confirmed":7,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"18.2208","longitude":"-66.5901"},"country":"US","country_code":"US","id":418,"latest":{"confirmed":5,"deaths":0,"recovered":0},"province":"Puerto Rico"},{"coordinates":{"latitude":"49.19","longitude":"-2.11"},"country":"Jersey","country_code":"JE","id":419,"latest":{"confirmed":2,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"-22.9576","longitude":"18.4904"},"country":"Namibia","country_code":"NA","id":420,"latest":{"confirmed":2,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"-4.6796","longitude":"55.492"},"country":"Seychelles","country_code":"SC","id":421,"latest":{"confirmed":4,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"10.6918","longitude":"-61.2225"},"country":"Trinidad and Tobago","country_code":"TT","id":422,"latest":{"confirmed":5,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"6.4238","longitude":"-66.5897"},"country":"Venezuela","country_code":"VE","id":423,"latest":{"confirmed":33,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"-26.5225","longitude":"31.4659"},"country":"Eswatini","country_code":"SZ","id":424,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"-0.8037","longitude":"11.6094"},"country":"Gabon","country_code":"GA","id":425,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"15.7835","longitude":"-90.2308"},"country":"Guatemala","country_code":"GT","id":426,"latest":{"confirmed":6,"deaths":1,"recovered":0},"province":""},{"coordinates":{"latitude":"49.45","longitude":"-2.58"},"country":"Guernsey","country_code":"GG","id":427,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"21.0079","longitude":"10.9408"},"country":"Mauritania","country_code":"MR","id":428,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"-1.9403","longitude":"29.8739"},"country":"Rwanda","country_code":"RW","id":429,"latest":{"confirmed":7,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"13.9094","longitude":"-60.9789"},"country":"Saint Lucia","country_code":"LC","id":430,"latest":{"confirmed":2,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"12.9843","longitude":"-61.2872"},"country":"Saint Vincent and the Grenadines","country_code":"VC","id":431,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"3.9193","longitude":"-56.0278"},"country":"Suriname","country_code":"SR","id":432,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"3.9339","longitude":"-53.1258"},"country":"France","country_code":"FR","id":433,"latest":{"confirmed":11,"deaths":0,"recovered":0},"province":"French Guiana"},{"coordinates":{"latitude":"13.4443","longitude":"144.7937"},"country":"US","country_code":"US","id":434,"latest":{"confirmed":3,"deaths":0,"recovered":0},"province":"Guam"},{"coordinates":{"latitude":"42.6026","longitude":"20.903"},"country":"Kosovo","country_code":"XK","id":435,"latest":{"confirmed":2,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"53.1355","longitude":"-57.6604"},"country":"Canada","country_code":"CA","id":436,"latest":{"confirmed":3,"deaths":0,"recovered":0},"province":"Newfoundland and Labrador"},{"coordinates":{"latitude":"46.5107","longitude":"-63.4168"},"country":"Canada","country_code":"CA","id":437,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":"Prince Edward Island"},{"coordinates":{"latitude":"6.6111","longitude":"20.9394"},"country":"Central African Republic","country_code":"CF","id":438,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"-4.0383","longitude":"21.7587"},"country":"Congo (Brazzaville)","country_code":"CG","id":439,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"1.5","longitude":"10"},"country":"Equatorial Guinea","country_code":"GQ","id":440,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"-12.8275","longitude":"45.1662"},"country":"France","country_code":"FR","id":441,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":"Mayotte"},{"coordinates":{"latitude":"41.3775","longitude":"64.5853"},"country":"Uzbekistan","country_code":"UZ","id":442,"latest":{"confirmed":10,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"52.1326","longitude":"5.2913"},"country":"Netherlands","country_code":"NL","id":443,"latest":{"confirmed":1705,"deaths":43,"recovered":2},"province":"Netherlands"},{"coordinates":{"latitude":"44.682","longitude":"-63.7443"},"country":"Canada","country_code":"CA","id":444,"latest":{"confirmed":7,"deaths":0,"recovered":0},"province":"Nova Scotia"},{"coordinates":{"latitude":"16.25","longitude":"-61.5833"},"country":"France","country_code":"FR","id":445,"latest":{"confirmed":18,"deaths":0,"recovered":0},"province":"Guadeloupe"},{"coordinates":{"latitude":"9.3077","longitude":"2.3158"},"country":"Benin","country_code":"BJ","id":446,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"71.7069","longitude":"-42.6043"},"country":"Greenland","country_code":"GL","id":447,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"6.4281","longitude":"-9.4295"},"country":"Liberia","country_code":"LR","id":448,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"12.1696","longitude":"-68.99"},"country":"Netherlands","country_code":"NL","id":449,"latest":{"confirmed":3,"deaths":0,"recovered":0},"province":"Curacao"},{"coordinates":{"latitude":"-1.44","longitude":"15.556"},"country":"Republic of the Congo","country_code":"CG","id":450,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"5.1521","longitude":"46.1996"},"country":"Somalia","country_code":"SO","id":451,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"-6.369","longitude":"34.8888"},"country":"Tanzania","country_code":"TZ","id":452,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"24.25","longitude":"-76"},"country":"The Bahamas","country_code":"BS","id":453,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"18.3358","longitude":"-64.8963"},"country":"US","country_code":"US","id":454,"latest":{"confirmed":2,"deaths":0,"recovered":0},"province":"Virgin Islands"},{"coordinates":{"latitude":"19.3133","longitude":"-81.2546"},"country":"United Kingdom","country_code":"GB","id":455,"latest":{"confirmed":1,"deaths":1,"recovered":0},"province":"Cayman Islands"},{"coordinates":{"latitude":"-21.1351","longitude":"55.2471"},"country":"France","country_code":"FR","id":456,"latest":{"confirmed":9,"deaths":0,"recovered":0},"province":"Reunion"},{"coordinates":{"latitude":"13.1939","longitude":"-59.5432"},"country":"Barbados","country_code":"BB","id":457,"latest":{"confirmed":2,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"42.5","longitude":"19.3"},"country":"Montenegro","country_code":"ME","id":458,"latest":{"confirmed":2,"deaths":0,"recovered":0},"province":""},{"coordinates":{"latitude":"13.4667","longitude":"-16.6"},"country":"The Gambia","country_code":"GM","id":459,"latest":{"confirmed":1,"deaths":0,"recovered":0},"province":""}]} diff --git a/store/actions.js b/store/actions.js index c2c7c3a..0af279c 100755 --- a/store/actions.js +++ b/store/actions.js @@ -1,33 +1,41 @@ export default { async nuxtServerInit({ commit }, ctx) { - await this.$axios.get( - process.env.NODE_ENV !== 'production' ? 'data.json' : '/all' - ) + await Promise.all([ + this.$axios.get( + process.env.NODE_ENV !== 'production' + ? 'latest.json' + : `${process.env.DOMAIN}/api/latest` + ), + this.$axios.get( + process.env.NODE_ENV !== 'production' + ? 'locations.json' + : `${process.env.DOMAIN}/api/locations` + ) + ]) .then(res => { - if (res.status === 200) { - const { - confirmed, - latest - } = res.data - commit('SET_DATA', res.data) - commit('SET_LATEST', latest) - commit('SET_COUNTRIES', confirmed) - } + commit('SET_LATEST', res[0].data.latest) + commit('SET_DATA', res[1].data) + commit('SET_COUNTRIES', res[1].data) }) .catch(err => { console.log('API error.', err) }) }, - getCasesByCountry({ state, commit }, payload) { - const country_case = state.data.features.filter(feature => { - if (payload.country) { - if (payload.province) { - return feature.properties.country === payload.country && feature.properties.province === payload.province - } else { - return feature.properties.country === payload.country + async getOverviewByCountry({ commit }, id) { + await this.$axios + .get( + process.env.NODE_ENV !== 'production' + ? 'location-16.json' + : `${process.env.DOMAIN}/api/locations/${id}` + ) + .then(res => { + if (res.status === 200) { + const { location } = res.data + commit('SET_RESULT', location) } - } - }) - commit('SET_COUNTRY_CASE', country_case) + }) + .catch(err => { + console.log('API error.', err) + }) } } diff --git a/store/getters.js b/store/getters.js index c209dbe..6e73c84 100755 --- a/store/getters.js +++ b/store/getters.js @@ -2,5 +2,5 @@ export default { data: state => state.data, latest: state => state.latest, countries: state => state.countries, - country_case: state => state.country_case + result: state => state.result } \ No newline at end of file diff --git a/store/mutations.js b/store/mutations.js index f98bb14..9d90a90 100755 --- a/store/mutations.js +++ b/store/mutations.js @@ -1,12 +1,47 @@ export default { SET_DATA: (state, data) => { - const { confirmed, deaths, recovered } = data + const { locations } = data const dataCollection = { type: 'FeatureCollection', features: [] } + locations.forEach((location, index) => { + if ( + location.latest.confirmed + || location.latest.recovered + || location.latest.deaths + ) { + dataCollection.features.push({ + type: 'Feature', + properties: { + id: location.id, + country: location.country, + country_code: location.country_code, + province: location.province, + confirmed_count: location.latest.confirmed, + recovered_count: location.latest.recovered, + dead_count: location.latest.deaths + }, + geometry: { + type: 'Point', + coordinates: [ + location.coordinates.longitude, + location.coordinates.latitude + ] + } + }) + } + }) + state.data = dataCollection + }, + SET_LATEST: (state, latest) => { + state.latest = latest + }, + SET_RESULT: (state, result) => { + const latest = result.latest + const title = result.province ? `${result.province}, ${result.country}` : result.country const timeSince = (date) => { - let seconds = Math.floor((new Date() - date) / 1000) + let seconds = Math.floor((new Date() - new Date(date)) / 1000) let interval = Math.floor(seconds / 31536000) if (interval > 1) { return interval + ' years' @@ -29,98 +64,104 @@ export default { } return Math.floor(seconds) + ' seconds' } - const lastUpdate = (history) => { - const last = new Date( - Math.max.apply( - null, - Object.keys(history).map((d) => { - return new Date(d) - }) - ) - ) - return timeSince(last) + ' ago' + const series = _ => { + const timelineConfirmed = Object.entries(result.timelines.confirmed.timeline).filter(o => o[1] !== 0).map(o => o) + const timelineDeaths = Object.entries(result.timelines.deaths.timeline).filter(o => o[1] !== 0).map(o => o) + // const timelineRecovered = Object.entries(result.timelines.recovered.timeline).filter(o => o[1] !== 0).map(o => o) + return [ + { + name: 'Confirmed', + data: timelineConfirmed + }, + { + name: 'Deaths', + data: timelineDeaths + } + // { + // name: 'Recovered', + // data: timelineRecovered + // } + ] } - const sortDate = dates => { - const sorted_date = {} - Object.keys(dates) - .sort((a, b) => { - return new Date(a) - new Date(b) + const timeline = () => { + const isPlural = (name, total, s) => `${total} ${s}${(total > 1) ? 's' : ''}` + const getPerDay = data => { + let temp = 0 + const trueTimeline = {} + data.forEach(a => { + trueTimeline[a[0]] = a[1] > temp ? a[1] - temp : 0 + temp = a[1] }) - .forEach(key => { - sorted_date[key] = dates[key] - }) - return sorted_date - } - confirmed.locations.forEach((location, index) => { - const recovered_locations = recovered.locations[index] - const dead_locations = deaths.locations[index] - let recovered_count = 0 - let dead_count = 0 - if ( - location.coordinates.long === recovered_locations.coordinates.long - && location.coordinates.lat === recovered_locations.coordinates.lat - ) { - recovered_count = recovered_locations.latest - } - if ( - location.coordinates.long === dead_locations.coordinates.long - && location.coordinates.lat === dead_locations.coordinates.lat - ) { - dead_count = dead_locations.latest + return trueTimeline } - if (location.latest || recovered_count || dead_count) { - dataCollection.features.push({ - type: 'Feature', - properties: { - country: location.country, - country_code: location.country_code, - province: location.province, - confirmed_count: location.latest, - confirmed_history: sortDate(location.history), - recovered_count: recovered_count, - recovered_history: sortDate(recovered_locations.history), - dead_count: dead_count, - dead_history: sortDate(dead_locations.history), - last_update: lastUpdate(location.history) - }, - geometry: { - type: 'Point', - coordinates: [ - location.coordinates.long, - location.coordinates.lat - ] - } + const formatDate = val => { + const d = new Date(val) + const dtf = new Intl.DateTimeFormat('en', { + year: 'numeric', + month: 'short', + day: '2-digit' }) + const [{ value: mo }, , { value: da }, , { value: ye }] = dtf.formatToParts(d) + return { + month: mo, + date: da, + year: ye + } } - }) - state.data = dataCollection - }, - SET_LATEST: (state, latest) => { - state.latest = latest + const perDayConfirmed = getPerDay(Object.entries(result.timelines.confirmed.timeline)) + const perDayDeaths = getPerDay(Object.entries(result.timelines.deaths.timeline)) + // const perDayRecovered = getPerDay(Object.entries(result.timelines.recovered.timeline)) + const perDayCases = Object.entries(perDayConfirmed).map(o => { + let summary = '' + if (o[1] || perDayDeaths[o[0]]) { + if (o[1]) { + summary += `${isPlural('confirmed', o[1], 'confirmed case')}` + } + if (perDayDeaths[o[0]]) { + summary += o[1] ? ' and ' : '' // o[1] && perDayRecovered[o[0]] ? ', ' : o[1] ? ' and ' : '' + summary += `${isPlural('deaths', perDayDeaths[o[0]], 'death')}` + } + // if (perDayRecovered[o[0]]) { + // summary += o[1] || perDayDeaths[o[0]] ? ' and ' : '' + // summary += `${perDayRecovered[o[0]]} recovered` + // } + } + return { + timestamp: formatDate(o[0]), + summary: summary + '.' + } + }) + return perDayCases.filter(o => o.summary !== '.') + } + const getPercentage = (data, b) => (data / b) * 100 + const mortality_rate = getPercentage(latest.deaths, latest.confirmed) + const recovered_rate = getPercentage(latest.recovered, latest.confirmed) + state.result = { + title: title, + latest: latest, + last_updated: timeSince(result.last_updated), + series: series(), + timeline: timeline(), + mortality_rate: mortality_rate.toFixed(2), + recovered_rate: recovered_rate.toFixed(2) + } }, SET_COUNTRIES: (state, data) => { const groupProvinceByCountry = (array, key) => { return array.reduce((result, currentValue) => { - ;(result[currentValue[key]] = result[currentValue[key]] || []).push(currentValue.province) + if ( + currentValue.latest.confirmed + || currentValue.latest.deaths + || currentValue.latest.recovered + ) { + ;(result[currentValue[key]] = result[currentValue[key]] || []).push({ + id: currentValue.id, + province: currentValue.province + }) + } return result }, {}) } state.countries = groupProvinceByCountry(data.locations, 'country') - }, - SET_COUNTRY_CASE: (state, country_case) => { - // const merged_history = {} - // const history = [ - // country_case[0].properties.confirmed_history, - // country_case[0].properties.recovered_history, - // country_case[0].properties.dead_history - // ] - // history.forEach(item => { - // Object.keys(item).forEach(key => { - // merged_history[key] = merged_history[key] || [] - // merged_history[key].push(item[key] || 0) - // }) - // }) - // state.country_case = Object.assign(country_case[0].properties, { merged_history: merged_history }) - state.country_case = Object.assign({}, country_case[0].properties) } } diff --git a/store/state.js b/store/state.js index bf44a74..deeab9d 100755 --- a/store/state.js +++ b/store/state.js @@ -1,6 +1,14 @@ export default () => ({ data: {}, latest: {}, - countries: [], - country_case: [] + countries: {}, + result: { + title: '', + latest: {}, + last_updated: '', + series: [], + timeline: [], + mortality_rate: 0, + recovered_rate: 0 + } }) \ No newline at end of file