1.6 KiB
1.6 KiB
Python API
First the module needs to be imported
from _ed_lrr import PyRouter, PyShip
Then we need to instantiate a route plotter
# callback is passed a dict describing the current search state and progress
def callback(state):
print(state)
r=PyRouter(callback)
Optionally ship loadouts can be loaded from the Elite: Dangerous journal files
ships = PyShip.from_journal()
To plot a route we need to load a list of star systems with coordinates
r.load("./stars.csv")
After a list has been loaded we can resolve star systems to their IDs
systems = [
# resolve by coordinates, needs to build an R*-Tree so uses a few GB of RAM
(0,0,0),
# resolve by name, does fuzzy search, has to scan the whole list of system names
"Colonia",
# resolve by ID, fairly fast, but the IDs are ed_lrr specific
3553323
]
systems = r.resolve_systems(*query) # this will return a dict mapping the input key to a dict
assert sorted(systems.keys())==sorted(query)
sys_ids = {k: v["id"] for k, v in systems.items()}
Once the system IDs are known we can compute a route
route = r.route(
[sys_ids["Sol"], sys_ids["Colonia"]] # route hops, can be any number of systems (at least 2)
48.0, # jump range
beam_width=1<<12, # beam width to limit exploration (4096)
greedyness=0, # greedyness for A* (0=BFS,0.5 = A*, 1=Greedy)
max_dist=500, # maximum deviation from straight line (not yet implemented)
num_workers=0 # number of workers to distribute the search accross (0 -> serial mode, >=1 -> spawn worker pool)
)