realm.area
Areas describe a circular, rectangular or polygonal section within a realm. They are a great way to demark districts of a city, fields within a farm, buildings within a complex or security zones on a mining site. They can also act as a stationary or roaming geofence and provide a filtering mechanism for objects in subscriptions and instructions.
Shape Data Structure
Your areas can be circles, rectangles or polygons. For each, the data structure looks a little bit different. You don't need to specify which kind of shape you want - Hivekit will guess based on the values in your shape structure.
Circle
{
// longitude of the circle's center in degree
cx: 8.812937349780645,
// latitude of the circle's center in degree
cy: 54.33334283065705,
// radius of the circle in meter
r: 300
}
Rectangle
{
// longitude of the western side of the rectangle
x1: -0.033536750798090945,
// latitude of the northern side of the rectangle
y1: 51.52172026165903,
// longitude of the eastern side of the rectangle
x2: -0.0327062299280377,
// latitude of the southern side of the rectangle
y2: 51.52104216363214
}
Polygon
Polygons can define any irregular shape. The points need to be in order. The last point will be connected to the first. Hivekit currently does not support holes in polygonal areas.
{
points: [
// x = longitude, y = latitude
{ x: -80.19 ,y: 25.774 },
{ x: -66.118 ,y: 18.466 },
{ x: -64.757 ,y: 32.321 },
]
}
Methods
realm.area.create(id, options)
Creates a new area
id
a unique identifier for this area within its realmoptions
optional parameters that define the areaoptions.label
a name for the areaoptions.shape
the shape of the areaoptions.data
meta data for the area, e.g. display properties like color- returns
Promise
success
await myRealm.area.create('berlin/kreuzberg', {
label: 'Kreuzberg',
shape: { cx: 13.40388, cy: 52.49871, r: 1000},
data: { color: '#FF00FF'}
})
realm.area.get(id)
Returns the data for an existing area
id
a unique identifier for this area within its realm- returns
Promise
area data
kreuzberg = await myRealm.area.get('berlin/kreuzberg')
kreuzberg = {
label: 'Kreuzberg',
shape: 'circle',
shapeData: { cx: 13.40388, cy: 52.49871, r: 1000},
data: { color: '#FF00FF' }
}
realm.area.update(id, options)
Updates an existing area.
id
a unique identifier for this area within its realmoptions
optional parameters that define the areaoptions.label
a name for the areaoptions.shape
the shape of the areaoptions.data
meta data for the area, e.g. display properties like color- returns
Promise
success
myRealm.area.update('geofence/b14', {
shape: {
x1: -0.03353,
y1: 51.52172,
x2: -0.03270,
y2: 51.521
}
})
realm.area.delete(id)
Deletes an existing area
id
a unique identifier for this area within its realm- returns
Promise
success
realm.area.list()
Lists all areas within a realm
- returns
Promise
area list
const areas = await myRealm.area.list();
areas = {
'berlin/mitte': {id:'berlin/mitte', label: 'Mitte', shape: 'rectangle' },
'berlin/kreuzberg': {id:'berlin/kreuzberg', label: 'Kreuzberg', shape: 'circle' },
'berlin/neukoelln': {id:'berlin/neukoelln', label: 'Neukoelln', shape: 'polygon' },
}
realm.area.subscribe(options)
Subscribes to the creation,updating and deletion of areas.
options
is an optional object with the following attributesoptions.where
an array of attribute selectors, e.g.['city=kiev']
options.executeImmediately
iftrue
, the subscription is triggered immediatly with all objects matching the given criteria. Iffalse
or ommited, the subscription will only notify you once something changes.- returns
Promise
subscription
const subscription = await myRealm.area.subscribe({
executeImmediately: true,
where: ['city="kyiv"'],
});
subscription.on('update', areas => {
// do something with the list of areas
})