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 businesses, most of our data is scattered across spreadsheets, emails, and different SaaS platforms. As the number of training participants grew, I found it increasingly hard to find the data I needed to make decisions. For example, I frequently would go down a rabbit hole to answer questions like,

  • Which of our participants received scholarships for a course but haven’t yet completed the certification?
  • Can I get a list of our QGIS-certified participants from Germany?
  • Do we know anyone who is skilled in both Earth Engine and Python and lives in Australia?
  • We are launching a new course and want to reach out to everyone who has completed our intermediate Python courses. Can we get their emails?

These were really difficult to answer and involved manual searches and digging through various spreadsheets. I had always dreamt of having a unified database that I could query and find an answer. This type of database – also known as a Customer Relationship Management (CRM) – is something out of reach for small businesses like mine. The costs and time involved for building something custom and tailored to my needs were never justified. But things have changed rapidly in the past few months. With AI-coding tools – like Claude Code – building systems like these is no longer out of reach. I spent a lazy afternoon with Claude Code and built exactly what I needed. Everything from data extraction to building a private web app. I was blown away by the capabilities of modern AI tools and want to share the process here.

Continue reading

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 qualified for non-commercial use, you could use Earth Engine without any restrictions or fees. With the introduction of non-commercial tiers, you now have monthly limits on how much compute you can use for free. Once you exceed the allocated monthly quota, your account will enter a Restricted mode that will slow down the computations triggered through your account.

See our updated Sign-up for Google Earth Engine page with guidance on how to select your quota tier.

If you are a non-commercial user of Earth Engine, you now need to monitor and manage your quota usage to ensure you comply with these limits. This post outlines the concepts and tools you can use for quota monitoring.

The post covers the following topics:

  • Understanding Earth Engine Compute Unit (EECU)
  • Monitoring Quota using Google Cloud Console
  • Monitoring Quota using Python (using Google Colab)
Continue reading

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 passionate group of people to bring the open-source geospatial community together in India. The conference also co-hosted the State of the Map (SOTM) India 2026 gathering for the OpenStreetMap India community. In total, the event brought together 160+ attendees from India, Japan, Germany, Thailand, UK, UAE, Nepal, and Korea.

Conference Group Photo
Continue reading

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 the coordinates bar.

While this is useful, there is no single political map of the world that is accepted by every country of the world. There are many disputed international boundaries, and each country has its own version of accepted international boundaries. To allow mapmakers to adhere to local mapping regulations, Natural Earth also publishes Countries point-of-views shapefiles for many countries that depict the world map according to each country’s law and/or local conventions. We provide a simple script to replace the bundled world map with your country’s point-of-view layer.

Continue reading

Geo for Good is Google’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 Geo for Good 2025 Summit at Singapore that took place from Sept 8-11, 2025 at the Google Singapore office. The summit provided an excellent opportunity to learn about the latest advancements in Google’s geospatial tools and to build new professional connections.

The Conference

As Earth Engine gets more integrated with Google’s Cloud offerings, the focus of the conference has also shifted to interoperability and integration with other cloud services. Google has also invested a lot of resources into their AI offerings – particularly with the new Satellite Embedding dataset and it was at the center stage throughout the conference.

Geo for Good Singapore Summit Participants (Photo by Google)

I saw the following main themes in this year’s conference:

  • Theme 1: Interoperability
  • Theme 2: AI and Satellite Embedding Dataset

All the presentations shared during the summit are available on the Summit website and are linked from the ‘Resources’ section under the description of each session. While many of the sessions were recorded, they do not plan to release them to the public.

Continue reading

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 Visualization.

Google has two important large-scale AI-derived open building datasets:

  • Open Buildings V3 Polygons: This was released a few years ago and contains all buildings polygons detected from Google’s corpus of high-resolution imagery. You can read more about it in our post Mapping Building Density with Open Building Datasets.
  • Open Buildings 2.5D Temporal V1: This is a newer dataset that aims to extract useful attributes for buildings such as year of construction and building height. Since this data is derived from open-source medium-resolution Sentinel-2 imagery, it has temporal coverage from 2016-2023. A deep learning model was trained to predict building heights from Sentinel-2 images, so we also get the height information each year.

We will cover a Google Earth Engine workflow to process this data to make it usable in a GIS environment and extract a high-resolution Digital Surface Model (DSM). We will also see how to combine the Open Buildings V3 polygon building footprints with the Open Buildings 2.5D Temporal V1 data to create and extract yearly polygon datasets containing building heights that can be used in a GIS environment.

Open Buildings 2.5D Temporal Data Combined with Open Buildings V3 Polygons and Visualized in QGS

The post is divided into the following sections.

  • Part 1: Extracting Building Height Raster and High-Resolution DSM
  • Part 2: Extracting Building Footprints with Heights
Continue reading

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 shows how to setup a QGIS model that can skip certain steps if those optional inputs are not provided. This is achieved using the Conditional branch algorithm in the QGIS Model Designer.

Here’s the example workflow we want to implement

  • Given a buildings layer and a boundary layer, create a layer with building polygons at least 50m away from the boundary. This will be the final output if no other inputs are provided.
  • Optionally, if a roads layer has been provided, further process the data and create a layer with buildings polygons that are both 50m away from the boundary and within 25m of a road segment.

The key is to use an expression that checks if the roads input is NULL and selects the appropriate branch of the model to process. Below is the diagram showing the final model.

We will go through the step-by-step process of building this model. You will find a link to download a GeoPackage file containing the final model and the sample dataset at the end of the post.

Continue reading

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 exports in your target projection that can be mosaicked together without any pixel gaps or overlaps. They key concept is the use of the crsTransform to ensure that each individual tile is on the same pixel grid.

Continue reading