ExamplesΒΆ
Read data from an OSM XML file:
nodes, hwys, builds, feats = getOSMData(MAP_FILENAME, nodes=true, highways=true, buildings=true, features=true)
println("Number of nodes: $(length(nodes))")
println("Number of highways: $(length(hwys))")
println("Number of buildings: $(length(builds))")
println("Number of features: $(length(feats))")
Define map boundary and crop:
bounds = OpenStreetMap.Bounds(42.365, 42.3675, -71.1, -71.094)
cropMap!(nodes, bounds, highways=hwys, buildings=builds, features=feats, delete_nodes=false)
Find highway intersections:
inters = findIntersections(hwys)
println("Found $(length(inters)) intersections.")
Extract map components and classes:
roads = roadways(hwys)
peds = walkways(hwys)
cycles = cycleways(hwys)
bldg_classes = classify(builds)
feat_classes = classify(feats)
Convert map nodes to ENU coordinates:
reference = OpenStreetMap.centerBounds(bounds)
nodesENU = lla2enu(nodes, reference)
boundsENU = lla2enu(bounds, reference)
Create transportation network:
network = createGraph(nodesENU, hwys, roads, Set(1:8))
println("Graph formed with $(Graphs.num_vertices(network.g)) vertices and $(Graphs.num_edges(network.g)) edges.")
Route planning:
loc_start = OpenStreetMap.ENU(-5000, 5500, 0)
loc_end = OpenStreetMap.ENU(5500, -4000, 0)
node0 = nearestNode(nodesENU, loc_start, network.v_inv)
node1 = nearestNode(nodesENU, loc_end, network.v_inv)
shortest_route, shortest_distance = shortestRoute(network, node0, node1)
fastest_route, fastest_time = fastestRoute(network, node0, node1)
fastest_distance = distance(nodesENU, fastest_route)
println("Shortest route: $(shortest_distance) m (Nodes: $(length(shortest_route)))")
println("Fastest route: $(fastest_distance) m Time: $(fastest_time/60) min (Nodes: $(length(fastest_route)))")
Display shortest and fastest routes:
fignum_shortest = plotMap(nodesENU, highways=hwys, bounds=boundsENU, roadways=roads, route=shortest_route)
fignum_fastest = plotMap(nodesENU, highways=hwys, bounds=boundsENU, roadways=roads, route=fastest_route)
Display classified roadways, buildings, and features:
fignum = plotMap(nodesENU,
highways=hwys,
buildings=builds,
features=feats,
bounds=boundsENU,
width=1000,
feature_classes=feat_classes,
building_classes=bldg_classes,
roadways=roads)
Winston.savefig("osm_map.png")
Note: Winston currently distorts figures slightly when it saves them. Therefore, whenever equal axes scaling is required, export figures as EPS and rescale them as necessary.