mirror of
https://github.com/a-b-street/abstreet.git
synced 2024-12-18 11:51:42 +03:00
67 lines
2.2 KiB
Python
Executable File
67 lines
2.2 KiB
Python
Executable File
#!/usr/bin/python3
|
|
# This example loads an exported JSON map, finds different buildings, and
|
|
# generates a simple travel demand model.
|
|
#
|
|
# 1) cargo run --bin dump_map data/system/us/seattle/maps/montlake.bin > montlake.json
|
|
# 2) ./headless/examples/generate_traffic.py --map=montlake.json --out=traffic.json
|
|
# 3) cargo run --bin import_traffic -- --map=data/system/us/seattle/maps/montlake.bin --input=traffic.json
|
|
# 4) Use data/system/us/seattle/scenarios/montlake/monday.bin in the game or from the API.
|
|
#
|
|
# Keep this script formatted with autopep8 -i
|
|
|
|
import argparse
|
|
import json
|
|
import random
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('--map', type=str, required=True)
|
|
parser.add_argument('--out', type=str, required=True)
|
|
args = parser.parse_args()
|
|
|
|
# Load the map and find all buildings
|
|
residential_building_ids = []
|
|
commercial_building_ids = []
|
|
with open(args.map, encoding='utf8') as f:
|
|
map = json.load(f)
|
|
for b in map['buildings']:
|
|
# These categories are inferred from OpenStreetMap tags
|
|
if 'Residential' in b['bldg_type'] or 'ResidentialCommercial' in b['bldg_type']:
|
|
residential_building_ids.append(b['id'])
|
|
if 'Commercial' in b['bldg_type'] or 'ResidentialCommercial' in b['bldg_type']:
|
|
commercial_building_ids.append(b['id'])
|
|
|
|
# Randomly generate a few people who take just one trip
|
|
scenario = {
|
|
'scenario_name': 'monday',
|
|
'people': []
|
|
}
|
|
for _ in range(100):
|
|
src = random.choice(residential_building_ids)
|
|
dst = random.choice(commercial_building_ids)
|
|
scenario['people'].append({
|
|
'origin': {
|
|
'TripEndpoint': {
|
|
'Bldg': src,
|
|
}
|
|
},
|
|
'trips': [{
|
|
'departure': 1.0,
|
|
'destination': {
|
|
'TripEndpoint': {
|
|
'Bldg': dst,
|
|
}
|
|
},
|
|
'mode': 'Bike',
|
|
'purpose': 'Shopping'
|
|
}]
|
|
})
|
|
|
|
with open(args.out, 'w') as f:
|
|
f.write(json.dumps(scenario, indent=2))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|