diff --git a/roentgen/constructor.py b/roentgen/constructor.py index d1234d7..3fee833 100644 --- a/roentgen/constructor.py +++ b/roentgen/constructor.py @@ -1,6 +1,7 @@ """ Construct Röntgen nodes and ways. """ +import logging from datetime import datetime from hashlib import sha256 from typing import Any, Dict, Iterator, List, Optional, Set @@ -17,9 +18,7 @@ from roentgen.flinger import Flinger from roentgen.icon import ( DEFAULT_SMALL_SHAPE_ID, Icon, IconSet, ShapeExtractor, ShapeSpecification ) -from roentgen.osm_reader import ( - Map, OSMMember, OSMNode, OSMRelation, OSMWay, Tagged -) +from roentgen.osm_reader import Map, OSMNode, OSMRelation, OSMWay, Tagged from roentgen.point import Point from roentgen.scheme import DEFAULT_COLOR, LineStyle, Scheme from roentgen.util import MinMax @@ -48,7 +47,7 @@ def line_center(nodes: List[OSMNode], flinger: Flinger) -> np.array: """ boundary: List[MinMax] = [MinMax(), MinMax()] - for node in nodes: # type: OSMNode + for node in nodes: boundary[0].update(node.coordinates[0]) boundary[1].update(node.coordinates[1]) center_coordinates = np.array((boundary[0].center(), boundary[1].center())) @@ -84,7 +83,7 @@ def glue(ways: List[OSMWay]) -> List[List[OSMNode]]: result: List[List[OSMNode]] = [] to_process: Set[OSMWay] = set() - for way in ways: # type: OSMWay + for way in ways: if way.is_cycle(): result.append(way.nodes) else: @@ -95,7 +94,7 @@ def glue(ways: List[OSMWay]) -> List[List[OSMNode]]: glued: Optional[OSMWay] = None other_way: Optional[OSMWay] = None - for other_way in to_process: # type: OSMWay + for other_way in to_process: glued = way.try_to_glue(other_way) if glued: break @@ -170,7 +169,7 @@ class Constructor: Construct Röntgen ways. """ way_number: int = 0 - for way_id in self.map_.ways: # type: int + for way_id in self.map_.ways: ui.progress_bar( way_number, len(self.map_.ways), @@ -226,7 +225,7 @@ class Constructor: self.roads.append(Road(line.tags, inners, outers, road_matcher)) return - for line_style in line_styles: # type: LineStyle + for line_style in line_styles: self.figures.append( StyledFigure(line.tags, inners, outers, line_style) ) @@ -308,7 +307,7 @@ class Constructor: continue inner_ways: List[OSMWay] = [] outer_ways: List[OSMWay] = [] - for member in relation.members: # type: OSMMember + for member in relation.members: if member.type_ == "way": if member.role == "inner": if member.ref in self.map_.ways: @@ -317,7 +316,7 @@ class Constructor: if member.ref in self.map_.ways: outer_ways.append(self.map_.ways[member.ref]) else: - print(f'Unknown member role "{member.role}".') + logging.warning(f'Unknown member role "{member.role}".') if outer_ways: inners_path: List[List[OSMNode]] = glue(inner_ways) outers_path: List[List[OSMNode]] = glue(outer_ways) @@ -334,7 +333,7 @@ class Constructor: key=lambda x: -self.map_.nodes[x].coordinates[0], ) - for node_id in sorted_node_ids: # type: int + for node_id in sorted_node_ids: processed: Set[str] = set() node_number += 1 diff --git a/roentgen/figure.py b/roentgen/figure.py index 3679748..bdbbbb0 100644 --- a/roentgen/figure.py +++ b/roentgen/figure.py @@ -7,6 +7,9 @@ from roentgen.osm_reader import OSMNode, Tagged from roentgen.road import Lane from roentgen.scheme import LineStyle, RoadMatcher, Scheme +__author__ = "Sergey Vartanov" +__email__ = "me@enzet.ru" + class Figure(Tagged): """ @@ -182,7 +185,7 @@ def is_clockwise(polygon: List[OSMNode]) -> bool: :param polygon: list of OpenStreetMap nodes """ count: float = 0 - for index, node in enumerate(polygon): # type: int, OSMNode + for index, node in enumerate(polygon): next_index: int = 0 if index == len(polygon) - 1 else index + 1 count += (polygon[next_index].coordinates[0] - node.coordinates[0]) * ( polygon[next_index].coordinates[1] + node.coordinates[1] @@ -214,7 +217,7 @@ def get_path(nodes: List[OSMNode], shift: np.array, flinger: Flinger) -> str: """ path: str = "" prev_node: Optional[OSMNode] = None - for node in nodes: # type: OSMNode + for node in nodes: flung = flinger.fling(node.coordinates) + shift path += ("L" if prev_node else "M") + f" {flung[0]},{flung[1]} " prev_node = node diff --git a/roentgen/icon.py b/roentgen/icon.py index 6e5707d..34a9b5d 100644 --- a/roentgen/icon.py +++ b/roentgen/icon.py @@ -7,7 +7,7 @@ import re from dataclasses import dataclass, field from pathlib import Path from typing import Any, Dict, List, Optional, Set -from xml.dom.minidom import Document, Element, Node, parse +from xml.dom.minidom import Document, Element, parse import numpy as np import svgwrite @@ -183,10 +183,10 @@ class ShapeExtractor: ) with svg_file_name.open() as input_file: content: Document = parse(input_file) - for element in content.childNodes: # type: Element + for element in content.childNodes: if element.nodeName != "svg": continue - for node in element.childNodes: # type: Node + for node in element.childNodes: if isinstance(node, Element): self.parse(node) diff --git a/roentgen/mapcss.py b/roentgen/mapcss.py index 51bbe7d..358d604 100644 --- a/roentgen/mapcss.py +++ b/roentgen/mapcss.py @@ -13,6 +13,9 @@ from roentgen.icon import ShapeExtractor from roentgen.osm_reader import STAGES_OF_DECAY from roentgen.scheme import Scheme, Matcher +__author__ = "Sergey Vartanov" +__email__ = "me@enzet.ru" + class MapCSSWriter: def __init__( @@ -71,7 +74,7 @@ class MapCSSWriter: return selector - def write(self, output_file) -> None: + def write(self, output_file: Path) -> None: """ Construct icon selectors for MapCSS 0.2 scheme. """ diff --git a/roentgen/mapper.py b/roentgen/mapper.py index de05624..7f5cc76 100644 --- a/roentgen/mapper.py +++ b/roentgen/mapper.py @@ -17,7 +17,7 @@ from roentgen.figure import Road from roentgen.flinger import Flinger from roentgen.icon import ShapeExtractor from roentgen.osm_reader import Map, OSMNode -from roentgen.point import Occupied, Point +from roentgen.point import Occupied from roentgen.road import Intersection, RoadPart from roentgen.scheme import Scheme @@ -100,7 +100,7 @@ class Painter: nodes = sorted(constructor.points, key=lambda x: -x.priority) steps: int = len(nodes) - for index, node in enumerate(nodes): # type: int, Point + for index, node in enumerate(nodes): if node.get_tag("natural") == "tree" and ( "diameter_crown" in node.tags or "circumference" in node.tags ): @@ -110,13 +110,13 @@ class Painter: ) node.draw_main_shapes(self.svg, occupied) - for index, point in enumerate(nodes): # type: int, Point + for index, point in enumerate(nodes): ui.progress_bar( steps + index, steps * 3, step=10, text="Drawing extra icons" ) point.draw_extra_shapes(self.svg, occupied) - for index, point in enumerate(nodes): # type: int, Point + for index, point in enumerate(nodes): ui.progress_bar( steps * 2 + index, steps * 3, step=10, text="Drawing texts" ) @@ -181,7 +181,7 @@ class Painter: ) building_shade.add(path) for nodes in building.inners + building.outers: - for i in range(len(nodes) - 1): # type: int + for i in range(len(nodes) - 1): flung_1 = self.flinger.fling(nodes[i].coordinates) flung_2 = self.flinger.fling(nodes[i + 1].coordinates) command = ( @@ -260,7 +260,7 @@ class Painter: """ Draw gradient sectors for directions. """ - for node in constructor.points: # type: Point + for node in constructor.points: angle = None is_revert_gradient: bool = False diff --git a/roentgen/raster.py b/roentgen/raster.py index 8a96a81..6f77424 100644 --- a/roentgen/raster.py +++ b/roentgen/raster.py @@ -3,6 +3,9 @@ import subprocess from pathlib import Path from typing import List +__author__ = "Sergey Vartanov" +__email__ = "me@enzet.ru" + def rasterize(from_: Path, to_: Path, area: str = "", dpi: float = 90) -> None: """ diff --git a/roentgen/road.py b/roentgen/road.py index f41a1ce..4a8edb5 100644 --- a/roentgen/road.py +++ b/roentgen/road.py @@ -11,6 +11,9 @@ from roentgen.flinger import Flinger from roentgen.osm_reader import OSMNode from roentgen.vector import Line, angle, norm, turn_by_angle +__author__ = "Sergey Vartanov" +__email__ = "me@enzet.ru" + @dataclass class Lane: diff --git a/roentgen/scheme.py b/roentgen/scheme.py index 31f835f..7066826 100644 --- a/roentgen/scheme.py +++ b/roentgen/scheme.py @@ -303,7 +303,7 @@ class Scheme: """ if key in self.tags_to_write or key in self.tags_to_skip: return True - for prefix in self.prefix_to_write + self.prefix_to_skip: # type: str + for prefix in self.prefix_to_write + self.prefix_to_skip: if key[: len(prefix) + 1] == f"{prefix}:": return True return False @@ -319,7 +319,7 @@ class Scheme: return False if key in self.tags_to_write: return True - for prefix in self.prefix_to_write: # type: str + for prefix in self.prefix_to_write: if key[: len(prefix) + 1] == f"{prefix}:": return True return False diff --git a/roentgen/server.py b/roentgen/server.py index 51ef870..b518896 100644 --- a/roentgen/server.py +++ b/roentgen/server.py @@ -7,6 +7,9 @@ from roentgen.workspace import workspace from roentgen.raster import rasterize from roentgen.tile import Tile +__author__ = "Sergey Vartanov" +__email__ = "me@enzet.ru" + class Handler(BaseHTTPRequestHandler): diff --git a/roentgen/tile.py b/roentgen/tile.py index 7d05dad..431c1f8 100644 --- a/roentgen/tile.py +++ b/roentgen/tile.py @@ -24,6 +24,9 @@ from roentgen.scheme import Scheme from roentgen.util import MinMax from roentgen.ui import BoundaryBox +__author__ = "Sergey Vartanov" +__email__ = "me@enzet.ru" + @dataclass class Tiles: @@ -267,7 +270,7 @@ class Tile: ) painter.draw(constructor) - print(f"Writing output SVG {output_file_name}...") + logging.info(f"Writing output SVG {output_file_name}...") with output_file_name.open("w") as output_file: svg.write(output_file) @@ -301,5 +304,7 @@ def ui(options) -> None: tiles.draw(directory, Path(options.cache)) tiles.draw_image(Path(options.cache)) else: - logging.fatal("Specify either --coordinates, or --tile.") + logging.fatal( + "Specify either --coordinates, --boundary-box, or --tile." + ) sys.exit(1) diff --git a/roentgen/vector.py b/roentgen/vector.py index bfa00ce..4ed14d4 100644 --- a/roentgen/vector.py +++ b/roentgen/vector.py @@ -3,6 +3,9 @@ Vector utility. """ import numpy as np +__author__ = "Sergey Vartanov" +__email__ = "me@enzet.ru" + def angle(vector: np.array): """ diff --git a/roentgen/workspace.py b/roentgen/workspace.py index fc5c919..ceae402 100644 --- a/roentgen/workspace.py +++ b/roentgen/workspace.py @@ -3,6 +3,9 @@ File and directory path in the project. """ from pathlib import Path +__author__ = "Sergey Vartanov" +__email__ = "me@enzet.ru" + def check_and_create(directory: Path) -> Path: """Create directory if it doesn't exist and return it."""