What we learned when a user tried to load a massive GML file in a browser.<br>Menu
Launch Studio
Theme
Light
Dark
System
Studio Formats
ESRI Shapefile GeoJSON KML / KMZ GPX Tracks kepler.gl JSON AutoCAD DXF AutoCAD DWG CSV / Excel MS Excel GeoParquet GeoPackage SQLite FileGDB FlatGeobuf MapInfo TopoJSON GML OSM PBF Garmin FIT IGC Flight Logs WKT / WKB GeoTIFF / COG
Pages
Datasets Blog Documentation About Measure Distance Measure Area Radius Map Tool How Far Can I Drive Current Location & Weather Elevation Finder World Time Zones OpenClaw Exposure Map
Converters
GeoJSON<br>GeoJSON to ESRI Shapefile GeoJSON to GeoPackage GeoJSON to PMTiles
ESRI Shapefile<br>ESRI Shapefile to GeoJSON ESRI Shapefile to GeoPackage ESRI Shapefile to MBTiles
CSV<br>CSV to GeoJSON CSV to GeoPackage CSV to GPX
GPX<br>GPX to GeoJSON GPX to GeoPackage GPX to KML
GeoPackage<br>GeoPackage to GeoJSON GeoPackage to ESRI Shapefile GeoPackage to File Geodatabase
FlatGeobuf<br>FlatGeobuf to GeoJSON FlatGeobuf to GeoPackage FlatGeobuf to ESRI Shapefile
JSON-FG<br>JSON-FG to GeoJSON JSON-FG to GeoPackage JSON-FG to ESRI Shapefile
KML<br>KML to GeoJSON KML to GeoPackage KML to ESRI Shapefile
Mapbox Vector Tiles<br>Mapbox Vector Tiles to GeoJSON Mapbox Vector Tiles to GeoPackage Mapbox Vector Tiles to ESRI Shapefile
PMTiles<br>PMTiles to GeoJSON PMTiles to GeoPackage PMTiles to ESRI Shapefile
MBTiles<br>MBTiles to GeoJSON MBTiles to GeoPackage MBTiles to ESRI Shapefile
AutoCAD DXF<br>AutoCAD DXF to GeoJSON AutoCAD DXF to GeoPackage AutoCAD DXF to ESRI Shapefile
GML<br>GML to GeoJSON GML to GeoPackage GML to ESRI Shapefile
Microsoft Excel<br>Microsoft Excel to GeoJSON Microsoft Excel to GeoPackage Microsoft Excel to CSV
GeoRSS<br>GeoRSS to GeoJSON GeoRSS to GPX GeoRSS to KML
MapInfo<br>MapInfo to GeoJSON MapInfo to GeoPackage MapInfo to ESRI Shapefile
File Geodatabase<br>File Geodatabase to GeoJSON File Geodatabase to GeoPackage File Geodatabase to ESRI Shapefile
SpatiaLite / SQLite<br>SpatiaLite / SQLite to GeoJSON SpatiaLite / SQLite to GeoPackage SpatiaLite / SQLite to ESRI Shapefile
July 1, 2026 • GeoDataViewer Team<br>What we learned when a user tried to load a massive GML file in a browser.<br>Learn why traditional GIS formats break at scale, how vector tiles solve the memory and rendering bottleneck, and what the shift from flat files to tiled architectures means for web-based geospatial data.
The Problem That Started This
A few weeks ago, a GeoDataViewer user wrote in asking why a large GML file wouldn’t load in their browser. The file — a geological map from a national survey — was roughly 1 GB in size and contained hundreds of thousands of mapped features. They had downloaded open data, unzipped it, dragged it into a web map, and nothing happened.
This is not a bug report. This is a format problem.
And it’s a problem far bigger than this one user. Every day, GIS professionals, geological surveyors, urban planners, and hobbyists hit the same wall: they acquire perfectly good open data, try to view it in a modern web browser, and the browser just … gives up.
The solution exists. It has existed for over a decade. But most end users have never heard of it. This post is about why vector tiles are the answer, why partial solutions fall short, and why the gap between “it works in my desktop GIS” and “it works in my browser” remains the industry’s most underappreciated UX problem.
Part I: Why Browsers Can’t Handle Large Vector Datasets
The browser is not QGIS. It is not ArcGIS Pro. It is a sandboxed runtime with a strict memory budget, a single-threaded (ish) DOM, and no access to your disk.
Here is what happens when you drag a ~1 GB GML file into a web map:
Step 1: Memory saturation
The browser must read the entire file into memory. GML — like all XML-derived formats — is notoriously verbose. A ~1 GB GML file decompresses to roughly a gigabyte of XML text. Parse that into a DOM tree, and you are looking at 3–5 GB of peak memory for a naive parser. Even a streaming parser that outputs GeoJSON must materialize that data into an in-memory data structure. The resulting GeoJSON still requires the browser to hold the full dataset in memory before rendering can begin.
Chrome on a typical laptop with 8 GB of RAM will crash, swap to death, or throw an Out of Memory error.
Step 2: Parsing bottleneck
XML parsing in JavaScript is slow. DOMParser is not optimized for multi-hundred-megabyte documents. The browser’s main thread blocks for tens of seconds — or minutes — while it tries to build a document tree. There is no yield, no progress bar, just a frozen tab and a spinning cursor.
Step 3: Rendering collapse
Even if you somehow get the data into memory as GeoJSON, rendering hundreds of thousands of features is itself a challenge. Every feature becomes a DOM element in the canvas rendering pipeline. Every pan or zoom re-evaluates visibility, reprojects coordinates (if you forgot to pre-reproject — a second blocking operation), and redraws. Without tiling, the renderer must...