mirror of
https://github.com/enzet/map-machine.git
synced 2025-05-22 13:36:26 +02:00
Fix code style.
This commit is contained in:
parent
b02b7cc4ab
commit
e5671fcf8f
12 changed files with 52 additions and 27 deletions
|
@ -1,6 +1,7 @@
|
||||||
"""
|
"""
|
||||||
Construct Röntgen nodes and ways.
|
Construct Röntgen nodes and ways.
|
||||||
"""
|
"""
|
||||||
|
import logging
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from hashlib import sha256
|
from hashlib import sha256
|
||||||
from typing import Any, Dict, Iterator, List, Optional, Set
|
from typing import Any, Dict, Iterator, List, Optional, Set
|
||||||
|
@ -17,9 +18,7 @@ from roentgen.flinger import Flinger
|
||||||
from roentgen.icon import (
|
from roentgen.icon import (
|
||||||
DEFAULT_SMALL_SHAPE_ID, Icon, IconSet, ShapeExtractor, ShapeSpecification
|
DEFAULT_SMALL_SHAPE_ID, Icon, IconSet, ShapeExtractor, ShapeSpecification
|
||||||
)
|
)
|
||||||
from roentgen.osm_reader import (
|
from roentgen.osm_reader import Map, OSMNode, OSMRelation, OSMWay, Tagged
|
||||||
Map, OSMMember, OSMNode, OSMRelation, OSMWay, Tagged
|
|
||||||
)
|
|
||||||
from roentgen.point import Point
|
from roentgen.point import Point
|
||||||
from roentgen.scheme import DEFAULT_COLOR, LineStyle, Scheme
|
from roentgen.scheme import DEFAULT_COLOR, LineStyle, Scheme
|
||||||
from roentgen.util import MinMax
|
from roentgen.util import MinMax
|
||||||
|
@ -48,7 +47,7 @@ def line_center(nodes: List[OSMNode], flinger: Flinger) -> np.array:
|
||||||
"""
|
"""
|
||||||
boundary: List[MinMax] = [MinMax(), MinMax()]
|
boundary: List[MinMax] = [MinMax(), MinMax()]
|
||||||
|
|
||||||
for node in nodes: # type: OSMNode
|
for node in nodes:
|
||||||
boundary[0].update(node.coordinates[0])
|
boundary[0].update(node.coordinates[0])
|
||||||
boundary[1].update(node.coordinates[1])
|
boundary[1].update(node.coordinates[1])
|
||||||
center_coordinates = np.array((boundary[0].center(), boundary[1].center()))
|
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]] = []
|
result: List[List[OSMNode]] = []
|
||||||
to_process: Set[OSMWay] = set()
|
to_process: Set[OSMWay] = set()
|
||||||
|
|
||||||
for way in ways: # type: OSMWay
|
for way in ways:
|
||||||
if way.is_cycle():
|
if way.is_cycle():
|
||||||
result.append(way.nodes)
|
result.append(way.nodes)
|
||||||
else:
|
else:
|
||||||
|
@ -95,7 +94,7 @@ def glue(ways: List[OSMWay]) -> List[List[OSMNode]]:
|
||||||
glued: Optional[OSMWay] = None
|
glued: Optional[OSMWay] = None
|
||||||
other_way: 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)
|
glued = way.try_to_glue(other_way)
|
||||||
if glued:
|
if glued:
|
||||||
break
|
break
|
||||||
|
@ -170,7 +169,7 @@ class Constructor:
|
||||||
Construct Röntgen ways.
|
Construct Röntgen ways.
|
||||||
"""
|
"""
|
||||||
way_number: int = 0
|
way_number: int = 0
|
||||||
for way_id in self.map_.ways: # type: int
|
for way_id in self.map_.ways:
|
||||||
ui.progress_bar(
|
ui.progress_bar(
|
||||||
way_number,
|
way_number,
|
||||||
len(self.map_.ways),
|
len(self.map_.ways),
|
||||||
|
@ -226,7 +225,7 @@ class Constructor:
|
||||||
self.roads.append(Road(line.tags, inners, outers, road_matcher))
|
self.roads.append(Road(line.tags, inners, outers, road_matcher))
|
||||||
return
|
return
|
||||||
|
|
||||||
for line_style in line_styles: # type: LineStyle
|
for line_style in line_styles:
|
||||||
self.figures.append(
|
self.figures.append(
|
||||||
StyledFigure(line.tags, inners, outers, line_style)
|
StyledFigure(line.tags, inners, outers, line_style)
|
||||||
)
|
)
|
||||||
|
@ -308,7 +307,7 @@ class Constructor:
|
||||||
continue
|
continue
|
||||||
inner_ways: List[OSMWay] = []
|
inner_ways: List[OSMWay] = []
|
||||||
outer_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.type_ == "way":
|
||||||
if member.role == "inner":
|
if member.role == "inner":
|
||||||
if member.ref in self.map_.ways:
|
if member.ref in self.map_.ways:
|
||||||
|
@ -317,7 +316,7 @@ class Constructor:
|
||||||
if member.ref in self.map_.ways:
|
if member.ref in self.map_.ways:
|
||||||
outer_ways.append(self.map_.ways[member.ref])
|
outer_ways.append(self.map_.ways[member.ref])
|
||||||
else:
|
else:
|
||||||
print(f'Unknown member role "{member.role}".')
|
logging.warning(f'Unknown member role "{member.role}".')
|
||||||
if outer_ways:
|
if outer_ways:
|
||||||
inners_path: List[List[OSMNode]] = glue(inner_ways)
|
inners_path: List[List[OSMNode]] = glue(inner_ways)
|
||||||
outers_path: List[List[OSMNode]] = glue(outer_ways)
|
outers_path: List[List[OSMNode]] = glue(outer_ways)
|
||||||
|
@ -334,7 +333,7 @@ class Constructor:
|
||||||
key=lambda x: -self.map_.nodes[x].coordinates[0],
|
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()
|
processed: Set[str] = set()
|
||||||
|
|
||||||
node_number += 1
|
node_number += 1
|
||||||
|
|
|
@ -7,6 +7,9 @@ from roentgen.osm_reader import OSMNode, Tagged
|
||||||
from roentgen.road import Lane
|
from roentgen.road import Lane
|
||||||
from roentgen.scheme import LineStyle, RoadMatcher, Scheme
|
from roentgen.scheme import LineStyle, RoadMatcher, Scheme
|
||||||
|
|
||||||
|
__author__ = "Sergey Vartanov"
|
||||||
|
__email__ = "me@enzet.ru"
|
||||||
|
|
||||||
|
|
||||||
class Figure(Tagged):
|
class Figure(Tagged):
|
||||||
"""
|
"""
|
||||||
|
@ -182,7 +185,7 @@ def is_clockwise(polygon: List[OSMNode]) -> bool:
|
||||||
:param polygon: list of OpenStreetMap nodes
|
:param polygon: list of OpenStreetMap nodes
|
||||||
"""
|
"""
|
||||||
count: float = 0
|
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
|
next_index: int = 0 if index == len(polygon) - 1 else index + 1
|
||||||
count += (polygon[next_index].coordinates[0] - node.coordinates[0]) * (
|
count += (polygon[next_index].coordinates[0] - node.coordinates[0]) * (
|
||||||
polygon[next_index].coordinates[1] + node.coordinates[1]
|
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 = ""
|
path: str = ""
|
||||||
prev_node: Optional[OSMNode] = None
|
prev_node: Optional[OSMNode] = None
|
||||||
for node in nodes: # type: OSMNode
|
for node in nodes:
|
||||||
flung = flinger.fling(node.coordinates) + shift
|
flung = flinger.fling(node.coordinates) + shift
|
||||||
path += ("L" if prev_node else "M") + f" {flung[0]},{flung[1]} "
|
path += ("L" if prev_node else "M") + f" {flung[0]},{flung[1]} "
|
||||||
prev_node = node
|
prev_node = node
|
||||||
|
|
|
@ -7,7 +7,7 @@ import re
|
||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict, List, Optional, Set
|
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 numpy as np
|
||||||
import svgwrite
|
import svgwrite
|
||||||
|
@ -183,10 +183,10 @@ class ShapeExtractor:
|
||||||
)
|
)
|
||||||
with svg_file_name.open() as input_file:
|
with svg_file_name.open() as input_file:
|
||||||
content: Document = parse(input_file)
|
content: Document = parse(input_file)
|
||||||
for element in content.childNodes: # type: Element
|
for element in content.childNodes:
|
||||||
if element.nodeName != "svg":
|
if element.nodeName != "svg":
|
||||||
continue
|
continue
|
||||||
for node in element.childNodes: # type: Node
|
for node in element.childNodes:
|
||||||
if isinstance(node, Element):
|
if isinstance(node, Element):
|
||||||
self.parse(node)
|
self.parse(node)
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,9 @@ from roentgen.icon import ShapeExtractor
|
||||||
from roentgen.osm_reader import STAGES_OF_DECAY
|
from roentgen.osm_reader import STAGES_OF_DECAY
|
||||||
from roentgen.scheme import Scheme, Matcher
|
from roentgen.scheme import Scheme, Matcher
|
||||||
|
|
||||||
|
__author__ = "Sergey Vartanov"
|
||||||
|
__email__ = "me@enzet.ru"
|
||||||
|
|
||||||
|
|
||||||
class MapCSSWriter:
|
class MapCSSWriter:
|
||||||
def __init__(
|
def __init__(
|
||||||
|
@ -71,7 +74,7 @@ class MapCSSWriter:
|
||||||
|
|
||||||
return selector
|
return selector
|
||||||
|
|
||||||
def write(self, output_file) -> None:
|
def write(self, output_file: Path) -> None:
|
||||||
"""
|
"""
|
||||||
Construct icon selectors for MapCSS 0.2 scheme.
|
Construct icon selectors for MapCSS 0.2 scheme.
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -17,7 +17,7 @@ from roentgen.figure import Road
|
||||||
from roentgen.flinger import Flinger
|
from roentgen.flinger import Flinger
|
||||||
from roentgen.icon import ShapeExtractor
|
from roentgen.icon import ShapeExtractor
|
||||||
from roentgen.osm_reader import Map, OSMNode
|
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.road import Intersection, RoadPart
|
||||||
from roentgen.scheme import Scheme
|
from roentgen.scheme import Scheme
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ class Painter:
|
||||||
nodes = sorted(constructor.points, key=lambda x: -x.priority)
|
nodes = sorted(constructor.points, key=lambda x: -x.priority)
|
||||||
steps: int = len(nodes)
|
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 (
|
if node.get_tag("natural") == "tree" and (
|
||||||
"diameter_crown" in node.tags or "circumference" in node.tags
|
"diameter_crown" in node.tags or "circumference" in node.tags
|
||||||
):
|
):
|
||||||
|
@ -110,13 +110,13 @@ class Painter:
|
||||||
)
|
)
|
||||||
node.draw_main_shapes(self.svg, occupied)
|
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(
|
ui.progress_bar(
|
||||||
steps + index, steps * 3, step=10, text="Drawing extra icons"
|
steps + index, steps * 3, step=10, text="Drawing extra icons"
|
||||||
)
|
)
|
||||||
point.draw_extra_shapes(self.svg, occupied)
|
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(
|
ui.progress_bar(
|
||||||
steps * 2 + index, steps * 3, step=10, text="Drawing texts"
|
steps * 2 + index, steps * 3, step=10, text="Drawing texts"
|
||||||
)
|
)
|
||||||
|
@ -181,7 +181,7 @@ class Painter:
|
||||||
)
|
)
|
||||||
building_shade.add(path)
|
building_shade.add(path)
|
||||||
for nodes in building.inners + building.outers:
|
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_1 = self.flinger.fling(nodes[i].coordinates)
|
||||||
flung_2 = self.flinger.fling(nodes[i + 1].coordinates)
|
flung_2 = self.flinger.fling(nodes[i + 1].coordinates)
|
||||||
command = (
|
command = (
|
||||||
|
@ -260,7 +260,7 @@ class Painter:
|
||||||
"""
|
"""
|
||||||
Draw gradient sectors for directions.
|
Draw gradient sectors for directions.
|
||||||
"""
|
"""
|
||||||
for node in constructor.points: # type: Point
|
for node in constructor.points:
|
||||||
|
|
||||||
angle = None
|
angle = None
|
||||||
is_revert_gradient: bool = False
|
is_revert_gradient: bool = False
|
||||||
|
|
|
@ -3,6 +3,9 @@ import subprocess
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
|
__author__ = "Sergey Vartanov"
|
||||||
|
__email__ = "me@enzet.ru"
|
||||||
|
|
||||||
|
|
||||||
def rasterize(from_: Path, to_: Path, area: str = "", dpi: float = 90) -> None:
|
def rasterize(from_: Path, to_: Path, area: str = "", dpi: float = 90) -> None:
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -11,6 +11,9 @@ from roentgen.flinger import Flinger
|
||||||
from roentgen.osm_reader import OSMNode
|
from roentgen.osm_reader import OSMNode
|
||||||
from roentgen.vector import Line, angle, norm, turn_by_angle
|
from roentgen.vector import Line, angle, norm, turn_by_angle
|
||||||
|
|
||||||
|
__author__ = "Sergey Vartanov"
|
||||||
|
__email__ = "me@enzet.ru"
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class Lane:
|
class Lane:
|
||||||
|
|
|
@ -303,7 +303,7 @@ class Scheme:
|
||||||
"""
|
"""
|
||||||
if key in self.tags_to_write or key in self.tags_to_skip:
|
if key in self.tags_to_write or key in self.tags_to_skip:
|
||||||
return True
|
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}:":
|
if key[: len(prefix) + 1] == f"{prefix}:":
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
@ -319,7 +319,7 @@ class Scheme:
|
||||||
return False
|
return False
|
||||||
if key in self.tags_to_write:
|
if key in self.tags_to_write:
|
||||||
return True
|
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}:":
|
if key[: len(prefix) + 1] == f"{prefix}:":
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
|
@ -7,6 +7,9 @@ from roentgen.workspace import workspace
|
||||||
from roentgen.raster import rasterize
|
from roentgen.raster import rasterize
|
||||||
from roentgen.tile import Tile
|
from roentgen.tile import Tile
|
||||||
|
|
||||||
|
__author__ = "Sergey Vartanov"
|
||||||
|
__email__ = "me@enzet.ru"
|
||||||
|
|
||||||
|
|
||||||
class Handler(BaseHTTPRequestHandler):
|
class Handler(BaseHTTPRequestHandler):
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,9 @@ from roentgen.scheme import Scheme
|
||||||
from roentgen.util import MinMax
|
from roentgen.util import MinMax
|
||||||
from roentgen.ui import BoundaryBox
|
from roentgen.ui import BoundaryBox
|
||||||
|
|
||||||
|
__author__ = "Sergey Vartanov"
|
||||||
|
__email__ = "me@enzet.ru"
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class Tiles:
|
class Tiles:
|
||||||
|
@ -267,7 +270,7 @@ class Tile:
|
||||||
)
|
)
|
||||||
painter.draw(constructor)
|
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:
|
with output_file_name.open("w") as output_file:
|
||||||
svg.write(output_file)
|
svg.write(output_file)
|
||||||
|
|
||||||
|
@ -301,5 +304,7 @@ def ui(options) -> None:
|
||||||
tiles.draw(directory, Path(options.cache))
|
tiles.draw(directory, Path(options.cache))
|
||||||
tiles.draw_image(Path(options.cache))
|
tiles.draw_image(Path(options.cache))
|
||||||
else:
|
else:
|
||||||
logging.fatal("Specify either --coordinates, or --tile.")
|
logging.fatal(
|
||||||
|
"Specify either --coordinates, --boundary-box, or --tile."
|
||||||
|
)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
|
@ -3,6 +3,9 @@ Vector utility.
|
||||||
"""
|
"""
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
__author__ = "Sergey Vartanov"
|
||||||
|
__email__ = "me@enzet.ru"
|
||||||
|
|
||||||
|
|
||||||
def angle(vector: np.array):
|
def angle(vector: np.array):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -3,6 +3,9 @@ File and directory path in the project.
|
||||||
"""
|
"""
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
__author__ = "Sergey Vartanov"
|
||||||
|
__email__ = "me@enzet.ru"
|
||||||
|
|
||||||
|
|
||||||
def check_and_create(directory: Path) -> Path:
|
def check_and_create(directory: Path) -> Path:
|
||||||
"""Create directory if it doesn't exist and return it."""
|
"""Create directory if it doesn't exist and return it."""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue