{"id":1199,"date":"2020-03-15T15:19:24","date_gmt":"2020-03-15T14:19:24","guid":{"rendered":"http:\/\/blog.zhaw.ch\/splab\/?p=1199"},"modified":"2020-04-07T12:08:54","modified_gmt":"2020-04-07T10:08:54","slug":"coronavirus-mapping-as-a-service","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/","title":{"rendered":"Coronavirus Mapping as a Service"},"content":{"rendered":"\n<pre class=\"wp-block-preformatted\">Note: This post does not contain any medical advice or suggestions on how to act and react. If you are looking for that, you are looking in the wrong place.<\/pre>\n\n\n\n<p>Economy and society in Switzerland are currently highly affected by the spreading second version of the coronavirus (SARS-CoV-2) that causes the associated infectious desease (COVID-19). The World Health Organisation (WHO) has classified the virus outbreak as PHEIC on <a href=\"https:\/\/www.who.int\/docs\/default-source\/coronaviruse\/transcripts\/ihr-emergency-committee-for-pneumonia-due-to-the-novel-coronavirus-2019-ncov-press-briefing-transcript-30012020.pdf?sfvrsn=c9463ac1_2\">January 30<\/a> and as pandemy on <a href=\"https:\/\/www.who.int\/docs\/default-source\/coronaviruse\/transcripts\/who-audio-emergencies-coronavirus-press-conference-full-and-final-11mar2020.pdf?sfvrsn=cb432bb3_2\">March 11<\/a>. In Switzerland, the state emergency level <a href=\"https:\/\/www.admin.ch\/opc\/de\/classified-compilation\/20071012\/index.html\">Eminent\/Special Situation<\/a> was reached on <a href=\"https:\/\/www.admin.ch\/gov\/en\/start\/documentation\/media-releases\/media-releases-federal-council.msg-id-78289.html\">February 28<\/a>, and further restrictions led de-facto to the subsequent level Extraordinary Situation on March 13. This blog post reports on how the outbreak evolution can be continuously visualised as a reliable service with off-the-shelf tools.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>As researchers and educators, we are inevitably affected by the coronavirus like most of the population. Conferences are cancelled, moved to later days, or switching to online-only participation, as are lectures. Visiting researchers can no longer visit, and project trips are cancelled as well.<\/p>\n\n\n\n<p>We are however privileged in two ways as computer science researchers. First, most of our research works fine in isolation. Even Internet access could drop for a while, as long as electricity is available to power our notebooks. Second, as part of the digital transformation, we can think of how we can contribute to better capture, preserve, augment and convey the information about the outbreak. False facts spread as quickly as the virus does, and due to the dynamics and the global scope, the data quality differs a lot. Generally, much of the data are also not verified by independent sources, and are presented in a particular way without easy remixing for reinterpretation. Due to our <a href=\"https:\/\/blog.zhaw.ch\/splab\/tag\/maomao\/\">work on MAO<\/a>, we could think of a global collaborative network of research data. In this post, however, the focus is on a more entry-level visualisation of existing data for Switzerland.<\/p>\n\n\n\n<p>A lot of maps are produced that show the absolute number of cases. Few sources exist to systematically track the numbers relative to the population density. A good example would be on Wikipedia, showing world maps for both metrics <a href=\"https:\/\/en.wikipedia.org\/wiki\/2019\u201320_coronavirus_pandemic_by_country_and_territory\">side by side<\/a>. Yet this does not allow for precise comparisons due to the binning (i.e. 11 and 50 cases per 1 million inhabitants are coloured equally). Furthermore it does not allow for zooming into a country&#8217;s second-order administrative areas easily. Even fewer reliable <a href=\"https:\/\/github.com\/CSSEGISandData\/COVID-19\">open data repositories<\/a> exist. The BAG numbers, for instance, are delivered as HTML content and are not available via OpenData.Swiss <a href=\"https:\/\/blog.zhaw.ch\/splab\/2020\/02\/06\/on-using-opendata-swiss\/\">as they should be<\/a>. How much effort would it take to prototype a self-made map service that uses up-to-date numbers on a daily basis?<\/p>\n\n\n\n<p>Using the <a href=\"https:\/\/www.bag.admin.ch\/bag\/de\/home\/krankheiten\/ausbrueche-epidemien-pandemien\/aktuelle-ausbrueche-epidemien\/novel-cov\/situation-schweiz-und-international.html\">BAG numbers<\/a>, <a href=\"http:\/\/www.diva-gis.org\/gdata\">GIS data<\/a>, population numbers and a <a href=\"https:\/\/towardsdatascience.com\/a-beginners-guide-to-create-a-cloropleth-map-in-python-using-geopandas-and-matplotlib-9cc4175ab630\">Python\/Geopandas tutorial<\/a>, this is not hard to answer. Although the tutorial is not complete &#8211; it misses normalised colour bars and the timeseries perspective &#8211; it is straight-forward to adapt to Switzerland. Recipe:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Prepare GIS data: <code>wget http:\/\/biogeo.ucdavis.edu\/data\/diva\/adm\/CHE_adm.zip; mkdir -p data; mv CHE_adm.zip data; cd data; unzip CHE_adm.zip<\/code><\/li><li>Prepare cantonal data: cases and population (manually; CSV file is available for 2020-03-14)<\/li><li>Render maps (Python file is available; see below).<\/li><\/ol>\n\n\n\n<p>The following two figures compare absolute and relative case numbers (sometimes without the disclaimer that these are obviously known and\/or confirmed cases only). Much of the current media attention is on the &#8220;Southern cantons&#8221; Ticino and Vaud due to high absolutes. When taking population density into account, Ticino becomes worse, Vaud less so, and Basel is evidently on the worse side as well. Valais, another &#8220;Southern canton&#8221;, does not stand out in either, making a pure geolocation-centric hypothesis less likely.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"341\" src=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_absolute-1024x341.png\" alt=\"\" class=\"wp-image-1206\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_absolute-1024x341.png 1024w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_absolute-300x100.png 300w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_absolute-768x256.png 768w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_absolute-1536x512.png 1536w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_absolute-2048x683.png 2048w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_absolute-676x225.png 676w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Switzerland coronavirus cases &#8211; absolute numbers<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"341\" src=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_density-1024x341.png\" alt=\"\" class=\"wp-image-1207\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_density-1024x341.png 1024w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_density-300x100.png 300w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_density-768x256.png 768w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_density-1536x512.png 1536w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_density-2048x683.png 2048w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_density-676x225.png 676w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Switzerland coronavirus cases &#8211; relative numbers<\/figcaption><\/figure>\n\n\n\n<p>The numbers show that in Ticino, around 0.07% of the population is currently affected (or, potentially, had been &#8211; the inclusion of deaths is not explicit in the BAG numbers). The scales have been chosen consciously to highlight the distribution differences. On a more intuitive scale, even just reaching 1% and the corresponding cantonal population of 500&#8217;000 (leaving just Bern and Zurich above), the maps look a lot less frightening:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"341\" src=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_abs_20200315-1024x341.png\" alt=\"\" class=\"wp-image-1209\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_abs_20200315-1024x341.png 1024w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_abs_20200315-300x100.png 300w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_abs_20200315-768x256.png 768w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_abs_20200315-1536x512.png 1536w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_abs_20200315-2048x683.png 2048w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_abs_20200315-676x225.png 676w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"341\" src=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_den_20200315-1024x341.png\" alt=\"\" class=\"wp-image-1210\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_den_20200315-1024x341.png 1024w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_den_20200315-300x100.png 300w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_den_20200315-768x256.png 768w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_den_20200315-1536x512.png 1536w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_den_20200315-2048x683.png 2048w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_den_20200315-676x225.png 676w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Evidently, there is a lot of power in how the maps are presented which calls for detailed studies. From a data science perspective, it is just clear that raw data, ideally as a convenient service with augmented representations, should be provided first and foremost from authoritative sources. The service would have to be stateful, updating numbers on a daily schedule instead of per request and in an automated way using web scraping until declarative data formats become available. The map representation could drill down to lower administrative areas (see however the lack of <a href=\"https:\/\/gd.zh.ch\/internet\/gesundheitsdirektion\/en\/themen\/coronavirus.html#medienmitteilungen\">Zurich cases in detail<\/a>), strengthening the geoinformatics perspective needed to resonate better with the population and hence <a href=\"https:\/\/blog.zhaw.ch\/splab\/2020\/01\/06\/two-dizh-fellowships-on-data-stream-processing-and-on-software-engineering-accepted\/\">increasing the societal impact<\/a>.<\/p>\n\n\n\n<p>Here are the map sources:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import pandas as pd\nimport numpy as np\nimport geopandas as gpd\nimport matplotlib.pyplot as plt\nimport datetime\nimport os\n\nfp = \"data\/CHE_adm1.shp\"\nmap_df = gpd.read_file(fp)\ncantons_df = pd.read_csv(\"cantons.csv\")\nmerged_df = map_df.merge(cantons_df, how=\"left\", left_on=\"NAME_1\", right_on=\"CANTON\")\n\ndef plotmap(df, datacol, vmax, filename, title):\n    sm = plt.cm.ScalarMappable(cmap='Blues', norm=plt.Normalize(vmin=0, vmax=vmax))\n    <code>fig, ax = plt.subplots(1, figsize=(30, 10))<\/code>\n    <code>ax.axis(\"off\") <\/code>\n    <code>ax.set_title(title, fontdict={'fontsize': '25', 'fontweight' : '3'}) <\/code>\n    <code>ax.annotate(\"Sources: BAG, WP, ZHAW SPLab\", xy=(0.68, 0.11), <\/code>\n    <code>xycoords='figure fraction', fontsize=12, color='#555555')<\/code>\n    <code>sm.set_array([])<\/code>\n    <code>fig.colorbar(sm, ax=ax, extend=\"max\")<\/code>\n    <code>df['coords'] = df['geometry'].apply(lambda x: x.representative_point().coords[:]) <\/code>\n    <code>df['coords'] = [coords[0] for coords in df['coords']]<\/code>\n    <code>for idx, row<\/code> <code>in df.iterrows():<\/code>\n        <code>plt.annotate(s=row['NAME_1'], xy=row['coords'],horizontalalignment='center') df.plot(column=datacol, cmap='Blues', linewidth=0.8, ax=ax, edgecolor='0.8', vmax=vmax) <\/code>\n    <code>fig.savefig(filename, dpi=150)<\/code>\n\nmerged_df[\"VIRUSCASESDENSITY\"] = 100 * merged_df[\"VIRUSCASESCONFIRMED\"] \/ merged_df[\"INHABITANTS\"]\nprint(merged_df[[\"ACR\", \"VIRUSCASESDENSITY\"]])\nif not os.path.isfile(\"map_absolute.png\"):\n    plotmap(merged_df, \"VIRUSCASESCONFIRMED\", 500, \"map_absolute.png\", \"# of confirmed coronavirus cases per canton\")\n    plotmap(merged_df, \"VIRUSCASESDENSITY\", 0.1, \"map_density.png\", \"% of coronavirus cases per cantonal population\")\n\nos.makedirs(\"dailymaps\", exist_ok=True)\nstamp = datetime.datetime.now().strftime(\"%Y%m%d\")\nhdate = datetime.datetime.now().strftime(\"%d.%m.%Y\")\n\nplotmap(merged_df, \"VIRUSCASESCONFIRMED\", 5000, f\"dailymaps\/map_abs_{stamp}.png\", f\"# of confirmed coronavirus cases per canton [{hdate}]\")\nplotmap(merged_df, \"VIRUSCASESDENSITY\", 1, f\"dailymaps\/map_den_{stamp}.png\", f\"% of coronavirus cases per cantonal population [{hdate}]\")<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">CANTON,ACR,INHABITANTS,VIRUSCASESCONFIRMED\nAargau,AG,677387,26\nAppenzell Innerrhoden,AI,16145,0\nAppenzell Ausserrhoden,AR,55234,3\nBern,BE,1034977,69\nBasel-Landschaft,BL,288132,41\nBasel-Stadt,BS,194766,100\nFribourg,FR,318714,31\nGen\u00e8ve,GE,499480,103\nGlarus,GL,40403,3\nGraub\u00fcnden,GR,198379,43\nJura,JU,73419,7\nLucerne,LU,409557,9\nNeuch\u00e2tel,NE,176850,38\nNidwalden,NW,43223,0\nObwalden,OW,37841,1\nSankt Gallen,SG,507697,16\nSchaffhausen,SH,81991,1\nSolothurn,SO,273194,6\nSchwyz,SZ,159165,12\nThurgau,TG,276472,4\nTicino,TI,353343,250\nUri,UR,36433,0\nVaud,VD,799145,254\nValais,VS,343955,43\nZug,ZG,126837,8\nZ\u00fcrich,ZH,1520968,119<\/pre>\n\n\n\n<p><\/p>\n<div class=\"pt-sm\">Schlagw\u00f6rter: <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/digital-transformation\/\">digital transformation<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/geospatial\/\">geospatial<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/maomao\/\">maomao<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/maps\/\">maps<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/opendata\/\">opendata<\/a><br><\/div>","protected":false},"excerpt":{"rendered":"<p>Note: This post does not contain any medical advice or suggestions on how to act and react. If you are looking for that, you are looking in the wrong place. Economy and society in Switzerland are currently highly affected by the spreading second version of the coronavirus (SARS-CoV-2) that causes the associated infectious desease (COVID-19). [&hellip;]<\/p>\n","protected":false},"author":203,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[11],"tags":[127,123,37,140,124],"features":[],"class_list":["post-1199","post","type-post","status-publish","format-standard","hentry","category-education","tag-digital-transformation","tag-geospatial","tag-maomao","tag-maps","tag-opendata"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Coronavirus Mapping as a Service - Service Prototyping Lab<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Coronavirus Mapping as a Service\" \/>\n<meta property=\"og:description\" content=\"Note: This post does not contain any medical advice or suggestions on how to act and react. If you are looking for that, you are looking in the wrong place. Economy and society in Switzerland are currently highly affected by the spreading second version of the coronavirus (SARS-CoV-2) that causes the associated infectious desease (COVID-19). [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Prototyping Lab\" \/>\n<meta property=\"article:published_time\" content=\"2020-03-15T14:19:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-04-07T10:08:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_absolute-1024x341.png\" \/>\n<meta name=\"author\" content=\"Josef Spillner\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Josef Spillner\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/\"},\"author\":{\"name\":\"Josef Spillner\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/33a5227c6cc1fa3329279d33c3cc440e\"},\"headline\":\"Coronavirus Mapping as a Service\",\"datePublished\":\"2020-03-15T14:19:24+00:00\",\"dateModified\":\"2020-04-07T10:08:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/\"},\"wordCount\":761,\"commentCount\":3,\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_absolute-1024x341.png\",\"keywords\":[\"digital transformation\",\"geospatial\",\"maomao\",\"maps\",\"opendata\"],\"articleSection\":[\"Education\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/\",\"url\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/\",\"name\":\"Coronavirus Mapping as a Service - Service Prototyping Lab\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_absolute-1024x341.png\",\"datePublished\":\"2020-03-15T14:19:24+00:00\",\"dateModified\":\"2020-04-07T10:08:54+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/33a5227c6cc1fa3329279d33c3cc440e\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/#primaryimage\",\"url\":\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_absolute-1024x341.png\",\"contentUrl\":\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_absolute-1024x341.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/splab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Coronavirus Mapping as a Service\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#website\",\"url\":\"https:\/\/blog.zhaw.ch\/splab\/\",\"name\":\"Service Prototyping Lab\",\"description\":\"A Blog of the ZHAW Zurich University of Applied Sciences\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.zhaw.ch\/splab\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/33a5227c6cc1fa3329279d33c3cc440e\",\"name\":\"Josef Spillner\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/c57d7019e91373902c08eac230e003cb4f8498ecf68c9d119e9ecb82fdf6c400?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c57d7019e91373902c08eac230e003cb4f8498ecf68c9d119e9ecb82fdf6c400?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c57d7019e91373902c08eac230e003cb4f8498ecf68c9d119e9ecb82fdf6c400?s=96&d=mm&r=g\",\"caption\":\"Josef Spillner\"},\"description\":\"Head of the Service Prototyping Lab. Research on distributed systems and application computing paradigms. Senior lecturer at Zurich University of Applied Sciences.\",\"url\":\"https:\/\/blog.zhaw.ch\/splab\/author\/spio\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Coronavirus Mapping as a Service - Service Prototyping Lab","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/","og_locale":"en_GB","og_type":"article","og_title":"Coronavirus Mapping as a Service","og_description":"Note: This post does not contain any medical advice or suggestions on how to act and react. If you are looking for that, you are looking in the wrong place. Economy and society in Switzerland are currently highly affected by the spreading second version of the coronavirus (SARS-CoV-2) that causes the associated infectious desease (COVID-19). [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/","og_site_name":"Service Prototyping Lab","article_published_time":"2020-03-15T14:19:24+00:00","article_modified_time":"2020-04-07T10:08:54+00:00","og_image":[{"url":"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_absolute-1024x341.png","type":"","width":"","height":""}],"author":"Josef Spillner","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Josef Spillner","Estimated reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/"},"author":{"name":"Josef Spillner","@id":"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/33a5227c6cc1fa3329279d33c3cc440e"},"headline":"Coronavirus Mapping as a Service","datePublished":"2020-03-15T14:19:24+00:00","dateModified":"2020-04-07T10:08:54+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/"},"wordCount":761,"commentCount":3,"image":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_absolute-1024x341.png","keywords":["digital transformation","geospatial","maomao","maps","opendata"],"articleSection":["Education"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/","url":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/","name":"Coronavirus Mapping as a Service - Service Prototyping Lab","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/splab\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/#primaryimage"},"image":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_absolute-1024x341.png","datePublished":"2020-03-15T14:19:24+00:00","dateModified":"2020-04-07T10:08:54+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/33a5227c6cc1fa3329279d33c3cc440e"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/#primaryimage","url":"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_absolute-1024x341.png","contentUrl":"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/map_absolute-1024x341.png"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/15\/coronavirus-mapping-as-a-service\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/splab\/"},{"@type":"ListItem","position":2,"name":"Coronavirus Mapping as a Service"}]},{"@type":"WebSite","@id":"https:\/\/blog.zhaw.ch\/splab\/#website","url":"https:\/\/blog.zhaw.ch\/splab\/","name":"Service Prototyping Lab","description":"A Blog of the ZHAW Zurich University of Applied Sciences","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.zhaw.ch\/splab\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/33a5227c6cc1fa3329279d33c3cc440e","name":"Josef Spillner","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/c57d7019e91373902c08eac230e003cb4f8498ecf68c9d119e9ecb82fdf6c400?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c57d7019e91373902c08eac230e003cb4f8498ecf68c9d119e9ecb82fdf6c400?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c57d7019e91373902c08eac230e003cb4f8498ecf68c9d119e9ecb82fdf6c400?s=96&d=mm&r=g","caption":"Josef Spillner"},"description":"Head of the Service Prototyping Lab. Research on distributed systems and application computing paradigms. Senior lecturer at Zurich University of Applied Sciences.","url":"https:\/\/blog.zhaw.ch\/splab\/author\/spio\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts\/1199","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/users\/203"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/comments?post=1199"}],"version-history":[{"count":12,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts\/1199\/revisions"}],"predecessor-version":[{"id":1246,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts\/1199\/revisions\/1246"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/media?parent=1199"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/categories?post=1199"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/tags?post=1199"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/features?post=1199"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}