full diff

app.gainforest.organization.layer

gainforest.earth +140 −1
From
bafyreidpfwvtx5j56wgole7cb37zc5wrmgmydf4o4nku7ncmoyjld3qnom indexed 2026-02-18 18:06 UTC View this version
To
bafyreiaihka6qgw2xs2rpz7jx3r23wf7gxhhafgunjr73ag5hddfggc3ya indexed 2026-04-29 14:34 UTC View this version

Compatibility

breaking 7 breaking changes, 46 non-breaking changes.

Breaking changes (7)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.gainforest.organization.layer#legendEntry", src: "app.gainforest.organization.layer#legendEntry", tgt: "app.gainforest.organization.layer#legendEntry.label", kind: "prop", name: Some("label") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.gainforest.organization.layer#legendEntry", src: "app.gainforest.organization.layer#legendEntry", tgt: "app.gainforest.organization.layer#legendEntry.color", kind: "prop", name: Some("color") }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.gainforest.organization.layer:body.uri", sort: "maxGraphemes", value: "2048" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.gainforest.organization.layer:body.type", sort: "maxGraphemes", value: "64" }
  • ConstraintTightened ConstraintTightened { vertex_id: "app.gainforest.organization.layer:body.type", sort: "enum", old_value: "geojson_points,geojson_points_trees,geojson_line,choropleth,choropleth_shannon,raster_tif,tms_tile", new_value: "geojson_points,geojson_points_trees,geojson_line,choropleth,choropleth_shannon,raster_tif,tms_tile,heatmap,contour,satellite_overlay" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.gainforest.organization.layer:body.name", sort: "maxGraphemes", value: "256" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.gainforest.organization.layer:body.description", sort: "maxGraphemes", value: "2048" }
Non-breaking changes (46)
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.common.defs#imageThumbnail" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer#legendEntry" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer#legendEntry.color" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer#legendEntry.label" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer#legendEntry.value" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.bounds" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.category" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.colorScale" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.dataDate" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.dataSource" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.displayOrder" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.isDefault" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.legend" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.legend:items" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.maxValue" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.minValue" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.opacity" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.propertyKey" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.siteRef" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.thumbnail" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.tileMaxZoom" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.tileMinZoom" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.tilePattern" }
  • AddedVertex AddedVertex { vertex_id: "app.gainforest.organization.layer:body.unit" }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer#legendEntry", tgt: "app.gainforest.organization.layer#legendEntry.value", kind: "prop", name: Some("value") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.bounds", kind: "prop", name: Some("bounds") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.category", kind: "prop", name: Some("category") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.colorScale", kind: "prop", name: Some("colorScale") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.dataDate", kind: "prop", name: Some("dataDate") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.dataSource", kind: "prop", name: Some("dataSource") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.displayOrder", kind: "prop", name: Some("displayOrder") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.isDefault", kind: "prop", name: Some("isDefault") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.legend", kind: "prop", name: Some("legend") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.maxValue", kind: "prop", name: Some("maxValue") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.minValue", kind: "prop", name: Some("minValue") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.opacity", kind: "prop", name: Some("opacity") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.propertyKey", kind: "prop", name: Some("propertyKey") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.siteRef", kind: "prop", name: Some("siteRef") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.thumbnail", kind: "prop", name: Some("thumbnail") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.tileMaxZoom", kind: "prop", name: Some("tileMaxZoom") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.tileMinZoom", kind: "prop", name: Some("tileMinZoom") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.tilePattern", kind: "prop", name: Some("tilePattern") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.unit", kind: "prop", name: Some("unit") }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body.legend", tgt: "app.gainforest.organization.layer:body.legend:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body.legend:items", tgt: "app.gainforest.organization.layer#legendEntry", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "app.gainforest.organization.layer:body.thumbnail", tgt: "app.gainforest.common.defs#imageThumbnail", kind: "ref", name: None }

Migration guidance

