Skip to content

Commit a5fc27c

Browse files
committed
Merge branch 'issues_6_7'
2 parents ed2b698 + c02c744 commit a5fc27c

File tree

6 files changed

+70
-16
lines changed

6 files changed

+70
-16
lines changed

hikingmap/area.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ def sizelat(self):
6666
return self.maxlat - self.minlat
6767

6868

69+
def contains_coord(self, coord):
70+
return self.minlon <= coord.lon <= self.maxlon and self.minlat <= coord.lat <= self.maxlat
71+
72+
6973
def to_string(self):
7074
return Coordinate(self.minlon, self.minlat).to_string() + " - " + \
7175
Coordinate(self.maxlon, self.maxlat).to_string()

hikingmap/page.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,13 +192,11 @@ def calc_border_point(self, prev_coord, coord):
192192
if self.debugmode:
193193
# assert valid parameters and preconditions
194194
# prev_coord should be inside page area
195-
if not (self.minlon <= prev_coord.lon <= self.maxlon and \
196-
self.minlat <= prev_coord.lat <= self.maxlat):
195+
if not self.contains_coord(prev_coord):
197196
self.__raise_calc_border_error("prev_coord is not inside page area!", \
198197
prev_coord, coord)
199198
# coord should be outside page area
200-
if self.minlon <= coord.lon <= self.maxlon and \
201-
self.minlat <= coord.lat <= self.maxlat:
199+
if self.contains_coord(coord):
202200
self.__raise_calc_border_error("coord is not outside page area!", \
203201
prev_coord, coord)
204202

hikingmap/trackfinder.py

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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]:

test/test1_overview.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<gpx xmlns="http://www.topografix.com/GPX/1/0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd" version="1.0" creator="hikingmap">
33
<trk>
4+
<name>Page 1</name>
45
<trkseg>
56
<trkpt lat="50.199985003389209" lon="0.102232647052938"/>
67
<trkpt lat="50.199985003389209" lon="0.242452082299655"/>
@@ -10,6 +11,7 @@
1011
</trkseg>
1112
</trk>
1213
<trk>
14+
<name>Page 2</name>
1315
<trkseg>
1416
<trkpt lat="50.317932127333968" lon="-0.033767282056005"/>
1517
<trkpt lat="50.317932127333968" lon="0.106802827703150"/>
@@ -19,6 +21,7 @@
1921
</trkseg>
2022
</trk>
2123
<trk>
24+
<name>Page 3</name>
2225
<trkseg>
2326
<trkpt lat="50.249267041392457" lon="0.103440547887053"/>
2427
<trkpt lat="50.249267041392457" lon="0.304983041250439"/>
@@ -28,6 +31,7 @@
2831
</trkseg>
2932
</trk>
3033
<trk>
34+
<name>Page 4</name>
3135
<trkseg>
3236
<trkpt lat="50.275332223375628" lon="0.297965164685953"/>
3337
<trkpt lat="50.275332223375628" lon="0.499544201162826"/>
@@ -37,6 +41,7 @@
3741
</trkseg>
3842
</trk>
3943
<trk>
44+
<name>Page 5</name>
4045
<trkseg>
4146
<trkpt lat="50.233254173723331" lon="0.403588079126133"/>
4247
<trkpt lat="50.233254173723331" lon="0.543777378615422"/>
@@ -46,6 +51,7 @@
4651
</trkseg>
4752
</trk>
4853
<trk>
54+
<name>Page 6</name>
4955
<trkseg>
5056
<trkpt lat="50.186877580111215" lon="0.224245015129109"/>
5157
<trkpt lat="50.186877580111215" lon="0.425416448174393"/>

