API reference

Index

Public API

EarthData.auth_headers — Method
auth_headers(; bearer=EarthData.token()) -> Vector{Pair{String,String}}
auth_headers(auth::Auth) -> Vector{Pair{String,String}}

Authorization: Bearer header for an Earthdata Login token, for clients that set their own headers rather than relying on .netrc.

Empty for a :netrc or :anonymous Auth: curl and Downloads read .netrc themselves, and an anonymous request carries no header at all.

source
EarthData.build_request — Method
build_request(R::Type; kwargs...) -> R

The request kwargs describe, with a misspelled keyword named rather than listed among all of R's fields, which is what Base.@kwdef's own MethodError would do.

A QueryParams keyword is also accepted, and belongs to query_params rather than to the request.

source
EarthData.check_track — Method
check_track(request::GranuleRequest)

Check passes against cycle. A pass number identifies a granule only within a cycle, so CMR requires exactly one cycle alongside and otherwise answers "Cycle value must be provided when searching with passes".

source
EarthData.classifying_requester — Function
classifying_requester(inner=HTTP.request, context="CMR search")

Wrap a requester (as accepted by request, granules and collections) so a temporary status throws TransientError instead of being turned into a plain ErrorException by parse_cmr_error.

Only temporary statuses are intercepted. The rest are passed through untouched, so parse_cmr_error's reading of CMR's errors array is still what the caller sees.

granules(short_name="MCD43A3", version="061", requester=classifying_requester())
source
EarthData.cmr_convert — Method
cmr_convert(T::Type, value)

value as the field type T, or an ArgumentError describing what T accepts.

These methods describe the family only. convert_field adds the field name and its docstring, which Base.convert has no way to see.

source
EarthData.cmr_pairs — Method
cmr_pairs(param::Symbol, value) -> Vector{Pair{String,Any}}

The query parameters value becomes for param, dispatching on the stored field type.

A pair vector rather than one value, because passes becomes several indexed parameters (passes[0][pass], passes[0][tiles], …) where every other family becomes one.

source
EarthData.cmr_query — Method
cmr_query(request::AbstractRequest; page_num, page_size, extra) -> Vector{Pair{String,Any}}

The wire form of request: every field that is set, converted by its type, plus the paging and formatting parameters extra carries from query_params.

Pairs rather than a Dict, since passes becomes several indexed parameters (passes[0][pass], passes[0][tiles], …) rather than one value, and HTTP.URIs.escapeuri encodes a pair vector correctly where a nested Dict collapses to passes=0=pass=1.

source
EarthData.cmr_spatial — Method
cmr_spatial(param::Symbol, value)

Convert value into the string CMR expects for the spatial parameter param. Strings and nothing pass through; geometries are converted; anything else raises an ArgumentError naming what param accepts.

source
EarthData.collections — Method
collections(; keyword=value, ...) -> Vector{CollectionSchema.UMM_C}

Search for collections using NASA EarthData Search.

Each keyword is a CMR collection search parameter; see CollectionRequest for what they are and what each one accepts, and QueryParams for the paging keywords.

source
EarthData.convert_field — Method
convert_field(R::Type, name::Symbol, value)

value as the name field of request R, or an ArgumentError naming the field and quoting its docstring.

The field name is not an argument of Base.convert, which receives only the field type and the value, so naming the parameter has to happen here rather than in cmr_convert — whose methods describe a family shared by many fields.

source
EarthData.credentials — Method
credentials(; machine="urs.earthdata.nasa.gov") -> Vector{Auth}

Every Earthdata credential available, in the order they should be tried:

  1. ENV["EARTHDATA_TOKEN"]
  2. ~/.edl_token
  3. ~/.netrc
  4. anonymous

The anonymous entry is always last and always present, so this never throws and never returns empty: much of what CMR indexes is public, and refusing to proceed without a credential would fail those downloads for no reason.

More than one entry is returned on purpose. A bearer token that has expired will be rejected even though a working .netrc sits behind it, and curl does not fall back on its own, so download retries with the next entry.

