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.