test/test2_overview.xml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<gpx xmlns="http://www.topografix.com/GPX/1/0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd" version="1.0" creator="hikingmap">
33
<trk>
4+
<name>Page 1</name>
45
<trkseg>
56
<trkpt lat="46.988164031517620" lon="2.913442277128568"/>
67
<trkpt lat="46.988164031517620" lon="3.044952717653547"/>
@@ -10,6 +11,7 @@
1011
</trkseg>
1112
</trk>
1213
<trk>
14+
<name>Page 2</name>
1315
<trkseg>
1416
<trkpt lat="46.911489763329243" lon="2.731618680100138"/>
1517
<trkpt lat="46.911489763329243" lon="2.920284874409729"/>
@@ -19,6 +21,7 @@
1921
</trkseg>
2022
</trk>
2123
<trk>
24+
<name>Page 3</name>
2225
<trkseg>
2326
<trkpt lat="46.914591661901426" lon="2.549903494479080"/>
2427
<trkpt lat="46.914591661901426" lon="2.738544639533679"/>
@@ -28,6 +31,7 @@
2831
</trkseg>
2932
</trk>
3033
<trk>
34+
<name>Page 4</name>
3135
<trkseg>
3236
<trkpt lat="46.917476789126610" lon="2.368142843349431"/>
3337
<trkpt lat="46.917476789126610" lon="2.556786791233048"/>
@@ -37,6 +41,7 @@
3741
</trkseg>
3842
</trk>
3943
<trk>
44+
<name>Page 5</name>
4045
<trkseg>
4146
<trkpt lat="46.903517595038281" lon="2.186385492392255"/>
4247
<trkpt lat="46.903517595038281" lon="2.374967320039533"/>
@@ -46,6 +51,7 @@
4651
</trkseg>
4752
</trk>
4853
<trk>
54+
<name>Page 6</name>
4955
<trkseg>
5056
<trkpt lat="46.846350345845288" lon="2.061926725228868"/>
5157
<trkpt lat="46.846350345845288" lon="2.193097982777902"/>
@@ -55,6 +61,7 @@
5561
</trkseg>
5662
</trk>
5763
<trk>
64+
<name>Page 7</name>
5865
<trkseg>
5966
<trkpt lat="46.765410697789044" lon="1.880531518386151"/>
6067
<trkpt lat="46.765410697789044" lon="2.068596516217196"/>
@@ -64,6 +71,7 @@
6471
</trkseg>
6572
</trk>
6673
<trk>
74+
<name>Page 8</name>
6775
<trkseg>
6876
<trkpt lat="46.720457764317963" lon="1.699357467077132"/>
6977
<trkpt lat="46.720457764317963" lon="1.887327278378212"/>
@@ -73,6 +81,7 @@
7381
</trkseg>
7482
</trk>
7583
<trk>
84+
<name>Page 9</name>
7685
<trkseg>
7786
<trkpt lat="46.665725811394871" lon="1.576420359337342"/>
7887
<trkpt lat="46.665725811394871" lon="1.707125296410797"/>
@@ -82,6 +91,7 @@
8291
</trkseg>
8392
</trk>
8493
<trk>
94+
<name>Page 10</name>
8595
<trkseg>
8696
<trkpt lat="46.579752264317960" lon="1.414669043442146"/>
8797
<trkpt lat="46.579752264317960" lon="1.602169177993452"/>
@@ -91,6 +101,7 @@
91101
</trkseg>
92102
</trk>
93103
<trk>
104+
<name>Page 11</name>
94105
<trkseg>
95106
<trkpt lat="46.590567264317968" lon="1.233674126574971"/>
96107
<trkpt lat="46.590567264317968" lon="1.421204233462253"/>
@@ -100,6 +111,7 @@
100111
</trkseg>
101112
</trk>
102113
<trk>
114+
<name>Page 12</name>
103115
<trkseg>
104116
<trkpt lat="46.611141764317964" lon="1.052580184438799"/>
105117
<trkpt lat="46.611141764317964" lon="1.240210253383403"/>
@@ -109,6 +121,7 @@
109121
</trkseg>
110122
</trk>
111123
<trk>
124+
<name>Page 13</name>
112125
<trkseg>
113126
<trkpt lat="46.594872367002182" lon="0.871724353540149"/>
114127
<trkpt lat="46.594872367002182" lon="1.059281714408361"/>
@@ -118,6 +131,7 @@
118131
</trkseg>
119132
</trk>
120133
<trk>
134+
<name>Page 14</name>
121135
<trkseg>
122136
<trkpt lat="46.578968809082092" lon="0.691087336713975"/>
123137
<trkpt lat="46.578968809082092" lon="0.878588658434423"/>
@@ -127,6 +141,7 @@
127141
</trkseg>
128142
</trk>
129143
<trk>
144+
<name>Page 15</name>
130145
<trkseg>
131146
<trkpt lat="46.632846672770881" lon="0.512970425325551"/>
132147
<trkpt lat="46.632846672770881" lon="0.700554005681471"/>
@@ -136,6 +151,7 @@
136151
</trkseg>
137152
</trk>
138153
<trk>
154+
<name>Page 16</name>
139155
<trkseg>
140156
<trkpt lat="46.705459989636836" lon="0.334399994708333"/>
141157
<trkpt lat="46.705459989636836" lon="0.522278442947541"/>
@@ -145,6 +161,7 @@
145161
</trkseg>
146162
</trk>
147163
<trk>
164+
<name>Page 17</name>
148165
<trkseg>
149166
<trkpt lat="46.761884732800915" lon="0.171435421665565"/>
150167
<trkpt lat="46.761884732800915" lon="0.359522783303802"/>
@@ -154,6 +171,7 @@
154171
</trkseg>
155172
</trk>
156173
<trk>
174+
<name>Page 18</name>
157175
<trkseg>
158176
<trkpt lat="46.847449649254081" lon="0.105101575094199"/>
159177
<trkpt lat="46.847449649254081" lon="0.236247424905801"/>
@@ -163,6 +181,7 @@
163181
</trkseg>
164182
</trk>
165183
<trk>
184+
<name>Page 19</name>
166185
<trkseg>
167186
<trkpt lat="46.921334762441909" lon="0.028638461982260"/>
168187
<trkpt lat="46.921334762441909" lon="0.217264686072339"/>
@@ -172,6 +191,7 @@
172191
</trkseg>
173192
</trk>
174193
<trk>
194+
<name>Page 20</name>
175195
<trkseg>
176196
<trkpt lat="46.987716005605996" lon="-0.049836831613621"/>
177197
<trkpt lat="46.987716005605996" lon="0.081761464747276"/>

