View on GitHub

CovidJSON

Standards based GeoJSON data model for infection data

A GeoJSON data model for exchanging data for viral infection tests, contact events used for contact tracing and regional infection statistics. The model is based on OGC/ISO Observations & measurements Standard (OGC O&M, ISO 19156) concepts. Created specifically for recording and exchanging data on SARS-CoV-2 infection tests, but likely applicable also to describing test data for detecting other infectious diseases too.

The Observations and measurements defines a conceptual model for describing observation events and their results as geospatial features. This specification uses an early draft proposal version of the ISO 19156 Edition 2 data model currently under preparation in the OGC O&M Standards Working Group. The O&M GeoJSON mapping follows the proposed O&M GeoJSON encoding profile by Ilkka Rinne.

The CovidJSON provides a data model for two primary epidemia related use cases:

For up-to-date SARS-CoV-2 regional statistics from Finland in CovidJSON format see CovidJSON Data.

Initially developed by Ilkka Rinne, the chair of the OGC Observations and measurements Standards Working Group (O&M SWG) and leader of the ISO/Technical committee 211 project for revising ISO 19156. This work was done as part of the Spatineo contributions for the CoronaGIS Finland, the Finnish task expert force for leveraging GIS for helping the Finnish governmental organisations, communities and companies in mitigating the impact of the COVID-19 pandemia in 2020.

Example 1 (Individual SARS-CoV-2 test)

{
    "type" : "Feature",
    "id": "63d55408-39a1-4284-b413-9afb1aa86b52",
    "geometry": {
        "type": "Point",
        "coordinates": [ 24.93218, 60.19897 ]
    },
    "properties": {
        "featureType": "TruthObservation",
        "phenomenonTime": "2020-03-18T12:05:00Z",
        "resultTime": "2020-03-20T12:01:25Z",
        "procedureName": "SARS coronavirus 2 RNA [Presence] in Respiratory specimen by NAA with probe detection",
        "procedureReference": "https://loinc.org/94500-6/",
        "observedPropertyTitle": "SARS-CoV-2",
        "observedProperty": "http://snomed.info/id/840533007",
        "observerName": "Digital PCR#1, HUSLAB Kamppi",
        "platformName": "HUSLAB - Laboratory of virology and immunology",
        "platformReference": "https://korona.thl.fi/tests/api/collections/facilities/items/0f4d84ec-dabf-44c8-b133-973d80cbbed2",
        "proximateFeatureOfInterestName": "Nasopharyngeal swab sample",
        "proximateFeatureOfInterestReference": "https://korona.thl.fi/tests/api/collections/samplings/items/bfed92c2-dca6-4ac0-9b4e-9ceb4ff90f42",
        "ultimateFeatureOfInterestReference": "https://korona.thl.fi/tests/api/collections/subjects/items/52da6d1b-1fa7-47ee-8044-ae4851b4d3a5",
        "result": true
    }
  }

Example 2 (Infection statistics)

