EnVar microschemas · class atlas
EnVar Microschemas — Umbrella Schema
LinkML microschemas for environmental exposure variables (EnVar). Initial scope: heat-related exposures (Tmax, WBGT, heat index, heat-wave flags) and the surrounding provenance metadata needed to load them into OMOP external_exposure with full reproducibility…
EnvironmentalExposureRecord
Environmental Exposure Record
A single environmental-exposure record sidecar: the complete metadata graph t...
What the record composes
CoreRequired for every valid record8 components
Variable IdentityVariableIdentity · via variable_identityThe identity and semantics of an environmental exposure variable — what physi...core · 18 fieldsSpatial ReferenceSpatialReference · via spatial_referenceSpatial provenance of an environmental exposure value: the native grid / foot...core · 12 fieldsTemporal ReferenceTemporalReference · via temporal_referenceTemporal provenance of an environmental exposure value: native temporal grain...core · 9 fieldsExposure ModelExposureModel · via exposure_modelThe model class that produced the values (interpolation, reanalysis, ML, stat...core · 11 fieldsData LayoutDataLayout · via data_layoutHow the companion data file (CSV / parquet) is laid out and how this record's...core · 13 fieldsSource DatasetSourceDataset · via source_datasetThe upstream gridded / station product the exposure values originate fromcore · 18 fieldsTool RunToolRun · via tool_runA single tool invocation that produced an output from one or more inputs: too...core · 17 fieldsLinkage MethodLinkageMethod · via linkage_methodHow a gridded environmental value gets attached to a patient: the resolution ...core · 21 fields
Conditionally coreRequired in specific contexts1 component
RecommendedStrongly encouraged3 components
Uncertainty and QualityUncertainty · via uncertaintyUncertainty and quality character of a value series: per-value uncertainty ty...recommended · 13 fieldsProvenance ChainProvenanceChain · via provenance_chainThe ordered list of all upstream `ToolRun`s whose outputs were inputs to this...recommended · 3 fieldsHealth-Layer LinkageHealthLayerLinkage · via health_layer_linkageHooks the sidecar uses to be findable from a downstream health-data layer (OM...recommended · 4 fields
OptionalInclude when available1 component
Worked variants
Concrete record subclasses pre-wired for a specific variable — the shapes a workshop dataset actually instantiates.
Full element index — every class, enum, type & slot
Classes
| Class | Description |
|---|---|
| AnyValue | An arbitrary passthrough object (open-ended key/value map) whose keys are not... |
| CodedValue | A value from a controlled vocabulary |
| DataLayout | How the companion data file (CSV / parquet) is laid out and how this record's... |
| DepositMetadata | Deposit-time slots required when the sidecar travels alongside a published FA... |
| DerivedHeatMetric | Methodology slots specific to derived heat metrics (WBGT, Heat Index, UTCI, a... |
| EnvironmentalExposureRecord | A single environmental-exposure record sidecar: the complete metadata graph t... |
| DailyMaxTemperatureRecord | Canonical record for daily maximum 2 m air temperature (Tmax) |
| DailyMinTemperatureRecord | Canonical record for daily minimum 2 m air temperature (Tmin) |
| ExtremeHeatDayFlagRecord | Canonical record for a daily binary extreme-heat-day flag, defined against a ... |
| WetBulbGlobeTemperatureOutdoorRecord | Canonical record for outdoor WBGT under the Liljegren 2008 formulation |
| EquationInput | A single physical-state input to a derived heat metric, recorded as a typed r... |
| ExposureModel | The model class that produced the values (interpolation, reanalysis, ML, stat... |
| HealthLayerLinkage | Hooks the sidecar uses to be findable from a downstream health-data layer (OM... |
| LinkageMethod | How a gridded environmental value gets attached to a patient: the resolution ... |
| MicroschemaDefinition | A metaclass for classes that conform to the Microschema profile |
| ModelAggregateUncertainty | Whole-model uncertainty summary — cross-validation metrics and the reference ... |
| ProvenanceChain | The ordered list of all upstream ToolRuns whose outputs were inputs to this... |
| Quantity | A numerical value with unit |
| SourceDataset | The upstream gridded / station product the exposure values originate from |
| SpatialReference | Spatial provenance of an environmental exposure value: the native grid / foot... |
| TemporalReference | Temporal provenance of an environmental exposure value: native temporal grain... |
| TimeInterval | A period between two timepoints |
| Timepoint | A point in time, potentially relative |
| ToolRun | A single tool invocation that produced an output from one or more inputs: too... |
| Uncertainty | Uncertainty and quality character of a value series: per-value uncertainty ty... |
| ValueMicroschemaDefinition | A microschema representing a typed value with optional unit/system |
| VariableIdentity | The identity and semantics of an environmental exposure variable — what physi... |
Enumerations
| Enumeration | Description |
|---|---|
| AddressPeriodAlignmentEnum | How the patient's location-over-time (the spatial axis of trajectory resoluti... |
| BiasCorrectionAppliedEnum | Whether and how bias correction has been applied |
| BufferAggregationEnum | Aggregation within a buffer |
| CalendarEnum | Calendar of the time axis |
| ClinicalDateAssignmentEnum | The clinical-side mirror of DayBoundaryConventionEnum (envar_temporal): whi... |
| ComparatorEnum | Comparator for quantity values |
| ConceptStatusEnum | Status of a variable's representation in the target health-data vocabulary na... |
| DataTypeEnum | The data type of an exposure value |
| DayBoundaryConventionEnum | Where the 24-hour day window starts |
| DepositRepositoryEnum | Repository hosting a FAIR deposit |
| EquationVariantEnum | Equation variant for a derived heat metric |
| ExposureModelTypeEnum | The class of model that produced the values |
| ExtractionMethodEnum | How a gridded value was extracted at a target location |
| GeocodingPrecisionEnum | Geocoder precision category, mirroring DeGAUSS `geocoder |
| HealthLayerTargetEnum | The downstream health-data layer a sidecar links into |
| HeatMetricFamilyEnum | Family of heat metric |
| HeatWaveThresholdDefinitionEnum | How the heat-wave threshold is defined |
| HomogenisationStatusEnum | For station-based products, the homogenisation status of values across the re... |
| IndoorOutdoorEnum | Indoor / outdoor regime for derived heat metrics |
| LagAlignmentEnum | Whether the values have been pre-aligned to a clinical event window in this E... |
| LinkageStrategyEnum | The spatial rule used to read an environmental value out of the exposure surf... |
| MissingDataHandlingEnum | How the source handles missing values |
| MissingReasonEnum | Controlled reasons that a slot value is missing |
| NullSemanticsEnum | The kind of "missing or zero" a per-value cell carries |
| PartialDayAttributionEnum | How boundary / transition days of the patient's trajectory (trip start / end,... |
| PhiStatusEnum | PHI content of the sidecar |
| PrivacyTransformationEnum | A privacy-protecting transformation applied to a linked location after the sp... |
| ProvenanceChainTerminusEnum | The kind of root of a provenance chain |
| SolarRadiationBasisEnum | Basis used for the solar-radiation input to a heat metric |
| SourceNativeFormatEnum | Format the source ships in |
| SpatialAggregationPreservationEnum | The quantity a spatial-aggregation operator holds invariant when a value is r... |
| TableOrientationEnum | How variables map onto columns in the companion data file |
| TargetGeographyTypeEnum | Geographic unit the exposure is attached to |
| TemporalAggregationMethodEnum | How sub-period values were aggregated |
| TemporalResolutionEnum | Native temporal grain of the source product |
| UncertaintyTypeEnum | Kind of per-value uncertainty |
Types
| Type | Description |
|---|---|
| Boolean | A binary (true or false) value |
| Curie | a compact URI |
| Date | a date (year, month and day) in an idealized calendar |
| DateOrDatetime | Either a date or a datetime |
| Datetime | The combination of a date and time |
| Decimal | A real number with arbitrary precision that conforms to the xsd:decimal speci... |
| Double | A real number that conforms to the xsd:double specification |
| Float | A real number that conforms to the xsd:float specification |
| Integer | An integer |
| Jsonpath | A string encoding a JSON Path |
| Jsonpointer | A string encoding a JSON Pointer |
| Ncname | Prefix part of CURIE |
| Nodeidentifier | A URI, CURIE or BNODE that represents a node in a model |
| Objectidentifier | A URI or CURIE that represents an object in the model |
| Sparqlpath | A string encoding a SPARQL Property Path |
| String | A character string |
| Time | A time object represents a (local) time of day, independent of any particular... |
| Uri | a complete URI |
| Uriorcurie | a URI or a CURIE |
Slots
| Slot | Description |
|---|---|
| address_period_alignment | How the patient's location-over-time (the spatial axis of trajectory resoluti... |
| bias_correction_applied | Whether and how bias correction has been applied |
| bias_correction_applied_missing_reason | Reason bias_correction_applied is null |
| calendar | Calendar of the time axis |
| cf_cell_methods | CF cell_methods string describing how the value summarises sub-period value... |
| chain_compatibility_assertions | Declarations that two chain steps are compatible (e |
| clinical_date_assignment_convention | The clinical-side mirror of day_boundary_convention (envar_temporal): which... |
| clinical_date_assignment_convention_missing_reason | Reason clinical_date_assignment_convention is null |
| code | The code value as a CURIE |
| code_label | Human-readable label for the code |
| code_system | The code system URI |
| cohort_size_anchored | Number of distinct persons this exposure record was extracted for |
| cohort_size_anchored_missing_reason | Reason cohort_size_anchored is null |
| comparator | Comparison operator (less than, greater than, etc |
| concept_mappings | Cross-references binding this variable to other vocabularies and ontologies, ... |
| concept_status | Status of this variable's coverage in the target health-data vocabulary (`exi... |
| container_image_digest | SHA256 of the container image actually used (not just the tag) |
| container_image_digest_missing_reason | Reason container_image_digest is null |
| container_image_repository | Container image repository, e |
| container_image_repository_missing_reason | Reason container_image_repository is null |
| crs | Coordinate reference system as an EPSG identifier or PROJ string |
| cv_r2 | Cross-validated R² for the model as a whole |
| cv_rmse | Cross-validated RMSE for the model as a whole |
| data_completeness_pct | Percent of (location, date) cells in the extracted window that have a non-mis... |
| data_completeness_pct_missing_reason | Reason data_completeness_pct is null |
| data_layout | Data-layout object binding this sidecar to the columns of the companion data ... |
| dataset_and_provenance | Where the values live and come from — the companion file's column layout, the... |
| datetime | Absolute timestamp |
| day_boundary_convention | Where the 24-hour day window starts |
| dcat_distribution_url | DCAT-compatible distribution URL for catalogue integration |
| dcat_distribution_url_missing_reason | Reason dcat_distribution_url is null |
| deposit_doi | DOI assigned by the deposit repository (e |
| deposit_doi_missing_reason | Reason deposit_doi is null (e |
| deposit_license_spdx | SPDX identifier of the license under which the derived exposure record (not... |
| deposit_metadata | FAIR-deposit metadata, present when the sidecar is intended to travel with a ... |
| deposit_redistribution_constraints_inherited | Constraints from any input source that pass through to the deposit |
| deposit_repository | Repository hosting the deposit |
| deposit_repository_missing_reason | Reason deposit_repository is null |
| derived_heat_metric | Heat-metric methodology, present when the variable is a derived heat metric —... |
| domain_of_use | Domains where this microschema is applicable |
| duration | Duration as alternative to start/end |
| equation_inputs | Typed per-input references for a multi-input derived metric (Heat Index from ... |
| equation_validity_range | Validity-range conditions for the equation, serialised as a JSON string |
| equation_validity_range_missing_reason | Reason equation_validity_range is null |
| equation_variant | For derived heat metrics, the equation variant used |
| equation_variant_missing_reason | Reason equation_variant is null |
| exposure_description | What was measured, for whom, where, when, and how — the generic scientific an... |
| exposure_model | The exposure-model object describing how values were produced |
| exposure_model_cross_validation_r2 | Model cross-validation R², where reported by the producer |
| exposure_model_cross_validation_r2_missing_reason | Reason exposure_model_cross_validation_r2 is null |
| exposure_model_ensemble_member_count | For ensemble products, the number of members |
| exposure_model_ensemble_member_count_missing_reason | Reason exposure_model_ensemble_member_count is null |
| exposure_model_inputs | Inputs to the model |
| exposure_model_known_biases | Free-text flags of known issues, e |
| exposure_model_paper_doi | DOI of the methods paper describing the model (Thornton et al |
| exposure_model_paper_doi_missing_reason | Reason exposure_model_paper_doi is null |
| exposure_model_type | The class of model that produced the values |
| extraction_buffer_m | Radius of any spatial buffer applied (e |
| extraction_buffer_m_missing_reason | Reason extraction_buffer_m is null |
| extraction_method | How a gridded value was extracted at the patient's coordinates |
| extraction_window_end | Actual end date the run extracted |
| extraction_window_start | Actual start date the run extracted |
| geocoding_precision_propagated | Quality category propagated from the upstream geocoder (DeGAUSS precision c... |
| geocoding_score_propagated | Geocoder score (0-1) propagated from the upstream geocoder so the exposure re... |
| geocoding_score_propagated_missing_reason | Reason geocoding_score_propagated is null |
| health_data_integration | How the record meets patient data and travels onward — the gridded-to-patient... |
| health_layer_link_field | Name of the field in the target health-data layer that carries `provenance_id... |
| health_layer_linkage | Downstream health-data-layer linkage hooks (OMOP, BDC, …) — see envar_health_... |
| health_layer_target | The downstream health-data layer this sidecar links into |
| heat_metric_family | The family of heat metric this variable represents |
| heat_wave_min_consecutive_days | Minimum-consecutive-days rule for heat-wave flags (commonly 2 or 3) |
| heat_wave_min_consecutive_days_missing_reason | Reason heat_wave_min_consecutive_days is null |
| heat_wave_threshold_definition | For heat-wave flags, the definition of the threshold (absolute, percentile-lo... |
| heat_wave_threshold_definition_missing_reason | Reason heat_wave_threshold_definition is null |
| heat_wave_threshold_specifier | Free-form specifier paired with heat_wave_threshold_definition to capture t... |
| indoor_outdoor | Indoor / outdoor regime |
| input_file_sha256 | SHA256 of the input file (CSV / parquet) |
| input_provenance_id | The provenance_id of the upstream sidecar that fully describes this input —... |
| input_role | The standard-name local token of this input's physical quantity (the same qua... |
| input_row_count | Number of rows in the input |
| input_source_short_code | Human-readable short code of the input's source product (e |
| interval_end | End of the interval |
| interval_start | Start of the interval |
| lag_alignment_applied | Whether and how values were lag-aligned to a clinical event |
| lag_alignment_applied_missing_reason | Reason lag_alignment_applied is null |
| lag_alignment_specifier | Free-form specifier paired with lag_alignment_applied to capture the concre... |
| linkage_buffer_aggregation_method | Aggregation method applied within the buffer (mean / max / median / area-weig... |
| linkage_buffer_aggregation_method_missing_reason | Reason linkage_buffer_aggregation_method is null |
| linkage_buffer_radius_m | Buffer radius in metres for buffer-aggregation strategies |
| linkage_buffer_radius_m_missing_reason | Reason linkage_buffer_radius_m is null |
| linkage_max_distance_to_station_m | Maximum distance to a station for nearest-station strategies; values beyond t... |
| linkage_max_distance_to_station_m_missing_reason | Reason linkage_max_distance_to_station_m is null |
| linkage_method | Linkage-method object — see envar_linkage |
| linkage_strategy | How a gridded value is attached to a patient location |
| linkage_working_crs | Coordinate reference system the point-to-cell join was actually executed in, ... |
| location | Spatial metadata specifying where the observation was made - geolocation, pla... |
| methodology | Information about how an observation was made - method, instrument, reagent k... |
| metric_temporal_aggregation_rule | For heat-wave flags, how multi-day exposures are stamped on individual days (... |
| metric_temporal_aggregation_rule_missing_reason | Reason metric_temporal_aggregation_rule is null |
| missing_data_handling_method | How the source handles missing values (e |
| missing_data_handling_method_missing_reason | Reason missing_data_handling_method is null |
| missing_reason | Controlled reason a nullable slot is null |
| missing_value_sentinel | The stored value that means "missing" in the source product's files, verbatim... |
| model_aggregate_uncertainty | Summary statistics for the model as a whole — cross-validation metrics and wh... |
| model_aggregate_uncertainty_missing_reason | Reason model_aggregate_uncertainty is null |
| native_spatial_resolution_descriptor | Human-readable label for the native resolution, e |
| native_spatial_resolution_m | Native spatial resolution of the source product in metres |
| native_units_ucum | UCUM unit of the values as the source product stores them, when that differ... |
| native_value_column | Name of a second column carrying the same values in the source's native uni... |
| native_value_offset | CF-style packing offset applied when decoding the source's stored integers to... |
| native_value_scale_factor | CF-style packing multiplier applied when decoding the source's stored integer... |
| null_semantics_column | Name of a per-value column carrying a null-semantics indicator drawn from `Nu... |
| null_semantics_column_missing_reason | Reason null_semantics_column is null |
| observation_result | The outcome of the observation type - answer, value, result, determination |
| observation_type | Question being asked, measurement being taken, quality being observed |
| offset | Offset from event (e |
| output_file_sha256 | SHA256 of the output file (CSV / parquet) |
| output_row_count | Number of rows in the output |
| partial_day_attribution_rule | How boundary / transition days of the patient's trajectory (trip start / end,... |
| partial_day_attribution_rule_missing_reason | Reason partial_day_attribution_rule is null |
| per_value_uncertainty_type | Kind of per-value uncertainty captured in the column named by `DataLayout |
| per_value_uncertainty_type_missing_reason | Reason per_value_uncertainty_type is null |
| per_value_uncertainty_units_ucum | Units of the per-value uncertainty in UCUM syntax |
| per_value_uncertainty_units_ucum_missing_reason | Reason per_value_uncertainty_units_ucum is null |
| percentile_reference_geographic_scope | Geographic scope over which the reference distribution was computed |
| percentile_reference_geographic_scope_missing_reason | Reason percentile_reference_geographic_scope is null |
| percentile_reference_period_end | End of the reference distribution |
| percentile_reference_period_end_missing_reason | Reason percentile_reference_period_end is null |
| percentile_reference_period_start | Start of the reference distribution used for percentile-based thresholds |
| percentile_reference_period_start_missing_reason | Reason percentile_reference_period_start is null |
| percentile_reference_seasonal_window | Seasonal window over which the reference was computed |
| percentile_reference_seasonal_window_missing_reason | Reason percentile_reference_seasonal_window is null |
| phi_status | Whether the sidecar carries any Protected Health Information |
| population_weighting_source | Census vintage used for population weighting (e |
| population_weighting_source_missing_reason | Reason population_weighting_source is null |
| privacy_transformation | Any privacy-protecting transformation applied to the linked location after ... |
| privacy_transformation_note | Free-text detail of the privacy transformation named in `privacy_transformati... |
| profile_version | Version of microschema profile this conforms to |
| provenance_chain | Ordered W3C-PROV-style chain of upstream tool runs — see envar_toolrun |
| provenance_chain_steps | Ordered list of upstream ToolRuns, from oldest to most recent, whose output... |
| provenance_chain_terminus_type | The kind of root of the chain |
| provenance_id | Stable identifier for this sidecar / record (ULID recommended) |
| quality_flag_column | Name of any per-value QA flag column |
| quality_flag_column_missing_reason | Reason quality_flag_column is null |
| quality_flag_vocabulary | Reference to the QA flag vocabulary (e |
| quality_flag_vocabulary_missing_reason | Reason quality_flag_vocabulary is null |
| quantity_unit | Unit (UCUM, UO, QUDT, etc |
| quantity_value | The numeric value |
| recommended_citation | One-line recommended citation derived from the slots above |
| record_bookkeeping | Sidecar bookkeeping — the schema version the record conforms to, its stable i... |
| relative_to_event | Event this is relative to |
| reported_in | DOI / citation where the aggregate uncertainty is reported |
| run_arguments | The exact argument map passed at invocation, serialised as a JSON string |
| run_duration_seconds | How long the run took, in seconds |
| run_environment | Host OS, Docker / podman version, R / Python version, key library versions, a... |
| run_log_excerpt | Last ~50 lines of the run log, where useful for debugging or audit |
| run_log_excerpt_missing_reason | Reason run_log_excerpt is null |
| run_timestamp_utc | When the run started (UTC) |
| schema_version | The version of the EnVar micro-schema this document conforms to |
| solar_radiation_basis | For WBGT / UTCI inputs, the basis used for solar radiation |
| solar_radiation_basis_missing_reason | Reason solar_radiation_basis is null |
| source_access_url | Landing-page URL for the dataset (not a download link, which rots) |
| source_acdd_attributes | Passthrough of ACDD (Attribute Convention for Data Discovery) global attribut... |
| source_acdd_attributes_missing_reason | Reason source_acdd_attributes is null |
| source_citation_apa | Full APA-style citation for the source dataset |
| source_citation_bibtex | BibTeX entry for the source dataset, machine-parseable |
| source_citation_bibtex_missing_reason | Reason source_citation_bibtex is null |
| source_dataset | Source dataset object — see envar_source |
| source_dataset_doi | DOI of the source dataset |
| source_dataset_doi_missing_reason | Reason source_dataset_doi is null |
| source_dataset_name | Full name of the source product, e |
| source_dataset_short_code | Short code keying into the EnVar source registry, e |
| source_dataset_spatial_extent | Human-readable spatial extent of the product, e |
| source_dataset_temporal_coverage | Source product temporal coverage as an ISO 8601 interval string ` |
| source_dataset_version | Source product version |
| source_homogenisation_status | For station-based products, whether values have been homogenised |
| source_homogenisation_status_missing_reason | Reason source_homogenisation_status is null |
| source_license_spdx | SPDX identifier of the source license, e |
| source_native_format | Format the source ships in |
| source_producer_institution | Producer institution, e |
| spatial_aggregation_preserves | What quantity the spatial-aggregation operator is meant to preserve when a ... |
| spatial_extent_bbox | Bounding box of the source product (not the extracted subset), as `[min_lon... |
| spatial_extent_descriptor | Human-readable description of the product extent, e |
| spatial_reference | Spatial reference object describing the native grid and extraction |
| standard_name | The standard-name identifier for the physical quantity, as a CURIE so the sch... |
| subject | Entity being measured, observed, or interviewed - person, animal, specimen, o... |
| subject_age | Age of the subject at this timepoint (e |
| subject_column | Name of the column carrying the opaque subject / cohort identifier the record... |
| table_orientation | Whether the companion file is wide (one column per variable) or long (one `va... |
| target_concept_id | Concept identifier for the variable in the vocabulary named by `target_concep... |
| target_concept_id_missing_reason | Reason target_concept_id is null |
| target_concept_vocabulary | The downstream health-data vocabulary that target_concept_id and `concept_s... |
| target_geography_type | Geographic unit the exposure value is attached to |
| temporal_aggregation_method | How the value summarises sub-period values |
| temporal_aggregation_window_seconds | Redundant with temporal_resolution but explicit for machine use; e |
| temporal_coverage_end | End of the source product's coverage |
| temporal_coverage_start | Start of the source product's full temporal coverage |
| temporal_reference | Temporal reference object describing resolution, aggregation, and day-boundar... |
| temporal_resolution | Native temporal grain of the values |
| temporality | Temporal metadata specifying when an observation was made |
| time_column | Name of the column carrying the observation date / timestamp (e |
| tool_description | One-line tool description (from the tool's dht env var or equivalent) |
| tool_name | Tool name, e |
| tool_run | The current ToolRun — see envar_toolrun |
| tool_version | Semver tool version |
| uncertainty | Uncertainty object — see envar_uncertainty |
| unit_conversion_formula | The conversion from the source's native representation to the values in the c... |
| units_display | Human-readable unit string for display purposes, e |
| units_ucum | The unit expressed in UCUM syntax, e |
| value_column | Name of the column carrying this record's exposure values, e |
| value_data_type | The data type of the stored exposure value |
| value_range_plausible_max | Physical / domain upper bound for plausible values (e |
| value_range_plausible_min | Physical / domain lower bound for plausible values (e |
| value_uncertainty_column | Name of the column carrying per-value uncertainty (e |
| value_uncertainty_column_missing_reason | Reason value_uncertainty_column is null |
| variable_column | For long orientation: name of the column that discriminates variables (e |
| variable_identity | The variable identity object — what physical quantity is being captured |
| variable_key | For long orientation: the value in variable_column that selects this record... |
| variable_label | Human-readable label, e |
| variable_name | Short machine-readable name for the variable, usually the name the upstream t... |
| variable_specific_extensions | Methodology blocks that only apply to particular variable families — present ... |
| wind_speed_measurement_height_m | For WBGT and UTCI inputs, the wind-speed measurement height in metres |
| wind_speed_measurement_height_m_missing_reason | Reason wind_speed_measurement_height_m is null |