source
EarthData.data_urls — Method
data_urls(item; scheme=:https) -> Vector{String}

URLs of the granule's data file(s), i.e. the related URLs typed "GET DATA".

Records commonly carry several related URLs that are not the data: a DOI landing page, a metadata sidecar, browse imagery, a cloud-credentials endpoint. Filtering on the scheme alone does not separate those from the file, so prefer this over https_urls when what you want is something to download. Note the S3 copy of the same file is typed "GET DATA VIA DIRECT ACCESS" and so is not returned; use urls(item; scheme=:s3, type="GET DATA VIA DIRECT ACCESS") for that.

source
EarthData.error_status — Method
error_status(err) -> Int

The HTTP status err carries, or 0 when it carries none.

The exception type alone does not say whether a failure was temporary. Downloads.RequestError is thrown for both kinds: a transport fault carries a libcurl code with response.status == 0, while a plain HTTP error status carries code == CURLE_OK and the status in response.status. A 503 worth retrying and a 403 that never will be are the same type, so the status has to be read rather than inferred.

source
EarthData.fielddocs — Method
fielddocs(R::Type) -> Dict{Symbol,Any}

The per-field docstrings of R, so an error can say what the parameter means as well as what it accepts. Empty if the struct carries no docstring, which is where Julia records them.

source
EarthData.geointerface_geomtype — Method
geointerface_geomtype(trait) -> Type

The UMM type that trait converts to, for GeoInterface.convert(EarthData, geom).

Granule types, since a search returns granules far more often than collections. The two modules generate field-identical geometry structs and cmr_spatial sends either as the same text, so the choice only shows in the returned type; name EarthData.CollectionSchema to get the other.

source
EarthData.granule_size — Method
granule_size(granule; default_unit="MB") -> Union{Int,Nothing}

Size of a granule in bytes, from DataGranule.ArchiveAndDistributionInformation, or nothing when the record does not report one.

SizeInBytes is used when present. Otherwise Size is converted using its SizeUnit — Size is unit-less on its own, and providers do report units other than bytes, so reading the number without the unit is how a megabyte figure gets mistaken for a byte count. A record that gives Size with no SizeUnit is read as default_unit, which is what the DAACs mean in practice; pass default_unit explicitly if a provider differs. A SizeUnit of "NA" is not a unit, so such an entry is skipped rather than guessed at.

Sizes of multiple files are summed, since together they are the granule.

source
EarthData.granules — Method
granules(; keyword=value, ...) -> Vector{GranuleSchema.UMM_G}

Search for granules using NASA EarthDataSearch.

Each keyword is a CMR granule search parameter; see GranuleRequest for what they are and what each one accepts, and QueryParams for the paging keywords.

g = first(granules(short_name="GEDI02_A"))
startswith(sprint(show, g), "GEDI02_A: ")
# output
true
source
EarthData.https_urls — Method
https_urls(item) -> Vector{String}

The item's related URLs that use the https scheme.

Every related URL is returned, not just the data: a DOI landing page, a metadata sidecar and browse imagery all use https too. See data_urls when what you want is something to download.

source
EarthData.is_transient — Method
is_transient(err) -> Bool

Whether err is worth retrying: a TransientError or a connection failure. Deliberately narrow — an ArgumentError (permanent status, bad query) and a plain ErrorException are not.

When err carries an HTTP error status (error_status) that status decides, so a 401/403/404 surfacing as a Downloads.RequestError is permanent — matching check_response — rather than transient by virtue of its type.

source
EarthData.login — Method
login(; machine="urs.earthdata.nasa.gov", requester=HTTP.request) -> Auth

Verify the first available Earthdata credential against Earthdata Login and return it.

Pass the result as auth to download to skip resolution on every call. Searching is credentials; this additionally proves the credential works, so a wrong password is reported now rather than midway through a download.

Throws when a credential is present but rejected. Returns the anonymous Auth when no credential exists at all, since public data needs none.

Verification is one request against /api/users/tokens, which authenticates a bearer and a username/password alike. EDL rate-limits it and answers 5xx once tripped, so a transient failure is reported as such rather than as a bad credential.

source
EarthData.netrc! — Method
netrc!(username, password; machine="urs.earthdata.nasa.gov", path=netrc_path()) -> String

Store Earthdata Login credentials in .netrc, replacing any existing stanza for machine.

.netrc is a plaintext file that Downloads, curl, wget and aria2c read to authenticate, which is how a NASA download gets its credentials without a token. The file is left at mode 600, on Windows too — chmod there rewrites the file's ACL to grant the owner alone.

Replacement rather than addition is what makes a correction take effect: curl uses the first stanza matching a machine, so a second one for the same machine is never read. Other machines, and comments, are left as they are.

A credential containing whitespace cannot be represented in .netrc, so it raises here instead of writing a file that parses as something else.

source
EarthData.netrc_credentials — Function
netrc_credentials(machine="urs.earthdata.nasa.gov"; path=nothing) -> (login, password)

Read login and password for machine from .netrc, the counterpart to netrc!.

Each line is scanned for machine, login and password tokens, carrying the current machine across lines so a stanza may be written on one line or several. Comments are skipped and the macdef form is not supported. path defaults to netrc_path.

source
EarthData.netrc_path — Method
netrc_path() -> String

The .netrc file this package reads credentials from and writes them to.

~/.netrc, except on Windows, where ~/_netrc is used when it exists and ~/.netrc does not. That is the order libcurl resolves the two names in, so a download and this package read the same file.

source
EarthData.netrc_token — Method
netrc_token(name, value) -> String

value as a .netrc token, or an ArgumentError if it cannot be one.

.netrc separates tokens on whitespace and has no quoting or escaping, so a value containing whitespace would be read back as different values than were written.

source
EarthData.netrc_without — Method
netrc_without(lines, machine) -> Vector{String}

lines with the stanza for machine removed.

A stanza runs from machine <name> to the next machine or default, which is not necessarily a line boundary — but lines are the unit removed, so comments and the formatting of other machines survive. A line carrying both this machine's tokens and another's cannot be removed without rewriting it, and raises.

source
EarthData.query_params — Method
query_params(; kwargs...) -> Vector{Pair{String,Any}}

The QueryParams keywords among kwargs, as the query parameters they become.

These are not search filters, so they are not fields of a request and get no conversion — CMR reads them as written. page_size and page_num are excluded: cmr_query adds those from its own keywords, so that paging can drop page_num partway through.

source
EarthData.retry_after_seconds — Method
retry_after_seconds(response) -> Float64

Seconds the server asked us to wait, from Retry-After, or 0.0 when the header is absent or unparseable. Only the delta-seconds form is read; clamped to retry_after_max.

Reads response.headers directly rather than going through HTTP.header, which only accepts an HTTP.Messages.Message — a Downloads.Response is a plain struct, and that is the shape /s3credentials fails with.

source
EarthData.ring_coords — Method
ring_coords(ring) -> Vector{Float64}

Flatten a ring for CMR's polygon, which needs it closed and wound counter-clockwise. Both are fixed here rather than asked of the caller: a clockwise ring is a perfectly valid geometry, but CMR reads it as the complement, i.e. the whole globe except the intended area, giving a wrong answer rather than an error.

source
EarthData.s3_urls — Method
s3_urls(item) -> Vector{String}

The item's related URLs that use the s3 scheme, for direct in-region S3 access.

Reading these requires DAAC-issued temporary credentials and an AWSS3 session; see create_aws_config. As with https_urls, the filter is on the scheme alone, so the result is not necessarily just the data file.

source
EarthData.size_unit_factor — Method
size_unit_factor(unit) -> Union{Int,Nothing}

Bytes per unit, for the SizeUnit values UMM allows ("Bytes", "KB", "MB", "GB", "TB"; binary multiples). Throws for an unrecognised unit rather than guessing, since a wrong factor silently misreports a size by three orders of magnitude.

