<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Home on Spatial Thoughts</title><link>https://spatialthoughts.com/</link><description>Recent content in Home on Spatial Thoughts</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 21 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://spatialthoughts.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Agentic Coding for Geospatial</title><link>https://spatialthoughts.com/courses/agentic-coding-geospatial/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/courses/agentic-coding-geospatial/</guid><description>Learn how to use agentic AI for solving complex geospatial problems</description></item><item><title>Geospatial Developer Essentials</title><link>https://spatialthoughts.com/courses/geospatial-developer-essentials/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/courses/geospatial-developer-essentials/</guid><description>A new course covering Git, GitHub, Cloud fundamentals, and Data Versioning with Kart.</description></item><item><title>Introduction to QGIS</title><link>https://spatialthoughts.com/courses/introduction-to-qgis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/courses/introduction-to-qgis/</guid><description>A hands-on introduction to QGIS for newcomers to GIS.</description></item><item><title>Mastering GDAL Tools</title><link>https://spatialthoughts.com/courses/mastering-gdal-tools/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/courses/mastering-gdal-tools/</guid><description>GDAL is an open-source library for raster and vector geospatial data formats. The library comes with a vast collection of utility programs that can perform many geoprocessing tasks</description></item><item><title>Python Foundation for Spatial Analysis</title><link>https://spatialthoughts.com/courses/python-foundation-for-spatial-analysis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/courses/python-foundation-for-spatial-analysis/</guid><description>AI-assisted introduction to coding for geospatial practioners.</description></item><item><title>Advanced QGIS</title><link>https://spatialthoughts.com/courses/advanced-qgis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/courses/advanced-qgis/</guid><description>Take your QGIS skills to the next level with automation, modelling and advanced visualization.</description></item><item><title>Automating GIS Workflows with QGIS</title><link>https://spatialthoughts.com/courses/automating-gis-workflows/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/courses/automating-gis-workflows/</guid><description>This is an intermediate-level class that takes a deep dive into the Processing Toolbox for building fast, automated and reproducible workflows.</description></item><item><title>Building Your Geospatial Portfolio Website</title><link>https://spatialthoughts.com/courses/geospatial-portfolio-workshop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/courses/geospatial-portfolio-workshop/</guid><description>A gentle introduction to Git, GitHub, and Web Development for building a personal portfolio website.</description></item><item><title>Cloud Native Remote Sensing with Python</title><link>https://spatialthoughts.com/courses/python-remote-sensing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/courses/python-remote-sensing/</guid><description>Learn remote-sensing using modern open-source stack.</description></item><item><title>Creating Publication Quality Charts with Google Earth Engine</title><link>https://spatialthoughts.com/courses/gee-charts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/courses/gee-charts/</guid><description>This is an intermediate-level class that covers novel datasets and shows how to create high-quality data visualizations with Google Earth Engine and Google Charts. This class also</description></item><item><title>End-To-End Google Earth Engine</title><link>https://spatialthoughts.com/courses/google-earth-engine/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/courses/google-earth-engine/</guid><description>Learn to use Google Earth Engine for remote sensing analysis at scale.</description></item><item><title>From Cloud to Desktop: Working with Earth Engine Data in QGIS</title><link>https://spatialthoughts.com/courses/qgis-gee-workshop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/courses/qgis-gee-workshop/</guid><description>Use cloud-based datasets in your QGIS workflows.</description></item><item><title>Google Earth Engine for Water Resources Management</title><link>https://spatialthoughts.com/courses/gee-for-water-resources-management/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/courses/gee-for-water-resources-management/</guid><description>The aim of this course is to introduce Google Earth Engine platform to apply remote sensing techniques using openly available Earth Observation datasets. The course also teaches pa</description></item><item><title>Mapping and Data Visualization with Python</title><link>https://spatialthoughts.com/courses/python-dataviz/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/courses/python-dataviz/</guid><description>This is an intermediate-level class that covers Python libraries for creating static and dynamic visualizations, dashboards, and interactive web apps. You will learn how to create</description></item><item><title>Storytelling with GeoLibre</title><link>https://spatialthoughts.com/courses/storytelling-with-geolibre/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/courses/storytelling-with-geolibre/</guid><description>A new workshop on GeoLibre - the open-source web-based GIS - covering story maps, 3D walkthroughs and animations.</description></item><item><title>PyQGIS Masterclass - Customizing QGIS with Python</title><link>https://spatialthoughts.com/courses/customizing-qgis-with-python/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/courses/customizing-qgis-with-python/</guid><description>A hands-on class that teaches you how to customize QGIS using the Python API. This intermediate-level course is intended for users who want to learn how to use programming techniqu</description></item><item><title>Python Foundation for Spatial Analysis (October 2026)</title><link>https://spatialthoughts.com/events/python-foundation-october-2026/</link><pubDate>Wed, 21 Oct 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/python-foundation-october-2026/</guid><description/></item><item><title>Advanced QGIS (September 2026)</title><link>https://spatialthoughts.com/events/advanced-qgis-sep-2026/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/advanced-qgis-sep-2026/</guid><description/></item><item><title>Introduction to QGIS (September 2026)</title><link>https://spatialthoughts.com/events/introduction-to-qgis-sep-2026/</link><pubDate>Wed, 02 Sep 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/introduction-to-qgis-sep-2026/</guid><description/></item><item><title>Learn Cloud Native Remote Sensing with Python in 30 Days</title><link>https://spatialthoughts.com/2026/08/28/python-remote-sensing-challenge/</link><pubDate>Fri, 28 Aug 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2026/08/28/python-remote-sensing-challenge/</guid><description>Welcome to #PythonRemoteSensingChallenge - Learn Cloud Native Remote Sensing with Python in 30 Days! We have designed this challenge to help you learn how to process, analyze and visualize satellite...</description></item><item><title>Agentic Coding for Geospatial (August 2026)</title><link>https://spatialthoughts.com/events/agentic-coding-geospatial-august-2026/</link><pubDate>Mon, 17 Aug 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/agentic-coding-geospatial-august-2026/</guid><description/></item><item><title>Cloud Native Remote Sensing with Python (August 2026)</title><link>https://spatialthoughts.com/events/python-remote-sensing-aug-2026/</link><pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/python-remote-sensing-aug-2026/</guid><description/></item><item><title>Introduction to QGIS (July 2026)</title><link>https://spatialthoughts.com/events/introduction-to-qgis-july-2026/</link><pubDate>Tue, 14 Jul 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/introduction-to-qgis-july-2026/</guid><description/></item><item><title>Cloud Native Remote Sensing with Python (June 2026)</title><link>https://spatialthoughts.com/events/python-remote-sensing-june-2026/</link><pubDate>Tue, 23 Jun 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/python-remote-sensing-june-2026/</guid><description/></item><item><title>Building Your Geospatial Portfolio Website (June 2026)</title><link>https://spatialthoughts.com/events/geospatial-portfolio-workshop-june-2026/</link><pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/geospatial-portfolio-workshop-june-2026/</guid><description/></item><item><title>Reflections on AI as an Educator</title><link>https://spatialthoughts.com/2026/05/12/reflections-on-ai/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2026/05/12/reflections-on-ai/</guid><description>This is an ongoing post with my thoughts on how AI is changing how we learn and how to keep your skills relevant.</description></item><item><title>Building Your Geospatial Portfolio Website (May 2026)</title><link>https://spatialthoughts.com/events/geospatial-portfolio-workshop-may-2026/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/geospatial-portfolio-workshop-may-2026/</guid><description/></item><item><title>Learning SQL with DuckDB</title><link>https://spatialthoughts.com/2026/05/05/learning-sql-with-duckdb/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2026/05/05/learning-sql-with-duckdb/</guid><description>Historically, the open-source spatial analysis workflows lived in different silos</description></item><item><title>Python Foundation for Spatial Analysis (April 2026)</title><link>https://spatialthoughts.com/events/python-foundation-april-2026/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/python-foundation-april-2026/</guid><description/></item><item><title>Advanced QGIS (April 2026)</title><link>https://spatialthoughts.com/events/advanced-qgis-april-2026/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/advanced-qgis-april-2026/</guid><description/></item><item><title>Advanced QGIS (March 2026)</title><link>https://spatialthoughts.com/events/advanced-qgis-mar-2026/</link><pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/advanced-qgis-mar-2026/</guid><description/></item><item><title>Building a CRM for My Small Business</title><link>https://spatialthoughts.com/2026/03/20/training-academy-crm/</link><pubDate>Fri, 20 Mar 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2026/03/20/training-academy-crm/</guid><description>I started Spatial Thoughts in 2020 as an online training academy. We have been hosting cohort-based training courses ever since and the business has steadily grown over the years. As with many small...</description></item><item><title>Introduction to QGIS (March 2026)</title><link>https://spatialthoughts.com/events/introduction-to-qgis-mar-2026/</link><pubDate>Tue, 10 Mar 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/introduction-to-qgis-mar-2026/</guid><description/></item><item><title>Understanding and Monitoring Earth Engine Quota</title><link>https://spatialthoughts.com/2026/02/09/gee-quota-monitoring/</link><pubDate>Mon, 09 Feb 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2026/02/09/gee-quota-monitoring/</guid><description>Google recently announced Earth Engine Noncommercial Tiers for Google Earth Engine. This is a big change that affects all the non-commercial users of the GEE platform. Before the change, if you...</description></item><item><title>End-To-End Google Earth Engine (2026 Cohort for Googlers)</title><link>https://spatialthoughts.com/events/end-to-end-gee-google-2026/</link><pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/end-to-end-gee-google-2026/</guid><description/></item><item><title>FOSS4G Asia 2026</title><link>https://spatialthoughts.com/2026/01/29/foss4g-asia-2026/</link><pubDate>Thu, 29 Jan 2026 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2026/01/29/foss4g-asia-2026/</guid><description>The FOSS4G Asia 2026 conference was hosted at Nashik, India from 21-25 January 2026. This was a special event for me because I was part of the local organizing committee and worked alongside a...</description></item><item><title>From Cloud to Desktop: Working with Earth Engine Data in QGIS (December 2025)</title><link>https://spatialthoughts.com/events/qgis-gee-workshop-dec-2025/</link><pubDate>Wed, 17 Dec 2025 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/qgis-gee-workshop-dec-2025/</guid><description/></item><item><title>Python Foundation for Spatial Analysis (December 2025)</title><link>https://spatialthoughts.com/events/python-foundation-dec-2025/</link><pubDate>Tue, 02 Dec 2025 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/python-foundation-dec-2025/</guid><description/></item><item><title>FOSS4G 2025 Auckland</title><link>https://spatialthoughts.com/2025/11/23/foss4g-2025/</link><pubDate>Sun, 23 Nov 2025 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2025/11/23/foss4g-2025/</guid><description>The Free and Open Source Software for Geospatial (FOSS4G) 2025 conference happened in Auckland, New Zealand from 17-23 November 2025. It was a week-long event with 2 days of workshops followed by 3...</description></item><item><title>Get a Country-specific World Map in QGIS</title><link>https://spatialthoughts.com/2025/10/13/world-map-qgis/</link><pubDate>Mon, 13 Oct 2025 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2025/10/13/world-map-qgis/</guid><description>QGIS comes bundled with a simplified version of the Natural Earth Countries shapefile that is suitable for quick map-making. The layer can be loaded into your canvas by typing the keyword world in...</description></item><item><title>Geo for Good 2025</title><link>https://spatialthoughts.com/2025/09/21/geo-for-good-2025/</link><pubDate>Sun, 21 Sep 2025 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2025/09/21/geo-for-good-2025/</guid><description>Geo for Good is Google&amp;#39;s annual conference focused on their geospatial and cloud offerings. The 2025 edition of the summit was hosted at both New York and Singapore. I was glad to take part in the...</description></item><item><title>End-To-End Google Earth Engine (September 2025)</title><link>https://spatialthoughts.com/events/end-to-end-gee-sep-2025/</link><pubDate>Mon, 15 Sep 2025 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/end-to-end-gee-sep-2025/</guid><description/></item><item><title>Google Earth Engine for Water Resources Management (August 2025)</title><link>https://spatialthoughts.com/events/gee-wrm-aug-2025/</link><pubDate>Mon, 04 Aug 2025 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/gee-wrm-aug-2025/</guid><description/></item><item><title>Mapping and Data Visualization with Python (July 2025)</title><link>https://spatialthoughts.com/events/python-dataviz-july-2025/</link><pubDate>Mon, 07 Jul 2025 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/python-dataviz-july-2025/</guid><description/></item><item><title>Advanced QGIS (June 2025)</title><link>https://spatialthoughts.com/events/advanced-qgis-june-2025/</link><pubDate>Wed, 25 Jun 2025 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/advanced-qgis-june-2025/</guid><description/></item><item><title>Python Foundation for Spatial Analysis (June 2025)</title><link>https://spatialthoughts.com/events/python-foundation-june-2025/</link><pubDate>Mon, 16 Jun 2025 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/python-foundation-june-2025/</guid><description/></item><item><title>QGIS User Conference 2025</title><link>https://spatialthoughts.com/2025/06/11/qgis-user-conference-2025/</link><pubDate>Wed, 11 Jun 2025 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2025/06/11/qgis-user-conference-2025/</guid><description>The QGIS International User Conference 2025 happened in Norrköping, Sweden from 2-3 June 2025. I have been to the previous conferences in 2024, 2023 and 2019 and always look forward to the annual...</description></item><item><title>PyQGIS Masterclass - Customizing QGIS with Python (May 2025)</title><link>https://spatialthoughts.com/events/pyqgis-masterclass-may-2025/</link><pubDate>Mon, 05 May 2025 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/pyqgis-masterclass-may-2025/</guid><description/></item><item><title>End-To-End Google Earth Engine (April 2025)</title><link>https://spatialthoughts.com/events/end-to-end-gee-apr-2025/</link><pubDate>Tue, 01 Apr 2025 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/end-to-end-gee-apr-2025/</guid><description/></item><item><title>Extracting Building Heights from Open Buildings 2.5D Temporal Dataset</title><link>https://spatialthoughts.com/2025/03/29/building_height_gee/</link><pubDate>Sat, 29 Mar 2025 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2025/03/29/building_height_gee/</guid><description>In this post, you will learn how to work with the Open Buildings 2.5D Temporal data and download it for many useful downstream applications, such as Visibility Analysis, Population Modeling, and 3D...</description></item><item><title>Advanced QGIS (March 2025)</title><link>https://spatialthoughts.com/events/advanced-qgis-mar-2025/</link><pubDate>Mon, 17 Mar 2025 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/advanced-qgis-mar-2025/</guid><description/></item><item><title>Introduction to QGIS (3-6 March 2025)</title><link>https://spatialthoughts.com/events/intro-to-qgis-feb-2025/</link><pubDate>Mon, 03 Mar 2025 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/intro-to-qgis-feb-2025/</guid><description/></item><item><title>End-To-End Google Earth Engine (Jan 2025)</title><link>https://spatialthoughts.com/events/end-to-end-gee-jan-2025/</link><pubDate>Mon, 20 Jan 2025 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/end-to-end-gee-jan-2025/</guid><description/></item><item><title>Python Foundation for Spatial Analysis (January 2025)</title><link>https://spatialthoughts.com/events/python-foundation-jan-2025/</link><pubDate>Thu, 09 Jan 2025 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/python-foundation-jan-2025/</guid><description/></item><item><title>Creating QGIS Models with Optional Inputs and Conditional Processing</title><link>https://spatialthoughts.com/2024/11/29/qgis-coditional-input-model/</link><pubDate>Fri, 29 Nov 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2024/11/29/qgis-coditional-input-model/</guid><description>QGIS Model Designer offers powerful functionality for automating workflows. Many workflows are based on conditional logic that can generate different outputs based on the inputs provided. This post...</description></item><item><title>Advanced QGIS (November 2024)</title><link>https://spatialthoughts.com/events/advanced-qgis-nov-2024/</link><pubDate>Tue, 12 Nov 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/advanced-qgis-nov-2024/</guid><description/></item><item><title>Tiling Large Exports in Google Earth Engine</title><link>https://spatialthoughts.com/2024/10/23/large-image-exports-gee/</link><pubDate>Wed, 23 Oct 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2024/10/23/large-image-exports-gee/</guid><description>When exporting large rasters from Google Earth Engine, it is recommended that you split your exports into several smaller tiles. In this post, I will share the best practices for creating tiled...</description></item><item><title>#PythonDatavizChallenge - Learn Mapping and Data Visualization with Python in 30 Days</title><link>https://spatialthoughts.com/2024/10/13/pythondatavizchallenge/</link><pubDate>Sun, 13 Oct 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2024/10/13/pythondatavizchallenge/</guid><description>Welcome to #PythonDatavizChallenge - Learn Mapping and Data Visualization with Python in 30 Days! We have designed this challenge to help you learn how to create charts, maps, animations, dashboards...</description></item><item><title>Geo for Good 2024</title><link>https://spatialthoughts.com/2024/10/05/geo-for-good-2024/</link><pubDate>Sat, 05 Oct 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2024/10/05/geo-for-good-2024/</guid><description>Geo for Good is Google&amp;#39;s annual summit that brings together users of Google mapping tools. It&amp;#39;s usually a large conference hosted at Google HQ in Mountain View, California. This year however, they...</description></item><item><title>QGIS User Conference 2024</title><link>https://spatialthoughts.com/2024/09/14/qgis-user-conference-2024/</link><pubDate>Sat, 14 Sep 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2024/09/14/qgis-user-conference-2024/</guid><description>The QGIS International User Conference 2024 happened in Bratislava, Slovakia from 9-10 September 2024, followed by the Contributor Meeting from 11-13 September 2024. This is one of my favorite events...</description></item><item><title>End-To-End Google Earth Engine (July 2024)</title><link>https://spatialthoughts.com/events/end-to-end-gee-july-2024/</link><pubDate>Mon, 29 Jul 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/end-to-end-gee-july-2024/</guid><description/></item><item><title>Python Foundation for Spatial Analysis (July 2024)</title><link>https://spatialthoughts.com/events/python-foundation-july-2024/</link><pubDate>Thu, 18 Jul 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/python-foundation-july-2024/</guid><description/></item><item><title>#PyQGISChallenge - Master QGIS Python Development in 30 Days</title><link>https://spatialthoughts.com/2024/07/15/pyqgis-challenge/</link><pubDate>Mon, 15 Jul 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2024/07/15/pyqgis-challenge/</guid><description>Welcome to #PyQGISChallenge - Master QGIS Python Development in 30 Days! We are launching our PyQGIS Masterclass course on YouTube and have designed this challenge to help you learn how to customize...</description></item><item><title>Introduction to QGIS (8-16 July 2024)</title><link>https://spatialthoughts.com/events/intro-to-qgis-july-2024/</link><pubDate>Mon, 08 Jul 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/intro-to-qgis-july-2024/</guid><description/></item><item><title>Exploring the Global 30m Land Cover Change Dataset (1985-2022) GLC_FCS30D</title><link>https://spatialthoughts.com/2024/06/29/global-landcover-glcfcs30d/</link><pubDate>Sat, 29 Jun 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2024/06/29/global-landcover-glcfcs30d/</guid><description>A temporally consistent global multi-class time-series classification dataset is critical to understand and quantify long-term changes. Till now, the choices were limited to lower resolution datasets...</description></item><item><title>Mapping and Data Visualization with Python (June 2024)</title><link>https://spatialthoughts.com/events/python-dataviz-june-2024/</link><pubDate>Tue, 25 Jun 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/python-dataviz-june-2024/</guid><description/></item><item><title>End-To-End Google Earth Engine (June 2024)</title><link>https://spatialthoughts.com/events/end-to-end-gee-june-2024/</link><pubDate>Mon, 03 Jun 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/end-to-end-gee-june-2024/</guid><description/></item><item><title>#30DaysOfQGIS - Master QGIS in 30 Days</title><link>https://spatialthoughts.com/2024/05/13/30daysofqgis/</link><pubDate>Mon, 13 May 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2024/05/13/30daysofqgis/</guid><description>Welcome to #30DaysOfQGIS! We have launched our Advanced QGIS course on YouTube and have designed this challenge to help you master QGIS! Spend 30 minutes each day for the next 30 days to level-up...</description></item><item><title>PyQGIS Masterclass - Customizing QGIS with Python (April 2024)</title><link>https://spatialthoughts.com/events/pyqgis-masterclass-april-2024/</link><pubDate>Thu, 25 Apr 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/pyqgis-masterclass-april-2024/</guid><description/></item><item><title>Rendering Print Layouts from QGIS Models</title><link>https://spatialthoughts.com/2024/04/08/rendering-print-layouts/</link><pubDate>Mon, 08 Apr 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2024/04/08/rendering-print-layouts/</guid><description>When automating GIS workflows, one often needs to automate the creation of cartographic outputs. The QGIS Model Designer allows you to build a workflow by combining multiple Processing algorithms....</description></item><item><title>Reprojecting and Aggregating Rasters with GDAL</title><link>https://spatialthoughts.com/2024/04/02/aggregate-and-align-rasters-gdal/</link><pubDate>Tue, 02 Apr 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2024/04/02/aggregate-and-align-rasters-gdal/</guid><description>When working with raster datasets of different projections and resolutions, it is often desirable to reproject them to the same projection and align them to the same pixel grid. In this post, we will...</description></item><item><title>Advanced QGIS (April 2024)</title><link>https://spatialthoughts.com/events/advanced-qgis-april-2024/</link><pubDate>Mon, 01 Apr 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/advanced-qgis-april-2024/</guid><description/></item><item><title>End-To-End Google Earth Engine (March 2024)</title><link>https://spatialthoughts.com/events/end-to-end-gee-mar-2024/</link><pubDate>Mon, 04 Mar 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/end-to-end-gee-mar-2024/</guid><description/></item><item><title>GDAL and Google Cloud Storage (GCS)</title><link>https://spatialthoughts.com/2024/02/26/gdal-google-cloud-storage/</link><pubDate>Mon, 26 Feb 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2024/02/26/gdal-google-cloud-storage/</guid><description>GDAL has support for GDAL Virtual File System which allows GDAL library and command-line tools to work with files on network storage. This is critical in the era of Cloud-Native Geospatialwhere it is...</description></item><item><title>Teaching Remote Sensing to Kids</title><link>https://spatialthoughts.com/2024/02/24/remote-sensing-for-kids/</link><pubDate>Sat, 24 Feb 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2024/02/24/remote-sensing-for-kids/</guid><description>I was recently asked to deliver a session on Earth Science for kids. My daughter goes to an after-school science program at Max Science where they teach science with unique and fun hands-on...</description></item><item><title>Mastering GDAL Tools (February 2024)</title><link>https://spatialthoughts.com/events/gdal-tools-feb-2024/</link><pubDate>Mon, 19 Feb 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/gdal-tools-feb-2024/</guid><description/></item><item><title>Estimating Above Ground Biomass using Random Forest Regression in GEE</title><link>https://spatialthoughts.com/2024/02/07/agb-regression-gee/</link><pubDate>Wed, 07 Feb 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2024/02/07/agb-regression-gee/</guid><description>In this post, we will learn how to build a regression model in Google Earth Engine and use it to estimate total above ground biomass using openly available Earth Observation datasets.</description></item><item><title>Python Foundation for Spatial Analysis (February 2024)</title><link>https://spatialthoughts.com/events/python-foundation-feb-2024/</link><pubDate>Mon, 05 Feb 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/python-foundation-feb-2024/</guid><description/></item><item><title>End-To-End Google Earth Engine (Googlers' Cohort January 2024)</title><link>https://spatialthoughts.com/events/end-to-end-gee-google-2024/</link><pubDate>Fri, 19 Jan 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/end-to-end-gee-google-2024/</guid><description/></item><item><title>Google Earth Engine for Water Resources Management (January 2024)</title><link>https://spatialthoughts.com/events/gee-wrm-jan-2024/</link><pubDate>Mon, 08 Jan 2024 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/events/gee-wrm-jan-2024/</guid><description/></item><item><title>LISS4 Image Processing using XArray and Dask</title><link>https://spatialthoughts.com/2023/12/25/liss4-processing-xarray/</link><pubDate>Mon, 25 Dec 2023 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2023/12/25/liss4-processing-xarray/</guid><description>ISRO recently released the full archive of medium and low-resolution Earth Observation dataset to the public. This includes the imagery from LISS-IV camera aboard ResourceSat-2 and ResourceSat-2A...</description></item><item><title>Enhancing Land Cover with Local Knowledge</title><link>https://spatialthoughts.com/2023/11/22/dw-mapathon-nairobi/</link><pubDate>Wed, 22 Nov 2023 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2023/11/22/dw-mapathon-nairobi/</guid><description>Dynamic World is a new landcover product developed by Google and World Resources Institute (WRI). It is a unique dataset that is designed to make it easy for users to develop locally relevant...</description></item><item><title>Mapping Building Density with Open Building Datasets</title><link>https://spatialthoughts.com/2023/09/16/building-density-gee/</link><pubDate>Sat, 16 Sep 2023 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2023/09/16/building-density-gee/</guid><description>Extracting building footprints from high-resolution imagery is a challenging task. Fortunately we now have access to ready-to-use building footprints dataset extracted using state-of-the-art ML...</description></item><item><title>Understanding Pixel Weights in Zonal Statistics</title><link>https://spatialthoughts.com/2023/07/13/pixel-weights-zonal-stats/</link><pubDate>Thu, 13 Jul 2023 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2023/07/13/pixel-weights-zonal-stats/</guid><description>An important concept in spatial statistics is pixel weights. When calculating pixel statistics with a polygon, partial pixel overlaps are treated differently by different packages and you need to...</description></item><item><title>QGIS International User Conference 2023</title><link>https://spatialthoughts.com/2023/04/25/qgis-user-conference-2023/</link><pubDate>Tue, 25 Apr 2023 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2023/04/25/qgis-user-conference-2023/</guid><description>QGIS User Conference 2023 took place in Netherlands on 18-19 April, 2023. This conference was organized by the Dutch QGIS User Group in the small town of &amp;#39;s -Hertogenbosch.</description></item><item><title>Automated Coastline Extraction from Satellite Images using Google Earth Engine</title><link>https://spatialthoughts.com/2023/01/18/automated-coastline-extraction-gee/</link><pubDate>Wed, 18 Jan 2023 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2023/01/18/automated-coastline-extraction-gee/</guid><description>In this article, I will outline a method for extracting shoreline from satellite images in Google Earth Engine. This method is scalable and automatically extracts the coastline as a vector polyline....</description></item><item><title>Running QGIS Processing Tools on the Command Line with qgis_process</title><link>https://spatialthoughts.com/2022/07/30/qgis_process_command_line/</link><pubDate>Sat, 30 Jul 2022 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2022/07/30/qgis_process_command_line/</guid><description>Modern versions of QGIS comes with a handy command-line utility called qgis_process. This allows you to access and run any Processing Tool, Script or Model from the Processing Toolbox on a terminal....</description></item><item><title>Managing Earth Engine Assets using the GEE Python API</title><link>https://spatialthoughts.com/2022/02/24/gee-asset-management/</link><pubDate>Thu, 24 Feb 2022 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2022/02/24/gee-asset-management/</guid><description>If you are like me, you have a lot of assets uploaded to Earth Engine. As you upload more and more assets, managing this data becomes quite a cumbersome task. Earth Engine provides a handy...</description></item><item><title>Weighted Multi-Criteria Overlay Analysis using GDAL Tools</title><link>https://spatialthoughts.com/2022/01/31/multi-criteria-overlay-gdal/</link><pubDate>Mon, 31 Jan 2022 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2022/01/31/multi-criteria-overlay-gdal/</guid><description>Multi-criteria Overlay Analysis is the process of the allocation of land to suit a specific objective on the basis of a variety of attributes that the selected areas should possess. Although this is...</description></item><item><title>Creating Animated Plots with Matplotlib</title><link>https://spatialthoughts.com/2022/01/14/animated-plots-with-matplotlib/</link><pubDate>Fri, 14 Jan 2022 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2022/01/14/animated-plots-with-matplotlib/</guid><description>Matplotlib has functionality to created animations and can be used to create dynamic visualizations. In this post, I will explain the concepts and techniques for creating animated charts using Python...</description></item><item><title>Temporal Gap-Filling with Linear Interpolation in GEE</title><link>https://spatialthoughts.com/2021/11/08/temporal-interpolation-gee/</link><pubDate>Mon, 08 Nov 2021 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2021/11/08/temporal-interpolation-gee/</guid><description>Many applications require replacing missing pixels in an image with an interpolated value from its temporal neighbours. This gap-filling technique is used in several applications, including:</description></item><item><title>Working with QA Bands and Bitmasks in Google Earth Engine</title><link>https://spatialthoughts.com/2021/08/19/qa-bands-bitmasks-gee/</link><pubDate>Thu, 19 Aug 2021 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2021/08/19/qa-bands-bitmasks-gee/</guid><description>Most optical satellite imagery products come with one or more QA-bands that allows the user to assess quality of each pixel and extract pixels that meet their requirements. The most common...</description></item><item><title>Split Polygons into Equal Parts using QGIS</title><link>https://spatialthoughts.com/2021/06/12/split-polygons-qgis/</link><pubDate>Sat, 12 Jun 2021 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2021/06/12/split-polygons-qgis/</guid><description>In this post, I describe how we can use built-in QGIS processing tools to create a workflow to split polygons into equal parts. Using a clever algorithm and Feature Iterator tool in the Processing...</description></item><item><title>Calculating Weighted Centroids</title><link>https://spatialthoughts.com/2021/05/14/weighted-centroids-qgis-gee/</link><pubDate>Fri, 14 May 2021 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2021/05/14/weighted-centroids-qgis-gee/</guid><description>In this post, I will outline techniques for computing weighted-centroids in both QGIS and Google Earth Engine. For a polygon feature, the centroid is the geometric center. It can also be thought of...</description></item><item><title>Aggregating Gridded Population Data in Google Earth Engine</title><link>https://spatialthoughts.com/2021/05/13/aggregating-population-data-gee/</link><pubDate>Thu, 13 May 2021 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2021/05/13/aggregating-population-data-gee/</guid><description>Google Earth Engine makes it easy to compute statistics on gridded raster datasets. While calculating statistics on imagery datasets is easy, special care must be taken when working with population...</description></item><item><title>QGIS for Urban and Regional Planning</title><link>https://spatialthoughts.com/2021/03/15/gis-in-urban-and-regional-planning/</link><pubDate>Mon, 15 Mar 2021 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2021/03/15/gis-in-urban-and-regional-planning/</guid><description>I recently taught a 1-month long course on GIS Applications in Urban and Regional Planning. We explored how GIS can be applied to solve problems in 6 different thematic areas. In this post, I will...</description></item><item><title>K-Means Clustering with Equal Sized Clusters in QGIS</title><link>https://spatialthoughts.com/2021/01/31/equal-sized-kmeans-qgis/</link><pubDate>Sun, 31 Jan 2021 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2021/01/31/equal-sized-kmeans-qgis/</guid><description>K-Means Clustering is a popular algorithm for automatically grouping points into natural clusters. QGIS comes with a Processing Toolbox algorithm &amp;#39;K-means clustering&amp;#39; that can take a vector layer and...</description></item><item><title>Spatial Homogeneity Testing of Raingauge Data with Advanced QGIS Expressions</title><link>https://spatialthoughts.com/2020/11/26/spatial-homogeneity-testing-qgis/</link><pubDate>Thu, 26 Nov 2020 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2020/11/26/spatial-homogeneity-testing-qgis/</guid><description>Rainfall is arguably the most frequently measured hydro-meteorological variable. It is a required input for many hydrological applications like runoff computations, flood forecasting as well as...</description></item><item><title>Working with Gridded Rainfall Data in Google Earth Engine</title><link>https://spatialthoughts.com/2020/10/28/rainfall-data-gee/</link><pubDate>Wed, 28 Oct 2020 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2020/10/28/rainfall-data-gee/</guid><description>Many useful climate and weather datasets come as gridded rasters. The techniques for working with them is slightly different than other remote sensing datasets. In this post, I will show how to work...</description></item><item><title>Histogram Matching in Google Earth Engine</title><link>https://spatialthoughts.com/2020/07/14/histogram-matching-gee/</link><pubDate>Tue, 14 Jul 2020 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2020/07/14/histogram-matching-gee/</guid><description>Color correction is an important process working with satellite and aerial imagery. A common technique used to balance the colors across multiple images is Histogram Matching. While the algorithm has...</description></item><item><title>Fast Point-in-Polygon Analysis with GeoPandas and Uber's H3 Spatial Index</title><link>https://spatialthoughts.com/2020/07/01/point-in-polygon-h3-geopandas/</link><pubDate>Wed, 01 Jul 2020 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2020/07/01/point-in-polygon-h3-geopandas/</guid><description>Spatial indexing methods help speed up spatial queries. Most GIS software and databases provide a mechanism to compute and use spatial index for your data layers. QGIS as well as PostGIS use a...</description></item><item><title>Calculating Area in Google Earth Engine</title><link>https://spatialthoughts.com/2020/06/19/calculating-area-gee/</link><pubDate>Fri, 19 Jun 2020 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2020/06/19/calculating-area-gee/</guid><description>When working on Remote Sensing applications, many operations require calculating area. For example, one needs to calculate area covered by each class after supervised classification or find out how...</description></item><item><title>Fixing Rasters with Missing Data using QGIS, GDAL and Python</title><link>https://spatialthoughts.com/2020/06/17/fix-nodata-values/</link><pubDate>Wed, 17 Jun 2020 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2020/06/17/fix-nodata-values/</guid><description>When working with raster data, you may sometimes need to deal with data gaps. These could be the result of sensor malfunction, processing errors or data corruption. Below is an example of data gap...</description></item><item><title>Lessons from Hosting Online Training Events</title><link>https://spatialthoughts.com/2020/05/12/online-training-best-practices/</link><pubDate>Tue, 12 May 2020 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2020/05/12/online-training-best-practices/</guid><description>As everyone who is involved in teaching and training knows, the past few months have been hard. We all had to make changes to accommodate working from home and adopting online teaching methods....</description></item><item><title>History and Evolution of Location Intelligence Technology</title><link>https://spatialthoughts.com/2020/04/18/history-of-location-intelligence/</link><pubDate>Sat, 18 Apr 2020 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2020/04/18/history-of-location-intelligence/</guid><description>I was invited to participate in a panel discussion on Geospatial Intelligence for #LetsTalkDeepTech Webcast hosted by Swiggy. I talked about the history and evolution of this space and gave a deep...</description></item><item><title>Extracting Time Series using Google Earth Engine</title><link>https://spatialthoughts.com/2020/04/13/extracting-time-series-ee/</link><pubDate>Mon, 13 Apr 2020 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2020/04/13/extracting-time-series-ee/</guid><description>Time series analysis is one of the most common operations in Remote Sensing. It helps understanding and modeling of seasonal patterns as well as monitoring of land cover changes. Earth Engine is...</description></item><item><title>Calculating Shared Border Lengths Between Polygons</title><link>https://spatialthoughts.com/2020/04/08/calculating-shared-border-lengths/</link><pubDate>Wed, 08 Apr 2020 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2020/04/08/calculating-shared-border-lengths/</guid><description>In a previous post, I showed how to use the aggregate function to find neighbor polygons using QGIS. Using aggregate functions on the same layer allows us to easily do geoprocessing operations...</description></item><item><title>Creating Maps with Google Earth Engine and PyQGIS</title><link>https://spatialthoughts.com/2020/04/04/ndvi-time-series-gee-qgis/</link><pubDate>Sat, 04 Apr 2020 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2020/04/04/ndvi-time-series-gee-qgis/</guid><description>Google Earth Engine (GEE) is a powerful cloud-based system for analysing massive amounts of remote sensing data. One area where Google Earth Engine shines is the ability to calculate time series of...</description></item><item><title>Snapping GPS tracks to Roads using PyQGIS and OSRM</title><link>https://spatialthoughts.com/2020/02/22/snap-to-roads-qgis-and-osrm/</link><pubDate>Sat, 22 Feb 2020 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2020/02/22/snap-to-roads-qgis-and-osrm/</guid><description>If you have collected GPS tracks, you know that the results can have varying accuracy. The track points collected along a route are not always on the road and can be jittery.</description></item><item><title>Exporting Print Layouts from Processing Scripts</title><link>https://spatialthoughts.com/2020/02/09/exporting-map-layouts/</link><pubDate>Sun, 09 Feb 2020 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2020/02/09/exporting-map-layouts/</guid><description>When trying to automate your GIS workflows, one important step is the production of maps. Creating and exporting maps in QGIS is done via the Print Layout. One can automate creation of maps via the a...</description></item><item><title>Reclassifying Rasters using gdal_calc</title><link>https://spatialthoughts.com/2019/12/28/gdal-calc/</link><pubDate>Sat, 28 Dec 2019 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2019/12/28/gdal-calc/</guid><description>gdal_calc is one of the lesser used tools among the GDAL utilities. There aren&amp;#39;t many examples of using it in the wild and some advanced features are not well documented. I am finding myself using it...</description></item><item><title>Optimizing Office Commute with Uber Movement Data</title><link>https://spatialthoughts.com/2019/11/08/optimizing-office-commute/</link><pubDate>Fri, 08 Nov 2019 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2019/11/08/optimizing-office-commute/</guid><description>In a previous post, I showed how to use the Uber Movement Travel Times data to create isochrones. In this post, we will explore another use case of this dataset. Say you are concerned about loss of...</description></item><item><title>Generating Random Points with a Specific Distribution</title><link>https://spatialthoughts.com/2019/11/07/random-points-with-distribution/</link><pubDate>Thu, 07 Nov 2019 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2019/11/07/random-points-with-distribution/</guid><description>Generating pseudo-random data is important for many aspects of research work. QGIS provides for many methods of generating random points to facilitate this.</description></item><item><title>Convert between Orthometric and Ellipsoidal Elevations using GDAL</title><link>https://spatialthoughts.com/2019/10/26/convert-between-orthometric-and-ellipsoidal-elevations-using-gdal/</link><pubDate>Sat, 26 Oct 2019 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2019/10/26/convert-between-orthometric-and-ellipsoidal-elevations-using-gdal/</guid><description>When working with elevation data, sometimes you may discover that 2 datasets from different providers have very different elevation values for the same location. A common reason for this being each...</description></item><item><title>Fuzzy Table Joins in QGIS</title><link>https://spatialthoughts.com/2019/09/26/fuzzy-table-joins-in-qgis/</link><pubDate>Thu, 26 Sep 2019 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2019/09/26/fuzzy-table-joins-in-qgis/</guid><description>Table Joins are a way to join 2 separate layers based on a common attribute value. QGIS has a Join Attributes By Field Value algorithm that allows you to perform table joins. A limitation of this...</description></item><item><title>Analyzing Urban Mobility with Uber Movement Data</title><link>https://spatialthoughts.com/2019/08/15/gis-in-the-browser/</link><pubDate>Thu, 15 Aug 2019 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2019/08/15/gis-in-the-browser/</guid><description>Mapshaper is a free and open-source software for spatial data processing. It is written in javascript and runs in your browser without any extra plugins and can perform a range of analysis. It...</description></item><item><title>Find Neighbor Polygons using Summary Aggregate Function in QGIS</title><link>https://spatialthoughts.com/2019/05/23/neighbor-polygons-aggregate-qgis/</link><pubDate>Thu, 23 May 2019 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2019/05/23/neighbor-polygons-aggregate-qgis/</guid><description>Read my previous posts Summary Aggregate and Spatial Filters and Advanced Aggregate Expressions to Automate QA to learn more about the powerful aggregate function.</description></item><item><title>Advanced Aggregate Expressions to Automate QA in QGIS</title><link>https://spatialthoughts.com/2019/04/19/advanced-aggregate-expressions/</link><pubDate>Fri, 19 Apr 2019 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2019/04/19/advanced-aggregate-expressions/</guid><description>This post is the continuation of Summary Aggregate and Spatial Filters in QGIS. I have been exploring aggregate functions more and have found interesting ways to automate tasks in QGIS. One such...</description></item><item><title>Summary Aggregate and Spatial Filters in QGIS</title><link>https://spatialthoughts.com/2019/04/12/summary-aggregation-qgis/</link><pubDate>Fri, 12 Apr 2019 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2019/04/12/summary-aggregation-qgis/</guid><description>QGIS expression engine has a powerful a summary aggregate function that can do spatial joins on the fly. This enables some very interesting uses.</description></item><item><title>Approximating Geodesic Buffers with PyQGIS</title><link>https://spatialthoughts.com/2019/04/05/geodesic-buffers-in-qgis/</link><pubDate>Fri, 05 Apr 2019 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2019/04/05/geodesic-buffers-in-qgis/</guid><description>When you want to buffer features that are spread across a large area (such as global layers), there is no suitable projection that can give you accurate results. This is the classic case for needing...</description></item><item><title>Creating Animated Flight Lines in QGIS</title><link>https://spatialthoughts.com/2019/03/21/animated-flight-lines/</link><pubDate>Thu, 21 Mar 2019 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2019/03/21/animated-flight-lines/</guid><description>You may have seen a map where source and destination points are connected via curved lines. It is possible to create such a map in QGIS with a simple trick - using custom projections and...</description></item><item><title>QGIS User Conference 2019</title><link>https://spatialthoughts.com/2019/03/08/qgis-user-conference-2019/</link><pubDate>Fri, 08 Mar 2019 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2019/03/08/qgis-user-conference-2019/</guid><description>I got a chance to attend the 3rd Annual QGIS User Conference at A Coruña, Spain.</description></item><item><title>Convert between UTM and Degree coordinates using Google Spreadsheets</title><link>https://spatialthoughts.com/2018/04/29/utm-to-degrees-spreadsheet/</link><pubDate>Sun, 29 Apr 2018 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2018/04/29/utm-to-degrees-spreadsheet/</guid><description>Converting between different coordinate reference systems or projection is a fairly standard feature in a GIS. There are a number of command line tools also available for performing bulk-conversions....</description></item><item><title>OpenAQ Workshop Notes</title><link>https://spatialthoughts.com/2016/11/25/openaq-workshop-notes/</link><pubDate>Fri, 25 Nov 2016 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2016/11/25/openaq-workshop-notes/</guid><description>I recently attended the OpenAQ workshop in Delhi . The workshop’s goal was to bring tech, science and media folks working on air quality together and brainstorm how to use open data to tackle air...</description></item><item><title>Line Transact Surveys using OpenDataKit(ODK)</title><link>https://spatialthoughts.com/2015/12/06/odk-line-transact/</link><pubDate>Sun, 06 Dec 2015 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2015/12/06/odk-line-transact/</guid><description>This weekend, I got an opportunity to volunteer with a non-profit called Junglescapes. We took a day trip to the Bandipur forest in Karnataka where they have done extensive work in forest...</description></item><item><title>Creating Geospatial PDFs with GDAL Tools</title><link>https://spatialthoughts.com/2015/10/25/geopdf-gdal/</link><pubDate>Sun, 25 Oct 2015 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2015/10/25/geopdf-gdal/</guid><description>GeoPDF is a unique data format that brings the portability of PDF to geospatial data. A GeoPDF document can present raster and vector data and preserve the georeference information. This can be a...</description></item><item><title>Geo Data Processing with Mapshaper</title><link>https://spatialthoughts.com/2015/10/24/mapshaper-command-line/</link><pubDate>Sat, 24 Oct 2015 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2015/10/24/mapshaper-command-line/</guid><description>Mapshaper is a free and open-source tool that is best known for fast and easy simplification. Other tools for simplification - like QGIS or ogr2ogr - do not preserve topology while simplifying. This...</description></item><item><title>Spatial Joins on the Command Line</title><link>https://spatialthoughts.com/2015/07/12/ogr-spatial-join/</link><pubDate>Sun, 12 Jul 2015 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2015/07/12/ogr-spatial-join/</guid><description>GDAL and OGR libraries come with handy command-line tools. These tools are quite powerful and can save you a lot of effort if you know how to use them. Here I will show how to use the ogrinfo and...</description></item><item><title>Implementing a Field Data collection app for APD</title><link>https://spatialthoughts.com/2015/04/29/opendatakit-for-apd/</link><pubDate>Wed, 29 Apr 2015 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2015/04/29/opendatakit-for-apd/</guid><description>The Association for People with Disability (APD) is a non-profit organization based out of Bangalore, India. Their mission is to reach out and rehabilitate people with disability from the under...</description></item><item><title>Le Paper Globe</title><link>https://spatialthoughts.com/2013/07/14/le-paper-globe/</link><pubDate>Sun, 14 Jul 2013 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2013/07/14/le-paper-globe/</guid><description>A long pending weekend project is done. Printed, cut and folded a sturdy globe using the template from Le Paper Globe.</description></item><item><title>Calculate distance between a pair of lat/lon coordinates</title><link>https://spatialthoughts.com/2013/07/06/calculate-distance-spreadsheet/</link><pubDate>Sat, 06 Jul 2013 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2013/07/06/calculate-distance-spreadsheet/</guid><description>I recently had a need to calculate distance between a large number of latitude/longitude coordinate pairs. There are many options available if you want to import these in a GIS and run analysis. But...</description></item><item><title>Notes from Carotonama</title><link>https://spatialthoughts.com/2012/10/28/cartonama-2012/</link><pubDate>Sun, 28 Oct 2012 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2012/10/28/cartonama-2012/</guid><description>I was at #cartonama conference in Bangalore on 23rd September, 2012. It was wonderful to be among geogeeks and see the energy and enthusiasm. Got to see some great demos and LBS apps from startups in...</description></item><item><title>Notes from FOSS4G India - 2012</title><link>https://spatialthoughts.com/2012/10/20/foss4g-india-2012/</link><pubDate>Sat, 20 Oct 2012 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2012/10/20/foss4g-india-2012/</guid><description>India’s first FOSS4G - India conference was organized on 25-26 October, 2012 at Hyderabad. This was a surprisingly low-profile event and there was very little buzz about it on the internet. I learnt...</description></item><item><title>GIS Project Ideas for Thesis/ Dissertation/ Internship</title><link>https://spatialthoughts.com/2010/10/25/gis-project-ideas/</link><pubDate>Mon, 25 Oct 2010 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/2010/10/25/gis-project-ideas/</guid><description>Many students have asked me for ideas on what topic they should choose for their Thesis. I have debated this myself when I was a student. The ideal topic would be the one that allows you to dive into...</description></item><item><title>About</title><link>https://spatialthoughts.com/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/about/</guid><description>Who we are, how open content pays for itself, and the people who teach the classes.</description></item><item><title>Cancellations and Refunds</title><link>https://spatialthoughts.com/cancellations-and-refunds/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/cancellations-and-refunds/</guid><description>We have a very liberal cancellation and refund policy for all our instructor-led online classes.</description></item><item><title>Contact</title><link>https://spatialthoughts.com/contact/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/contact/</guid><description>How to reach Spatial Thoughts: general queries, and logistics and support for our live classes.</description></item><item><title>Discounts and Scholarships</title><link>https://spatialthoughts.com/student-discounts-and-scholarships/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/student-discounts-and-scholarships/</guid><description>At Spatial Thoughts, we want to make learning accessible to everyone. We offer student discounts and scholarships for all our training programs.</description></item><item><title>Learning Resources</title><link>https://spatialthoughts.com/learning-paths/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/learning-paths/</guid><description>All our free and open learning resources: the full material of our courses as open courseware, and suggested learning paths through them by technology and level.</description></item><item><title>Privacy Policy</title><link>https://spatialthoughts.com/privacy-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/privacy-policy/</guid><description>&lt;p&gt;At Spatial Thoughts LLP, accessible from &lt;a href="https://spatialthoughts.com/"&gt;https://spatialthoughts.com/&lt;/a&gt;, one of our main priorities is the privacy of our visitors. This Privacy Policy document contains types of information that is collected and recorded by Spatial Thoughts LLP and how we use it.&lt;/p&gt;</description></item><item><title>Spatial Thoughts Academy</title><link>https://spatialthoughts.com/academy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/academy/</guid><description>&lt;p&gt;Started in 2020, our online academy has grown to serve participants from over 100 countries. We offer short cohort-based courses that help you learn and master complex skills.&lt;/p&gt;
&lt;div class="gallery-wrap" data-gallery&gt;
&lt;div class="gallery" role="group" aria-label="Photos from our classes"&gt;
&lt;figure class="gallery-item"&gt;
&lt;img src="https://spatialthoughts.com/wp-content/uploads/2026/05/intro_to_qgis_20260310-edited_hu_5821de7174005a45.webp" width="560" height="312"
alt="Introduction to QGIS"
loading="lazy" decoding="async"&gt;&lt;figcaption class="gallery-caption"&gt;&lt;a href="https://spatialthoughts.com/courses/introduction-to-qgis/"&gt;Introduction to QGIS&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="gallery-item"&gt;
&lt;img src="https://spatialthoughts.com/wp-content/uploads/2026/09/advanced_qgis_20260423_hu_b6ca038b381a1927.webp" width="560" height="316"
alt="Advanced QGIS"
loading="lazy" decoding="async"&gt;&lt;figcaption class="gallery-caption"&gt;&lt;a href="https://spatialthoughts.com/courses/advanced-qgis/"&gt;Advanced QGIS&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="gallery-item"&gt;
&lt;img src="https://spatialthoughts.com/wp-content/uploads/2026/09/python_foundation_20251202_hu_60c1baff3551dbe7.webp" width="560" height="316"
alt="Python Foundation for Spatial Analysis"
loading="lazy" decoding="async"&gt;&lt;figcaption class="gallery-caption"&gt;&lt;a href="https://spatialthoughts.com/courses/python-foundation-for-spatial-analysis/"&gt;Python Foundation for Spatial Analysis&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="gallery-item"&gt;
&lt;img src="https://spatialthoughts.com/wp-content/uploads/2026/09/agentic_coding_geospatial_20260817_hu_b7b7dda357d6a282.webp" width="560" height="311"
alt="Agentic Coding for Geospatial"
loading="lazy" decoding="async"&gt;&lt;figcaption class="gallery-caption"&gt;&lt;a href="https://spatialthoughts.com/courses/agentic-coding-geospatial/"&gt;Agentic Coding for Geospatial&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
(() =&gt; {
const SLOW = matchMedia('(prefers-reduced-motion: reduce)');
for (const wrap of document.querySelectorAll('[data-gallery]')) {
if (wrap.dataset.ready) continue;
wrap.dataset.ready = '1';
const row = wrap.querySelector('.gallery');
const items = [...row.children];
if (items.length &lt; 2) continue;
const nav = document.createElement('div');
nav.className = 'gallery-dots';
items.forEach((_, i) =&gt; {
const b = document.createElement('button');
b.type = 'button';
b.setAttribute('aria-label', `Show photo ${i + 1} of ${items.length}`);
b.addEventListener('click', () =&gt; { stop(); go(i); });
nav.append(b);
});
wrap.append(nav);
const posOf = (el) =&gt;
el.getBoundingClientRect().left - row.getBoundingClientRect().left + row.scrollLeft;
const maxScroll = () =&gt; row.scrollWidth - row.clientWidth;
const current = () =&gt; {
if (row.scrollLeft &gt;= maxScroll() - 2) return items.length - 1;
let best = 0, min = Infinity;
items.forEach((el, i) =&gt; {
const d = Math.abs(posOf(el) - row.scrollLeft);
if (d &lt; min) { min = d; best = i; }
});
return best;
};
const paint = () =&gt; {
const c = current();
[...nav.children].forEach((d, i) =&gt; d.setAttribute('aria-current', i === c ? 'true' : 'false'));
};
const MS = 420;
const ease = (p) =&gt; (p &lt; 0.5 ? 2 * p * p : 1 - Math.pow(-2 * p + 2, 2) / 2);
let frame = null, guard = null;
const go = (i) =&gt; {
const to = Math.min(posOf(items[i]), maxScroll());
cancelAnimationFrame(frame);
clearTimeout(guard);
if (SLOW.matches) { row.scrollLeft = to; paint(); return; }
const from = row.scrollLeft, dist = to - from, t0 = performance.now();
row.style.scrollSnapType = 'none';
const finish = () =&gt; {
cancelAnimationFrame(frame);
clearTimeout(guard);
row.scrollLeft = to;
row.style.scrollSnapType = '';
paint();
};
const step = (now) =&gt; {
const p = Math.min(1, (now - t0) / MS);
row.scrollLeft = from + dist * ease(p);
if (p &lt; 1) frame = requestAnimationFrame(step); else finish();
};
frame = requestAnimationFrame(step);
guard = setTimeout(finish, MS + 200);
};
let timer = null;
const tick = () =&gt; go((current() + 1) % items.length);
const start = () =&gt; { if (!timer &amp;&amp; !SLOW.matches) timer = setInterval(tick, 3000); };
const stop = () =&gt; { clearInterval(timer); timer = null; };
row.addEventListener('scroll', paint, { passive: true });
row.addEventListener('pointerdown', stop);
row.addEventListener('wheel', stop, { passive: true });
row.addEventListener('keydown', stop);
wrap.addEventListener('mouseenter', stop);
wrap.addEventListener('mouseleave', start);
wrap.addEventListener('focusin', stop);
wrap.addEventListener('focusout', start);
document.addEventListener('visibilitychange', () =&gt; document.hidden ? stop() : start());
new IntersectionObserver(
([e]) =&gt; e.isIntersecting ? start() : stop(), { threshold: 0.4 }
).observe(wrap);
paint();
}
})();
&lt;/script&gt;
&lt;h2 id="what-makes-our-academy-unique"&gt;What makes our academy unique&lt;/h2&gt;
&lt;div class="card-grid features-grid"&gt;
&lt;div class="card card-lg feature-card"&gt;
&lt;h3&gt;&lt;svg class="card-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;
&lt;circle cx="12" cy="12" r="10"/&gt;
&lt;line x1="2" y1="12" x2="22" y2="12"/&gt;
&lt;path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/&gt;
&lt;/svg&gt;Globally Accessible&lt;/h3&gt;
We have mastered the art of delivering a perfect learning experience online. All of our courses are offered in a &lt;em&gt;&lt;strong&gt;live online environment&lt;/strong&gt;&lt;/em&gt; making them accessible to everyone. We have trained thousands of participants from across the globe.
&lt;/div&gt;
&lt;div class="card card-lg feature-card"&gt;
&lt;h3&gt;&lt;svg class="card-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;
&lt;circle cx="12" cy="12" r="10"/&gt;
&lt;circle cx="12" cy="12" r="4"/&gt;
&lt;line x1="4.93" y1="4.93" x2="9.17" y2="9.17"/&gt;
&lt;line x1="14.83" y1="14.83" x2="19.07" y2="19.07"/&gt;
&lt;line x1="14.83" y1="9.17" x2="19.07" y2="4.93"/&gt;
&lt;line x1="4.93" y1="19.07" x2="9.17" y2="14.83"/&gt;
&lt;/svg&gt;Free Mentoring and Support&lt;/h3&gt;
We are your support system as you start applying your newly acquired skills to real-world problems. We offer &lt;em&gt;&lt;strong&gt;free lifetime support&lt;/strong&gt;&lt;/em&gt; to all our participants - ensuring you are never stuck.
&lt;/div&gt;
&lt;div class="card card-lg feature-card"&gt;
&lt;h3&gt;&lt;svg class="card-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;
&lt;path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/&gt;
&lt;circle cx="9" cy="7" r="4"/&gt;
&lt;path d="M23 21v-2a4 4 0 0 0-3-3.87"/&gt;
&lt;path d="M16 3.13a4 4 0 0 1 0 7.75"/&gt;
&lt;/svg&gt;Cohort-Based Learning&lt;/h3&gt;
Going through a course alongside a group of peers is a proven way to &lt;em&gt;&lt;strong&gt;learn faster and more effectively&lt;/strong&gt;&lt;/em&gt;. Your questions are answered live and code errors are debugged in real-time.
&lt;/div&gt;
&lt;div class="card card-lg feature-card"&gt;
&lt;h3&gt;&lt;svg class="card-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;
&lt;circle cx="18" cy="5" r="3"/&gt;
&lt;circle cx="6" cy="12" r="3"/&gt;
&lt;circle cx="18" cy="19" r="3"/&gt;
&lt;line x1="8.59" y1="13.51" x2="15.42" y2="17.49"/&gt;
&lt;line x1="15.41" y1="6.51" x2="8.59" y2="10.49"/&gt;
&lt;/svg&gt;Networking and Support&lt;/h3&gt;
All the participants become part of our &lt;em&gt;&lt;strong&gt;global alumni network&lt;/strong&gt;&lt;/em&gt;. Join our monthly online meetups to keep updated with latest developments and connect with other professionals.
&lt;/div&gt;
&lt;div class="card card-lg feature-card"&gt;
&lt;h3&gt;&lt;svg class="card-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;
&lt;circle cx="12" cy="12" r="10"/&gt;
&lt;path d="M8 14s1.5 2 4 2 4-2 4-2"/&gt;
&lt;line x1="9" y1="9" x2="9.01" y2="9"/&gt;
&lt;line x1="15" y1="9" x2="15.01" y2="9"/&gt;
&lt;/svg&gt;Unique Teaching Style&lt;/h3&gt;
Our classes are &lt;em&gt;&lt;strong&gt;fun, informal, and highly interactive&lt;/strong&gt;&lt;/em&gt;. The sessions consist of lectures, hands-on exercises, live quizzes, discussions, and personalized problem-solving.
&lt;/div&gt;
&lt;div class="card card-lg feature-card"&gt;
&lt;h3&gt;&lt;svg class="card-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;
&lt;circle cx="12" cy="8" r="7"/&gt;
&lt;polyline points="8.21 13.89 7 23 12 20 17 23 15.79 13.88"/&gt;
&lt;/svg&gt;Globally Recognized Certification&lt;/h3&gt;
All of our courses come with employer verifiable certification. We are one of the handful &lt;em&gt;&lt;strong&gt;QGIS.org certifying organizations&lt;/strong&gt;&lt;/em&gt; globally and offer the most affordable program to earn your QGIS certification.
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="card card-md cta-band"&gt;&lt;p class="cta-text"&gt;Our courses are designed to address the gap between the traditional GIS skillset and the needs of modern large-scale spatial analytics.&lt;/p&gt;</description></item><item><title>Sponsor a Candidate</title><link>https://spatialthoughts.com/sponsor-a-candidate/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/sponsor-a-candidate/</guid><description>You can sponsor candidates to attend our live instructor-led certification courses. Each batch of our live training courses has two free seats reserved for scholarships.</description></item><item><title>Talks and Lectures</title><link>https://spatialthoughts.com/public-speaking/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/public-speaking/</guid><description>&lt;div class="intro-media"&gt;
&lt;div class="intro-media-text"&gt;&lt;p&gt;&lt;a href="https://spatialthoughts.com/about/"&gt;Ujaval Gandhi&lt;/a&gt; is an accomplished public speaker and a keen follower of the geospatial industry. He has been invited to speak at talks, lectures, and panel discussions at various industry and academic events.&lt;/p&gt;</description></item><item><title>Terms of Service</title><link>https://spatialthoughts.com/terms-of-service/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/terms-of-service/</guid><description>&lt;p&gt;Welcome to Spatial Thoughts! By accessing or using our website, you agree to comply with and be bound by the following Terms of Service. Please read these terms carefully before using our website.&lt;/p&gt;</description></item><item><title>Testimonials</title><link>https://spatialthoughts.com/testimonials/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://spatialthoughts.com/testimonials/</guid><description>Reviews from participants of our live classes.</description></item></channel></rss>