{"id":11076,"date":"2025-05-16T07:43:03","date_gmt":"2025-05-16T06:43:03","guid":{"rendered":"https:\/\/dariusnarmontas.com\/?p=11076"},"modified":"2026-03-02T19:29:35","modified_gmt":"2026-03-02T19:29:35","slug":"urban-occupancy-analysis-and-dashboard-using-google-apis-and-grasshopper","status":"publish","type":"post","link":"https:\/\/dariusnarmontas.com\/index.php\/2025\/05\/16\/urban-occupancy-analysis-and-dashboard-using-google-apis-and-grasshopper\/","title":{"rendered":"Urban Occupancy Analysis and Dashboard Using Google APIs and Grasshopper"},"content":{"rendered":"\n<figure class=\"wp-block-video\"><video controls loop src=\"https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/area_animation_sans_interface_02.mov\"><\/video><figcaption class=\"wp-element-caption\">Interactive location popularity data &#8211; going through popularity data hour by hour for the whole week (Monday to Sunday)<\/figcaption><\/figure>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-video\"><video controls src=\"https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/Area_tag_icons.mp4\"><\/video><figcaption class=\"wp-element-caption\">Area tag icons by type<\/figcaption><\/figure>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The intent of this exercise was to create an interactive dashboard using Python and Grasshopper in Rhino 3D, in order to visualise and analyse data (including popular times) from the Google Maps API. <\/p>\n\n\n\n<p>I focused on three key categories of city locations: bars, restaurants and nightlife, service establishments, and retail stores. For each venue, I gathered essential details such as the name, address, precise geographic coordinates, and the type of location, all sourced from Google APIs. Additionally, I utilised popular times data from the Google API (with a workaround &#8211; Google does not provide this data through its API), which offers an hour-by-hour overview of visitor activity throughout the week. This data allows me to pinpoint peak hours and identify trends, offering valuable insights into the busiest periods for each type of location.<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1030\" height=\"575\" src=\"http:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/Rhino_cLhQcibD3L-1-1030x575.jpg\" alt=\"\" class=\"wp-image-11082\" srcset=\"https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/Rhino_cLhQcibD3L-1-1030x575.jpg 1030w, https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/Rhino_cLhQcibD3L-1-300x167.jpg 300w, https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/Rhino_cLhQcibD3L-1-768x429.jpg 768w, https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/Rhino_cLhQcibD3L-1-1536x857.jpg 1536w, https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/Rhino_cLhQcibD3L-1.jpg 1953w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Heatmaps and 10 most popular venues by category:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1030\" height=\"587\" src=\"https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/all_heatmaps_fix-1030x587.jpg\" alt=\"\" class=\"wp-image-11095\" srcset=\"https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/all_heatmaps_fix-1030x587.jpg 1030w, https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/all_heatmaps_fix-300x171.jpg 300w, https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/all_heatmaps_fix-768x437.jpg 768w, https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/all_heatmaps_fix-1536x875.jpg 1536w, https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/all_heatmaps_fix.jpg 1965w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Statistics dashboard:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1030\" height=\"587\" src=\"http:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/Rhino_CYu8qmxkA3-1030x587.jpg\" alt=\"\" class=\"wp-image-11081\" srcset=\"https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/Rhino_CYu8qmxkA3-1030x587.jpg 1030w, https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/Rhino_CYu8qmxkA3-300x171.jpg 300w, https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/Rhino_CYu8qmxkA3-768x437.jpg 768w, https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/Rhino_CYu8qmxkA3-1536x875.jpg 1536w, https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/Rhino_CYu8qmxkA3.jpg 1965w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1030\" height=\"587\" src=\"http:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/300m-1030x587.jpg\" alt=\"\" class=\"wp-image-11099\" srcset=\"https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/300m-1030x587.jpg 1030w, https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/300m-300x171.jpg 300w, https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/300m-768x437.jpg 768w, https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/300m-1536x875.jpg 1536w, https:\/\/dariusnarmontas.com\/wp-content\/uploads\/2025\/05\/300m.jpg 1965w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\">Location  type, distance to and other data can be extracted within a radius around a point of interest and \/ or other parameters <\/p>\n\n\n\n<div style=\"height:47px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The whole process is highly automated &#8211; the python script takes a set of coordinates and gathers the data automatically. The grasshopper definition takes the same coordinates and data in CSV format from the Python scripts and generates the dashboard and graphs. Case study No. 2 is another area in Oslo. Only the coordinates were provided and appropriate tweaking (without redoing the entire definition) was done where necessary. <\/p>\n\n\n\n<div style=\"height:39px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Case Study No. 2 &#8211; Gr\u00f8nland, Oslo<\/strong><\/p>\n\n\n\n<p><code><div class=\"_df_book df-lite\" id=\"df_11072\"  _slug=\"galleri-oslo-popular-times-report\" data-title=\"galleri-oslo-popular-times-report\" wpoptions=\"true\" thumbtype=\"\" ><\/div><script class=\"df-shortcode-script\" nowprocket type=\"application\/javascript\">window.option_df_11072 = {\"webgl\":\"true\",\"outline\":[],\"hard\":\"all\",\"autoEnableOutline\":\"false\",\"autoEnableThumbnail\":\"false\",\"overwritePDFOutline\":\"false\",\"enableDownload\":\"false\",\"direction\":\"1\",\"pageSize\":\"2\",\"pageMode\":\"2\",\"singlePageMode\":\"1\",\"source\":\"http:\\\/\\\/dariusnarmontas.com\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/galleri_oslo_00.pdf\",\"wpOptions\":\"true\"}; if(window.DFLIP && window.DFLIP.parseBooks){window.DFLIP.parseBooks();}<\/script><\/code><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The intent of this exercise was to create an interactive dashboard using Python and Grasshopper in Rhino 3D, in order to visualise and analyse data (including popular times) from the Google Maps API. I focused on three key categories of city locations: bars, restaurants and nightlife, service establishments, and retail stores. For each venue, I gathered essential details such as the name, address, precise geographic coordinates, and the type of location, all sourced from Google APIs. Additionally, I utilised popular times data from the Google API (with a workaround &#8211; Google does not provide this data through its API), which offers an hour-by-hour overview of visitor activity throughout the week. This data allows me to pinpoint peak hours and identify trends, offering valuable insights into the busiest periods for each type of location. Heatmaps and 10 most popular venues by category: Statistics dashboard: Location type, distance to and other data can be extracted within a radius around a point of interest and \/ or other parameters The whole process is highly automated &#8211; the python script takes a set of coordinates and gathers the data automatically. The grasshopper definition takes the same coordinates and data in CSV format from the Python scripts and generates the dashboard and graphs. Case study No. 2 is another area in Oslo. Only the coordinates were provided and appropriate tweaking (without redoing the entire definition) was done where necessary. Case Study No. 2 &#8211; Gr\u00f8nland, Oslo<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[1],"tags":[94,95,96],"class_list":["post-11076","post","type-post","status-publish","format-standard","hentry","category-blog","tag-computation","tag-data-analysis","tag-grasshopper"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/dariusnarmontas.com\/index.php\/wp-json\/wp\/v2\/posts\/11076","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dariusnarmontas.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dariusnarmontas.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dariusnarmontas.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dariusnarmontas.com\/index.php\/wp-json\/wp\/v2\/comments?post=11076"}],"version-history":[{"count":26,"href":"https:\/\/dariusnarmontas.com\/index.php\/wp-json\/wp\/v2\/posts\/11076\/revisions"}],"predecessor-version":[{"id":11224,"href":"https:\/\/dariusnarmontas.com\/index.php\/wp-json\/wp\/v2\/posts\/11076\/revisions\/11224"}],"wp:attachment":[{"href":"https:\/\/dariusnarmontas.com\/index.php\/wp-json\/wp\/v2\/media?parent=11076"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dariusnarmontas.com\/index.php\/wp-json\/wp\/v2\/categories?post=11076"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dariusnarmontas.com\/index.php\/wp-json\/wp\/v2\/tags?post=11076"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}