Reprojection Control Points — 4326 to 3857 and 4087
Nine control points — the five towns plus Null Island, the equator, a high-latitude point and the Web Mercator latitude limit — with their coordinates in both projections. The two target projections share the x formula and differ only in y, which isolates a latitude-transform bug from a longitude one.
name,longitude,latitude,x_3857,y_3857,x_4087,y_4087
Kestrel Bay,-12.482,47.064,-1389489.884,5952526.765,-1389489.884,5239140.515
Marram,-12.3915,47.112,-1379415.470,5960374.522,-1379415.470,5244483.850
Holloway,-12.551,47.018,-1397170.929,5945012.626,-1397170.929,5234019.818
Ninepin,-12.4402,46.9725,-1384836.729,5937586.527,-1384836.729,5228954.781
Quillan Cross,-12.6135,47.0885,-1404128.397,5956531.508,-1404128.397,5241867.842
Null Island,0,0,0.000,0.000,0.000,0.000
Equator at 45 E,45,0,5009377.086,0.000,5009377.086,0.000
Greenwich at 60 N,0,60,0.000,8399737.890,0.000,6679169.448
Near the Mercator limit,0,85.051129,0.000,20037508.627,0.000,9467848.372
Specifications
- Format
- CSV
- Rows
- 9
- Columns
- name, longitude, latitude, x_3857, y_3857, x_4087, y_4087
- Source Epsg
- 4326
- Target Epsgs
- 3857, 4087
- Units
- degree in, metre out
- Rounding
- 3 decimal places (millimetre)
- Line Endings
- LF
- Header
- true
Testing contract
Reference control- Scenario
- Transform each source coordinate and compare with both target columns.
- Expected result
- All nine points match to the millimetre in both projections; x_3857 and x_4087 are identical for every row because the two projections share the same longitude formula.
What is a .csv file?
CSV (Comma-Separated Values) is a plain-text tabular format where rows are lines and fields are separated by commas, with quoting rules for values that contain delimiters, quotes, or newlines. It has no formal type system and depends on encoding and dialect conventions. It is the most portable format for tabular data exchange.
How to use this file
Use an example CSV to test parsers against quoting and embedded-delimiter edge cases, header handling, encoding detection, and import pipelines into databases or spreadsheets.
How to use this file for testing
“Reprojection Control Points — 4326 to 3857 and 4087” is a deterministic Novus Examples fixture for Geospatial, CSV parsing, Conversion testing. GeoJSON, GPX, and KML files with points, lines, polygons, and tracks — for testing map tools, route parsers, and geo importers.
Documented properties for this file: 9 rows · LF · CSV. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.
Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.
Geospatial fixtures publish one invented territory across formats, with the coordinate reference system and feature counts documented in specs. Convert or reproject and diff against the twin in the same group; edge-case geometries state exactly which assumption they are built to break.
Code examples
import pandas as pd
df = pd.read_csv("reprojection-control-points.csv")
print(df.head())
print(df.dtypes)Related files
- csvCoordinate Precision — Decimal Places to Metres ReferenceWhat each decimal place is actually worth on the ground, computed on a sphere of mean Earth radius at the territory's latitude. Longitude degrees are shorter than latitude degrees by the cosine of the latitude, which is why the two columns diverge.

- csvKestrel Bay Territory — CSV with a WKT Geometry ColumnAttributes plus a quoted WKT geometry column — the shape PostGIS `COPY`, DuckDB spatial and QGIS delimited-text imports expect. The geometry field contains commas, so it exercises quoted-field parsing as well as geometry decoding.

- csvKestrel Bay Towns — Longitude/Latitude CSVThe five towns as a plain CSV with separate longitude and latitude columns — the most common way point data actually arrives. Convert it to GeoJSON and diff against the Point features in the master to score column-order and axis-order handling.

- geojsonGeoJSON — Intentionally Invalid: Latitude Before LongitudeIntentionally invalid: the five towns with their coordinates written latitude-first. RFC 7946 fixes the order as longitude then latitude, and this is the mistake that arrives via an EPSG-URN-ordered source such as the GML twin in the territory subcategory.

- geojsonGeoJSON — Intentionally Invalid: Web Mercator Metres in a .geojson FileIntentionally invalid: Web Mercator metres inside a file that claims to be GeoJSON, with a legacy `crs` member as the only hint. RFC 7946 allows exactly one coordinate system, so this file is what a desktop GIS produces when someone exports a projected layer to GeoJSON without reprojecting it first.

- geojsonGeoJSON — Legacy 2008 `crs` Member (removed in RFC 7946)A FeatureCollection carrying the `crs` member from the 2008 GeoJSON specification. RFC 7946 removed it and fixed the CRS as WGS 84, so a modern reader should treat this as an ignorable foreign member — but plenty of exporters still write it and some readers still obey it.

Generated by generation/geospatial.py. Free for any use, no attribution required — license.