diff --git a/map_machine/doc/doc_collections.py b/map_machine/doc/doc_collections.py index 92ea15a..dcd023e 100644 --- a/map_machine/doc/doc_collections.py +++ b/map_machine/doc/doc_collections.py @@ -28,22 +28,22 @@ EXTRACTOR: ShapeExtractor = ShapeExtractor( class Collection: """Icon collection.""" - # Core tags + # Core tags. tags: Tags - # Tag key to be used in rows + # Tag key to be used in rows. row_key: Optional[str] = None - # List of tag values to be used in rows + # List of tag values to be used in rows. row_values: list[str] = field(default_factory=list) - # Tag key to be used in columns + # Tag key to be used in columns. column_key: Optional[str] = None - # List of tag values to be used in columns + # List of tag values to be used in columns. column_values: list[str] = field(default_factory=list) - # List of tags to be used in rows + # List of tags to be used in rows. row_tags: list[Tags] = field(default_factory=list) @classmethod diff --git a/map_machine/geometry/flinger.py b/map_machine/geometry/flinger.py index 532effd..dba3169 100644 --- a/map_machine/geometry/flinger.py +++ b/map_machine/geometry/flinger.py @@ -49,6 +49,8 @@ class Flinger: equator_length: float, ) -> None: """ + Initialize flinger with geo boundary box and zoom level. + :param geo_boundaries: minimum and maximum latitude and longitude :param zoom_level: zoom level in OpenStreetMap terminology :param equator_length: celestial body equator length in meters diff --git a/map_machine/geometry/vector.py b/map_machine/geometry/vector.py index c6a79f3..f42f4a4 100644 --- a/map_machine/geometry/vector.py +++ b/map_machine/geometry/vector.py @@ -1,4 +1,6 @@ """Vector utility.""" +from typing import Optional + import numpy as np __author__ = "Sergey Vartanov" @@ -9,8 +11,9 @@ from shapely.geometry import LineString def compute_angle(vector: np.ndarray) -> float: """ - For the given vector compute an angle between it and (1, 0) vector. The - result is in [0, 2π]. + For the given vector compute an angle between it and (1, 0) vector. + + The result is in [0, 2π]. """ if vector[0] == 0.0: if vector[1] > 0.0: @@ -47,6 +50,7 @@ class Polyline: def get_path(self, parallel_offset: float = 0.0) -> str: """Construct SVG path commands.""" points: list[np.ndarray] + if np.allclose(parallel_offset, 0.0): points = self.points else: @@ -132,14 +136,22 @@ class Segment: np.arccos(np.dot(vector, np.array((0.0, 1.0)))) / np.pi ) - def __repr__(self): + def __repr__(self) -> str: + """Get simple string representation.""" return f"{self.point_1} -- {self.point_2}" def __lt__(self, other: "Segment") -> bool: + """Compare central y coordinates of segments.""" return self.y < other.y - def intersection(self, other: "Segment"): - divisor = (self.point_1[0] - self.point_2[0]) * ( + def intersection(self, other: "Segment") -> Optional[list[float]]: + """ + Find and intersection point between two segments. + + :return: `None` if segments don't intersect, [x, y] coordinates of + the resulting point otherwise. + """ + divisor: float = (self.point_1[0] - self.point_2[0]) * ( other.point_1[1] - other.point_2[1] ) - (self.point_1[1] - self.point_2[1]) * ( other.point_1[0] - other.point_2[0] @@ -162,7 +174,6 @@ class Segment: ) / divisor if 0 <= t <= 1 and 0 <= u <= 1: - print(t) return [ self.point_1[0] + t * (self.point_2[0] - self.point_1[0]), self.point_1[1] + t * (self.point_2[1] - self.point_1[1]),