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.
Showing up to 5 data rows · all rows are converted on export
FeatureCollection of Point features. All extra columns preserved as properties. Use in Leaflet, Mapbox, QGIS, geojson.io.
KML Document with Point Placemarks. Extra columns become <ExtendedData>. Open in Google Earth, Google Maps (My Maps).
GPX file with waypoints (<wpt>). Name and elevation columns included. Load on Garmin, Strava, AllTrails, or any GPS device.
Well-Known Text geometry — one POINT per line, tab-separated with name. Paste into QGIS, PostGIS, or any WKT-aware tool.
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.
How to Use
Logic Behind the Tool
How CSV rows become valid GIS features.
, ; \t | in the first line and picking the most frequent. Rows are split, trimmed, and mapped by column index.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.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.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.