Skip to content

Commit

Permalink
refactor gx.Track and gx.MultiTrack to decouple from concrete geometr…
Browse files Browse the repository at this point in the history
…y implementation
  • Loading branch information
cleder committed Mar 19, 2024
1 parent c6b8a22 commit 9edf307
Showing 1 changed file with 17 additions and 8 deletions.
25 changes: 17 additions & 8 deletions fastkml/gx.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,6 @@
from typing import Iterator
from typing import List
from typing import Optional
from typing import cast

import arrow
import pygeoif.geometry as geo
Expand Down Expand Up @@ -216,8 +215,6 @@ def __init__(
raise ValueError(msg)
if geometry:
track_items = linestring_to_track_items(geometry)
elif track_items:
geometry = track_items_to_geometry(track_items)
self.track_items = list(track_items) if track_items else []
super().__init__(
ns=ns,
Expand All @@ -227,9 +224,16 @@ def __init__(
extrude=extrude,
tessellate=tessellate,
altitude_mode=altitude_mode,
geometry=geometry,
geometry=None,
)

@property
def geometry(self) -> Optional[geo.LineString]:
return track_items_to_geometry(self.track_items)

def __bool__(self) -> bool:
return bool(self.track_items)

def etree_element(
self,
precision: Optional[int] = None,
Expand Down Expand Up @@ -312,7 +316,7 @@ def multilinestring_to_tracks(

def tracks_to_geometry(tracks: Iterable[Track]) -> geo.MultiLineString:
return geo.MultiLineString.from_linestrings(
*[cast(geo.LineString, track.geometry) for track in tracks if track.geometry],
*[track.geometry for track in tracks if track.geometry],
)


Expand All @@ -339,8 +343,6 @@ def __init__(
raise ValueError(msg)
if geometry:
tracks = multilinestring_to_tracks(geometry, ns=ns)
elif tracks:
geometry = tracks_to_geometry(tracks)
self.tracks = list(tracks) if tracks else []
self.interpolate = interpolate
super().__init__(
Expand All @@ -351,9 +353,16 @@ def __init__(
extrude=extrude,
tessellate=tessellate,
altitude_mode=altitude_mode,
geometry=geometry,
geometry=None,
)

@property
def geometry(self) -> Optional[geo.MultiLineString]:
return tracks_to_geometry(self.tracks)

def __bool__(self) -> bool:
return bool(self.tracks)


registry.register(
MultiTrack,
Expand Down

0 comments on commit 9edf307

Please sign in to comment.