Problem: Connectivity isn't established properly when using an Any Vertex connectivity policy and elevation fields


Using Any Vertex connectivity in conjunction with field-based elevation can cause undesirable connectivity in the network.


When using field-based elevation in a network, only the endpoints of edges actually carry the elevation values. So on an edge that has a From elevation of 1 and a To elevation of 3, only the corresponding endpoints carry the respective elevation values. All of the vertices between the endpoints carry NULL elevation values. This means that any intersection where an endpoint of one edge is coincident to a non-endpoint vertex of another edge, true connectivity can’t be established even if the policy is set to Any Vertex.

However, in this same configuration, if a non-endpoint vertex is coincident with another non-endpoint vertex, connectivity is established because both vertices share the same elevation (which is NULL) even though the endpoints may not have the same elevation values. This means that connectivity can occur in areas where it shouldn't, and it may not occur in areas where it is intended to.
[O-Image] Illustration

Solution or Workaround

There are several ways to fix this. Keep in mind that retaining data integrity and simplicity is usually considered the best practice.

Whenever changing the geometry of the source data or modifying the connectivity rules, the network must be rebuilt to reestablish the connectivity, recalculate affected attributes, and update the network elements.

  • The first option, especially if elevation isn’t necessary, is to not use elevation by setting the Elevation Model to 'None' on the Elevation tab of the Network Dataset Properties dialog box.
  • If elevation is indeed necessary, a recommended option is to split the edges at each point that they intersect and on the Connectivity tab of the Network Dataset Properties dialog box, use the 'End Point' connectivity policy. This ensures that there is always an endpoint where a junction is, thereby assuring the translation of field-based elevation values when traversing the network.

    Make sure that fields sourcing the distance and time-to-traverse costs are recalculated after doing this, as attributes are copied to both features when a line is split.

  • The third option is to use Z-enabled feature classes and on the Elevation tab, set the Elevation Model to 'Using Z Coordinate Values from Geometry'. In a Z-enabled feature class, an elevation (Z) value is stored in each vertex of the line, not just the endpoints. Using this option, Any Vertex connectivity could still be used.

Related Information