1. A method comprising, by one or more computing devices: accessing: two or more photos, wherein each one of the photos is associated with a location and a time at which the photo is taken, and is taken by one of one or more travelers while visiting one of one or more destinations, and one or more points-of-interest, wherein each one of the points-of-interest is located within one of the destinations; constructing one or more photo streams for each unique traveler-destination combination, wherein each one of the photo streams comprises two or more of the photos taken by the corresponding traveler at the corresponding destination and ordered according to the respective times at which the photos are taken; mapping each one of the photos to one of the points-of-interest; constructing one or more timed paths for each unique traveler-destination combination based on the photo streams and the mapping between the photos and the points-of-interest, wherein each one of the timed paths comprises: one or more of the points-of-interest located within the corresponding destination, for each one of the points-of-interest located within the corresponding destination, a visit time representing a first amount of time the corresponding traveler spends at the point-of-interest, and for each one of one or more pairs of points-of-interest located within the corresponding destination, a transit time representing a second amount of time it takes the corresponding traveler to travel from a first one of the pair of points-of-interest to a second one of the pair of points-of-interest; and constructing an itinerary based on a start point-of-interest, an end point-of-interest, a time constraint, and the timed paths.