A big thank you to Roger Bivand!
The GRASS GIS community recognises the long-term contributions of Roger Bivand for the development of the rgrass package.
The post A big thank you to Roger Bivand! appeared first on Markus Neteler Consulting.
The GRASS GIS community recognises the long-term contributions of Roger Bivand for the development of the rgrass package.
The post A big thank you to Roger Bivand! appeared first on Markus Neteler Consulting.
Explore Mergin Maps' 2024 highlights: app redesigns, new features like Editor permissions, and a preview of what's coming in 2025!
Today, I want to point out a blog post over at
https://carto.com/blog/urban-mobility-insights-with-movingpandas-carto-in-snowflake
written together with my fellow co-authors and EMERALDS project team member Argyrios Kyrgiazos.
For the technically inclined, the highlight are the presented UDFs in Snowflake to process and transform the trajectory data. For example, here’s a TemporalSplitter UDF:
CREATE OR REPLACE FUNCTION CARTO_DATABASE.CARTO.TemporalSplitter(geom ARRAY, t ARRAY, mode STRING)
RETURNS ARRAY
LANGUAGE PYTHON
RUNTIME_VERSION = 3.11
PACKAGES = ('numpy','pandas', 'geopandas','movingpandas', 'shapely')
HANDLER = 'udf'
AS $$
import numpy as np
import pandas as pd
import geopandas as gpd
import movingpandas as mpd
import shapely
from shapely.geometry import shape, mapping, Point, Polygon
from shapely.validation import make_valid
from datetime import datetime, timedelta
def udf(geom, t, mode):
valid_df = pd.DataFrame(geom, columns=['geometry'])
valid_df['t'] = pd.to_datetime(t)
valid_df['geometry'] = valid_df['geometry'].apply(lambda x:shapely.wkt.loads(x))
gdf = gpd.GeoDataFrame(valid_df, geometry='geometry', crs='epsg:4326')
gdf = gdf.set_index('t')
traj = mpd.Trajectory(gdf, 1)
traj_sm = mpd.TemporalSplitter(traj).split(mode=mode)
if len(traj_sm.trajectories)>0:
res = traj_sm.to_point_gdf()
res['geometry'] = res['geometry'].apply(lambda x: shapely.wkt.dumps(x))
return res.reset_index().values
else:
return []
$$;
You can find the full code here: https://github.com/anitagraser/carto-research-public/tree/master/movingpandas_carto_in_snowflake
Discover how the MOSPREMA project, launched in 2022 in Czechia, uses open-source tools like Mergin Maps and PostgreSQL to monitor and manage mosquito populations. Learn how real-time data, sensors, and mapping technology improve efficiency for local municipalities.
November was a really productive month, with a remarkable total of 43 new plugins published in QGIS plugin repository. In addition there are 3 more plugins from October listed here, which somehow were missed, and for that we apologize to their authors.
Here follows the quick overview in reverse chronological order. If any of the names or short descriptions catches your attention, you can find the direct link to the plugin page in the table below:
All Geocoders At Once |
Plugin accumulating most popular geocoders. |
ODK Connect |
Connect to ODK Central, fetch submissions, and visualize field data on QGIS maps. Supports filtering, spatial analysis, and data export. |
Web Service Plugin |
Wtyczka umożliwia prezentację danych z serwisów WMS, WMTS, WFS i WCS w postaci warstw w QGIS. Wtyczka wykorzystuje dane z Ewidencji Zbiorów i Usług oraz strony geoportal.gov.pl |
Polygon grouper |
This plugin groups polygons together. |
GeoCAR |
Cadastro Ambiental Rural. |
Not-So-QT-DEM |
TauDEM 5.3 processing provider. |
GeocodeCN |
一个将地址转为经纬度坐标的插件。 EN: A plug-in that converts addresses into latitude and longitude coordinates. |
Feature Navigator |
Este plugin permite navegar entre entidades en una capa activa de QGIS con botones de anterior y siguiente. |
Movement Analysis |
Toolbox for raster based movement analysis: least-cost path, accumulated cost surface, accessibility. |
Graphab3 |
Graphab3 for QGIS. |
SGTool |
Simple Potential Field Processing. |
FieldColorCoder |
Easily apply color codes to layers based on selected field values. |
NGP Connect |
Plugin to store files in Lantmäteriet National Geodata Platform with external storage for the attachment widget in features attribute form. |
Projection Factors Redux |
Calculates various cartographic projection properties as a raster layer. |
ArqueoTransectas |
Este complemento genera transectas arqueológicas (líneas horizontales o verticales) dentro de un área definida. Puede ser útil para estudios de campo y proyectos arqueológicos. |
BROnodig |
Plugin om BRO data te downloaden en plotten. |
Arches Project |
A plugin that links QGIS to an Arches project. |
Field annotations |
Make annotations and photos in the field. |
qCEPHEE |
Plugin QGIS for CEPHEE. |
Water Network Tools for Resilience (WNTR) Integration |
A QGIS Plugin for the WNTR piped water network modelling package. Allows the preparation of water network models and visualisation of simulation results within QGIS. |
FitLoader |
A simple plugin to import FIT files. |
EasyDEM |
Get Digital Elevation Model (DEM) datasets from multiple sources with Google Earth Engine API and load it as raster layer. |
Si Kataster |
EN: SiKataster is a tool for accessing cadastral parcel data from the Real Estate Cadastre of the Surveying and Mapping Authority of the Republic of Slovenia (GURS). The plugin is designed to record information about the source and the date of data acquisition into the metadata of the layers it creates. The data and web service are provided by GURS. SI: SiKataster je orodje za dostop do podatkov o parcelah v Katastru nepremičnin Geodetske uprave Republike Slovenije (GURS). Vtičnik je zasnovan na način, da v metapodatke slojev, ki jih ustvari, zapiše informacije o viru in datumu prevzema podatkov. Podatke in spletni servis zagotavlja GURS. |
Shred Layer Plugin |
This plugin allows users to “shred” a layer. Can be used to delete unnecessary layers or when you do not want to leave evidence. Cut layers can also be scattered on the map. |
otsusmethod |
This plugin applies Otsu’s method for automated thresholding and segmentation of raster data. |
Split Lines By Points |
Split Lines By Points. |
申少军的工具箱 |
实现图形处理的功能集合 EN: A collection of functions to implement graphics processing |
Easy Feature Selector |
The Easy Feature Selector plugin for QGIS is a practical tool designed to simplify interactions with vector data. |
GenSimPlot |
Generator of simulation plots. |
LockCanvasZoom |
The Lock and Unlock Canvas Zoom Plugin for QGIS is designed to provide users with a simple way to lock and unlock the zoom position on the map canvas. This plugin offers a toggle button that allows users to easily switch between locked and unlocked states for the map canvas zoom. |
GWAT – Watershed Analysis Toolbox by Geomeletitiki |
Semi-automated Hydrological Basin Analysis toolbox. |
GeoPEC |
GeoPEC é um software científico para avaliação da acurácia posicional de dados espaciais |
Esporta Tab su file CSV |
Esporta la tabella del layer vettoriale selezionato su un file CSV. |
transform_coords |
Transform decimal/grade-minute-second coordinates to UTM. Can also make points on the selected coordinates. |
Geocoder CartoCiudad |
CartoCiudad ofrece direcciones postales, topónimos, poblaciones y límites administrativos de España. |
Multi Raster Transparency Pixel Setter |
Set transparency pixel for multiple raster layers. |
InSAR Explorer |
InSAR Explorer is a QGIS plugin that allows for dynamic visualization and analysis of InSAR time series data. |
Vgrid |
Vgrid – Global Geocoding Systems. |
Profile Manager |
Makes handling profiles easy by giving you an UI to easily import settings from one profile to another. |
QGIS2Mapbender |
QGIS plugin to populate Mapbender with WMS services from QGIS Server. |
PLU Versionning |
Outil de suivi des versions de numérisation des documents d’urbanisme au format CNIG. |
Snowflake Connector for QGIS |
This package includes the Snowflake Connector for QGIS. |
Count Routes |
This plugin provides algorithms of network analysis. |
QuickRectangleCreator |
QuickRectangleCreator allows you to create a rectangle quickly and easily, preset sizes, snap to grid and rotate on the fly. |
AlgoMaps |
PL: Plugin Algolytics do standaryzacji danych adresowych i geokodowania. EN: Algolytics Plugin for Address Data Standardization and Geocoding. |
Kue |
Kue is an embedded AI assistant inside QGIS. |
FOSS4G is the annual global event of free and open source geographic technologies and open geospatial data hosted by OSGeo. In 2024 it took place in Belém, Brasil.
tldr; Tired of working with large CSV files? Give GeoParquet a try!
“Parquet is a powerful column-oriented data format, built from the ground up to as a modern alternative to CSV files.” https://geoparquet.org/
(Geo)Parquet is both smaller and faster than CSV. Additionally, (Geo)Parquet columns are typed. Text, numeric values, dates, geometries retain their data types. GeoParquet also stores CRS information and support in GIS solutions is growing.
I’ll be giving a quick overview using AIS data in GeoPandas 1.0.1 (with pyarrow) and QGIS 3.38 (with GDAL 3.9.2).
The example AIS dataset for this demo contains ~10 million rows with 22 columns. I’ve converted the original zipped CSV into GeoPackage and GeoParquet using GeoPandas to illustrate the huge difference in file size: ~470 MB for GeoParquet and zipped CSV, 1.6 GB for CSV, and a whopping 2.6 GB for GeoPackage:
Pandas and GeoPandas both support selective reading of files, i.e. we can specify the specific columns to be loaded. This does speed up reading, even from CSV files:
Whole file | Selected columns | |
CSV | 27.9 s | 13.1 s |
Geopackage | 2min 12s | 20.2 s |
GeoParquet | 7.2 s | 4.1 s |
Indeed, reading the whole GeoPackage is getting quite painful.
Here’s the code I used for timing the read times:
As you can see, these times include the creation of the GeoPandas.GeoDataFrame.
If we don’t need a GeoDataFrame, we can read the files even faster:
GeoParquet files can be read by non-GIS tools, such as Pandas. This makes it easier to collaborate with people who may not be familiar with geospatial data stacks.
And reading plain DataFrames is much faster than creating GeoDataFrames:
But back to GIS …
In QGIS, GeoParquet files can be loaded like any other vector layer, thanks to GDAL:
Loading the GeoParquet and GeoPackage files is pretty quick, especially if we zoom into a small region of interest (even though, unfortunately, it doesn’t seem possible to restrict the columns to further speed up loading). Loading the CSV, however, is pretty painful due to the lack of spatial indexing, which becomes apparent very quickly in the direct comparison:
As far as I can tell, my QGIS 3.38 ‘Grenoble’ does not support writing to or editing of GeoParquet files. So I’m limited to reading GeoParquet for now.
However, seeing how much smaller GeoParquets are compared to GeoPackages (and also faster to write), I hope that we will soon get the option to export to GeoParquet.
For now, I’ll start by converting my large CSV files to GeoParquet using GeoPandas.
If you’re into GeoJSON and/or PyGeoAPI, check out Joana Simoes’ post: “Navigating GeoParquet: Lessons Learned from the eMOTIONAL Cities Project”
And if you want to see a global dataset example, have a look at Matt Travis’ presentation using Overture data:
Discover how Camptocamp, in collaboration with Zurich, used Mergin Maps and QGIS to map bird nesting sites, empowering volunteers to collect accurate survey data.
In the last month of October, 18 new plugins were published in the QGIS plugin repository.
Here follows the quick overview in reverse chronological order. If any of the names or short descriptions catches your attention, you can find the direct link to the plugin page in the table below:
ECLAIR: Emission CompiLation for AIR quality |
This plugin compiles emission data for air quality. Data can be imported, edited and exported. |
GRD_Loader |
Load GRD Format Rasters. |
Random Point on Lines… |
The Random Points on Lines… is a simple interface and a user-friendly QGIS plugin that enables to generate a specified number of random points along selected line layers within QGIS. Users can control the layer selection and the number of points generated. |
BGT Loader |
A processing tool to download Dutch BGT data for a specific polygon area. |
geonorge-tegneregelassistent |
En plugin for å implementere stiler/tegneregler basert på norske standarder som finnes i Geonorge. |
EvapoGIS |
Evapotranspiração. |
SkyDeck Plugin |
Seamlessly Integrate and Manage SkyDeck Geospatial Data within QGIS. |
Curva de Nivel |
Cria curvas de nivel no territorio brasileiro. |
Reservoir & Basin Analysis |
This plugin offers some analysis tools for reservoirs and basins. |
Feature Transfer Tool |
Feature Transfer Tool provides a seamless way to copy and paste features between layers. |
Parameter History |
A better processing history plugin. |
GeOSPR |
GeOSPR (Consulta, Validación y estandarización). |
AutonomousGIS-SpatialAnalysisAgent |
The Spatial Analysis Agent is a user-friendly plugin that serves as a “Copilot” in QGIS software. This Copilot allows users to perform geospatial analysis directly within QGIS using natural language queries, making it accessible for both experts and beginners. The plugin leverages the full potential of over 600 QGIS processing tools, and other external tools such as Python libraries (e.g., Geopandas, seaborn, etc.). Whether working with vector data, raster analysis, the Spatial Analysis Agent offers a flexible, AI-driven approach to enhance and automate GIS workflows. |
Aerodrome Utilities |
Fetches OSM Data and processes it for aerodroms with various algorithms. |
Relation Manager |
This plugin helps in the management of 1:N project relations. |
Easy Filter and Selection |
Plugin gives easy selecting and filter feature for users that don’t want to write complicated SQL for simple problem solution. |
GeoPF Altimétrie |
Warning: France only! <br/> This plugin allows to call IGN Geoplateforme API directly from elevation profile tool. |
Pian Exporter |
The plugin exports the vector layer in WKT format for PIAN. |
It’s been a while since my post on geo and the AI hype in 2019. Back then, I didn’t use the term “GeoAI”, even though it has certainly been around for a while (including, e.g., with dedicated SIGSPATIAL workshops since 2017).
GeoAI isn’t one single thing. It’s an umbrella term, including: “AI for Geo” (using AI methods in Geo, e.g. deep learning for object recognition in remote sensing images) and “Geo for AI” (integrating geographic concepts into AI models, e.g. by building spatially explicit models). [Zhang 2020] [Li et al. 2024]
Today’s post is a collection of key GeoAI developments I’m aware of. If I missed anything you are excited about, please let me know here in the comments or over on Mastodon.
A week ago, I had the pleasure to attend a “Specialist Meeting” on GeoAI here in Vienna, meeting over 40 researchers from around the world, from Master students to professor emeritus. Huge props to Jano (Prof. Krzysztof Janowicz) and his team at Uni Wien for bringing this awesome group of people together.
Unsurprisingly, LLMs and the claims they make about geography are a mayor issue due to the mistakes they make and the biases behind them. An infamous example is AI’s issue with understanding topology:
Even if recent versions of ChatGPT (such as GTP 4o) do a better job with this specific example, this doesn’t make their answers reliable. So between the trustworthiness, reproducibility, explainability, and sustainability issues … LLMs have a long way to go. And it’s not clear whether they are going in the right direction right now.
Prithvi, a model developed by NASA, IBM, et al. in 2023, is one of the first geospatial foundation models. Like much of GeoAI, Prithvi deals with remote sensing data. Specifically, it is trained on Landsat and Sentinel-2 (HLS) imagery, with applications in flood mapping and wildfire prediction. And maybe best of all: the model is open-source and publicly available.
In the general AI community, model cards have become a common way to share information about models. However, identifying the right model for spatiotemporal tasks is hard since there are no standardized descriptions in existing model catalogs (e.g. Hugging Face, DLHub or MLFlow). To address this issue, [Charette-Migneault et al. 2024] have proposed the Machine Learning Model (MLM) extension for the SpatioTemporal Asset Catalogs (STAC). But, yet again, this development is targeting models trained with remote sensing imagery.
Similarly, the OGC Training Data Markup Language for Artificial Intelligence (TrainingDML-AI) and its ISO equivalent are limited to EO as well …
For those among us working mostly with vector data, the KnowWhereGraph is an interesting development. It’s the first geo-enriched knowledge graph [Janowicz et al. 2022] that helps answer geospatial questions by integrating a variety of spatial datasets through hierarchical grids, standard region boundaries and appropriate ontology and knowledge graph schema development. However, so far, the KnowWhereGraph is mostly limited to the United States.
While answers from knowledge graphs are intrinsically explainable, many other (Geo)AI solutions are built on AI approaches that result in black box models.
Graph neural networks (GNNs) have become very popular in GeoAI (including in urban analytics and mobility [Jalali et al. 2023] [Liu et al. 2024]) but their black box nature limits their practical usefulness in domains where transparency and trustworthiness are crucial. To offer insights into how model predictions are made, [Liu et al. 2024] propose a spatially explicit GeoAI-based method that combines a graph convolutional network and a graph-based XAI method, called GNNExplainer to explore the correlation between urban objects.
The AI hype in geo is still going strong. Journals are being flooded with paper submissions and good reviewers are hard to come by. In many geo-related venues, it is still acceptable to present an AI paper without making code or model available. (We recently discussed this issue for mobility AI specifically [Graser et al. 2024].)
I’m convinced we can and should do better: quality over quantity, moving steadily, building and fixing things.
We’ve added measurement tools to Mergin Maps, allowing you to measure both distance and area directly within the app. The new "Measure" action is accessible from the "more" menu, where you can easily add points to calculate lengths and areas in your projects. The process is similar to creating a line feature, with a live display of the measured distance and options to undo, add points, or complete the measurement. Measurements are following your QGIS distance and area project units.
Read more about the measurement tool in our documentation: https://merginmaps.com/docs/field/measure/
How to contribute to GRASS GIS development: Guidance for new developers in the GRASS GIS Project.
The post How to contribute to GRASS GIS development appeared first on Markus Neteler Consulting.
You can now preview your project data directly from the project details page—no need to open QGIS or the mobile app!
Maps in dashboard are currently in beta, and we’re more than happy to hear your feedback. Share your thoughts and help us improve it here: https://wishlist.merginmaps.com/p/let-s-get-maps-in-dashboard-out-of-beta.