Geozones¶
A geozone is a system‑defined spatial region used to group interrelated facilities, activities, and other geolocated data. Its defining feature is a geospatial polygon or bounding box that describes the physical boundary of the geozone. Geozones represent operational or experiential areas of interest — not legal boundaries — and provide a flexible way to describe geospatial regions meaningfully without the context of preexisting datatypes, such as parks/protected areas/subareas.
Protected areas can be extremely large and often contain vast regions with no visitor‑facing features. Geozones allow the system to focus on the specific areas that matter to users and administrators.
Geozones vary in size, but each one is designed to: - group features that are meaningfully related - be viewable on a single map without losing spatial clarity - accurately convey proximity, distance, and relationships - support rich search, discovery, and navigation experiences
Public Use Cases¶
Geozones can represent visitor‑facing experiences such as: - “Bedwell Lakes” within Strathcona Park - “Cheakamus Lake Area” within Garibaldi
A geozone can serve as a landing zone for search queries (e.g., a user searching “bedwell” can be routed directly to the Bedwell Lakes geozone, even though it is only a subregion of Strathcona Park).
Administrative Use Cases¶
Geozones can also group features that share: - operational responsibilities - maintenance bundles - management workflow
This allows staff to work with meaningful operational regions (bundles) rather than legal park boundaries.
Custom User-Defined Geozones¶
Authenticated users may define their own geozones for personal use — for example, marking a favourite backcountry loop or a region they frequently monitor. These user‑defined geozones live in their own collections and do not affect public or administrative geozones.
DynamoDB Partitioning¶
Geozones use a compound primary key:
pk: geozone::<collectionId>
sk: <geozoneId>
Example — BC Parks geozone relating to Garibaldi Provincial Park (ORCS 7)
pk: geozone::bcparks_7
sk: 1
Querying this partition returns all geozones associated with the Garibaldi collection, enabling front‑end applications to build spatially meaningful home pages and navigation flows.
Example — User‑Defined Geozone pk: geozone::user_12345 sk: 1
High cardinality of collectionId ensures DynamoDB performance remains stable regardless of the number of geozones in the system.
Properties¶
Note: The geozone configuration file is the authoritative source for the current schema.
| Property | Type | Description |
|---|---|---|
pk |
String | Partition key for the geozone. Always begins with geozone::<collectionId>. Groups all geozones within a collection. |
sk |
String | Sort key uniquely identifying the geozone within the partition. Typically geozoneId |
schema |
String | The datatype/schema. Will always be 'geozone' for geozones |
globalId |
String | UUID used for GSIs and cross‑collection lookups. |
collectionId |
String | Identifier linking the geozone to its operational collection (e.g., bcparks_1). |
geozoneId |
Number | Identifier uniquely distinguishing this particular geozone from other geozones within the same collection |
identifier |
Number | See geozoneId |
displayName |
String | Human‑readable name of the geozone. |
description |
String | Optional descriptive text explaining the purpose or operational meaning of the geozone. |
envelope |
OSGeo | Bounding box containing authoritative spatial geometry. |
boundary |
OSGeo | Authoritative spatial geometry, if it fits in DynamoDB. |
boundaryUrl |
String | Authoritative spatial geometry. Stored in S3 with a reference URL. |
location |
OSGeo | Geospatial point serving as a simplified point used for search relevance, sorting, clustering, and map pin placement |
minMapZoom |
Number | The smallest zoom level (furthest zoomed out) at which the object will render on a map if it is not in focus |
maxMapZoom |
Number | The largest zoom level (furthest zoomed in) at which the object will render on a map if it is not in focus |
imageUrls |
[String] | Array of urls of images of this data item |
timezone |
String | The IANA string timezone of the spatial data item |
isVisible |
Boolean | Whether or not this item will be returned if it generates a search hit |
creationDate |
DateTime | Timestamp of when the item was first created |
lastUpdated |
DateTime | Timestamp of when the item was last updated |
version |
Number | Data revision number |
searchTerms |
String | Comma-separated list of terms OpenSearch can use to link text searches to this data item |
adminNotes |
String | Administrative notes to describe the data, will never be surfaced to the public |
Examples¶
Bedwell Trail Area¶
This geozone might be used to encompass the limits of the Bedwell Trail Area, showing the boundary of the backcountry area and the backcountry camping sites contained within.
{
"pk": "geozone::bcparks_1",
"sk": "2",
"schema": "geozone",
"globalId": "345fg5e-4b7a-4c9f-9f22-1a4e8c9d77aa",
"collectionId": "bcparks_1",
"geozoneId": 2,
"identifier": 2,
"displayName": "Bedwell Trail Area",
"description": "The Bedwell Lake Trail area in Strathcona Provincial Park is a steep but well‑built route leading to spectacular subalpine lakes surrounded by rugged mountain peaks, offering some of the park’s best day‑hiking and backcountry camping.",
"envelope": {
"type": "envelope",
"coordinates": [
[-125.610, 49.522],
[-125.522, 49.482]
]
},
"boundary": {
"type": "polygon",
"coordinates": [
[-125.000, 49.000],
[-125.000, 49.000]
]
},
"boundaryUrl": "",
"location": {
"type": "point",
"coordinates": [-125.589, 49.498]
},
"minMapZoom": 8,
"maxMapZoom": 18,
"imageUrls": [
"https://...",
"https://..."
],
"timezone": "America/Vancouver",
"isVisible": true,
"creationDate": "2026-01-05T22:30:00.000Z",
"lastUpdated": "2026-01-05T22:30:00.000Z",
"version": 1,
"searchTerms": "bedwell lake, baby bedwell lake, cream lake...",
"adminNotes": "..."
}
Strathcona Provincial Park¶
This example geozone shows how a park may be represented as a special kind of geozone. An additional field orcs pertaining to the ORCS ID, or some other field signifying this special geozone case, could be added if absolutely necessary.
{
"pk": "geozone::bcparks_1",
"sk": "1",
"schema": "geozone",
"globalId": "8f3c2d1e-4b7a-4c9f-9f22-1a4e8c9d77aa",
"collectionId": "bcparks_1",
"geozoneId": 1,
"identifier": 1,
"displayName": "Strathcona Provincial Park",
"description": " BC's oldest park on Vancouver Island, offering camping, hiking, and other wilderness experiences.",
"envelope": {
"type": "envelope",
"coordinates": [
[-125.000, 49.000],
[-125.000, 49.000]
]
},
"boundary": {},
"boundaryUrl": "s3://...",
"location": {
"type": "point",
"coordinates": [-125.000, 49.000]
},
"minMapZoom": 6,
"maxMapZoom": 16,
"imageUrls": [
"https://...",
"https://..."
],
"timezone": "America/Vancouver",
"isVisible": true,
"creationDate": "2026-01-05T22:30:00.000Z",
"lastUpdated": "2026-01-05T22:30:00.000Z",
"version": 1,
"searchTerms": "buttle lake, strathcona, forbidden plateau, bedwell lake, elk river...",
"adminNotes": "..."
}
Protected Areas¶
Also known as 'parks', these datatypes were the backbone of older systems and are uniquely defined by the legally designated ORCS number assigned to each protected area. The concept of a 'park' or 'protected area' is shared by several areas of BC Parks so the definition used in this model is analogous to those pre-understood concepts.
However, because the preexisting concept of a protected area is rooted in its legal definition, it is unable to change to accommodate the wide range of use cases this data model demands. This makes the protected area datatype a poor candidate for the backbone of this model.
Collections remain the backbone of the data model, and geozones remain the datatype at the very top of the data hierarchy. Protected areas can be represented as a subset of geozones and linked to collections as necessary to maintain continuity with historical systems or regulator requirements. See the Strathcona Provincial Park example of how this might be achieved.