<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
          http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">

  <url>
    <loc>https://www.geospatial-etl.com/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/mastering-geospatial-data-ingestion-in-python/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/orchestrating-spatial-etl-pipelines/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/attribute-mapping-schema-harmonization/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/choosing-a-vector-output-format-for-spatial-pipelines/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/crs-normalization-across-mixed-datasets/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/geometry-repair-with-shapely-geopandas/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/handling-precision-coordinate-rounding/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/raster-alignment-resampling-techniques/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/spatial-deduplication-topology-simplification/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/mastering-geospatial-data-ingestion-in-python/automating-government-portal-downloads/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/mastering-geospatial-data-ingestion-in-python/bulk-downloading-satellite-imagery/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/mastering-geospatial-data-ingestion-in-python/fetching-osm-data-via-overpass-api/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/mastering-geospatial-data-ingestion-in-python/parsing-geojson-shapefile-apis/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/mastering-geospatial-data-ingestion-in-python/syncing-stac-catalogs-with-pystac-client/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/mastering-geospatial-data-ingestion-in-python/web-scraping-spatial-metadata/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/orchestrating-spatial-etl-pipelines/building-airflow-dags-for-spatial-etl/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/orchestrating-spatial-etl-pipelines/choosing-an-orchestrator-for-spatial-etl/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/orchestrating-spatial-etl-pipelines/managing-spatial-assets-with-dagster/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/orchestrating-spatial-etl-pipelines/orchestrating-spatial-pipelines-with-prefect/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/orchestrating-spatial-etl-pipelines/postgis-vs-duckdb-spatial-for-analytical-loads/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/orchestrating-spatial-etl-pipelines/scheduling-and-incremental-spatial-loads/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/attribute-mapping-schema-harmonization/standardizing-column-names-across-multiple-shapefiles/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/choosing-a-vector-output-format-for-spatial-pipelines/converting-shapefiles-to-geoparquet-with-geopandas/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/crs-normalization-across-mixed-datasets/converting-mixed-epsg-codes-to-a-unified-crs/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/geometry-repair-with-shapely-geopandas/fixing-self-intersecting-polygons-in-geopandas/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/handling-precision-coordinate-rounding/reducing-coordinate-precision-to-shrink-geojson/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/handling-precision-coordinate-rounding/snapping-coordinates-to-a-grid-with-set-precision/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/raster-alignment-resampling-techniques/aligning-raster-bands-with-rasterio-and-affine-transforms/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/raster-alignment-resampling-techniques/choosing-resampling-methods-for-categorical-and-continuous-rasters/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/raster-alignment-resampling-techniques/reprojecting-rasters-to-a-common-grid-with-rasterio-warp/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/spatial-deduplication-topology-simplification/deduplicating-overlapping-polygons-with-spatial-joins/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/spatial-deduplication-topology-simplification/removing-duplicate-spatial-points-with-tolerance-thresholds/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/automated-vector-raster-cleaning-workflows/spatial-deduplication-topology-simplification/simplifying-polygons-while-preserving-shared-boundaries/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/mastering-geospatial-data-ingestion-in-python/automating-government-portal-downloads/detecting-dataset-changes-with-etag-and-last-modified/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/mastering-geospatial-data-ingestion-in-python/bulk-downloading-satellite-imagery/automating-usgs-earthexplorer-bulk-downloads-with-requests/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/mastering-geospatial-data-ingestion-in-python/fetching-osm-data-via-overpass-api/how-to-handle-rate-limits-when-downloading-osm-data/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/mastering-geospatial-data-ingestion-in-python/parsing-geojson-shapefile-apis/extracting-bounding-boxes-from-geojson-apis/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/mastering-geospatial-data-ingestion-in-python/parsing-geojson-shapefile-apis/handling-authentication-tokens-for-arcgis-rest-services/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/mastering-geospatial-data-ingestion-in-python/parsing-geojson-shapefile-apis/streaming-large-geojson-responses-with-ijson/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/mastering-geospatial-data-ingestion-in-python/syncing-stac-catalogs-with-pystac-client/best-practices-for-stac-catalog-pagination-in-python/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/mastering-geospatial-data-ingestion-in-python/web-scraping-spatial-metadata/parsing-iso-19115-metadata-with-owslib/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/orchestrating-spatial-etl-pipelines/building-airflow-dags-for-spatial-etl/passing-geodataframes-between-airflow-tasks/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/orchestrating-spatial-etl-pipelines/building-airflow-dags-for-spatial-etl/writing-idempotent-spatial-etl-tasks-in-airflow/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/orchestrating-spatial-etl-pipelines/choosing-an-orchestrator-for-spatial-etl/airflow-vs-prefect-for-geospatial-workflows/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/orchestrating-spatial-etl-pipelines/managing-spatial-assets-with-dagster/backfilling-satellite-scene-partitions-in-dagster/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/orchestrating-spatial-etl-pipelines/managing-spatial-assets-with-dagster/partitioning-spatial-assets-by-tile-in-dagster/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/orchestrating-spatial-etl-pipelines/orchestrating-spatial-pipelines-with-prefect/caching-geospatial-task-results-in-prefect/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/orchestrating-spatial-etl-pipelines/orchestrating-spatial-pipelines-with-prefect/parallel-tile-downloads-with-prefect-task-mapping/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/orchestrating-spatial-etl-pipelines/postgis-vs-duckdb-spatial-for-analytical-loads/loading-geodataframes-into-postgis-with-geopandas/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.geospatial-etl.com/orchestrating-spatial-etl-pipelines/scheduling-and-incremental-spatial-loads/incremental-spatial-loading-with-watermark-timestamps/</loc>
    <lastmod>2026-06-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>

</urlset>