Added

  • AddedVertex { vertex_id: "app.gainforest.common.defs#imageThumbnail" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer#legendEntry" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer#legendEntry.color" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer#legendEntry.label" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer#legendEntry.value" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.bounds" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.category" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.colorScale" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.dataDate" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.dataSource" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.displayOrder" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.isDefault" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.legend" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.legend:items" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.maxValue" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.minValue" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.opacity" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.propertyKey" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.siteRef" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.thumbnail" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.tileMaxZoom" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.tileMinZoom" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.tilePattern" }
  • AddedVertex { vertex_id: "app.gainforest.organization.layer:body.unit" }

Constraint changes

  • ConstraintAdded ConstraintAdded { vertex_id: "app.gainforest.organization.layer:body.description", sort: "maxGraphemes", value: "2048" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.gainforest.organization.layer:body.name", sort: "maxGraphemes", value: "256" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.gainforest.organization.layer:body.type", sort: "maxGraphemes", value: "64" }
  • ConstraintTightened ConstraintTightened { vertex_id: "app.gainforest.organization.layer:body.type", sort: "enum", old_value: "geojson_points,geojson_points_trees,geojson_line,choropleth,choropleth_shannon,raster_tif,tms_tile", new_value: "geojson_points,geojson_points_trees,geojson_line,choropleth,choropleth_shannon,raster_tif,tms_tile,heatmap,contour,satellite_overlay" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.gainforest.organization.layer:body.uri", sort: "maxGraphemes", value: "2048" }

Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "app.gainforest.organization.layer#legendEntry", src: "app.gainforest.organization.layer#legendEntry", tgt: "app.gainforest.organization.layer#legendEntry.label", kind: "prop", name: Some("label") }
  • Breaking: RequiredEdgeAdded { vertex_id: "app.gainforest.organization.layer#legendEntry", src: "app.gainforest.organization.layer#legendEntry", tgt: "app.gainforest.organization.layer#legendEntry.color", kind: "prop", name: Some("color") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer#legendEntry", tgt: "app.gainforest.organization.layer#legendEntry.value", kind: "prop", name: Some("value") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.bounds", kind: "prop", name: Some("bounds") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.category", kind: "prop", name: Some("category") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.colorScale", kind: "prop", name: Some("colorScale") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.dataDate", kind: "prop", name: Some("dataDate") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.dataSource", kind: "prop", name: Some("dataSource") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.displayOrder", kind: "prop", name: Some("displayOrder") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.isDefault", kind: "prop", name: Some("isDefault") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.legend", kind: "prop", name: Some("legend") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.maxValue", kind: "prop", name: Some("maxValue") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.minValue", kind: "prop", name: Some("minValue") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.opacity", kind: "prop", name: Some("opacity") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.propertyKey", kind: "prop", name: Some("propertyKey") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.siteRef", kind: "prop", name: Some("siteRef") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.thumbnail", kind: "prop", name: Some("thumbnail") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.tileMaxZoom", kind: "prop", name: Some("tileMaxZoom") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.tileMinZoom", kind: "prop", name: Some("tileMinZoom") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.tilePattern", kind: "prop", name: Some("tilePattern") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body", tgt: "app.gainforest.organization.layer:body.unit", kind: "prop", name: Some("unit") }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body.legend", tgt: "app.gainforest.organization.layer:body.legend:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body.legend:items", tgt: "app.gainforest.organization.layer#legendEntry", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "app.gainforest.organization.layer:body.thumbnail", tgt: "app.gainforest.common.defs#imageThumbnail", kind: "ref", name: None }

Changes

11{
22 "$type": "com.atproto.lexicon.schema",
33 "defs": {
4 "legendEntry": {
5 "description": "A single entry in a layer legend",
6 "properties": {
7 "color": {
8 "description": "Color for this legend entry (e.g., '#FF5733')",
9 "maxGraphemes": 16,
10 "type": "string"
11 },
12 "label": {
13 "description": "Display label for this legend entry",
14 "maxGraphemes": 128,
15 "type": "string"
16 },
17 "value": {
18 "description": "Optional value associated with this legend entry",
19 "maxGraphemes": 64,
20 "type": "string"
21 }
22 },
23 "required": [
24 "label",
25 "color"
26 ],
27 "type": "object"
28 },
429 "main": {
530 "description": "A declaration of a layer for an organization",
631 "key": "tid",
732 "record": {
833 "properties": {
34 "bounds": {
35 "description": "Bounding box as 'west,south,east,north'",
36 "maxGraphemes": 128,
37 "type": "string"
38 },
39 "category": {
40 "description": "Layer category for grouping in UI (e.g., 'Biodiversity', 'Land Cover', 'Climate', 'Infrastructure')",
41 "maxGraphemes": 128,
42 "type": "string"
43 },
44 "colorScale": {
45 "description": "Named color scale for continuous data",
46 "knownValues": [
47 "viridis",
48 "plasma",
49 "inferno",
50 "magma",
51 "cividis",
52 "turbo",
53 "spectral",
54 "rdylgn",
55 "rdylbu",
56 "custom"
57 ],
58 "maxGraphemes": 64,
59 "type": "string"
60 },
961 "createdAt": {
1062 "description": "The date and time of the creation of the record",
1163 "format": "datetime",
1264 "type": "string"
1365 },
66 "dataDate": {
67 "description": "Date of the data (ISO 8601)",
68 "maxGraphemes": 64,
69 "type": "string"
70 },
71 "dataSource": {
72 "description": "Attribution/source of the layer data",
73 "maxGraphemes": 512,
74 "type": "string"
75 },
1476 "description": {
1577 "description": "The description of the layer",
78 "maxGraphemes": 2048,
1679 "type": "string"
1780 },
81 "displayOrder": {
82 "description": "Ordering priority for display",
83 "minimum": 0,
84 "type": "integer"
85 },
86 "isDefault": {
87 "description": "Whether this layer should be shown by default",
88 "type": "boolean"
89 },
90 "legend": {
91 "description": "Legend entries for the layer",
92 "items": {
93 "ref": "#legendEntry",
94 "type": "ref"
95 },
96 "maxLength": 20,
97 "type": "array"
98 },
99 "maxValue": {
100 "description": "Maximum value in the data range",
101 "maxGraphemes": 32,
102 "type": "string"
103 },
104 "minValue": {
105 "description": "Minimum value in the data range",
106 "maxGraphemes": 32,
107 "type": "string"
108 },
18109 "name": {
19110 "description": "The name of the site",
111 "maxGraphemes": 256,
112 "type": "string"
113 },
114 "opacity": {
115 "description": "Default opacity (0-1 as string, e.g., '0.7')",
116 "maxGraphemes": 8,
117 "type": "string"
118 },
119 "propertyKey": {
120 "description": "GeoJSON property key to use for choropleth coloring (e.g., 'species_richness')",
121 "maxGraphemes": 128,
122 "type": "string"
123 },
124 "siteRef": {
125 "description": "AT-URI reference to the site this layer belongs to",
126 "format": "at-uri",
20127 "type": "string"
21128 },
129 "thumbnail": {
130 "description": "Preview thumbnail for the layer",
131 "ref": "app.gainforest.common.defs#imageThumbnail",
132 "type": "ref"
133 },
134 "tileMaxZoom": {
135 "description": "Maximum zoom level",
136 "maximum": 22,
137 "minimum": 0,
138 "type": "integer"
139 },
140 "tileMinZoom": {
141 "description": "Minimum zoom level",
142 "maximum": 22,
143 "minimum": 0,
144 "type": "integer"
145 },
146 "tilePattern": {
147 "description": "URL pattern for TMS tiles (e.g., 'https://tiles.example.com/{z}/{x}/{y}.png')",
148 "maxGraphemes": 512,
149 "type": "string"
150 },
22151 "type": {
23152 "description": "The type of the layer",
24153 "enum": [
25154 "geojson_points",
26155 "geojson_points_trees",
27156 "geojson_line",
28157 "choropleth",
29158 "choropleth_shannon",
30159 "raster_tif",
31 "tms_tile"
160 "tms_tile",
161 "heatmap",
162 "contour",
163 "satellite_overlay"
32164 ],
165 "maxGraphemes": 64,
166 "type": "string"
167 },
168 "unit": {
169 "description": "Unit of measurement for the layer data (e.g., 'species/ha', 'kg C/m²', 'mm/year')",
170 "maxGraphemes": 64,
33171 "type": "string"
34172 },
35173 "uri": {
36174 "description": "The URI of the layer",
37175 "format": "uri",
176 "maxGraphemes": 2048,
38177 "type": "string"
39178 }
40179 },
41180 "required": [
42181 "name",
43182 "type",
44183 "uri",
45184 "createdAt"
46185 ],
47186 "type": "object"
48187 },
49188 "type": "record"
50189 }
51190 },
52191 "id": "app.gainforest.organization.layer",
53192 "lexicon": 1
54193}

Compare other versions