GEOS  3.13.0dev
Static Public Member Functions | Static Public Attributes | List of all members
geos::shape::fractal::MortonCode Class Reference

#include <MortonCode.h>

Static Public Member Functions

static uint32_t encode (int x, int y)
 
static geom::Coordinate decode (uint32_t index)
 
static uint32_t levelSize (uint32_t level)
 
static uint32_t maxOrdinate (uint32_t level)
 
static uint32_t level (uint32_t numPoints)
 

Static Public Attributes

static constexpr int MAX_LEVEL = 16
 

Detailed Description

Encodes points as the index along the planar Morton (Z-order) curve.

The planar Morton (Z-order) curve is a continuous space-filling curve. The Morton curve defines an ordering of the points in the positive quadrant of the plane. The index of a point along the Morton curve is called the Morton code.

A sequence of subsets of the Morton curve can be defined by a level number. Each level subset occupies a square range. The curve at level n M(n) contains 2^(n + 1) points. It fills the range square of side 2^level. Curve points have ordinates in the range [0, 2^level - 1]. The code for a given point is identical at all levels. The level simply determines the number of points in the curve subset and the size of the range square.

This implementation represents codes using 32-bit integers. This allows levels 0 to 16 to be handled. The class supports encoding points and decoding the point for a given code value.

The Morton order has the property that it tends to preserve locality. This means that codes which are near in value will have spatially proximate points. The converse is not always true - the delta between codes for nearby points is not always small. But the average delta is small enough that the Morton order is an effective way of linearizing space to support range queries.

Author
Martin Davis
See also
HilbertCode

Member Function Documentation

◆ decode()

static geom::Coordinate geos::shape::fractal::MortonCode::decode ( uint32_t  index)
static

Computes the point on the Morton curve for a given index.

Parameters
indexthe index of the point on the curve
Returns
the point on the curve

◆ encode()

static uint32_t geos::shape::fractal::MortonCode::encode ( int  x,
int  y 
)
static

Computes the index of the point (x,y) in the Morton curve ordering.

Parameters
xthe x ordinate of the point
ythe y ordinate of the point
Returns
the index of the point along the Morton curve

◆ level()

static uint32_t geos::shape::fractal::MortonCode::level ( uint32_t  numPoints)
static

The level of the finite Morton curve which contains at least the given number of points.

Parameters
numPointsthe number of points required
Returns
the level of the curve

◆ levelSize()

static uint32_t geos::shape::fractal::MortonCode::levelSize ( uint32_t  level)
static

The number of points in the curve for the given level. The number of points is 22 * level.

Parameters
levelthe level of the curve
Returns
the number of points

◆ maxOrdinate()

static uint32_t geos::shape::fractal::MortonCode::maxOrdinate ( uint32_t  level)
static

The maximum ordinate value for points in the curve for the given level. The maximum ordinate is 2level - 1.

Parameters
levelthe level of the curve
Returns
the maximum ordinate value

Member Data Documentation

◆ MAX_LEVEL

constexpr int geos::shape::fractal::MortonCode::MAX_LEVEL = 16
staticconstexpr

The maximum curve level that can be represented.


The documentation for this class was generated from the following file: