@@ -74,9 +74,10 @@ def calculate_pages(self, tracks):
7474 try :
7575 for track in trackpermutation :
7676 self .__pointskipped = True
77- prev_coord = Coordinate ( 0.0 , 0.0 )
77+ prev_coord = None
7878 for coord in track :
79- prev_coord = self .__add_point (prev_coord , coord )
79+ self .__add_point (prev_coord , coord )
80+ prev_coord = coord
8081 self .__flush ()
8182 except :
8283 if self .debugmode :
@@ -95,13 +96,12 @@ def calculate_pages(self, tracks):
9596 def __add_point (self , prev_coord , coord ):
9697 if not self .__is_point_rendered (coord ):
9798 if not self .__firstpointaccepted :
98- prev_coord = self .__add_first_point (coord )
99+ self .__add_first_point (coord )
99100 else :
100- prev_coord = self .__add_next_point (prev_coord , coord )
101+ self .__add_next_point (prev_coord , coord )
101102 self .__pointskipped = False
102103 else :
103104 self .__pointskipped = True
104- return prev_coord
105105
106106
107107 def __flush (self ):
@@ -112,8 +112,7 @@ def __flush(self):
112112
113113
114114 def __is_point_rendered (self , coord ):
115- return any (a .minlon <= coord .lon <= a .maxlon and \
116- a .minlat <= coord .lat <= a .maxlat for a in self .__renderedareas )
115+ return any (a .contains_coord (coord ) for a in self .__renderedareas )
117116
118117
119118 def __add_first_point (self , coord ):
@@ -123,7 +122,23 @@ def __add_first_point(self, coord):
123122 self .__currentpage .initialize_first_point (coord )
124123 self .__currentpageindex += 1
125124 self .__firstpointaccepted = True
126- return coord
125+
126+
127+ def __get_closest_borderpoint (self , prev_coord , coord , include_currentpage = False ):
128+ border_coords = [ page_prev_coord .calc_border_point (prev_coord , coord ) \
129+ for page_prev_coord in self .__renderedareas \
130+ if page_prev_coord .contains_coord (prev_coord ) and \
131+ not page_prev_coord .contains_coord (coord ) ]
132+ if include_currentpage :
133+ border_coords += [ self .__currentpage .calc_border_point (prev_coord , coord ) ]
134+
135+ border_coord = None
136+ for bc in border_coords :
137+ if not border_coord or \
138+ coord .distance_haversine (bc , 'km' ) < coord .distance_haversine (border_coord , 'km' ):
139+ border_coord = bc
140+
141+ return border_coord
127142
128143
129144 def __add_next_point (self , prev_coord , coord ):
@@ -132,17 +147,21 @@ def __add_next_point(self, prev_coord, coord):
132147 if outside_page :
133148 self .__currentpage .remove_last_point ()
134149 if not self .__pointskipped :
135- border_coord = self .__currentpage . calc_border_point (prev_coord , coord )
150+ border_coord = self .__get_closest_borderpoint (prev_coord , coord , True )
136151 self .__currentpage .add_next_point (border_coord )
137152 self .__currentpage .center_map ()
138153 self .__renderedareas .append (self .__currentpage )
139154 if not self .__pointskipped :
140155 self .__add_first_point (border_coord )
141156 self .__add_next_point (border_coord , coord )
142157 else :
143- self .__add_first_point (coord )
144-
145- return coord
158+ if prev_coord :
159+ border_coord = self .__get_closest_borderpoint (prev_coord , coord )
160+ self .__add_first_point (border_coord )
161+ self .__pointskipped = False
162+ self .__add_next_point (border_coord , coord )
163+ else :
164+ self .__add_first_point (coord )
146165
147166
148167 def __debug_exception (self ):
@@ -187,6 +206,9 @@ def __add_overview_page(self, filename=None):
187206 overviewpage .add_page_to_overview (page )
188207
189208 tracknode = etree .Element ('trk' )
209+ tracknamenode = etree .Element ('name' )
210+ tracknamenode .text = 'Page %d' % page .pageindex
211+ tracknode .append (tracknamenode )
190212 tracksegnode = etree .Element ('trkseg' )
191213 for i in range (0 , 5 ):
192214 if i in [0 , 3 , 4 ]:
0 commit comments