ops Package#

geometry Module#

orangery.ops.geometry.close(line1, line2)#

Create lines to close left and right cross-section ends

Do something like this…

Parameters:
  • line1 (LineString) –

  • line2 (LineString) –

Return type:

tuple[LineString, LineString]

orangery.ops.geometry.cut_by_distance(line, distance)#

This line cutting function is from shapely recipes http://sgillies.net/blog/1040/shapely-recipes/

Parameters:
  • line (LineString) – the line to cut.

  • distance (float) – distance from beginning of line to cutting point.

Returns:

array of cut line segments.

Return type:

segments (LineString array)

orangery.ops.geometry.cut_by_distances(line, intersections)#

Cut a line at multiple points by calculating the distance of each point along the line. Uses the cut_by_distance function.

Parameters:
  • line (LineString) – the line to cut.

  • intersections (MultiPoint) – a MultiPoint object containing cut points

Returns:

contains the line segments.

Return type:

segments (MultiLineString)

orangery.ops.geometry.cut_by_point(line, pt)#

A cut function that divides a line and inserts points at the cut location.

Parameters:
  • line (LineString) – the line to cut.

  • pt (Point) – a point on the line where the cut is to be made.

Returns:

array of cut line segments.

Return type:

segments (LineString array)

orangery.ops.geometry.cut_by_points(line, intersections)#

Cut a line at multiple points by breaking the line and inserting each point. Uses the cut_by_point function.

Parameters:
  • line (LineString) – the line to cut.

  • intersections (MultiPoint) – a MultiPoint object containing the cut points.

Returns:

contains the line segments.

Return type:

segments (MultiLineString)

orangery.ops.geometry.difference(line1, line2, close_ends=False)#

Create polygons from two LineString objects.

Parameters:
  • line1 (LineString) – a line representing the initial condition.

  • line2 (LineString) – a line representing the final condition.

  • close_ends (bool) – option to close open line ends with vertical line segments.

Returns:

the intersections between the LineString objects. polygons (Polygon array) : the polygons between the lines. signs (int array) : contains values of +1 or -1 to identify polygons as cut or fill.

Return type:

intersections (Point array)

orangery.ops.geometry.extend(line, pt, prepend)#

Extends a LineString by one Point, which may be prepended at the start of the LineString, or appended at the end.

Parameters:
  • line (LineString) – the line to extend.

  • pt (Point) – the coordinate to extend to.

  • prepend (bool) – if True then prepend, else append.

Returns:

the extended LineString.

Return type:

newline (LineString)

orangery.ops.geometry.project(p1, p2, p3)#

Project a Point, p3 onto a line between Points p1 and p2.

Uses Shapely and GEOS functions, which set distance to zero for all negative distances.

Parameters:
  • p1 (Point) – point at zero distance on line between p1 and p2.

  • p2 (Point) – endpoint of line.

  • p3 (Point) – the point to project.

Returns:

the projected Point, disctance along line, offset from line, and fractional distance along line.

Return type:

result (dict)

orangery.ops.geometry.project2(p1, p2, p3)#

Project a Point, p3 onto a line intersecting Points p1 and p2.

Adapted from tutorial by Paul Bourke: http://paulbourke.net/geometry/pointline/ This projection function allows for points at negative distances.

Parameters:
  • p1 (Point) – point at zero distance on line between p1 and p2.

  • p2 (Point) – endpoint on line.

  • p3 (Point) – the point to project.

Returns:

the projected Point, distance along line, offset from line, and fractional distance along line.

Return type:

result (dict)

orangery.ops.geometry.project_points(points, p1, p2)#

Project multiple points onto a line through Points p1, p2.

Parameters:
  • points (pandas.DataFrame) – survey data to project.

  • p1 (Point) – point at zero distance on line between p1 and p2.

  • p2 (Point) – endpoint of line.

Returns:

DataFrame of projected points, including x, y, z, distance along line, offset from line, and fractional distance along line.

Return type:

result (DataFrame)

orangery.ops.geometry.sign(polygon, line)#
Parameters:
  • polygon (Polygon) –

  • line (LineString) –

Return type:

int

orangery.ops.geometry.snap_to_points(segments, intersections)#

Snap line segment endpoints to given points

Compare segment endpoints in a MultiLineString against points in a Point array to within a given precision; if the points match then update the segment endpoint with the coordinate given in the Point array.

Parameters:
  • segments (MultiLineString) – the line segments to snap.

  • intersections (Point array) – the points to snap to.

Returns:

an updated MultiLineString.

Return type:

newline (MultiLineString)

orangery.ops.geometry.update(line, pt, idx)#

Update a point within a LineString

Parameters:
  • line (LineString) – the line to update.

  • pt (Point) – the new coordinate.

  • idx (int) – the integer index of the vertex to update.

Returns:

the updated LineString.

Return type:

newline (LineString)

text Module#

orangery.ops.text.parse(points, codebook)#

Parses the codes in a DataFrame to extract information about points and chains of points.

Parameters:
  • points (DataFrame) – contains the survey data.

  • codebook (dict) – a dict that describes the codes used in the survey.

Returns:

Describes the points and chains of points. Column names match keys in the codes sub-dict,

the added group column currently comes from the ‘comment’ field at each start command.

Return type:

df (DataFrame)

correction Module#

Functions to translate coordinates

orangery.ops.correction.get_offsets(df, coords)#

Calulate the x,y,z offsets between a dataframe record, and an array of x,y,z coordinates.

Parameters:

df (DataFrame) –

Return type:

None | list[float]

orangery.ops.correction.translate(df, offsets)#

Translate the x,y,z coordinates for records in a dataframe by an array of offsets.

Parameters:

df (DataFrame) –

Return type:

DataFrame