from dataclasses import dataclass, field
import os
from typing import (
Dict,
List,
Literal,
Optional,
Tuple,
Union,
Any,
Callable,
Mapping,
Sequence,
)
from enum import Enum
from composition_configs import core_config, type_defs, io_types
from file_manager import work_file_manager
[docs]
@dataclass(frozen=True)
class SymbologyLayerSpec:
unique_name: str
input_feature: io_types.GdbIOArg
input_lyrx: str
grouped_lyrx: bool
target_layer_name: Optional[str] = None
[docs]
@dataclass(frozen=True)
class BarrierRule:
name: str
gap_meters: int
use_turn_orientation: bool = False
[docs]
@dataclass(frozen=True, slots=True)
class BarrierDefault:
gap_meters: int
use_turn_orientation: bool = False
[docs]
@dataclass(frozen=True, slots=True)
class BarrierOverride:
gap_meters: Optional[int] = None
use_turn_orientation: Optional[bool] = None
[docs]
@dataclass(frozen=True)
class RbcPolygonInitKwargs:
input_data_structure: list[SymbologyLayerSpec]
output_building_polygons: io_types.GdbIOArg
output_collapsed_polygon_points: io_types.GdbIOArg
work_file_manager_config: core_config.WorkFileConfig
building_unique_name: str
barrier_default: BarrierDefault
barrier_overrides: Optional[List[BarrierRule]] = None
[docs]
@dataclass(frozen=True)
class RbcPointsInitKwargs:
input_data_structure: List[SymbologyLayerSpec]
building_points_unique_name: str
building_polygons_unique_name: str
building_gap_distance_m: int
output_points_after_rbc: io_types.GdbIOArg
output_polygons_after_rbc: io_types.GdbIOArg
work_file_manager_config: core_config.WorkFileConfig
building_symbol_dimension: dict[int, tuple]
barrier_default: BarrierDefault
barrier_overrides: Optional[List[BarrierRule]] = None
map_scale: str = "100000"
[docs]
@dataclass(frozen=True)
class BegrensningskurveLandWaterKwargs:
input_begrensningskurve: io_types.GdbIOArg
input_land_cover_features: io_types.GdbIOArg
output_begrensningskurve: io_types.GdbIOArg
water_feature_buffer_width: int
water_barrier_buffer_width: int
work_file_manager_config: core_config.WorkFileConfig
[docs]
@dataclass(frozen=True)
class LineToBufferSymbologyKwargs:
input_line: io_types.GdbIOArg
output_line: io_types.GdbIOArg
sql_selection_query: dict
work_file_manager_config: core_config.WorkFileConfig
buffer_distance_factor: Union[int, float] = 1
buffer_distance_addition: Union[int, float] = 0
[docs]
@dataclass(frozen=True)
class BufferDisplacementKwargs:
input_road_line: io_types.GdbIOArg
input_building_points: io_types.GdbIOArg
input_line_barriers: Dict[str, Any]
output_building_points: io_types.GdbIOArg
sql_selection_query: dict
building_symbol_dimension: Dict[int, Tuple[int, int]]
displacement_distance_m: int
work_file_manager_config: core_config.WorkFileConfig
[docs]
@dataclass(frozen=True)
class ThinRoadNetworkKwargs:
input_road_line: io_types.GdbIOArg
output_road_line: io_types.GdbIOArg
work_file_manager_config: core_config.WorkFileConfig
minimum_length: int
invisibility_field_name: str
hierarchy_field_name: str
special_selection_sql: str | None = None
[docs]
@dataclass(frozen=True)
class RemoveRoadTrianglesKwargs:
input_line_feature: str
work_file_manager_config: core_config.WorkFileConfig
maximum_length: int
root_file: str
output_processed_feature: str
hierarchy_field: str = None
write_to_memory: bool = False
keep_work_files: bool = False
[docs]
@dataclass(frozen=True)
class CollapseRoadDetailsKwargs:
input_road_line: io_types.GdbIOArg
output_road_line: io_types.GdbIOArg
merge_distnace_m: int
collapse_field_name: Optional[str] = None
[docs]
@dataclass(frozen=True)
class RrcInitKwargs:
input_data_structure: List[SymbologyLayerSpec]
work_file_manager_config: core_config.WorkFileConfig
primary_road_unique_name: str
output_road_feature: io_types.GdbIOArg
output_displacement_feature: io_types.GdbIOArg
map_scale: str = "100000"
hierarchy_field: str = "hierarchy"
[docs]
@dataclass(frozen=True)
class DissolveInitKwargs:
"""
Configuration for DissolveWithIntersections.
input_line_feature: path or InjectIO to the input line feature
output_processed_feature: path or InjectIO for the final merged intersections (or single)
work_file_manager_config: WorkFileManager behavior (root_file, in-memory, keep_files)
dissolve_fields: optional list of fields to dissolve on; if None -> dissolve all (single-part)
sql_expressions: optional list of SQL where-clauses to split/segment, each produces its own FTL result
"""
input_line_feature: io_types.GdbIOArg
output_processed_feature: io_types.GdbIOArg
work_file_manager_config: core_config.WorkFileConfig
dissolve_fields: Optional[List[str]] = None
sql_expressions: Optional[List[str]] = None