"NA" returns nothing: providers use it to say they recorded no unit, so the accompanying Size cannot be converted at all.

source
EarthData.token — Method
token() -> String

The Earthdata Login bearer token, from the environment or a token file.

Searches, in order:

  1. ENV["EARTHDATA_TOKEN"]
  2. ~/.edl_token (first non-empty, non-comment line)

Throws an ErrorException with setup instructions when neither is present. Use credentials to resolve whatever credential is available, including none.

This never contacts the network. To obtain a token from .netrc credentials instead, call token_from_netrc explicitly.

EARTHDATA_TOKEN is a community convention rather than a NASA-defined variable; no NASA tooling reads it for you.

Treat the returned string as a secret: it authenticates as the account for 60 days.

source
EarthData.token_from_netrc — Method
token_from_netrc(; create=false, machine="urs.earthdata.nasa.gov") -> String

Fetch an Earthdata Login bearer token using the username and password stored in .netrc.

This is a network call, kept out of token on purpose: a credential lookup that can hit the network is a lookup that can hang or rate-limit inside a retry loop.

Two concurrent tokens, maximum

EDL allows an account two live tokens; requesting a third returns HTTP 403. With create=false (the default) this only lists tokens and returns the first, so it cannot exhaust the quota. create=true will consume the second slot when none exists. Do not call this from a retry loop.

source
EarthData.urls — Method
urls(item; scheme=nothing, type=nothing) -> Vector{String}

Related URLs of a UMM record, optionally filtered by URL scheme (:https, :s3) and by RelatedUrls[].Type ("GET DATA", "GET DATA VIA DIRECT ACCESS", "VIEW RELATED INFORMATION", ...).

source
EarthData.with_retries — Method
with_retries(f; context, attempts=retry_attempts, verbose=true, deadline=Inf) -> f()

Call f, retrying while it fails temporarily (see is_transient) with exponential backoff from retry_base up to retry_max_backoff. Other errors propagate on the first attempt, and the last failure is rethrown as-is so the user sees the service's own message.

deadline is an absolute time() bounding the retrying, and it — not attempts — is what should normally stop a run. A Retry-After from the server overrides the backoff upward.

source
Extents.extent — Method
Extents.extent(record::UMMRecord) -> Union{Extent,Nothing}

The record's spatial extent in degrees, or nothing when it states no coverage.

X/Y enclose every geometry the record carries — CMR states coverage as bounding rectangles, polygons, points or lines, and a record may hold more than one kind.

Extents is not re-exported, so reach it either with using Extents or, as here, through EarthData.Extents.

g = first(granules(short_name="GEDI02_A"))
ext = EarthData.Extents.extent(g);
haskey(ext, :X) && haskey(ext, :Y)
# output
true
source
GeoInterface.geometry — Method
GeoInterface.geometry(record) -> Union{GeometryType,Nothing}

The geometry a granule or collection carries, or nothing when the record states no coverage — reaching through SpatialExtent.HorizontalSpatialDomain.Geometry so a caller need not.

g = first(granules(short_name="GEDI02_A"))
EarthData.GeoInterface.trait(EarthData.GeoInterface.geometry(g))
# output
GeoInterface.GeometryCollectionTrait()
source
GeoInterface.properties — Method
GeoInterface.properties(record) -> NamedTuple

Everything the record states apart from its coverage, so a granule reads as a row beside the geometry GeoInterface.geometry returns.

SpatialExtent is left out because it is the geometry: including it would write the coordinates twice. That is what GeoInterface's own NamedTuple features, GeoDataFrames and ArchGDAL all do.

source
EarthData.Auth — Type
Auth

A resolved Earthdata credential, or the absence of one.

kind is :bearer, :netrc or :anonymous, and source names where it came from, so a rejection can say which credential was rejected rather than just that authentication failed.

:netrc carries no secret. curl, Downloads and aria2c read .netrc themselves, so the file stays the single place the username and password live.

source
EarthData.CollectionMeta — Type

CMR's meta block for a collection.

