The parameters for a block subdivision can be specified under Block Parameters in the Inspector. Block parameters can be individually set for each block.
Note:
Parameters (attributes) can be mapped to Default, User, Object, or to a map layer. See Mapping Attributes for details.
Lot default rules
You can divide blocks into polygonal shapes or lots. The lots have the following default start rules:
Lot | Polygonal shape touching a street. |
LotInner | Lots that reside within a block but do not touch a street. |
LotCorner | Created when the corners of a lot are given a width when you set the Block Corner Length parameter on a block with recursive or offset subdivision. |
When you select a lot shape within a block, it displays the one of the start rules:
Subdivision type parameters
Several parameters are available that allow you to control the street shapes.
Subdivsion Type (attr type) | |
Specifies the subdivision algorithm to use: Recursive Subdivision, Offset Subdivision, Skeleton Subdivision, or No Subdivision | |
Recursive Subdivision creates rectangular lots by repeatedly splitting the block. | |
Offset Subdivision creates lots only within a given distance from the street edges of the block. | |
Skeleton Subdivision creates street-aligned lots that always have access. | |
No Subdivision doesn't perform subdivision on this shape. |
General block parameters
The following tables describe parameters that are common to all the block types.
Terrain Alignment (attr alignment) | |
This parameter is only used if the initial shapes are uneven. This sets the alignment of the lot over the terrain. There are four numeric options, as illustrated below. | |
Valid values are [0,1,2,3] | |
0. Uneven. The lots follow the terrain, given uneven heights. | |
1. Minimum. The lots lie at their lowest point of the terrain that they cover. | |
2. Maximum. The highest point of the lot is used. | |
3. Average. The average height of the lot is used. |
Create Shape (attr shapeCreation) | |
Enable or disable the shape geometry creation from the segment. |
Recursive subdivision
The recursive subdivision technique is the default. It subdivides the block into rectangular lots of various sizes.
Force Street Access (attr forceStreetAccess) | |
The factor indicating the preference for lots with street access. A higher value results in more lots having street access. | |
Given in range [0.0,1.0] | |
Subdivision obtained for a Force Street Access value close to 0. | |
Subdivision obtained for a Force Street Access value close to 1.0. |
Lot Area Min (attr lotAreaMin) and Lot Area Max (attr lotAreaMax) | |
The approximate lower and upper bounds of the area of lots obtained after subdivision. | |
Given in absolute area units | |
Subdivision obtained for smaller Lot Area Min and Lot Area Max values. | |
Subdivision obtained for larger Lot Area Min and Lot Area Max values. | |
Subdivision obtained when the difference between Lot Area Max and Lot Area Min is small. | |
Subdivision obtained when the difference between Lot Area Max and Lot Area Min is large. |
Lot Width Min (attr lotWidthMin) | |
The minimum width of the side of a lot. Subdivision stops if the length of any of the sides of any of the resulting lots is less than this value. If this value is high, the area of resulting lots may be larger than the area specified by Lot Area Max. | |
Given in absolute length units | |
Subdivision obtained for a smaller Lot Width Min value. | |
Subdivision obtained for a larger Lot Width Min value. |
Subdivision Irregularity (attr irregularity) | |
The relative deviation of the split line from the middle point of the center of the oriented bounding box (OBB). If this value is 0.0, the split line will be pivoted at the middle point of the OBB of the parent lot. A higher value results in the split line being farther away from the middle point, and generally, in a higher difference in the areas of the two children nodes. | |
Given in range [0.0,1.0] | |
Subdivision obtained for a Subdivision Irregularity value close to 0. | |
Subdivision obtained for a Subdivision Irregularity value close to 0.5. |
Subdivision Seed (attr seed) | |
To increase the stability of subdivisions under interactive editing operations, the random seeds for the children lots of a given lot are computed before the recursive call to the subdivision function. |
Block Corner Angle Threshold (attr cornerAngleMax) | |
Corner angle threshold. If the angle at the vertex of a block contour is less than this value, a corner lot is inserted. A larger value results in a more relaxed criterion for inserting corners, and thus in more corners being created. If this value is 0.0, no corners are created. | |
Given in degrees | |
Subdivision obtained for a smaller Block Corner Angle Threshold value. | |
Subdivision obtained for a larger Block Corner Angle Threshold value. |
Block Corner Length (attr cornerWidth) | |
Width of the interior side of the created corners. If this value is 0.0, no corners are created. The maximum value for this attribute is automatically computed to avoid self-intersections. | |
Given in absolute length units | |
Subdivision obtained for a smaller Block Corner Length value. | |
Subdivision obtained for a larger Block Corner Length value. |
Offset subdivision
A block that uses offset subdivision is offset to create a fixed-width strip along the street edges, which is then subdivided into lots.
Offset Width (attr offsetWidth) | |
The perpendicular distance from the block contour to the inward offset polygon. Intuitively, this value corresponds to the depth of the lots that are created when offset subdivision is used.
| |
Given in absolute length units | |
Subdivision obtained for a smaller Offset Width value. | |
Subdivision obtained for a larger Offset Width value. |
Recursive Subdivision | |
After the offset routine, there is an option to also run the recursive subdivision on the result. This is controlled by the same set of parameters as the recursive subdivision scheme. |
See Recursive subdivision for the rest of the specific parameters.
Skeleton subdivision
Skeleton subdivision attempts to subdivide a block such that every lot has access to the street. The sides of the lots are perpendicular to the roads to which they are adjacent.
Shallow Lot Fraction (attr shallowLotFrac) | |
Limit for merging triangular lots. | |
Subdivision obtained for a smaller Shallow Lot Fraction value. | |
Subdivision obtained for a larger Shallow Lot Fraction value. |
Corner Alignment (attr cornerAlignment) | |
Skeleton subdivided lots face their nearest streets. At the corner of two streets, one will normally take priority. The corner alignment determines how this priority is assigned, either by Street length or by Street width. | |
Street width—The widest street takes priority. If the streets have similar average widths, the street length is used instead. | |
Street length—The longest street takes priority. |
Simplify (attr simplify) | |
Amount of simplification that occurs. A high value creates irregular lots with fewer vertices. | |
Given in range [0.0,1.0] | |
Subdivision obtained for a smaller Simplify value. | |
Subdivision obtained for a larger Simplify value. |
Lot Area Min (attr lotAreaMin) | |
After subdivision, lots with a small area are repeatedly combined with their neighbors until they are larger than this minimum. This reduces the number of smaller lots, but may create lots of more irregular shape. | |
Given in absolute area units |
Lot Width Min (attr lotWidthMin) | |
The ideal length of street front that each lot should possess. This is increased or decreased by several other processes. A low lot width relative to the block size may create many narrow lots. | |
Given in absolute length units | |
Subdivision obtained for a Lot Width Min value of 15. | |
Subdivision obtained for a Lot Width Min value of 30. |
Subdivision Irregularity (attr irregularity) | |
As this parameter increases, it introduces a stochastic element into the lot width and lot edge direction. | |
Given in range [0.0,1.0] | |
Subdivision obtained for a smaller Subdivision Irregularity value. | |
Subdivision obtained for a larger Subdivision Irregularity value. |
Subdivision Seed (attr seed) | |
To increase the stability of subdivisions under interactive editing operations, the random seeds for the children lots of a given lot are computed before the recursive call to the subdivision function. |
No subdivision
No Subdivision | |
This simple subdivision technique subdivides the block into a single lot of the same shape. There is an option to remove the lot's corners. |
Description of algorithms
Recursive OBB algorithm
The recursive OBB algorithm computes a split line at each step. If the two lots resulting from the split meet the user-specified constraints, the algorithm recurses on them. To determine the pivot point and direction of the split line, the minimum-area oriented bounding box (OBB) of the lot is computed. By default, the pivot point is set to the midpoint of the largest edge of the OBB, and the split line direction is set to the direction of the smallest edge of the OBB. The split line pivot and direction can be modified by the following criteria:
- Street access—If one of the lots resulting from a split has no street access, the orthogonal vector to the initial direction vector is used.
- Snap to block contour vertices—If the split line is within a threshold distance from one of the vertices of the contour of the original block, the pivot point of the split line is set to that vertex.
- Edge alignment—To increase the stability of subdivisions under interactive editing operations, the sampling angle space to compute an approximation of the OBB uses one of the lot edges as reference.
- Random seeds—To increase the stability of subdivisions under interactive editing operations, the random seeds for the children lots of a given lot are computed before the recursive call to the subdivision function.
Offset algorithm
The offset subdivision algorithm computes the inward offset of the block contour and subdivides into lots the stripe between the block contour and its offset. The inward offset is computed with CGA. A set of sample points is computed along the offset. Consecutive points are separated by a distance computed as a function of the user-specified lot areas. Lines orthogonal to the offset at the sample points and passing through the sample points are used to split the stripe between the block contour and the offset.
Skeleton subdivision algorithm
The skeleton subdivision algorithm uses the straight skeleton (below, top left) to identify the center lines of the block. Given a set of skeleton faces, you identify those whose street edges are adjacent and of a similar curvature (below, top right). These faces are then grouped together. For each corner, the alignment priority (see Corner Alignment) determines how you assign the corner sections of these face-groups (below, bottom left). Finally, each of the face-groups are sliced in a direction perpendicular to their street edges to create lots, and small lots are merged together until they are larger than Lot Area Min.
Consistent Indexing
As a result of the recursive nature of the subdivision algorithm and the different criteria dictated by shape attributes, the ordering of the lots resulting from subdivision may significantly vary after an editing operation. This is particularly inconvenient if models have been generated inside the lots.
To improve the consistency in the lot indexing among two consecutive subdivisions, the algorithm computes the relative position of each lot for each one of the two subdivisions, using a metric based on generalized barycentric coordinates. Pairs of lots that are the closest to each other in this barycentric space, are assigned the same index.
The same approach is also used to improve the consistency of the seed of each lot. As a result, two lots that are relatively in the same position of the block at two different subdivision configurations, have higher chances of sharing the same seed and attributes. The figure below shows a subdivision together with the shapes generated from a grammar that assigns one of 15 possible random colors to each lot. Due to the consistency logic above, the colors of lots that have similar relative positions inside the block are preserved, even though the topology and geometry of the subdivisions are different as a result of an editing operation.
Subdivision for initial block | |
Subdivision for block after interactive editing |
Autogenerated street width attributes
For each resulting lot, an array of street width object attributes is generated.
Note:
The first edge of a lot is the edge with maximal street width.