ED_LRR/docs_mdbook/src/ed_lrr/py_api.md

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)
)