Larger than GranuleMeta and disjoint from it: a collection carries the has_* service capabilities and s3_links, and has no collection_concept_id of its own.

associations and s3_links are absent from many records, so both are nullable.

CMR also sends association-details, which is not read: every entry it carries holds a single concept-id, which is what associations already lists.

source
EarthData.CollectionRequest — Type
CollectionRequest(; keyword=value, ...)

A collection search. Every field is a CMR collection search parameter, as documented at https://cmr.earthdata.nasa.gov/search/site/docs/search/api.html#collection-search-by-parameters.

Built by collections from its keywords; each field's type is what that parameter accepts, and omitting one searches without filtering on it.

source
EarthData.FreeParam — Type
FreeParam

A parameter this package does not describe, passed on as given.

Either it is structured in a way a Julia type does not capture (attribute, science_keywords), or CMR is more permissive than any type would be (processing_level_id holds the bare digits, so a number is right there).

source
EarthData.GranuleMeta — Type

CMR's meta block for a granule: the record's identity and revision, none of which the UMM-G document itself carries.

collection_concept_id addresses the granule's collection, which is how a granule reaches collection-level metadata such as DirectDistributionInformation.

Field names are snake_case where CMR sends kebab-case; StructTypes.names carries the mapping.

source
EarthData.GranuleRequest — Type
GranuleRequest(; keyword=value, ...)

A granule search. Every field is a CMR granule search parameter, as documented at https://cmr.earthdata.nasa.gov/search/site/docs/search/api.html#granule-search-by-parameters.

Built by granules from its keywords; each field's type is what that parameter accepts, and omitting one searches without filtering on it.

source
EarthData.GranuleSchema.BoundingRectangleType — Method
BoundingRectangleType(extent::Extents.Extent)

A UMM bounding rectangle covering extent, which needs X and Y.

GeoInterface.convert(BoundingRectangleType, geom) does the same for any GeoInterface rectangle, not just an Extent.

extent = EarthData.Extents.Extent(X=(-51.0, -49.0), Y=(40.0, 60.0))
rect = EarthData.GranuleSchema.BoundingRectangleType(extent)
rect.WestBoundingCoordinate
# output
-51.0
source
EarthData.Pass — Type
Pass(pass::Integer, tiles=String[])

One orbital pass to search, optionally narrowed to particular tiles.

pass is a positive integer. A tile is an integer followed by L, R or F — the left, right or full swath of that pass, as in "2L". Tiles within one Pass are ANDed; several Passes are ORed.

Searching by pass needs the cycle keyword as well, since a pass number only identifies a granule within a cycle.

EarthData.Pass(1, ["1L", "2F"])
# output
EarthData.Pass(1, ["1L", "2F"])
source
EarthData.QueryParams — Type
QueryParams

CMR's paging and formatting parameters, which are not search filters.

Accepted by granules and collections alongside the search keywords, and passed on as written. page_size and page_num are keywords of those two functions, since paging through all the results sets them itself; the rest are collected by query_params.

sort_key is not here: it is a field of both requests, and so is converted and documented like any other search parameter.

source
EarthData.SpatialParam — Type
SpatialParam

A geometry: an Extents.Extent, anything implementing GeoInterface, a coordinate tuple, or the coordinate string itself.

All five spatial parameters accept the same Julia types, so unlike the other families this one cannot be told apart by its field type — bounding_box and polygon are distinguished by name in spatial.jl, against spatial_params.

source
EarthData.System — Type
System(; cmr_url, edl_host)

An Earthdata deployment: PROD or UAT.

UAT is where NASA stages a collection before it goes public, so it is what a provider tests against. Pass one as system to granules or collections.

cmr_url is a base URL rather than a host, so a proxy or a local CMR can be reached by constructing a System directly. edl_host is a bare hostname, since that is what .netrc and curl match on.

Search only, for now

Nothing reads edl_host yet — token_from_netrc and netrc_credentials still target production. A UAT search works; UAT authentication does not, and a production token rejected by UAT reports a production token page.

