GIS · CSV

CSV Coordinates → GIS Formats

Paste any CSV with latitude and longitude columns and convert to GeoJSON, KML, GPX, or WKT. Auto-detects columns and delimiters. All properties preserved.

CSV Input
Delimiter
Header row
Output Format

What This Tool Does

Turn any spreadsheet or database export with coordinate columns into a proper GIS file — ready for web maps, Google Earth, GPS devices, or spatial databases.

🎯
Auto-detects columns
Recognises common latitude and longitude column names (lat, latitude, y, lon, lng, longitude, x) and maps them automatically. Override with dropdowns if your names differ.
📐
4 output formats
GeoJSON for web mapping, KML for Google Earth, GPX for GPS devices, WKT for PostGIS and QGIS. Switch between them and re-download without re-entering data.
🏷️
All properties preserved
Every extra CSV column travels through to the output. GeoJSON gets them as feature properties. KML as ExtendedData. GPX as the waypoint name. Nothing is dropped silently.
🔧
Any delimiter
Auto-detects comma, semicolon, tab, and pipe separators from the first line. Override manually if needed. Quoted fields with embedded commas are parsed correctly per RFC 4180.
Row validation
Each row is validated — coordinates must be numeric and within valid WGS84 ranges (lat: −90 to 90, lng: −180 to 180). Invalid rows are skipped and counted so you can fix source data issues.
🔒
100% client-side
All parsing and conversion runs in your browser. No data is uploaded. Your coordinates, names, and attributes never leave your device.

How to Use

1
Paste or upload your CSV
Paste CSV text into the input area, upload a .csv or .tsv file, or drag-and-drop a file. Click "Load sample" to see a Paris landmarks example with name, lat, lng, altitude, and category columns.
2
Check column mapping
The tool auto-detects latitude, longitude, name, and altitude columns by name. A preview table shows the first 5 rows. Adjust the dropdowns if the wrong columns were selected.
3
Choose output format
Select GeoJSON (web maps), KML (Google Earth), GPX (GPS devices), or WKT (spatial databases). Each tab shows a hint about where to use the format.
4
Convert
Click "Convert to [Format]". The result appears in the output box with a count of converted points and any skipped rows.
5
Download or copy
Click Download to save the file with the correct extension and MIME type, or Copy to paste into another tool. Switch output formats and download again without re-entering data.
6
Use in your GIS tool
Load .geojson in Leaflet, Mapbox, QGIS, or geojson.io. Open .kml in Google Earth or My Maps. Load .gpx on a Garmin or in Strava. Import WKT into PostGIS with ST_GeomFromText().

Logic Behind the Tool

How CSV rows become valid GIS features.

CSV parsing
A custom RFC 4180-compliant parser handles quoted fields containing the delimiter character or embedded newlines. The delimiter is auto-detected by counting occurrences of , ; \t | in the first line and picking the most frequent. Rows are split, trimmed, and mapped by column index.
Coordinate validation
Each row's lat/lng fields are parsed with parseFloat(). Rows are skipped if the result is NaN, or if latitude is outside [−90, 90] or longitude is outside [−180, 180]. The skipped row count is reported after conversion so you can investigate source data issues.
Property handling
All columns except the selected lat/lng columns are collected into a properties object. Column header names become property keys. In GeoJSON these become the feature's properties object. In KML they become <Data> elements inside <ExtendedData>. In GPX only the name and elevation columns are used; GPX waypoints have no key-value extension mechanism in the base schema.
WKT output
When altitude is present the geometry is written as POINT Z (lon lat alt); otherwise as POINT (lon lat). Each line is tab-separated with the name column. This format is accepted by QGIS "Add Delimited Text Layer", PostGIS ST_GeomFromText(), and most spatial database import tools without any additional configuration.

Frequently Asked Questions

Yes. The tool auto-detects the delimiter by counting the occurrences of comma, semicolon, tab, and pipe in the first line. If your file consistently uses semicolons, it will be detected automatically. You can also select "Semicolon" manually in the Delimiter options to override auto-detection. This is common in European locales where commas are used as decimal separators instead.

Uncheck "First row contains column names". The tool will label columns as "Column 1", "Column 2", etc. in the column mapping dropdowns and preview table. Select which numbered column contains latitude and longitude. Note that auto-detection of lat/lng columns requires recognisable column names, so you'll always need to select them manually when there's no header row.

There's no hard limit — the tool processes data in memory in the browser. In practice, files up to a few MB and tens of thousands of rows convert instantly. Very large files (100k+ rows, 10MB+) may cause a brief pause during parsing. For massive datasets, consider splitting the file or using a server-side tool like GDAL's ogr2ogr or Python's geopandas.

Rows are skipped when the latitude or longitude value cannot be parsed as a number (e.g. empty cell, text, "N/A") or when the numeric value is outside the valid WGS84 range (latitude must be −90 to 90, longitude must be −180 to 180). Common causes include: accidentally selecting the wrong column, rows with header-like text mid-file, rows where coordinates use degree symbols or cardinal letters (e.g. "48.85°N" instead of "48.85").

Yes. Copy the output and in your JavaScript: const data = /* paste JSON here */; then L.geoJSON(data, { onEachFeature: (f, layer) => layer.bindPopup(f.properties.name) }).addTo(map);. Each CSV row becomes a Point marker. All your extra CSV columns are available as feature.properties for popups, styling, or filtering.