We publish a large number of detailed technical articles on a variety of topics. You can explore them below.
QGIS
Creating QGIS Models with Optional Inputs and Conditional Processing
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 …
#30DaysOfQGIS – Master QGIS in 30 Days
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 …
Rendering Print Layouts from QGIS Models
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. QGIS …
Understanding Pixel Weights in Zonal Statistics
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 understand …
Running QGIS Processing Tools on the Command Line with qgis_process
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 …
Split Polygons into Equal Parts using QGIS
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 …
Calculating Weighted Centroids
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 …
QGIS for Urban and Regional Planning
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. …
Spatial Homogeneity Testing of Raingauge Data with Advanced QGIS Expressions
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 engineering design of structures. …
Fixing Rasters with Missing Data using QGIS, GDAL and Python
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 …
Calculating Shared Border Lengths Between Polygons
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 …
Generating Random Points with a Specific Distribution
Generating pseudo-random data is important for many aspects of research work. QGIS provides for many methods of generating random points to facilitate this. Recently, I ran into a problem where …
Fuzzy Table Joins in QGIS
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 …
Find Neighbor Polygons using Summary Aggregate Function in QGIS
Read my previous posts Summary Aggregate and Spatial Filters and Advanced Aggregate Expressions to Automate QA to learn more about the powerful aggregate function. The aggregate function in QGIS was …
Advanced Aggregate Expressions to Automate QA in QGIS
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. …
Summary Aggregate and Spatial Filters in QGIS
QGIS expression engine has a powerful a summary aggregate function that can do spatial joins on the fly. This enables some very interesting uses. One such use is to enable …
Creating Animated Flight Lines in QGIS
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 …
QGIS Aggregate Function
Summary Aggregate and Spatial Filters in QGIS
QGIS expression engine has a powerful a summary aggregate function that can do spatial joins on the fly. This enables some very interesting uses. One such use is to enable …
Advanced Aggregate Expressions to Automate QA in QGIS
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. …
Find Neighbor Polygons using Summary Aggregate Function in QGIS
Read my previous posts Summary Aggregate and Spatial Filters and Advanced Aggregate Expressions to Automate QA to learn more about the powerful aggregate function. The aggregate function in QGIS was …
Fuzzy Table Joins in QGIS
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 …
Calculating Shared Border Lengths Between Polygons
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 …
Spatial Homogeneity Testing of Raingauge Data with Advanced QGIS Expressions
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 engineering design of structures. …
PyQGIS
Approximating Geodesic Buffers with PyQGIS
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 …
Exporting Print Layouts from Processing Scripts
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 …
Snapping GPS tracks to Roads using PyQGIS and OSRM
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 …
Creating Maps with Google Earth Engine and PyQGIS
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 …
K-Means Clustering with Equal Sized Clusters in QGIS
K-Means Clustering is a popular algorithm for automatically grouping points into natural clusters. QGIS comes with a Processing Toolbox algorithm 'K-means clustering' that can take a vector layer and group …
#PyQGISChallenge – Master QGIS Python Development in 30 Days
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 …
Get a Country-specific World Map in QGIS
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 …
Google Earth Engine
Extracting Building Heights from Open Buildings 2.5D Temporal Dataset
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, …
Tiling Large Exports in Google Earth Engine
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 …
Exploring the Global 30m Land Cover Change Dataset (1985-2022) GLC_FCS30D
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 such as MODIS Landcover …
Estimating Above Ground Biomass using Random Forest Regression in GEE
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 …
Enhancing Land Cover with Local Knowledge
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 …
Mapping Building Density with Open Building Datasets
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 techniques. Google's Open Buildings project has …
Understanding Pixel Weights in Zonal Statistics
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 understand …
Automated Coastline Extraction from Satellite Images using Google Earth Engine
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 …
Managing Earth Engine Assets using the GEE Python API
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. …
Temporal Gap-Filling with Linear Interpolation in GEE
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: Replacing Cloudy Pixels: You …
Working with QA Bands and Bitmasks in Google Earth Engine
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 …
Calculating Weighted Centroids
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 …
Aggregating Gridded Population Data in Google Earth Engine
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 …
Working with Gridded Rainfall Data in Google Earth Engine
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 …
Histogram Matching in Google Earth Engine
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 …
Calculating Area in Google Earth Engine
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 much …
Extracting Time Series using Google Earth Engine
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 …
Creating Maps with Google Earth Engine and PyQGIS
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 …
Python
#PythonDatavizChallenge – Learn Mapping and Data Visualization with Python in 30 Days
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 …
LISS4 Image Processing using XArray and Dask
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 satellites. This is …
Understanding Pixel Weights in Zonal Statistics
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 understand …
Creating Animated Plots with Matplotlib
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 …
Fast Point-in-Polygon Analysis with GeoPandas and Uber’s H3 Spatial Index
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 …
Fixing Rasters with Missing Data using QGIS, GDAL and Python
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 …
GDAL/OGR
Reprojecting and Aggregating Rasters with GDAL
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 …
GDAL and Google Cloud Storage (GCS)
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 …
Weighted Multi-Criteria Overlay Analysis using GDAL Tools
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. …
Fixing Rasters with Missing Data using QGIS, GDAL and Python
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 …
Reclassifying Rasters using gdal_calc
gdal_calc is one of the lesser used tools among the GDAL utilities. There aren't many examples of using it in the wild and some advanced features are not well documented. …
Convert between Orthometric and Ellipsoidal Elevations using GDAL
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 …
Creating Geospatial PDFs with GDAL Tools
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 …
Spatial Joins on the Command Line
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 …
Mapshaper
Optimizing Office Commute with Uber Movement Data
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. …
Analyzing Urban Mobility with Uber Movement Data
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 …
Geo Data Processing with Mapshaper
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 …
Other
Teaching Remote Sensing to Kids
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 …
Lessons from Hosting Online Training Events
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 …
History and Evolution of Location Intelligence Technology
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 …
Convert between UTM and Degree coordinates using Google Spreadsheets
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. cs2cs program, part …
Line Transact Surveys using OpenDataKit(ODK)
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 …
Implementing a Field Data collection app for APD
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 privileged segment. …
Le Paper Globe
A long pending weekend project is done. Printed, cut and folded a sturdy globe using the template from Le Paper Globe. This is not only fun, but a good prop to …
Calculate distance between a pair of lat/lon coordinates
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 …
GIS Project Ideas for Thesis/ Dissertation/ Internship
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 …