source
EarthData.TransientError — Type
TransientError(context, status, detail, retry_after=0.0)

A response that says nothing about the request: a 5xx, a 408 or a 429. Worth retrying, unlike a 401/403/404.

source
EarthData.BoolParam — Type
BoolParam

A Bool, or a String for a spelling CMR takes but this module does not build ("TRUE", "unset"). CMR rejects 1 and 0.

source
EarthData.DateRangeParam — Type
DateRangeParam

A Date/DateTime, or a (start, stop) range with either side nothing for an open bound. A vector of either is a repeated parameter, which CMR reads as the union.

source
EarthData.DateRangeValue — Type
DateRangeValue

One temporal constraint: an instant, a (start, stop) range, or the ISO 8601 text itself.

The element type of a DateRangeParam vector, so a repeated parameter holds the same Julia values a single one does rather than the wire form.

source
EarthData.NumericRangeParam — Type
NumericRangeParam

A (min, max) range, either side nothing for an open end. CMR refuses a lone number: "The min and max values of a numeric range cannot both be nil".

source
EarthData.PROD — Constant
PROD

The operational Earthdata deployment, and the default for every search.

source
EarthData.PassesParam — Type
PassesParam

An orbital pass: an Integer, a Pass to name its tiles, or a vector of either. Needs exactly one cycle alongside.

Stored as a Vector{Pass} however it was written, since CMR indexes each pass separately and one pass is the same shape as several.

source
EarthData.TextParam — Type
TextParam

An identifier CMR matches literally: a String, a Symbol, or a vector of either.

CMR reports no error for a value that matches nothing, so a number is rejected rather than converted — see version, where 061 is the integer 61 and matches nothing.

source
EarthData.UAT — Constant
UAT

Earthdata's user-acceptance-testing deployment, holding staged and pre-release collections.

granules(short_name="GEDI02_A", system=EarthData.UAT)
source

UMM-G schema types

Granule search results are parsed as EarthData.GranuleSchema.UMM_G and related schema types generated from NASA's UMM-G schema.

EarthData.GranuleSchema.AdditionalAttributeType — Type

A reference to an additional attribute in the parent collection. The attribute reference may contain a granule specific value that will override the value in the parent collection for this granule. An attribute with the same name must exist in the parent collection.

source
EarthData.GranuleSchema.BoundaryType — Type

A boundary is set of points connected by straight lines representing a polygon on the earth. It takes a minimum of three points to make a boundary. Points must be specified in counter-clockwise order and closed (the first and last vertices are the same).

source
EarthData.GranuleSchema.IdentifierType — Type

This entity stores an identifier. If the identifier is part of the enumeration then use it. If the enumeration is 'Other', the provider must specify the identifier's name.

source
EarthData.GranuleSchema.InstrumentType — Type

A reference to the device in the parent collection that was used to measure or record data, including direct human observation. In cases where instruments have a single composed of child instrument (sensor) or the instrument and composed of child instrument (sensor) are used synonymously (e.g. AVHRR) the both Instrument and composed of child instrument should be recorded. The child instrument information is represented by child entities. The instrument reference may contain granule specific characteristics and operation modes. These characteristics and modes are not checked against the referenced instrument.

source
EarthData.GranuleSchema.MeasuredParameterType — Type

This entity contains the name of the geophysical parameter expressed in the data as well as associated quality flags and quality statistics. The quality statistics element contains measures of quality for the granule. The parameters used to set these measures are not preset and will be determined by the data producer. Each set of measures can occur many times either for the granule as a whole or for individual parameters. The quality flags contain the science, operational and automatic quality flags which indicate the overall quality assurance levels of specific parameter values within a granule.

source
EarthData.GranuleSchema.OrbitType — Type

This entity stores orbital coverage information of the granule. This coverage is an alternative way of expressing granule spatial coverage. This information supports orbital backtrack searching on a granule.

source
EarthData.GranuleSchema.PlatformType — Type