{
    "type" : "Feature",
    "id": "f1a63a4f-d3b5-4b24-963f-124834290b97",
    "geometry": {
        "type": "Point",
        "coordinates": [ 24.93218, 60.19897 ]
    },
    "properties": {
        "featureType": "MeasureObservation",
        "phenomenonTimeStart": "2020-03-18T00:00:00+02:00",
        "phenomenonTimeEnd": "2020-03-18T23:23:59+02:00",
        "stimulusTime": "2020-03-20T00:00:00+02:00",
        "resultTime": "2020-03-20T00:00:32+02:00",
        "procedureName": "Spatial analysis of new infections by residential area of the tested subjects",
        "procedureReference": "https://korona.thl.fi/tests/procedure/new-verified-infections-in-residential-area",
        "observedPropertyTitle": "Number of new SARS-CoV-2 infections",
        "observedProperty": "https://korona.thl.fi/tests/quantity/SARS-CoV-2-new-infections",
        "observerName": "https://thl.fi/",
        "ultimateFeatureOfInterestName": "Pasila, Helsinki, Finland",
        "ultimateFeatureOfInterestReference": "https://sws.geonames.org/642554/about.rdf",
        "result": 56
    }

More data examples are available under examples.

Note: all data contained in the examples folder is fictious. For up-to-date official information on the COVID-19 situation in Finland, see THL COVID-19 latest updates

Infection tests and contact tracing

These feature types support data exchange about individual tests carried out (positive or negative) on a test subject and about events time (and optionally space) when a subject has been known to be in close or proximate contact with another subject. The subjects have a unique identifier (in most cases not traceable to an actual person), and may have some basic properties (sex, age, place of residence).

The contact event would typically be used in scenarios where there is a positive test result for the infection for a subject, and there is a need to trace close or proximate contacts the subject has had with other subjects which may have caused the infection to spread. The ContactEvent modelled here may be used both for known proximate contacts within a closed or limited space during a specific time period (the geometry of the space optionally provided), or contacts recorded by proximity sensing devices, geofencing or remote sensing (the point of the closest measured inter-subject distance as the geometry optionally provided with proximity limit radius). The proximity limit and the duration of the event also give a crude estimate of the relative average speed difference of the subjects during the event (stopped to chat, or passed-by while jogging).

Note: In cases where the location of the contact event is not recorded / provided for privacy reasons, the ContactEvent geometry property should given with type “Polygon” and an empty coordinates property be as follows:

{
    "type" : "Feature",
    "id": "fcdcb386-e6e2-4be7-ab8c-0928992456a6",
    "geometry": {
        "type": "Polygon",
        "coordinates": [ ]
    },
    "properties": {
        "featureType": "ContactEvent",
        ...
    }
}

This is inline with how the null geometries are recommended to be defined in GeoJSON RFC 7946, section 3.1 “Geometry object”:

o A GeoJSON Geometry object of any type other than “GeometryCollection” has a member with the name “coordinates”. The value of the “coordinates” member is an array. The structure of the elements in this array is determined by the type of geometry. GeoJSON processors MAY interpret Geometry objects with empty “coordinates” arrays as null objects.

Single testing event feature (O&M TruthObservation)

GeoJSON property Description Example value
geometry The representative point location of the place of residence of the tested subject  
featureType O&M Observation type, always TruthObservation “TruthObservation”
phenomenonTime Time when observed phenomenon was happening, here the time when the sample was taken “2020-03-18T12:05:00Z”
resultTime Time of the recording or making the Observation result available, here the time when the infection result (true/false) was available/recorded “2020-03-19T13:01:25Z”
procedureName Name of the method used for creating the Observation “SARS coronavirus 2 RNA [Presence] in Respiratory specimen by NAA with probe detection” or “Medical diagnosis”
procedureReference Reference to the description of the method. Primary importance as an identifier of the various test methods “https://loinc.org/94500-6/”
observedPropertyTitle Title of the observed property, here the infection kind “SARS-CoV-2 infection”
observedProperty Reference to the description of the observed property “http://snomed.info/id/840533007”
observerName Kind of the sensor / analysis instrument / person acting creating the result from the sample “Acme PCR Analyzer 2000” or “medical doctor”
platformName Name of the entity hosting the Observer “HUSLAB - Laboratory of virology and immunology”
platformReference Reference to the description of the entity hosting the Observer (points to MedicalFacility) “https://korona.thl.fi/tests/api/collections/facilities/items/0f4d84ec-dabf-44c8-b133-973d80cbbed2”
proximateFeatureOfInterestName Name of the sampling used “Nasopharyngeal swab sample”
proximateFeatureOfInterestReference Reference to the description of the sampling used (points to Sampling) “https://korona.thl.fi/tests/api/collections/samplings/items/bfed92c2-dca6-4ac0-9b4e-9ceb4ff90f42”
ultimateFeatureOfInterestReference Reference to the description of the ultimate target of the Observation, here the person / animal tested for (points to the Subject) “https://korona.thl.fi/tests/api/collections/subjects/items/52da6d1b-1fa7-47ee-8044-ae4851b4d3a5”
result The result of the test, here true if infection was detected and false if it was not true

MedicalFacility feature

GeoJSON property Description Example value
geometry The point location of the facility  
featureType Feature type, always MedicalFacility “MedicalFacility”
name Name of the facility “HUSLAB - Laboratory of virology and immunology”
city Name if the city where the facility is located in “Helsinki”
level1AdministrativeUnit Name if the region within the country where the facility is located in “Uusimaa”
country Name if the country where the facility is located in “Finland”
locationReference Reference to location of the facility “https://www.geonames.org/646253/about.rdf”

Sampling feature

GeoJSON property Description Example value
geometry The point location of the place where the sampling was done  
featureType Feature type, always Sampling “Sampling”
samplingFacilityName Name of the facility where the sample was taken “HUSLAB - Kamppi”
samplingFacilityReference Reference to the description of the facility where the sample was taken (points to MedicalFacility) “https://korona.thl.fi/tests/api/collections/facilities/items/d9a1ba35-c8af-4d0d-94b7-1e314f27d7aa”
sampleTypeName Name for the kind of the sample captured during sampling “Nasopharyngeal swab”
sampleTypeReference Identifier for the kind of the sample captured during sampling http://snomed.info/id/258500001
sampledFeatureReference Reference to the description of the subject of the sampling, here the person / animal tested for (points to the Subject) “https://korona.thl.fi/tests/api/collections/subjects/items/52da6d1b-1fa7-47ee-8044-ae4851b4d3a5”
samplingTime Time when the sample was taken “2020-03-18T12:05:00Z”

Subject feature

GeoJSON property Description Example value
geometry The point location of the place of residence of the subject  
featureType Feature type, always Subject “Subject”
species Name of the species tested “human”
ageYears Age of the test subject in years 65
sex Biological sex of the test subject “male”
placeOfResidenceName Name of the place of residence of the test subject “Pasila, Helsinki, Finland”
placeOfResidenceReference Reference to the description of the place of residence of the test subject “https://sws.geonames.org/642554/about.rdf”

ContactEvent feature

GeoJSON property Description Example value
geometry The point location or geometry of the place of the recorded a close or proximate contact with another subject. Provided with an empty coordinates array if no location is given  
featureType Feature type, always ContactEvent “ContactEvent”
enterTime Beginning of the time period where the subjects were in proximate contact with each other “2020-03-18T12:05:03Z”
exitTime End of the time period where the subjects were in proximate contact with each other “2020-03-18T12:05:31Z”
proximityLimit Upper limit of the inter-subject distance determined as a proximate contact in meters 20
minimumDistance Minimum recorded or approximated distance in meters from the other subject during the contact, if available 0.7
distanceAccuracy The accuracy of the minimum distance during the contact in meters 0.5
subjectReference Reference to the subject recording the contact or upstream in contact tracing chain (points to Subject) “https://korona.thl.fi/tests/api/collections/subjects/items/52da6d1b-1fa7-47ee-8044-ae4851b4d3a5”
contactedSubjectReference Reference to the subject downstream in contact tracing chain (points to Subject) “https://korona.thl.fi/tests/api/collections/subjects/items/b2edfb3b-3960-421f-a7f5-1fd8f7f9ed3d”

Regional infection statistics

New daily infections per region feature (O&M MeasureObservation)

GeoJSON property Description Example value
geometry The representative point location or polygon geometry of the residential area  
featureType O&M Observation type, always MeasureObservation “MeasureObservation”
phenomenonTimeStart Beginning of the sample collection time period over which the statistics is calculated “2020-03-18T00:00:00+02:00”
phenomenonTimeEnd End of the sample collection time period over which the statistics is calculated “2020-03-18T23:23:59+02:00”
stimulusTime Time of the triggering the Observation creation, here when the analysis started “2020-03-20T00:00:00+02:00”
resultTime Time of the recording or making the Observation result available, here the time when the static spatial analysis result was recorded “2020-03-20T00:00:32+02:00”
procedureName Name of the method used for creating the Observation “Spatial analysis of new lab verified infections by residential area of the tested subjects”
procedureReference Reference to the description of the method. Primary importance as an identifier of the various test methods “https://korona.thl.fi/tests/procedure/new-verified-infections-in-residential-area”
observedPropertyTitle Title of the observed property, here the infection kind “Number of new SARS-CoV-2 infections”
observedProperty Reference to the description of the observed property “https://korona.thl.fi/tests/quantity/SARS-CoV-2-new-infections”
observerName Organization responsible for the analysis “https://thl.fi/”
ultimateFeatureOfInterestName Name of the ultimate target of the Observation, here the area of residence of a subset of tested subjects “Pasila, Helsinki, Finland”,
ultimateFeatureOfInterestReference Reference to the description of the ultimate target of the Observation, here the area of residence of a subset of tested subjects “https://sws.geonames.org/642554/about.rdf”
result The result of the observation, here the number of new infections in the population living within the residential area during the specified sample collection time period 56

Daily infection timeseries feature (O&M MeasureTimeseriesObservation)

The change in the number of positive tests over time can also be of daily test results can also be included as the results of area specific observations. This is handy when results are visualized on a timeline or chart. The array valued timeStep and result properties do require a bit more fom the interpreting code that the simple values.

GeoJSON property Description Example value
geometry The representative point location or polygon geometry of the residential area  
featureType O&M Observation type, always MeasureTimeseriesObservation “MeasureTimeseriesObservation”
phenomenonTimeStart Beginning of the sample collection time period over which the daily statistics is calculated “2020-02-24T00:00:00+02:00”
phenomenonTimeEnd End of the sample collection time period over which the daily statistics is calculated “2020-03-01T23:23:59+02:00”
stimulusTime Time of the triggering the Observation creation, here when the analysis started “2020-03-20T00:00:00+02:00”
resultTime Time of the recording or making the Observation result available, here the time when the static spatial analysis result was recorded “2020-03-20T00:00:32+02:00”
procedureName Name of the method used for creating the Observation “Spatial analysis of new lab verified infections by residential area of the tested subjects. Results aggregated by day of taking the sample”
procedureReference Reference to the description of the method. Primary importance as an identifier of the various test methods “https://korona.thl.fi/tests/procedure/new-verified-infections-in-residential-area-daily”
observedPropertyTitle Title of the observed property, here the infection kind “Number of new SARS-CoV-2 infections”
observedProperty Reference to the description of the observed property “https://korona.thl.fi/tests/quantity/SARS-CoV-2-new-infections”
observerName Organization responsible for the analysis “https://thl.fi/”
ultimateFeatureOfInterestName Name of the ultimate target of the Observation, here the area of residence of a subset of tested subjects “Helsinki and Uusimaa Hospital District, Finland”,
ultimateFeatureOfInterestReference Reference to the description of the ultimate target of the Observation, here the area of residence of a subset of tested subjects  
timeStep Array of date and time entries for the points in the time series [ “2020-02-24T23:59:59Z”, “2020-02-25T23:59:59Z”, “2020-02-26T23:59:59Z”, “2020-02-27T23:59:59Z”, “2020-02-28T23:59:59Z” “2020-02-29T23:59:59Z”, “2020-03-01T23:59:59Z” ]
result The result of the observation, here array of number of new infections for each point in time included in the series [ null, 0, null, 1, 2, 1, 1 ]