First Look at a Geospatial File: What to Check Before You Trust It

tool
geometry
bilingual
Upload a GeoJSON or a Shapefile and get an instant summary — feature count, geometry type, CRS, bounds, attributes, invalid/empty/duplicate geometries — in Python and R on the same map.
Published

September 5, 2026

Before you validate, fix, or check topology, it helps to know what you’re actually holding. A feature count in the thousands changes what checks are even practical. A CRS you didn’t expect explains a map that looks wrong before you’ve touched a single geometry. A handful of exact duplicates might be an import artifact, not a data-quality problem worth chasing.

This isn’t a repair tool and it isn’t a topology report — it’s the five-second first look that tells you which of those tools you actually need next.

Just want the summary, without the rest of the reading? Use the standalone tool — same engine, less prose.

1. Upload your file

A .geojson, or a shapefile: either as a single .zip, or as the individual .shp/.dbf/.shx files (and optionally .prj) selected together.

2. Why start with a summary?

Eight numbers, each answering a question you’d otherwise have to dig for:

  • Features — how many rows. Determines whether an O(n²) check (like the Topology Checker’s pairwise overlap/gap detection) is even practical to run.
  • Geometry type — Point, Line, Polygon, or a mix. Some checks only apply to one family; a “mixed” result is itself useful information.
  • CRS — the coordinate reference system the file claims to be in. Not verified against the actual coordinates here — that mismatch detection is a distinct, more involved check, planned as its own tool.
  • Bounds — the bounding box, in the file’s own CRS units. A bounding box in the thousands or millions instead of the -180..180 / -90..90 range is usually the first hint of a CRS problem, before any dedicated check runs.
  • Attributes — how many non-geometry columns, and their names. How much there is to a feature beyond its shape.
  • Invalid — geometries that fail the Simple Features validity rules. See Geometry validity for what that actually means and how to fix it.
  • Empty — geometries with no coordinates at all. Easy to miss in a raw file, and something naive code (yours or a library’s) can choke on silently.
  • Duplicates — exact repeats (identical coordinates), detected by comparing binary geometry representations, not a full topological equality check. Fast enough for a large file; the Topology Checker has the slower, more thorough version if you need it.

3. Shared map and summary

4. Inspect: summarize your file

Run the same summary in Python or R on the current data (your file uploaded above, or the example already loaded below).

5. Same spatial question, two languages

Python and R read the same numbers off the same engines, but the accessors differ:

Python (GeoPandas)

len(gdf)                  # feature count
gdf.geometry.geom_type    # per-feature geometry type
gdf.crs.to_string()       # CRS
gdf.total_bounds          # [minx, miny, maxx, maxy]
gdf.geometry.to_wkb()     # exact-match key for duplicate detection

R (sf)

nrow(data)                        # feature count
sf::st_geometry_type(data)        # per-feature geometry type
sf::st_crs(data)$input            # CRS
sf::st_bbox(data)                 # xmin, ymin, xmax, ymax
sf::st_as_text(sf::st_geometry(data))  # exact-match key

The CRS string is the one place they can genuinely disagree in formatting, not just vocabulary: st_crs()$input returns whatever string the file’s own CRS definition resolved to (often "EPSG:4326" for a clean case, but sometimes a full WKT string for a less common one), while GeoPandas’ .crs.to_string() goes through PyPROJ’s own formatting — same underlying CRS, not always the same displayed text. Worth knowing before assuming a mismatch between the two summary cards above means an actual data problem.

6. Load an example

The reusable cell pair above already loads a small dataset with one exact duplicate and one invalid geometry whenever nothing has been uploaded — click ▶ Run on both languages above to see it. This button swaps in a dataset with a deliberately unusual CRS instead, to see the bounds stat do its job:

Note

Web Mercator coordinates plotted at the same zoom level as geographic coordinates land far outside any sensible map view — that’s the “bounds in the hundreds of thousands” tell in practice, not just in the abstract. Actually correcting a CRS mismatch — reprojecting a file to match what you expect — is a separate, dedicated tool, planned as the CRS Inspector & Converter.

7. Where to next

A summary is a starting point, not an endpoint: