{
    "$defs": {
        "GeoGeometry": {
            "additionalProperties": false,
            "description": "The geographic point object uses the default units (but not the properties) from the [DCMI point scheme](https://www.dublincore.org/specifications/dublin-core/dcmi-point/) and avoids optional representation in non-standard units. It consists of an array with at least 2 ordered numbers for\n- longitude/Easting (decimal degrees) - latitude/Northing (decimal degrees) - optionally altitude/elevation (in meters above/below sea level)\nGeoJSON uses the World Geodetic System of 1984 with units of decimal degrees as described in [RFC 7946](https://datatracker.ietf.org/doc/html/rfc7946).\nIn case of a conflict `GeoGeometry` takes precedence over `GeoLabels`.\n",
            "properties": {
                "coordinates": {
                    "description": "An array of 2 (longitude, latitude) or 3 (longitude, latitude, altitude) values.\n",
                    "examples": [
                        [
                            8.55,
                            47.37
                        ],
                        [
                            86.925026,
                            27.98785,
                            8848.86
                        ]
                    ],
                    "items": {
                        "format": "float",
                        "type": "number"
                    },
                    "maxItems": 3,
                    "minItems": 2,
                    "type": "array"
                },
                "type": {
                    "const": "Point"
                }
            },
            "required": [
                "type",
                "coordinates"
            ],
            "type": "object"
        },
        "GeoLabels": {
            "additionalProperties": true,
            "description": "GeoLabels represent an instance of the GeoJSON `properties` object. The parameters provide additional information for the interpretation of the location parameters.\nIn case of a conflict `GeoGeometry` takes precedence over `GeoLabels`.",
            "properties": {
                "ISO3166alpha2": {
                    "description": "The optional ISO 3166-1 alpha-2 code for the country the location maps to.     ",
                    "examples": [
                        "US",
                        "CH"
                    ],
                    "type": "string"
                },
                "ISO3166alpha3": {
                    "description": "The optional ISO 3166-1 alpha-3 code for the country the location maps to.     ",
                    "examples": [
                        "USA",
                        "CHE"
                    ],
                    "type": "string"
                },
                "ISO3166sub": {
                    "description": "The optional ISO 3166-2 code for the principal subdivision (e.g. province or state) of the country the location maps to.",
                    "examples": [
                        "US-WA",
                        "CH-ZH"
                    ],
                    "type": "string"
                },
                "city": {
                    "description": "The optional name of the city the point location maps to. While this is a commonly used for point locations, it should be considered secondary to the `geometry` values in interpreting the geographic location.",
                    "type": "string"
                },
                "country": {
                    "description": "The optional name of the country the location maps to, for sanity checks and procedural convenience (see notes for \"city\").",
                    "examples": [
                        "Switzerland"
                    ],
                    "type": "string"
                },
                "label": {
                    "examples": [
                        "Heidelberg, Germany",
                        "Gainesville, FL, United States of America",
                        "Zurich, Switzerland",
                        "Str Marasesti 5, 300077 Timisoara, Romania"
                    ],
                    "type": "string"
                },
                "precision": {
                    "description": "Used together with coordinate annotation, precision represents an optional label describing the precision that can be inferred from the coordinates. For a precision level of \"city\", coordinates would have to be interpreted as representing any possible location within the city's administrative boundaries, not necessarily at the exact position of the point coordinates. The `precision` parameter can be used to indicate an obfuscation of the coordinates, e.g. for privacy protection.\n",
                    "examples": [
                        "city"
                    ],
                    "type": "string"
                }
            },
            "type": "object"
        }
    },
    "$id": "https://progenetix.org/services/schemas/GeoLocation/v2025-08-26",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "additionalProperties": false,
    "description": "A GeoLocation object represents a geographic location formatted as a *GeoJSON feature*. The format is compatible with [RFC 7946](https://datatracker.ietf.org/doc/html/rfc7946), while (currently) imiting its scope to features of type \"Point\". Also, the schema defines some optional parameters compatible with the `GeoJSON Feature` `properties` wrapper object. Examples could be:   * an address, e.g. of a lab performing an analysis * provenance of an individual, obfuscated to a larger order administrative\n  entity (Suffolk, U.K.)\n* a lat/long position where an environmental sample was collected * altitude/elevation MAY be included as an optional/third element.",
    "properties": {
        "geometry": {
            "$ref": "#/$defs/GeoGeometry"
        },
        "properties": {
            "$ref": "#/$defs/GeoLabels"
        },
        "type": {
            "const": "Feature"
        }
    },
    "required": [
        "type",
        "geometry"
    ],
    "title": "GeoLocation",
    "type": "object"
}