We publish a large number of detailed technical articles on a variety of topics. You can explore them below.
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 …
GIS Applications in 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 table …
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 table …
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 …
Google Earth Engine
Dynamic World Mapathon: 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
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
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
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 …