## Traditional GIS Architecture (AKA Enterprise)
```mermaid
graph LR
subgraph "TRADITIONAL GIS ARCHITECTURE"
direction LR
subgraph DS["Data Sources & Storage"]
direction TB
FILES[["File Storage<br/>(Shapefile, GeoPackage,<br/>FileGDB, KML, GML)"]]
DATASTORE[["Spatial Database<br/>(PostGIS, Oracle Spatial,<br/>SQL Server, ArcGIS DataStore)"]]
end
subgraph ETL["Data Processing & ETL"]
direction TB
ETL_TOOLS[["ETL Tools<br/>(FME, GDAL/OGR,<br/>ArcGIS Data Interoperability,<br/>GeoKettle)"]]
end
subgraph GIS["GIS Application Servers"]
direction TB
GEOSERVER[["Map Server<br/>(GeoServer, MapServer,<br/>QGIS Server, Mapnik)"]]
ARCSERVER[["Enterprise GIS Server<br/>(ArcGIS Server, GeoMedia,<br/>Hexagon, Bentley Map)"]]
end
subgraph SVC["Service Layer"]
direction TB
OGC_SERVICES[["OGC Web Services<br/>(WMS, WFS, WCS,<br/>WMTS, CSW)"]]
REST_SERVICES[["REST Services<br/>(Feature Service, Map Service,<br/>Image Service, Geoprocessing)"]]
TILE_SERVICES[["Tile Services<br/>(Vector Tiles, Raster Tiles,<br/>TMS, XYZ)"]]
end
subgraph PCM["Portal & Content Management"]
direction TB
PORTAL[["Geoportal<br/>(ArcGIS Portal, GeoNode,<br/>GeoNetwork, CKAN)"]]
CMS[["Content Management<br/>(ArcGIS Hub, MapStore,<br/>Terria, Geoplatform)"]]
end
subgraph SEC["Security & Access Control"]
direction TB
AUTH[["Authentication<br/>(LDAP, Active Directory,<br/>SAML, OAuth 2.0)"]]
PROXY[["Reverse Proxy<br/>(NGINX, Apache,<br/>HAProxy, Caddy)"]]
FW[["Firewall/WAF<br/>(CloudFlare, AWS WAF,<br/>ModSecurity)"]]
end
subgraph CLI["Client Applications"]
direction TB
DESKTOP[["Desktop GIS<br/>(ArcGIS Pro, QGIS,<br/>Global Mapper, MapInfo)"]]
WEB[["Web Applications<br/>(Leaflet, OpenLayers,<br/>ArcGIS JS API, Mapbox GL)"]]
MOBILE[["Mobile Apps<br/>(ArcGIS Field Maps,<br/>QField, Avenza, Collector)"]]
end
%% Group-level connections
DS --> ETL
ETL --> GIS
GIS --> SVC
SVC --> PCM
PCM --> SEC
SEC --> CLI
%% Edge case: ETL writes back to storage
ETL -.->|Updates| DS
%% Limitations
LIMITS[["LIMITATIONS<br/>Vertical Scaling Only<br/>High Infrastructure Cost<br/>Complex Maintenance<br/>Limited to Terabytes<br/>Vendor Lock-in<br/>Single Point of Failure"]]
style LIMITS fill:#ffcccc,stroke:#cc0000,stroke-width:2px
style DS fill:#f9f9f9,stroke:#333,stroke-width:2px
style ETL fill:#f9f9f9,stroke:#333,stroke-width:2px
style GIS fill:#f9f9f9,stroke:#333,stroke-width:2px
style SVC fill:#f9f9f9,stroke:#333,stroke-width:2px
style PCM fill:#f9f9f9,stroke:#333,stroke-width:2px
style SEC fill:#f9f9f9,stroke:#333,stroke-width:2px
style CLI fill:#f9f9f9,stroke:#333,stroke-width:2px
end
```
## Cloud-Native Geospatial & Data Lakehouse Architecture
```mermaid
graph LR
subgraph "CLOUD-NATIVE ARCHITECTURE"
direction LR
subgraph OSL["Object Storage Layer"]
direction TB
STORAGE[["Object Storage<br/>(AWS S3, Azure Blob,<br/>Google Cloud Storage,<br/>MinIO, Cloudflare R2)<br/>Petabyte+ Scale"]]
subgraph "Cloud-Optimized Formats"
direction TB
RASTER[["Raster Formats<br/>(COG, Zarr, HDF5,<br/>NetCDF, GeoZarr)"]]
VECTOR[["Vector Formats<br/>(GeoParquet, PMTiles,<br/>FlatGeobuf, GeoJSON)"]]
POINTCLOUD[["Point Cloud<br/>(COPC, EPT, 3D Tiles,<br/>Potree, LAS/LAZ)"]]
end
end
subgraph TFL["Table Format Layer"]
direction TB
ICEBERG[["Apache Iceberg<br/>(AWS S3 Tables,<br/>Tabular, Netflix)"]]
DELTA[["Delta Lake<br/>(Databricks, UniForm,<br/>Delta Sharing)"]]
HUDI[["Apache Hudi<br/>(Uber, CDC,<br/>DeltaStreamer)"]]
DUCKLAKE[["DuckLake<br/>(DuckDB Format,<br/>SQL Metadata)"]]
end
subgraph CAT["Catalog & Governance"]
direction TB
CATALOG[["Data Catalog<br/>(Unity Catalog, AWS Glue,<br/>Polaris, Nessie, LakeKeeper)"]]
STAC[["Geospatial Catalog<br/>(STAC, OGC API Records,<br/>GeoNetwork, CSW)"]]
LINEAGE[["Data Lineage<br/>(DataHub, OpenLineage,<br/>Apache Atlas, Alation)"]]
end
subgraph PRO["Processing Engines"]
direction TB
BATCH[["Batch Processing<br/>(Apache Spark, Flink,<br/>Ray, Databricks)"]]
STREAM[["Stream Processing<br/>(Kafka, Kinesis,<br/>Pulsar, EventHub)"]]
SQLENGINE[["SQL Engines<br/>(DuckDB, Trino, Presto,<br/>Athena, BigQuery)"]]
GEOPROC[["Geospatial Processing<br/>(GeoPandas, PostGIS,<br/>Sedona, GeoMesa)"]]
end
subgraph ORC["Compute Orchestration"]
direction TB
CONTAINER[["Container Platform<br/>(Kubernetes, ECS,<br/>Cloud Run, AKS)"]]
SERVERLESS[["Serverless<br/>(Lambda, Functions,<br/>Cloud Functions, Fargate)"]]
WORKFLOW[["Workflow Orchestration<br/>(Airflow, Dagster,<br/>Prefect, Argo)"]]
end
subgraph API["API & Services"]
direction TB
OGCAPI[["OGC APIs<br/>(Features, Maps, Tiles,<br/>Processes, EDR, DGGS)"]]
TILING[["Dynamic Tiling<br/>(TiTiler, pg_tileserv,<br/>Martin, Tegola)"]]
GRAPHQL[["Modern APIs<br/>(GraphQL, gRPC,<br/>REST, WebSocket)"]]
end
subgraph AML["Analytics & ML"]
direction TB
NOTEBOOKS[["Notebooks<br/>(Jupyter, Databricks,<br/>Google Colab, Observable)"]]
MLPLATFORM[["ML Platform<br/>(SageMaker, Vertex AI,<br/>Azure ML, MLflow)"]]
WASM[["Browser Computing<br/>(DuckDB-WASM, Pyodide,<br/>Arrow-JS, SQL.js)"]]
end
subgraph CLA["Client Layer"]
direction TB
MODERN_WEB[["Modern Web<br/>(MapLibre, DeckGL,<br/>Cesium, Mapbox GL)"]]
BI_TOOLS[["BI Tools<br/>(Tableau, PowerBI,<br/>Looker, Superset)"]]
NATIVE_APPS[["Native Apps<br/>(Mobile SDKs,<br/>Desktop Apps)"]]
end
%% Group-level connections
OSL --> TFL
TFL --> CAT
CAT --> PRO
PRO --> ORC
ORC --> API
API --> CLA
%% Analytics branch
PRO --> AML
AML --> CLA
%% Edge case: Direct browser access to storage
OSL -.->|Direct Access<br/>HTTP Range Requests| AML
%% Edge case: Catalog feedback to storage
CAT -.->|Metadata Updates| TFL
%% Advantages
ADVANTAGES[["ADVANTAGES<br/>Horizontal Scaling<br/>Pay-per-Use Pricing<br/>No Vendor Lock-in<br/>Petabyte+ Scale<br/>Separation of Storage/Compute<br/>Open Standards Based"]]
style ADVANTAGES fill:#ccffcc,stroke:#00cc00,stroke-width:2px
style OSL fill:#e6f3ff,stroke:#333,stroke-width:2px
style TFL fill:#f0f8ff,stroke:#333,stroke-width:2px
style CAT fill:#fffacd,stroke:#333,stroke-width:2px
style PRO fill:#f5f5f5,stroke:#333,stroke-width:2px
style ORC fill:#fafafa,stroke:#333,stroke-width:2px
style API fill:#f9f9f9,stroke:#333,stroke-width:2px
style AML fill:#fff5ee,stroke:#333,stroke-width:2px
style CLA fill:#f8f8f8,stroke:#333,stroke-width:2px
end
```