test/test3_overview.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<gpx xmlns="http://www.topografix.com/GPX/1/0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd" version="1.0" creator="hikingmap">
33
<trk>
4+
<name>Page 1</name>
45
<trkseg>
56
<trkpt lat="36.371174707434839" lon="0.201254754459722"/>
67
<trkpt lat="36.371174707434839" lon="0.312732245540278"/>
@@ -10,6 +11,7 @@
1011
</trkseg>
1112
</trk>
1213
<trk>
14+
<name>Page 2</name>
1315
<trkseg>
1416
<trkpt lat="36.445788466146816" lon="0.109946040723081"/>
1517
<trkpt lat="36.445788466146816" lon="0.270171891121929"/>
@@ -19,6 +21,7 @@
1921
</trkseg>
2022
</trk>
2123
<trk>
24+
<name>Page 3</name>
2225
<trkseg>
2326
<trkpt lat="36.516486224858795" lon="-0.023655293535705"/>
2427
<trkpt lat="36.516486224858795" lon="0.136694225380713"/>
@@ -28,6 +31,7 @@
2831
</trkseg>
2932
</trk>
3033
<trk>
34+
<name>Page 4</name>
3135
<trkseg>
3236
<trkpt lat="36.618936966146812" lon="-0.031275422439283"/>
3337
<trkpt lat="36.618936966146812" lon="0.080589422439278"/>

0 commit comments

Comments
 (0)