A reference to a platform in the parent collection that is associated with the acquisition of the granule. The platform must exist in the parent collection. For example, Platform types may include (but are not limited to): ADEOS-II, AEM-2, Terra, Aqua, Aura, BALLOONS, BUOYS, C-130, DEM, DMSP-F1,etc.

source
EarthData.GranuleSchema.ProviderDateType — Type

Specifies the date and its type that the provider uses for the granule. For Create, Update, and Insert the date is the date that the granule file is created, updated, or inserted into the provider database by the provider. Delete is the date that the CMR should delete the granule metadata record from its repository.

source
EarthData.GranuleSchema.QAFlagsType — Type

The quality flags contain the science, operational and automatic quality flags which indicate the overall quality assurance levels of specific parameter values within a granule.

source
EarthData.GranuleSchema.QAStatsType — Type

The quality statistics element contains measures of quality for the granule. The parameters used to set these measures are not preset and will be determined by the data producer. Each set of measures can occur many times either for the granule as a whole or for individual parameters.

source
EarthData.GranuleSchema.SpatialExtentType — Type

This class contains attributes which describe the spatial extent of a granule. Spatial Extent includes any or all of Granule Localities, Horizontal Spatial Domain, and Vertical Spatial Domain.

source
EarthData.GranuleSchema.TilingIdentificationSystemType — Type

This entity stores the tiling identification system for the granule. The tiling identification system information is an alternative way to express granule's spatial coverage based on a certain two dimensional coordinate system defined by the providers. The name must match the name in the parent collection.

source
EarthData.GranuleSchema.TrackPassTileType — Type

This element stores a track pass and its tile information. It will allow a user to search by pass number and their tiles that are contained with in a cycle number. While trying to keep this generic for all to use, this comes from a SWOT requirement where a pass represents a 1/2 orbit. This element will then hold a list of 1/2 orbits and their tiles that together represent the granules spatial extent.

source
EarthData.GranuleSchema.TrackType — Type

This element stores track information of the granule. Track information is used to allow a user to search for granules whose spatial extent is based on an orbital cycle, pass, and tile mapping. Though it is derived from the SWOT mission requirements, it is intended that this element type be generic enough so that other missions can make use of it. While track information is a type of spatial domain, it is expected that the metadata provider will provide geometry information that matches the spatial extent of the track information.

source

UMM-C schema types

Collection search results are parsed as EarthData.CollectionSchema.UMM_C and related schema types generated from NASA's UMM-C schema.

EarthData.CollectionSchema.AdditionalAttributeType — Type

Additional unique attributes of the collection, beyond those defined in the UMM model, which the data provider deems useful for end-user understanding of the data in the collection. Additional attributes are also called Product Specific Attributes (PSAs) or non-core attributes. Examples are HORIZONTALTILENUMBER, VERTICALTILENUMBER.

source
EarthData.CollectionSchema.AltitudeSystemDefinitionType — Type

The reference frame or system from which altitude is measured. The term 'altitude' is used instead of the common term 'elevation' to conform to the terminology in Federal Information Processing Standards 70-1 and 173. The information contains the datum name, distance units and encoding method, which provide the definition for the system.

source
EarthData.CollectionSchema.AssociatedDoiType — Type

This element stores the DOI (Digital Object Identifier) that identifies the collection. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as a RelatedURL. The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used. NASA metadata providers are strongly encouraged to include DOI and DOI Authority for their collections using CollectionDOI property.

source
EarthData.CollectionSchema.BoundaryType — Type

A boundary is set of points connected by straight lines representing a polygon on the earth. It takes a minimum of three points to make a boundary. Points must be specified in counter-clockwise order and closed (the first and last vertices are the same).

source
EarthData.CollectionSchema.DirectoryNameType — Type

Formerly called Internal Directory Name (IDN) Node (IDN_Node). This element has been used historically by the GCMD internally to identify association, responsibility and/or ownership of the dataset, service or supplemental information. Note: This field only occurs in the DIF. When a DIF record is retrieved in the ECHO10 or ISO 19115 formats, this element will not be translated.

