# `GeoGenius.AreaMatch`
[🔗](https://github.com/agoodway/geo_genius/blob/main/lib/geo_genius/area_match.ex#L1)

One area returned by a catalog read, with whatever the read measured about it.

Every row-returning SQL function returns this shape. Which measurement fields
carry a value depends on how the area was found: a containment match measures
nothing, a proximity match sets `distance_m`, a geometry overlap sets the
intersection and coverage fields, and a name search sets `score`.

`coverage_of_input` and `coverage_of_area` are percentages, 0 to 100. Only
`areas_for_geometry` populates them. They are not the same scale as
`relation.parent_coverage`, which is a 0-to-1 ratio and never reaches this
struct.

# `t`

```elixir
@type t() :: %GeoGenius.AreaMatch{
  area_key: String.t(),
  area_type: String.t() | nil,
  attributes: map() | nil,
  authority: String.t() | nil,
  centroid: Geo.Point.t() | nil,
  codes: %{optional(String.t()) =&gt; [String.t()]} | nil,
  collection_key: String.t() | nil,
  coverage_of_area: float() | nil,
  coverage_of_input: float() | nil,
  distance_m: float() | nil,
  intersection_area_m2: float() | nil,
  match_method: String.t() | nil,
  name: String.t() | nil,
  release_id: Ecto.UUID.t() | nil,
  score: float() | nil,
  type_rank: integer() | nil
}
```

# `from_result`

```elixir
@spec from_result(Postgrex.Result.t()) :: [t()]
```

Maps a query result into structs.

Mapping is by column name. `area_match` declares sixteen columns, several of
them the same type and adjacent, so a positional mapping would transpose two
of them silently the first time the projection changed.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
