Example #1
0
 def _expand_address(self, addr, roadnet, length='length' ) :
     # only ever done at the beginning!!
     options = []
     
     # find the interval containing addr
     roadtree = self.get_roadtree( addr.road )
     _, floor_addr = roadtree.floor_item( addr.coord )
     _, ceil_addr = roadtree.ceiling_item( addr.coord )
     
     # obtain relevant road data for addr.road
     u, v, roadlen = roadinfo( addr.road, roadnet )
     # look left
     if floor_addr is None :
         left_boundary = ROAD.RoadAddress( addr.road, 0. )
         options.append( ( u, left_boundary ) )
     elif my_isaddress( floor_addr ) :
         options.append( ( floor_addr, floor_addr ) )
     else :
         raise 'invalid node type'
     # look right
     if ceil_addr is None :
         right_boundary = ROAD.RoadAddress( addr.road, roadlen )
         options.append( ( v, right_boundary ) )
     elif my_isaddress( ceil_addr ) :
         options.append( ( ceil_addr, ceil_addr ) )
     else :
         raise 'invalid node type'
     
     res = []
     for ( targ, targ_addr ) in options :
         traveltime = ROAD.distance( roadnet, addr, targ_addr, length )
         res.append( ( targ, traveltime ) )
     return res
Example #2
0
 def find_nearest( addr ) :
     dist_to = lambda q : ROAD.distance( roadnet, addr, q, 'length' )
     trips = [ ( dist_to(q), q ) for q in points ]
     return min( trips )[1]
Example #3
0
    points = [ roadprob.sampleaddress( roadnet ) for i in range(n) ]
    
    pset = PointSet()
    
    for p in points :
        pset.insert( p )
        
        
    def find_nearest( addr ) :
        dist_to = lambda q : ROAD.distance( roadnet, addr, q, 'length' )
        trips = [ ( dist_to(q), q ) for q in points ]
        return min( trips )[1]
        
    def sidebyside( addr ) :
        by_pset = pset.find_nearest( addr, roadnet )
        by_naive = find_nearest( addr )
        return by_pset, by_naive
    
    samples = 100
    testpoints = [ roadprob.sampleaddress( roadnet ) for i in range(samples) ]
    answers = [ sidebyside( q ) for q in testpoints ]
    error = [ ROAD.distance( roadnet, p, q, 'length' ) for p, q in answers ]