Source code for aequilibrae.transit.gtfs_writer.shape_writer
import csv
from os.path import join
from typing import List
import numpy as np
import pandas as pd
from shapely.geometry import Point
from aequilibrae.transit.transit_elements import Pattern
[docs]
def write_shapes(patterns: List[Pattern], folder_path: str):
data = []
for pat in patterns:
points = [Point(pt) for pt in pat.shape.coords]
lons = [pt.x for pt in points]
lats = [pt.y for pt in points]
distances = [0] + [x.distance(y) for x, y in zip(points[:-1], points[1:])]
dt = pd.DataFrame(
{
"shape_id": pat.pattern_id,
"shape_pt_lat": lats,
"shape_pt_lon": lons,
"shape_pt_sequence": np.arange(len(points)),
"shape_dist_traveled": distances,
}
)
dt.loc[:, "shape_dist_traveled"] = dt.shape_dist_traveled.cumsum()
dt.loc[:, "shape_dist_traveled"] *= (dt.shape_dist_traveled.max()) * pat.shape_length / pat.shape.length
data.append(dt)
pd.concat(data).to_csv(join(folder_path, "shapes.txt"), quoting=csv.QUOTE_NONNUMERIC, index=False)