GML 3.2 — MultiSurface With an Interior Ring
GML calls a multipolygon a MultiSurface and its parts surfaceMembers, and nests exterior and interior rings under named elements rather than relying on ring order. This feature holds the holed lake and a solid parcel in one geometry, which is the shape a WFS response usually takes.
<?xml version="1.0" encoding="UTF-8"?>
<kb:FeatureCollection xmlns:kb="https://examples.novusstreamsolutions.com/ns/kestrel-bay" xmlns:gml="http://www.opengis.net/gml/3.2" gml:id="fc-multisurface">
<gml:boundedBy>
<gml:Envelope srsName="urn:ogc:def:crs:EPSG::4326">
<gml:lowerCorner>47.01 -12.56</gml:lowerCorner>
<gml:upperCorner>47.069 -12.452</gml:upperCorner>
</gml:Envelope>
</gml:boundedBy>
<kb:featureMember>
<kb:WaterAndLand gml:id="ms-1">
<kb:name>Wither Lake and Harbour Yard</kb:name>
<kb:extent>
<gml:MultiSurface gml:id="ms-geom" srsName="urn:ogc:def:crs:EPSG::4326">
<gml:surfaceMember>
<gml:Polygon gml:id="ms-lake">
<gml:exterior><gml:LinearRing><gml:posList srsDimension="2">47.04 -12.52 47.04 -12.495 47.053 -12.488 47.061 -12.506 47.052 -12.529 47.04 -12.52</gml:posList></gml:LinearRing></gml:exterior>
<gml:interior><gml:LinearRing><gml:posList srsDimension="2">47.048 -12.51 47.0525 -12.511 47.053 -12.504 47.047 -12.503 47.048 -12.51</gml:posList></gml:LinearRing></gml:interior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon gml:id="ms-parcel">
<gml:exterior><gml:LinearRing><gml:posList srsDimension="2">47.06 -12.49 47.06 -12.474 47.069 -12.474 47.069 -12.49 47.06 -12.49</gml:posList></gml:LinearRing></gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</kb:extent>
</kb:WaterAndLand>
</kb:featureMember>
</kb:FeatureCollection>
Specifications
- Format
- GML 3.2
- Features
- 1
- Surface Members
- 2
- Interior Rings
- 1
- Srs Name
- urn:ogc:def:crs:EPSG::4326
- Coordinate Order
- latitude longitude (URN axis order)
- Geometry Element
- gml:MultiSurface / gml:surfaceMember
- Encoding
- UTF-8
- Line Endings
- LF
Testing contract
Expected to pass- Scenario
- Convert the feature to a GeoJSON MultiPolygon.
- Expected result
- A MultiPolygon with two members is produced; the first keeps its interior ring and the rings arrive in exterior-then-interior order regardless of their winding in the source.
What is a .gml file?
GML (Geography Markup Language) is the OGC's XML grammar for geographic features. Features carry typed properties and geometry elements such as gml:Point, gml:LineString, gml:Polygon, and their aggregates, with coordinates in gml:posList or gml:coordinates and the coordinate reference system named by an srsName attribute. It is the payload format of WFS services and the base of several national and INSPIRE data standards.
How to use this file
Use an example .gml file to test GML parsers and XML-based GIS pipelines, checking namespace handling, srsName resolution including the axis-order rules that differ between GML versions, and conversion to GeoJSON or shapefile.
How to use this file for testing
“GML 3.2 — MultiSurface With an Interior Ring” is a deterministic Novus Examples fixture for Geospatial, Conversion testing, JSON parsing. 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: UTF-8 · LF · GML 3.2. 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.
Related files
- geojsonConvert v2 Shapefile Expected GeoJSONGeoJSON semantic target for the five-town shapefile set, preserving point order, CODE/NAME/POP/FOUNDED attributes, and longitude/latitude coordinates; the omitted .cpg is safe because every copied DBF value is ASCII. Stable P8 artifact p8-convert-shapefile-geojson.

- geojsonGeoJSON — Mixed-Geometry FeatureCollectionAll seven RFC 7946 geometry types in a single FeatureCollection. Formats with a single-geometry-type-per-layer model — shapefile, most database tables — cannot hold this in one layer, so it is the fixture that reveals how a converter splits or refuses it.

- geojsonGeoJSON — Three-Element Positions With AltitudeFour positions with a third element, which RFC 7946 defines as height in metres above the WGS 84 ellipsoid. Two-dimensional pipelines commonly truncate the third element without saying so, and this file is what proves whether yours does.

- geojsonGeoJSON Geometry — LineStringA one-feature FeatureCollection holding the four-vertex Coast Road, so a reader can be exercised on LineString in isolation. Coordinates come from the Kestrel Bay territory, so the same shape appears again in every other format in this category.

- geojsonGeoJSON Geometry — MultiLineStringA one-feature FeatureCollection holding all three roads as one geometry, so a reader can be exercised on MultiLineString in isolation. Coordinates come from the Kestrel Bay territory, so the same shape appears again in every other format in this category.

- geojsonGeoJSON Geometry — MultiPointA one-feature FeatureCollection holding three harbour buoys, so a reader can be exercised on MultiPoint in isolation. Coordinates come from the Kestrel Bay territory, so the same shape appears again in every other format in this category.

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