source
EarthData.CollectionSchema.DoiDoiType — Type

This element stores the DOI (Digital Object Identifier) that identifies the collection. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as a RelatedURL. The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used. NASA metadata providers are strongly encouraged to include DOI and DOI Authority for their collections using CollectionDOI property.

source
EarthData.CollectionSchema.FootprintType — Type

The largest width of an instrument's footprint as measured on the Earths surface. The largest Footprint takes the place of SwathWidth in the Orbit Backtrack Algorithm if SwathWidth does not exist. The optional description element allows the user of the record to be able to distinguish between the different footprints of an instrument if it has more than 1.

source
EarthData.CollectionSchema.HorizontalDataResolutionType — Type

This class defines a number of the data products horizontal data resolution. The horizontal data resolution is defined as the smallest horizontal distance between successive elements of data in a dataset. This is synonymous with terms such as ground sample distance, sample spacing and pixel size. It is to be noted that the horizontal data resolution could be different in the two horizontal dimensions. Also, it is different from the spatial resolution of an instrument, which is the minimum distance between points that an instrument can see as distinct.

source
EarthData.CollectionSchema.InstrumentType — Type

Information about the device used to measure or record data in this collection, including direct human observation. In cases where instruments have a single child instrument or the instrument and child instrument are used synonymously (e.g. AVHRR), both Instrument and ComposedOf should be recorded. The child instrument information is represented in a separate section. The controlled vocabulary for instrument names is maintained in the Keyword Management System (KMS).

source
EarthData.CollectionSchema.LocationKeywordType — Type

This element defines a hierarchical location list. It replaces SpatialKeywords. The controlled vocabulary for location keywords is maintained in the Keyword Management System (KMS). Each tier must have data in the tier above it.

source
EarthData.CollectionSchema.PlatformType — Type

Describes the relevant platforms used to acquire the data in the collection. The controlled vocabularies for platform types and names are maintained in the Keyword Management System (KMS).

source
EarthData.CollectionSchema.ProjectType — Type

Information describing the scientific endeavor(s) with which the collection is associated. Scientific endeavors include campaigns, projects, interdisciplinary science investigations, missions, field experiments, etc. The controlled vocabularies for project names are maintained in the Keyword Management System (KMS)

source
EarthData.CollectionSchema.RelatedUrlType — Type

Represents Internet sites that contain information related to the data, as well as related Internet sites such as project home pages, related data archives/servers, metadata extensions, online software packages, web mapping services, and calibration/validation data.

source
EarthData.CollectionSchema.ResolutionAndCoordinateSystemType — Type

This class defines the horizontal spatial extents coordinate system and the data product's horizontal data resolution. The horizontal data resolution is defined as the smallest horizontal distance between successive elements of data in a dataset. This is synonymous with terms such as ground sample distance, sample spacing and pixel size. It is to be noted that the horizontal data resolution could be different in the two horizontal dimensions. Also, it is different from the spatial resolution of an instrument, which is the minimum distance between points that an instrument can see as distinct.

source
EarthData.CollectionSchema.ResourceCitationType — Type

Building block text fields used to construct the recommended language for citing the collection in professional scientific literature. The citation language constructed from these fields references the collection itself, and is not designed for listing bibliographic references of scientific research articles arising from search results. A list of references related to the research results should be in the Publication Reference element.

source
EarthData.CollectionSchema.SpatialInformationType — Type

This entity stores the reference frame or system from which horizontal and vertical spatial domains are measured. The horizontal reference frame includes a Geodetic Model, Geographic Coordinates, and Local Coordinates. The Vertical reference frame includes altitudes (elevations) and depths.

source
EarthData.CollectionSchema.UseConstraintsType — Type

This element defines how the data may or may not be used after access is granted to assure the protection of privacy or intellectual property. This includes license text, license URL, or any special restrictions, legal prerequisites, terms and conditions, and/or limitations on using the data set. Data providers may request acknowledgement of the data from users and claim no responsibility for quality and completeness of data.

source