ED_LRR/docs_mdbook/src/ed_lrr/py_api.md

58 lines
1.6 KiB
Markdown
Raw Normal View History

2022-02-23 21:45:59 +00:00
# Python API
First the module needs to be imported
```python
from _ed_lrr import PyRouter, PyShip
```
Then we need to instantiate a route plotter
```python
# 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
```python
ships = PyShip.from_journal()
```
To plot a route we need to load a list of star systems with coordinates
```python
r.load("./stars.csv")
```
After a list has been loaded we can resolve star systems to their IDs
```python
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
```python
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)
)
```