Fix:Android:map download -> longer list and a few tweaks for speed
[profile/ivi/navit.git] / navit / navit / android / src / org / navitproject / navit / NavitMapDownloader.java
1 /**\r
2  * Navit, a modular navigation system.\r
3  * Copyright (C) 2005-2008 Navit Team\r
4  *\r
5  * This program is free software; you can redistribute it and/or\r
6  * modify it under the terms of the GNU General Public License\r
7  * version 2 as published by the Free Software Foundation.\r
8  *\r
9  * This program is distributed in the hope that it will be useful,\r
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
12  * GNU General Public License for more details.\r
13  *\r
14  * You should have received a copy of the GNU General Public License\r
15  * along with this program; if not, write to the\r
16  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\r
17  * Boston, MA  02110-1301, USA.\r
18  */\r
19 \r
20 package org.navitproject.navit;\r
21 \r
22 import java.io.BufferedInputStream;\r
23 import java.io.BufferedOutputStream;\r
24 import java.io.File;\r
25 import java.io.FileOutputStream;\r
26 import java.io.IOException;\r
27 import java.io.InputStream;\r
28 import java.net.HttpURLConnection;\r
29 import java.net.URL;\r
30 import java.text.DecimalFormat;\r
31 import java.text.NumberFormat;\r
32 \r
33 import android.os.Bundle;\r
34 import android.os.Handler;\r
35 import android.os.Message;\r
36 import android.util.Log;\r
37 \r
38 public class NavitMapDownloader\r
39 {\r
40         public static class osm_map_values\r
41         {\r
42                 String  lon1;\r
43                 String  lat1;\r
44                 String  lon2;\r
45                 String  lat2;\r
46                 String  map_name                        = "";\r
47                 long            est_size_bytes  = 0;\r
48 \r
49                 public osm_map_values(String mapname, String lon_1, String lat_1, String lon_2, String lat_2,\r
50                                 long bytes_est)\r
51                 {\r
52                         this.map_name = mapname;\r
53                         this.lon1 = lon_1;\r
54                         this.lat1 = lat_1;\r
55                         this.lon2 = lon_2;\r
56                         this.lat2 = lat_2;\r
57                         this.est_size_bytes = bytes_est;\r
58                 }\r
59         }\r
60 \r
61         /*\r
62          * coords for predefined maps:\r
63          * \r
64          * <a onclick='predefined(5.18,46.84,15.47,55.64)'>Germany</a>\r
65          * <a onclick='predefined(2.08,48.87,7.78,54.52)'>BeNeLux</a>\r
66          * <a onclick='predefined(9.4,46.32,17.21,49.1)'>Austria</a> 209 MBytes = 219152384 Bytes\r
67          */\r
68         //\r
69         // define the maps here\r
70         //                                                          name     , lon1 , lat1   , lon2   , lat2, est. size in bytes\r
71         /*\r
72          * public static osm_map_values austria = new osm_map_values("Austria",\r
73          * "9.4", "46.32", "17.21",\r
74          * "49.1", 222000000);\r
75          * public static osm_map_values benelux = new osm_map_values("BeNeLux",\r
76          * "2.08", "48.87", "7.78",\r
77          * "54.52", 530000000);\r
78          * public static osm_map_values germany = new osm_map_values("Germany",\r
79          * "5.18", "46.84", "15.47",\r
80          * "55.64", 943000000);\r
81          */\r
82 \r
83 \r
84         public static osm_map_values            Whole_Planet                                                    = new osm_map_values(\r
85                                                                                                                                                                                                         "Whole Planet",\r
86                                                                                                                                                                                                         "-180",\r
87                                                                                                                                                                                                         "-90",\r
88                                                                                                                                                                                                         "180",\r
89                                                                                                                                                                                                         "90",\r
90                                                                                                                                                                                                         (long) (5.6 * 1024 * 1024 * 1024));\r
91         public static osm_map_values            Africa                                                                  = new osm_map_values("Africa",\r
92                                                                                                                                                                                                         "-20.8", "-35.2",\r
93                                                                                                                                                                                                         "52.5", "37.4", 20);\r
94         public static osm_map_values            Angola                                                                  = new osm_map_values("Angola",\r
95                                                                                                                                                                                                         "11.4", "-18.1", "24.2",\r
96                                                                                                                                                                                                         "-5.3", 20);\r
97         public static osm_map_values            Burundi                                                                 = new osm_map_values(\r
98                                                                                                                                                                                                         "Burundi", "28.9",\r
99                                                                                                                                                                                                         "-4.5", "30.9", "-2.2",\r
100                                                                                                                                                                                                         20);\r
101         public static osm_map_values            Democratic_Republic_of_the_Congo        = new osm_map_values(\r
102                                                                                                                                                                                                         "Democratic Republic of the Congo",\r
103                                                                                                                                                                                                         "11.7", "-13.6", "31.5",\r
104                                                                                                                                                                                                         "5.7", 20);\r
105         public static osm_map_values            Kenya                                                                           = new osm_map_values("Kenya",\r
106                                                                                                                                                                                                         "33.8", "-5.2", "42.4",\r
107                                                                                                                                                                                                         "4.9", 20);\r
108         public static osm_map_values            Lesotho                                                                 = new osm_map_values(\r
109                                                                                                                                                                                                         "Lesotho", "26.9",\r
110                                                                                                                                                                                                         "-30.7", "29.6",\r
111                                                                                                                                                                                                         "-28.4", 20);\r
112         public static osm_map_values            Madagascar                                                              = new osm_map_values(\r
113                                                                                                                                                                                                         "Madagascar", "43.0",\r
114                                                                                                                                                                                                         "-25.8", "50.8",\r
115                                                                                                                                                                                                         "-11.8", 20);\r
116         public static osm_map_values            Nambia_Botswana                                         = new osm_map_values(\r
117                                                                                                                                                                                                         "Nambia+Botswana",\r
118                                                                                                                                                                                                         "11.4", "-29.1", "29.5",\r
119                                                                                                                                                                                                         "-16.9", 20);\r
120         public static osm_map_values            Reunion                                                                 = new osm_map_values(\r
121                                                                                                                                                                                                         "Reunion", "55.2",\r
122                                                                                                                                                                                                         "-21.4", "55.9",\r
123                                                                                                                                                                                                         "-20.9", 20);\r
124         public static osm_map_values            Rwanda                                                                  = new osm_map_values("Rwanda",\r
125                                                                                                                                                                                                         "28.8", "-2.9", "30.9",\r
126                                                                                                                                                                                                         "-1.0", 20);\r
127         public static osm_map_values            South_Africa                                                    = new osm_map_values(\r
128                                                                                                                                                                                                         "South Africa", "15.6",\r
129                                                                                                                                                                                                         "-35.2", "33.3",\r
130                                                                                                                                                                                                         "-21.9", 20);\r
131         public static osm_map_values            Uganda                                                                  = new osm_map_values("Uganda",\r
132                                                                                                                                                                                                         "29.3", "-1.6", "35.1",\r
133                                                                                                                                                                                                         "4.3", 20);\r
134         public static osm_map_values            Asia                                                                            = new osm_map_values("Asia",\r
135                                                                                                                                                                                                         "23.8", "0.1", "195.0",\r
136                                                                                                                                                                                                         "82.4", 20);\r
137         public static osm_map_values            China                                                                           = new osm_map_values("China",\r
138                                                                                                                                                                                                         "67.3", "5.3", "135.0",\r
139                                                                                                                                                                                                         "54.5", 20);\r
140         public static osm_map_values            Cyprus                                                                  = new osm_map_values("Cyprus",\r
141                                                                                                                                                                                                         "32.0", "34.5", "34.9",\r
142                                                                                                                                                                                                         "35.8", 20);\r
143         public static osm_map_values            India_Nepal                                                             = new osm_map_values(\r
144                                                                                                                                                                                                         "India+Nepal", "67.9",\r
145                                                                                                                                                                                                         "5.5", "89.6", "36.0",\r
146                                                                                                                                                                                                         20);\r
147         public static osm_map_values            Indonesia                                                               = new osm_map_values(\r
148                                                                                                                                                                                                         "Indonesia", "93.7",\r
149                                                                                                                                                                                                         "-17.3", "155.5", "7.6",\r
150                                                                                                                                                                                                         20);\r
151         public static osm_map_values            Iran                                                                            = new osm_map_values("Iran",\r
152                                                                                                                                                                                                         "43.5", "24.4", "63.6",\r
153                                                                                                                                                                                                         "40.4", 20);\r
154         public static osm_map_values            Iraq                                                                            = new osm_map_values("Iraq",\r
155                                                                                                                                                                                                         "38.7", "28.5", "49.2",\r
156                                                                                                                                                                                                         "37.4", 20);\r
157         public static osm_map_values            Israel                                                                  = new osm_map_values("Israel",\r
158                                                                                                                                                                                                         "33.99", "29.8",\r
159                                                                                                                                                                                                         "35.95", "33.4", 20);\r
160         public static osm_map_values            Japan_Korea_Taiwan                                      = new osm_map_values(\r
161                                                                                                                                                                                                         "Japan+Korea+Taiwan",\r
162                                                                                                                                                                                                         "117.6", "20.5",\r
163                                                                                                                                                                                                         "151.3", "47.1", 20);\r
164         public static osm_map_values            Malasia_Singapore                                               = new osm_map_values(\r
165                                                                                                                                                                                                         "Malasia+Singapore",\r
166                                                                                                                                                                                                         "94.3", "-5.9", "108.6",\r
167                                                                                                                                                                                                         "6.8", 20);\r
168         public static osm_map_values            Mongolia                                                                        = new osm_map_values(\r
169                                                                                                                                                                                                         "Mongolia", "87.5",\r
170                                                                                                                                                                                                         "41.4", "120.3", "52.7",\r
171                                                                                                                                                                                                         20);\r
172         public static osm_map_values            Thailand                                                                        = new osm_map_values(\r
173                                                                                                                                                                                                         "Thailand", "97.5",\r
174                                                                                                                                                                                                         "5.7", "105.2", "19.7",\r
175                                                                                                                                                                                                         20);\r
176         public static osm_map_values            Turkey                                                                  = new osm_map_values("Turkey",\r
177                                                                                                                                                                                                         "25.1", "35.8", "46.4",\r
178                                                                                                                                                                                                         "42.8", 20);\r
179         public static osm_map_values            UAE_Other                                                               = new osm_map_values(\r
180                                                                                                                                                                                                         "UAE+Other", "51.5",\r
181                                                                                                                                                                                                         "22.6", "56.7", "26.5",\r
182                                                                                                                                                                                                         20);\r
183         public static osm_map_values            Australia                                                               = new osm_map_values(\r
184                                                                                                                                                                                                         "Australia", "110.5",\r
185                                                                                                                                                                                                         "-44.2", "154.9",\r
186                                                                                                                                                                                                         "-9.2", 20);\r
187         public static osm_map_values            Tasmania                                                                        = new osm_map_values(\r
188                                                                                                                                                                                                         "Tasmania", "144.0",\r
189                                                                                                                                                                                                         "-45.1", "155.3",\r
190                                                                                                                                                                                                         "-24.8", 20);\r
191         public static osm_map_values            Victoria_New_South_Wales                        = new osm_map_values(\r
192                                                                                                                                                                                                         "Victoria+New South Wales",\r
193                                                                                                                                                                                                         "140.7", "-39.4",\r
194                                                                                                                                                                                                         "153.7", "-26.9", 20);\r
195         public static osm_map_values            New_Zealand                                                             = new osm_map_values(\r
196                                                                                                                                                                                                         "New Zealand", "165.2",\r
197                                                                                                                                                                                                         "-47.6", "179.1",\r
198                                                                                                                                                                                                         "-33.7", 20);\r
199         public static osm_map_values            Europe                                                                  = new osm_map_values("Europe",\r
200                                                                                                                                                                                                         "-12.97", "33.59",\r
201                                                                                                                                                                                                         "34.15", "72.10", 20);\r
202         public static osm_map_values            Western_Europe                                                  = new osm_map_values(\r
203                                                                                                                                                                                                         "Western Europe",\r
204                                                                                                                                                                                                         "-17.6", "34.5", "42.9",\r
205                                                                                                                                                                                                         "70.9", 20);\r
206         public static osm_map_values            Austria                                                                 = new osm_map_values(\r
207                                                                                                                                                                                                         "Austria", "9.4",\r
208                                                                                                                                                                                                         "46.32", "17.21",\r
209                                                                                                                                                                                                         "49.1", 20);\r
210         public static osm_map_values            BeNeLux                                                                 = new osm_map_values(\r
211                                                                                                                                                                                                         "BeNeLux", "2.08",\r
212                                                                                                                                                                                                         "48.87", "7.78",\r
213                                                                                                                                                                                                         "54.52", 20);\r
214         public static osm_map_values            Faroe_Islands                                                   = new osm_map_values(\r
215                                                                                                                                                                                                         "Faroe Islands", "-7.8",\r
216                                                                                                                                                                                                         "61.3", "-6.1", "62.5",\r
217                                                                                                                                                                                                         20);\r
218         public static osm_map_values            France                                                                  = new osm_map_values("France",\r
219                                                                                                                                                                                                         "-5.45", "42.00",\r
220                                                                                                                                                                                                         "8.44", "51.68", 20);\r
221         public static osm_map_values            Germany                                                                 = new osm_map_values(\r
222                                                                                                                                                                                                         "Germany", "5.18",\r
223                                                                                                                                                                                                         "46.84", "15.47",\r
224                                                                                                                                                                                                         "55.64", 20);\r
225         public static osm_map_values            Bavaria                                                                 = new osm_map_values(\r
226                                                                                                                                                                                                         "Bavaria", "10.3",\r
227                                                                                                                                                                                                         "47.8", "13.6", "49.7",\r
228                                                                                                                                                                                                         20);\r
229         public static osm_map_values            Saxonia                                                                 = new osm_map_values(\r
230                                                                                                                                                                                                         "Saxonia", "11.8",\r
231                                                                                                                                                                                                         "50.1", "15.0", "51.7",\r
232                                                                                                                                                                                                         20);\r
233         public static osm_map_values            Germany_Austria_Switzerland             = new osm_map_values(\r
234                                                                                                                                                                                                         "Germany+Austria+Switzerland",\r
235                                                                                                                                                                                                         "3.4", "44.5", "18.6",\r
236                                                                                                                                                                                                         "55.1", 20);\r
237         public static osm_map_values            Iceland                                                                 = new osm_map_values(\r
238                                                                                                                                                                                                         "Iceland", "-25.3",\r
239                                                                                                                                                                                                         "62.8", "-11.4", "67.5",\r
240                                                                                                                                                                                                         20);\r
241         public static osm_map_values            Ireland                                                                 = new osm_map_values(\r
242                                                                                                                                                                                                         "Ireland", "-11.17",\r
243                                                                                                                                                                                                         "51.25", "-5.23",\r
244                                                                                                                                                                                                         "55.9", 20);\r
245         public static osm_map_values            Italy                                                                           = new osm_map_values("Italy",\r
246                                                                                                                                                                                                         "6.52", "36.38",\r
247                                                                                                                                                                                                         "18.96", "47.19", 20);\r
248         public static osm_map_values            Spain_Portugal                                                  = new osm_map_values(\r
249                                                                                                                                                                                                         "Spain+Portugal",\r
250                                                                                                                                                                                                         "-11.04", "34.87",\r
251                                                                                                                                                                                                         "4.62", "44.41", 20);\r
252         public static osm_map_values            Mallorca                                                                        = new osm_map_values(\r
253                                                                                                                                                                                                         "Mallorca", "2.2",\r
254                                                                                                                                                                                                         "38.8", "4.7", "40.2",\r
255                                                                                                                                                                                                         20);\r
256         public static osm_map_values            Galicia                                                                 = new osm_map_values(\r
257                                                                                                                                                                                                         "Galicia", "-10.0",\r
258                                                                                                                                                                                                         "41.7", "-6.3", "44.1",\r
259                                                                                                                                                                                                         20);\r
260         public static osm_map_values            Scandinavia                                                             = new osm_map_values(\r
261                                                                                                                                                                                                         "Scandinavia", "4.0",\r
262                                                                                                                                                                                                         "54.4", "32.1", "71.5",\r
263                                                                                                                                                                                                         20);\r
264         public static osm_map_values            Finland                                                                 = new osm_map_values(\r
265                                                                                                                                                                                                         "Finland", "18.6",\r
266                                                                                                                                                                                                         "59.2", "32.3", "70.3",\r
267                                                                                                                                                                                                         20);\r
268         public static osm_map_values            Denmark                                                                 = new osm_map_values(\r
269                                                                                                                                                                                                         "Denmark", "7.49",\r
270                                                                                                                                                                                                         "54.33", "13.05",\r
271                                                                                                                                                                                                         "57.88", 20);\r
272         public static osm_map_values            Switzerland                                                             = new osm_map_values(\r
273                                                                                                                                                                                                         "Switzerland", "5.79",\r
274                                                                                                                                                                                                         "45.74", "10.59",\r
275                                                                                                                                                                                                         "47.84", 20);\r
276         public static osm_map_values            UK                                                                                      = new osm_map_values("UK",\r
277                                                                                                                                                                                                         "-9.7", "49.6", "2.2",\r
278                                                                                                                                                                                                         "61.2", 20);\r
279         public static osm_map_values            Bulgaria                                                                        = new osm_map_values(\r
280                                                                                                                                                                                                         "Bulgaria", "24.7",\r
281                                                                                                                                                                                                         "42.1", "24.8", "42.1",\r
282                                                                                                                                                                                                         20);\r
283         public static osm_map_values            Czech_Republic                                                  = new osm_map_values(\r
284                                                                                                                                                                                                         "Czech Republic",\r
285                                                                                                                                                                                                         "11.91", "48.48",\r
286                                                                                                                                                                                                         "19.02", "51.17", 20);\r
287         public static osm_map_values            Croatia                                                                 = new osm_map_values(\r
288                                                                                                                                                                                                         "Croatia", "13.4",\r
289                                                                                                                                                                                                         "42.1", "19.4", "46.9",\r
290                                                                                                                                                                                                         20);\r
291         public static osm_map_values            Estonia                                                                 = new osm_map_values(\r
292                                                                                                                                                                                                         "Estonia", "21.5",\r
293                                                                                                                                                                                                         "57.5", "28.2", "59.6",\r
294                                                                                                                                                                                                         20);\r
295         public static osm_map_values            Greece                                                                  = new osm_map_values("Greece",\r
296                                                                                                                                                                                                         "28.9", "37.8", "29.0",\r
297                                                                                                                                                                                                         "37.8", 20);\r
298         public static osm_map_values            Crete                                                                           = new osm_map_values("Crete",\r
299                                                                                                                                                                                                         "23.3", "34.5", "26.8",\r
300                                                                                                                                                                                                         "36.0", 20);\r
301         public static osm_map_values            Hungary                                                                 = new osm_map_values(\r
302                                                                                                                                                                                                         "Hungary", "16.08",\r
303                                                                                                                                                                                                         "45.57", "23.03",\r
304                                                                                                                                                                                                         "48.39", 20);\r
305         public static osm_map_values            Latvia                                                                  = new osm_map_values("Latvia",\r
306                                                                                                                                                                                                         "20.7", "55.6", "28.3",\r
307                                                                                                                                                                                                         "58.1", 20);\r
308         public static osm_map_values            Lithuania                                                               = new osm_map_values(\r
309                                                                                                                                                                                                         "Lithuania", "20.9",\r
310                                                                                                                                                                                                         "53.8", "26.9", "56.5",\r
311                                                                                                                                                                                                         20);\r
312         public static osm_map_values            Poland                                                                  = new osm_map_values("Poland",\r
313                                                                                                                                                                                                         "13.6", "48.8", "24.5",\r
314                                                                                                                                                                                                         "55.0", 20);\r
315         public static osm_map_values            Romania                                                                 = new osm_map_values(\r
316                                                                                                                                                                                                         "Romania", "20.3",\r
317                                                                                                                                                                                                         "43.5", "29.9", "48.4",\r
318                                                                                                                                                                                                         20);\r
319         public static osm_map_values            North_America                                                   = new osm_map_values(\r
320                                                                                                                                                                                                         "North America",\r
321                                                                                                                                                                                                         "-178.1", "6.5",\r
322                                                                                                                                                                                                         "-10.4", "84.0", 20);\r
323         public static osm_map_values            Alaska                                                                  = new osm_map_values("Alaska",\r
324                                                                                                                                                                                                         "-179.5", "49.5",\r
325                                                                                                                                                                                                         "-129", "71.6", 20);\r
326         public static osm_map_values            Canada                                                                  = new osm_map_values("Canada",\r
327                                                                                                                                                                                                         "-141.3", "41.5",\r
328                                                                                                                                                                                                         "-52.2", "70.2", 20);\r
329         public static osm_map_values            Hawaii                                                                  = new osm_map_values("Hawaii",\r
330                                                                                                                                                                                                         "-161.07", "18.49",\r
331                                                                                                                                                                                                         "-154.45", "22.85", 20);\r
332         public static osm_map_values            USA__except_Alaska_and_Hawaii_  = new osm_map_values(\r
333                                                                                                                                                                                                         "USA (except Alaska and Hawaii)",\r
334                                                                                                                                                                                                         "-125.4", "24.3",\r
335                                                                                                                                                                                                         "-66.5", "49.3", 20);\r
336         public static osm_map_values            Nevada                                                                  = new osm_map_values("Nevada",\r
337                                                                                                                                                                                                         "-120.2", "35.0",\r
338                                                                                                                                                                                                         "-113.8", "42.1", 20);\r
339         public static osm_map_values            Oregon                                                                  = new osm_map_values("Oregon",\r
340                                                                                                                                                                                                         "-124.8", "41.8",\r
341                                                                                                                                                                                                         "-116.3", "46.3", 20);\r
342         public static osm_map_values            Washington_State                                                = new osm_map_values(\r
343                                                                                                                                                                                                         "Washington State",\r
344                                                                                                                                                                                                         "-125.0", "45.5",\r
345                                                                                                                                                                                                         "-116.9", "49.0", 20);\r
346         public static osm_map_values            South_Middle_America                                    = new osm_map_values(\r
347                                                                                                                                                                                                         "South+Middle America",\r
348                                                                                                                                                                                                         "-83.5", "-56.3",\r
349                                                                                                                                                                                                         "-30.8", "13.7", 20);\r
350         public static osm_map_values            Argentina                                                               = new osm_map_values(\r
351                                                                                                                                                                                                         "Argentina", "-73.9",\r
352                                                                                                                                                                                                         "-57.3", "-51.6",\r
353                                                                                                                                                                                                         "-21.0", 20);\r
354         public static osm_map_values            Argentina_Chile                                         = new osm_map_values(\r
355                                                                                                                                                                                                         "Argentina+Chile",\r
356                                                                                                                                                                                                         "-77.2", "-56.3",\r
357                                                                                                                                                                                                         "-52.7", "-16.1", 20);\r
358         public static osm_map_values            Bolivia                                                                 = new osm_map_values(\r
359                                                                                                                                                                                                         "Bolivia", "-70.5",\r
360                                                                                                                                                                                                         "-23.1", "-57.3",\r
361                                                                                                                                                                                                         "-9.3", 20);\r
362         public static osm_map_values            Brazil                                                                  = new osm_map_values("Brazil",\r
363                                                                                                                                                                                                         "-71.4", "-34.7",\r
364                                                                                                                                                                                                         "-32.8", "5.4", 20);\r
365         public static osm_map_values            Cuba                                                                            = new osm_map_values("Cuba",\r
366                                                                                                                                                                                                         "-85.3", "19.6",\r
367                                                                                                                                                                                                         "-74.0", "23.6", 20);\r
368         public static osm_map_values            Colombia                                                                        = new osm_map_values(\r
369                                                                                                                                                                                                         "Colombia", "-79.1",\r
370                                                                                                                                                                                                         "-4.0", "-66.7", "12.6",\r
371                                                                                                                                                                                                         20);\r
372         public static osm_map_values            Ecuador                                                                 = new osm_map_values(\r
373                                                                                                                                                                                                         "Ecuador", "-82.6",\r
374                                                                                                                                                                                                         "-5.4", "-74.4", "2.3",\r
375                                                                                                                                                                                                         20);\r
376         public static osm_map_values            Guyana_Suriname_Guyane_Francaise        = new osm_map_values(\r
377                                                                                                                                                                                                         "Guyana+Suriname+Guyane Francaise",\r
378                                                                                                                                                                                                         "-62.0", "1.0", "-51.2",\r
379                                                                                                                                                                                                         "8.9", 20);\r
380         public static osm_map_values            Haiti_Republica_Dominicana                      = new osm_map_values(\r
381                                                                                                                                                                                                         "Haiti+Republica Dominicana",\r
382                                                                                                                                                                                                         "-74.8", "17.3",\r
383                                                                                                                                                                                                         "-68.2", "20.1", 20);\r
384         public static osm_map_values            Jamaica                                                                 = new osm_map_values(\r
385                                                                                                                                                                                                         "Jamaica", "-78.6",\r
386                                                                                                                                                                                                         "17.4", "-75.9", "18.9",\r
387                                                                                                                                                                                                         20);\r
388         public static osm_map_values            Mexico                                                                  = new osm_map_values("Mexico",\r
389                                                                                                                                                                                                         "-117.6", "14.1",\r
390                                                                                                                                                                                                         "-86.4", "32.8", 20);\r
391         public static osm_map_values            Paraguay                                                                        = new osm_map_values(\r
392                                                                                                                                                                                                         "Paraguay", "-63.8",\r
393                                                                                                                                                                                                         "-28.1", "-53.6",\r
394                                                                                                                                                                                                         "-18.8", 20);\r
395         public static osm_map_values            Peru                                                                            = new osm_map_values("Peru",\r
396                                                                                                                                                                                                         "-82.4", "-18.1",\r
397                                                                                                                                                                                                         "-67.5", "0.4", 20);\r
398         public static osm_map_values            Uruguay                                                                 = new osm_map_values(\r
399                                                                                                                                                                                                         "Uruguay", "-59.2",\r
400                                                                                                                                                                                                         "-36.5", "-51.7",\r
401                                                                                                                                                                                                         "-29.7", 20);\r
402         public static osm_map_values            Venezuela                                                               = new osm_map_values(\r
403                                                                                                                                                                                                         "Venezuela", "-73.6",\r
404                                                                                                                                                                                                         "0.4", "-59.7", "12.8",\r
405                                                                                                                                                                                                         20);\r
406 \r
407 \r
408         public static osm_map_values[]  OSM_MAPS                                                                        = new osm_map_values[]{\r
409                         Whole_Planet, Africa, Angola, Burundi, Democratic_Republic_of_the_Congo, Kenya, Lesotho,\r
410                         Madagascar, Nambia_Botswana, Reunion, Rwanda, South_Africa, Uganda, Asia, China, Cyprus,\r
411                         India_Nepal, Indonesia, Iran, Iraq, Israel, Japan_Korea_Taiwan, Malasia_Singapore,\r
412                         Mongolia, Nambia_Botswana, Thailand, Turkey, UAE_Other, Australia, Tasmania,\r
413                         Victoria_New_South_Wales, New_Zealand, Europe, Western_Europe, Austria, BeNeLux,\r
414                         Faroe_Islands, France, Germany, Bavaria, Saxonia, Germany_Austria_Switzerland, Iceland,\r
415                         Ireland, Italy, Spain_Portugal, Mallorca, Galicia, Scandinavia, Finland, Denmark,\r
416                         Switzerland, UK, Bulgaria, Czech_Republic, Croatia, Estonia, Greece, Crete, Hungary,\r
417                         Latvia, Lithuania, Poland, Romania, North_America, Alaska, Canada, Hawaii,\r
418                         USA__except_Alaska_and_Hawaii_, Nevada, Oregon, Washington_State, South_Middle_America,\r
419                         Argentina, Argentina_Chile, Bolivia, Brazil, Cuba, Colombia, Ecuador,\r
420                         Guyana_Suriname_Guyane_Francaise, Haiti_Republica_Dominicana, Jamaica, Mexico, Paraguay,\r
421                         Peru, Uruguay, Venezuela                                                                                                };\r
422         public static String[]                          OSM_MAP_NAME_LIST                                               = new String[]{\r
423                         Whole_Planet.map_name, Africa.map_name, Angola.map_name, Burundi.map_name,\r
424                         Democratic_Republic_of_the_Congo.map_name, Kenya.map_name, Lesotho.map_name,\r
425                         Madagascar.map_name, Nambia_Botswana.map_name, Reunion.map_name, Rwanda.map_name,\r
426                         South_Africa.map_name, Uganda.map_name, Asia.map_name, China.map_name, Cyprus.map_name,\r
427                         India_Nepal.map_name, Indonesia.map_name, Iran.map_name, Iraq.map_name, Israel.map_name,\r
428                         Japan_Korea_Taiwan.map_name, Malasia_Singapore.map_name, Mongolia.map_name,\r
429                         Nambia_Botswana.map_name, Thailand.map_name, Turkey.map_name, UAE_Other.map_name,\r
430                         Australia.map_name, Tasmania.map_name, Victoria_New_South_Wales.map_name,\r
431                         New_Zealand.map_name, Europe.map_name, Western_Europe.map_name, Austria.map_name,\r
432                         BeNeLux.map_name, Faroe_Islands.map_name, France.map_name, Germany.map_name,\r
433                         Bavaria.map_name, Saxonia.map_name, Germany_Austria_Switzerland.map_name,\r
434                         Iceland.map_name, Ireland.map_name, Italy.map_name, Spain_Portugal.map_name,\r
435                         Mallorca.map_name, Galicia.map_name, Scandinavia.map_name, Finland.map_name,\r
436                         Denmark.map_name, Switzerland.map_name, UK.map_name, Bulgaria.map_name,\r
437                         Czech_Republic.map_name, Croatia.map_name, Estonia.map_name, Greece.map_name,\r
438                         Crete.map_name, Hungary.map_name, Latvia.map_name, Lithuania.map_name, Poland.map_name,\r
439                         Romania.map_name, North_America.map_name, Alaska.map_name, Canada.map_name,\r
440                         Hawaii.map_name, USA__except_Alaska_and_Hawaii_.map_name, Nevada.map_name,\r
441                         Oregon.map_name, Washington_State.map_name, South_Middle_America.map_name,\r
442                         Argentina.map_name, Argentina_Chile.map_name, Bolivia.map_name, Brazil.map_name,\r
443                         Cuba.map_name, Colombia.map_name, Ecuador.map_name,\r
444                         Guyana_Suriname_Guyane_Francaise.map_name, Haiti_Republica_Dominicana.map_name,\r
445                         Jamaica.map_name, Mexico.map_name, Paraguay.map_name, Peru.map_name, Uruguay.map_name,\r
446                         Venezuela.map_name                                                                                                              };\r
447 \r
448         public Boolean                                                  stop_me                                                                 = false;\r
449         static final int                                                SOCKET_CONNECT_TIMEOUT                          = 6000;\r
450         static final int                                                SOCKET_READ_TIMEOUT                                     = 6000;\r
451         static final int                                                MAP_WRITE_FILE_BUFFER                           = 1024 * 64;\r
452         static final int                                                MAP_WRITE_MEM_BUFFER                                    = 1024 * 64;\r
453         static final int                                                MAP_READ_FILE_BUFFER                                    = 1024 * 64;\r
454         static final int                                                UPDATE_PROGRESS_EVERY_CYCLE             = 8;\r
455 \r
456 \r
457         public class ProgressThread extends Thread\r
458         {\r
459                 Handler                 mHandler;\r
460                 osm_map_values  map_values;\r
461 \r
462                 ProgressThread(Handler h, osm_map_values map_values)\r
463                 {\r
464                         this.mHandler = h;\r
465                         this.map_values = map_values;\r
466                 }\r
467 \r
468                 public void run()\r
469                 {\r
470                         stop_me = false;\r
471                         int exit_code = download_osm_map(mHandler, map_values);\r
472 \r
473                         // ok, remove dialog\r
474                         Message msg = mHandler.obtainMessage();\r
475                         Bundle b = new Bundle();\r
476                         msg.what = 0;\r
477                         b.putInt("dialog_num", Navit.MAPDOWNLOAD_DIALOG);\r
478                         b.putInt("exit_code", exit_code);\r
479                         msg.setData(b);\r
480                         mHandler.sendMessage(msg);\r
481                 }\r
482 \r
483                 public void stop_thread()\r
484                 {\r
485                         stop_me = true;\r
486                         Log.d("NavitMapDownloader", "stop_me -> true");\r
487                 }\r
488         }\r
489 \r
490         public Navit    navit_jmain     = null;\r
491 \r
492         public NavitMapDownloader(Navit main)\r
493         {\r
494                 this.navit_jmain = main;\r
495         }\r
496 \r
497         public int download_osm_map(Handler handler, osm_map_values map_values)\r
498         {\r
499                 int exit_code = 1;\r
500 \r
501                 Message msg = handler.obtainMessage();\r
502                 Bundle b = new Bundle();\r
503                 msg.what = 1;\r
504                 b.putInt("max", 20); // use a dummy number here\r
505                 b.putInt("cur", 0);\r
506                 b.putString("title", "Mapdownload");\r
507                 b.putString("text", "downloading: " + map_values.map_name);\r
508                 msg.setData(b);\r
509                 handler.sendMessage(msg);\r
510                 try\r
511                 {\r
512                         // little pause here\r
513                         Thread.sleep(10);\r
514                 }\r
515                 catch (InterruptedException e1)\r
516                 {\r
517                 }\r
518 \r
519                 // output filename\r
520                 String fileName = "navitmap.tmp";\r
521                 String final_fileName = "navitmap.bin";\r
522                 // output path for output filename\r
523                 // String PATH = Environment.getExternalStorageDirectory() + "/download/";\r
524                 String PATH = "/sdcard/";\r
525                 Log.v("log_tag", "mapfilename tmp: " + PATH + fileName);\r
526 \r
527                 try\r
528                 {\r
529                         URL url = new URL("http://maps.navit-project.org/api/map/?bbox=" + map_values.lon1 + ","\r
530                                         + map_values.lat1 + "," + map_values.lon2 + "," + map_values.lat2);\r
531                         HttpURLConnection c = (HttpURLConnection) url.openConnection();\r
532                         c.setRequestMethod("GET");\r
533                         c.setDoOutput(true);\r
534                         c.setReadTimeout(SOCKET_READ_TIMEOUT);\r
535                         c.setConnectTimeout(SOCKET_CONNECT_TIMEOUT);\r
536                         long real_size_bytes = c.getContentLength();\r
537                         c.connect();\r
538 \r
539                         Log.d("NavitMapDownloader", "real size in bytes: " + real_size_bytes);\r
540                         if (real_size_bytes > 20)\r
541                         {\r
542                                 // change the estimated filesize to reported filesize\r
543                                 map_values.est_size_bytes = real_size_bytes;\r
544                         }\r
545                         Log.d("NavitMapDownloader", "size in bytes: " + map_values.est_size_bytes);\r
546 \r
547                         File file = new File(PATH);\r
548                         File outputFile = new File(file, fileName);\r
549                         File final_outputFile = new File(file, final_fileName);\r
550                         // tests have shown that deleting the file first is sometimes faster -> so we delete it (who knows)\r
551                         outputFile.delete();\r
552                         // seems this command overwrites the output file anyway\r
553                         FileOutputStream fos = new FileOutputStream(outputFile);\r
554                         BufferedOutputStream buf = new BufferedOutputStream(fos, MAP_WRITE_FILE_BUFFER); // buffer\r
555 \r
556                         InputStream is = c.getInputStream();\r
557                         BufferedInputStream bif = new BufferedInputStream(is, MAP_READ_FILE_BUFFER); // buffer\r
558 \r
559                         byte[] buffer = new byte[MAP_WRITE_MEM_BUFFER]; // buffer\r
560                         int len1 = 0;\r
561                         int already_read = 0;\r
562                         int alt = UPDATE_PROGRESS_EVERY_CYCLE; // show progress about every xx cylces\r
563                         int alt_cur = 0;\r
564                         String kbytes_per_second = "";\r
565                         long start_timestamp = System.currentTimeMillis();\r
566                         NumberFormat formatter = new DecimalFormat("00000.0");\r
567                         String eta_string = "";\r
568                         float per_second_overall = 0f;\r
569                         long bytes_remaining = 0;\r
570                         int eta_seconds = 0;\r
571                         while ((len1 = bif.read(buffer)) != -1)\r
572                         {\r
573                                 if (stop_me)\r
574                                 {\r
575                                         // ok we need to be stopped! close all files and end\r
576                                         buf.flush();\r
577                                         buf.close();\r
578                                         fos.close();\r
579                                         bif.close();\r
580                                         is.close();\r
581                                         c.disconnect();\r
582                                         return 2;\r
583                                 }\r
584                                 already_read = already_read + len1;\r
585                                 alt_cur++;\r
586                                 if (alt_cur > alt)\r
587                                 {\r
588                                         alt_cur = 0;\r
589 \r
590                                         msg = handler.obtainMessage();\r
591                                         b = new Bundle();\r
592                                         msg.what = 1;\r
593                                         b.putInt("max", (int) (map_values.est_size_bytes / 1024));\r
594                                         b.putInt("cur", (int) (already_read / 1024));\r
595                                         b.putString("title", "Map download");\r
596                                         per_second_overall = (float) already_read\r
597                                                         / (float) ((System.currentTimeMillis() - start_timestamp) / 1000);\r
598                                         kbytes_per_second = formatter.format((per_second_overall / 1024f));\r
599                                         bytes_remaining = map_values.est_size_bytes - already_read;\r
600                                         eta_seconds = (int) ((float) bytes_remaining / (float) per_second_overall);\r
601                                         if (eta_seconds > 60)\r
602                                         {\r
603                                                 eta_string = (int) (eta_seconds / 60f) + " m";\r
604                                         }\r
605                                         else\r
606                                         {\r
607                                                 eta_string = eta_seconds + " s";\r
608                                         }\r
609                                         b.putString("text", "downloading: " + map_values.map_name + "\n" + " "\r
610                                                         + (int) (already_read / 1024f / 1024f) + "Mb / "\r
611                                                         + (int) (map_values.est_size_bytes / 1024f / 1024f) + "Mb" + "\n" + " "\r
612                                                         + kbytes_per_second + "kb/s" + " ETA: " + eta_string);\r
613                                         msg.setData(b);\r
614                                         handler.sendMessage(msg);\r
615                                         //                                      try\r
616                                         //                                      {\r
617                                         //                                              // little pause here\r
618                                         //                                              Thread.sleep(20);\r
619                                         //                                      }\r
620                                         //                                      catch (InterruptedException e1)\r
621                                         //                                      {\r
622                                         //                                      }\r
623                                 }\r
624                                 buf.write(buffer, 0, len1);\r
625                         }\r
626                         buf.flush();\r
627 \r
628                         buf.close();\r
629                         fos.close();\r
630 \r
631                         bif.close();\r
632                         is.close();\r
633 \r
634                         c.disconnect();\r
635 \r
636                         // delete an already final filename, first\r
637                         final_outputFile.delete();\r
638                         // rename file to final name\r
639                         outputFile.renameTo(final_outputFile);\r
640                 }\r
641                 catch (IOException e)\r
642                 {\r
643                         msg = handler.obtainMessage();\r
644                         b = new Bundle();\r
645                         msg.what = 2;\r
646                         b.putString("text", "Error downloading map!");\r
647                         msg.setData(b);\r
648                         handler.sendMessage(msg);\r
649 \r
650                         Log.d("NavitMapDownloader", "Error: " + e);\r
651                         exit_code = 3;\r
652                 }\r
653                 catch (Exception e)\r
654                 {\r
655                         msg = handler.obtainMessage();\r
656                         b = new Bundle();\r
657                         msg.what = 2;\r
658                         b.putString("text", "Error downloading map!");\r
659                         msg.setData(b);\r
660                         handler.sendMessage(msg);\r
661 \r
662                         Log.d("NavitMapDownloader", "gerneral Error: " + e);\r
663                         exit_code = 4;\r
664                 }\r
665 \r
666                 msg = handler.obtainMessage();\r
667                 b = new Bundle();\r
668                 msg.what = 1;\r
669                 b.putInt("max", (int) (map_values.est_size_bytes / 1024));\r
670                 b.putInt("cur", (int) (map_values.est_size_bytes / 1024));\r
671                 b.putString("title", "Mapdownload");\r
672                 b.putString("text", map_values.map_name + " ready");\r
673                 msg.setData(b);\r
674                 handler.sendMessage(msg);\r
675 \r
676 \r
677                 Log.d("NavitMapDownloader", "success");\r
678                 exit_code = 0;\r
679                 return exit_code;\r
680         }\r
681 }\r