nearest_time_zone_jruby 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,388 @@
1
+ 1,Europe/Andorra
2
+ 2,Asia/Dubai
3
+ 3,Asia/Kabul
4
+ 4,America/Antigua
5
+ 5,America/Anguilla
6
+ 6,Europe/Tirane
7
+ 7,Asia/Yerevan
8
+ 8,Asia/Baku
9
+ 9,Africa/Luanda
10
+ 10,Antarctica/McMurdo
11
+ 11,America/Argentina/Buenos_Aires
12
+ 12,America/Argentina/Cordoba
13
+ 13,America/Argentina/San_Juan
14
+ 14,America/Argentina/Salta
15
+ 15,America/Argentina/Jujuy
16
+ 16,America/Argentina/Tucuman
17
+ 17,America/Argentina/Rio_Gallegos
18
+ 18,America/Argentina/La_Rioja
19
+ 19,America/Argentina/Ushuaia
20
+ 20,America/Argentina/San_Luis
21
+ 21,America/Argentina/Catamarca
22
+ 22,America/Argentina/Mendoza
23
+ 23,Pacific/Pago_Pago
24
+ 24,Europe/Vienna
25
+ 25,Australia/Perth
26
+ 26,Australia/Adelaide
27
+ 27,Australia/Darwin
28
+ 28,Australia/Brisbane
29
+ 29,Australia/Sydney
30
+ 30,Australia/Hobart
31
+ 31,Australia/Melbourne
32
+ 32,Australia/Broken_Hill
33
+ 33,America/Aruba
34
+ 34,Europe/Mariehamn
35
+ 35,Europe/Sarajevo
36
+ 36,America/Barbados
37
+ 37,Asia/Dhaka
38
+ 38,Europe/Brussels
39
+ 39,Africa/Ouagadougou
40
+ 40,Europe/Sofia
41
+ 41,Asia/Bahrain
42
+ 42,Africa/Bujumbura
43
+ 43,Africa/Porto-Novo
44
+ 44,America/St_Barthelemy
45
+ 45,Atlantic/Bermuda
46
+ 46,Asia/Brunei
47
+ 47,America/La_Paz
48
+ 48,America/Kralendijk
49
+ 49,America/Fortaleza
50
+ 50,America/Recife
51
+ 51,America/Belem
52
+ 52,America/Maceio
53
+ 53,America/Manaus
54
+ 54,America/Bahia
55
+ 55,America/Santarem
56
+ 56,America/Araguaina
57
+ 57,America/Sao_Paulo
58
+ 58,America/Cuiaba
59
+ 59,America/Campo_Grande
60
+ 60,America/Rio_Branco
61
+ 61,America/Eirunepe
62
+ 62,America/Porto_Velho
63
+ 63,America/Boa_Vista
64
+ 64,America/Noronha
65
+ 65,America/Nassau
66
+ 66,Asia/Thimphu
67
+ 67,Africa/Gaborone
68
+ 68,Europe/Minsk
69
+ 69,America/Belize
70
+ 70,America/Vancouver
71
+ 71,America/Montreal
72
+ 72,America/Edmonton
73
+ 73,America/Toronto
74
+ 74,America/Halifax
75
+ 75,America/Winnipeg
76
+ 76,America/Regina
77
+ 77,America/Atikokan
78
+ 78,America/St_Johns
79
+ 79,America/Moncton
80
+ 80,America/Dawson_Creek
81
+ 81,America/Iqaluit
82
+ 82,America/Creston
83
+ 83,America/Yellowknife
84
+ 84,America/Cambridge_Bay
85
+ 85,America/Glace_Bay
86
+ 86,America/Whitehorse
87
+ 87,America/Goose_Bay
88
+ 88,America/Inuvik
89
+ 89,America/Pangnirtung
90
+ 90,America/Rankin_Inlet
91
+ 91,America/Blanc-Sablon
92
+ 92,America/Swift_Current
93
+ 93,America/Thunder_Bay
94
+ 94,Indian/Cocos
95
+ 95,Africa/Lubumbashi
96
+ 96,Africa/Kinshasa
97
+ 97,Africa/Bangui
98
+ 98,Africa/Brazzaville
99
+ 99,Europe/Zurich
100
+ 100,Africa/Abidjan
101
+ 101,Pacific/Rarotonga
102
+ 102,America/Santiago
103
+ 103,Pacific/Easter
104
+ 104,Africa/Douala
105
+ 105,Asia/Chongqing
106
+ 106,Asia/Urumqi
107
+ 107,Asia/Kashgar
108
+ 108,Asia/Shanghai
109
+ 109,Asia/Harbin
110
+ 110,America/Bogota
111
+ 111,America/Costa_Rica
112
+ 112,America/Havana
113
+ 113,Atlantic/Cape_Verde
114
+ 114,America/Curacao
115
+ 115,Indian/Christmas
116
+ 116,Asia/Nicosia
117
+ 117,Europe/Prague
118
+ 118,Europe/Berlin
119
+ 119,Africa/Djibouti
120
+ 120,Europe/Copenhagen
121
+ 121,America/Dominica
122
+ 122,America/Santo_Domingo
123
+ 123,Africa/Algiers
124
+ 124,America/Guayaquil
125
+ 125,Pacific/Galapagos
126
+ 126,Europe/Tallinn
127
+ 127,Africa/Cairo
128
+ 128,Africa/El_Aaiun
129
+ 129,Africa/Asmara
130
+ 130,Europe/Madrid
131
+ 131,Atlantic/Canary
132
+ 132,Europe/Lisbon
133
+ 133,Africa/Ceuta
134
+ 134,Africa/Addis_Ababa
135
+ 135,Europe/Helsinki
136
+ 136,Pacific/Fiji
137
+ 137,Atlantic/Stanley
138
+ 138,Pacific/Chuuk
139
+ 139,Pacific/Kosrae
140
+ 140,Pacific/Pohnpei
141
+ 141,Atlantic/Faroe
142
+ 142,Europe/Paris
143
+ 143,Africa/Libreville
144
+ 144,Europe/London
145
+ 145,Europe/Guernsey
146
+ 146,America/Grenada
147
+ 147,Asia/Tbilisi
148
+ 148,America/Cayenne
149
+ 149,Africa/Accra
150
+ 150,Europe/Gibraltar
151
+ 151,America/Godthab
152
+ 152,Africa/Banjul
153
+ 153,Africa/Conakry
154
+ 154,America/Guadeloupe
155
+ 155,Africa/Malabo
156
+ 156,Europe/Athens
157
+ 157,Atlantic/South_Georgia
158
+ 158,America/Guatemala
159
+ 159,Pacific/Guam
160
+ 160,Africa/Bissau
161
+ 161,America/Guyana
162
+ 162,Asia/Hong_Kong
163
+ 163,America/Tegucigalpa
164
+ 164,Europe/Zagreb
165
+ 165,America/Port-au-Prince
166
+ 166,Europe/Budapest
167
+ 167,Asia/Jakarta
168
+ 168,Asia/Makassar
169
+ 169,Asia/Jayapura
170
+ 170,Asia/Pontianak
171
+ 171,Asia/Dili
172
+ 172,Europe/Dublin
173
+ 173,Asia/Jerusalem
174
+ 174,Europe/Isle_of_Man
175
+ 175,Asia/Kolkata
176
+ 176,Asia/Baghdad
177
+ 177,Asia/Tehran
178
+ 178,Atlantic/Reykjavik
179
+ 179,Europe/Rome
180
+ 180,Europe/Jersey
181
+ 181,America/Jamaica
182
+ 182,Asia/Amman
183
+ 183,Asia/Tokyo
184
+ 184,Africa/Nairobi
185
+ 185,Asia/Bishkek
186
+ 186,Asia/Phnom_Penh
187
+ 187,Pacific/Tarawa
188
+ 188,Pacific/Kiritimati
189
+ 189,Indian/Comoro
190
+ 190,America/St_Kitts
191
+ 191,Asia/Pyongyang
192
+ 192,Asia/Seoul
193
+ 193,Asia/Kuwait
194
+ 194,America/Cayman
195
+ 195,Asia/Oral
196
+ 196,Asia/Aqtau
197
+ 197,Asia/Aqtobe
198
+ 198,Asia/Almaty
199
+ 199,Asia/Qyzylorda
200
+ 200,Asia/Vientiane
201
+ 201,Asia/Beirut
202
+ 202,America/St_Lucia
203
+ 203,Europe/Vaduz
204
+ 204,Asia/Colombo
205
+ 205,Africa/Monrovia
206
+ 206,Africa/Maseru
207
+ 207,Europe/Vilnius
208
+ 208,Europe/Luxembourg
209
+ 209,Europe/Riga
210
+ 210,Africa/Tripoli
211
+ 211,Africa/Casablanca
212
+ 212,Europe/Monaco
213
+ 213,Europe/Chisinau
214
+ 214,Europe/Podgorica
215
+ 215,America/Marigot
216
+ 216,Indian/Antananarivo
217
+ 217,Pacific/Majuro
218
+ 218,Pacific/Kwajalein
219
+ 219,Europe/Skopje
220
+ 220,Africa/Bamako
221
+ 221,Asia/Rangoon
222
+ 222,Asia/Hovd
223
+ 223,Asia/Ulaanbaatar
224
+ 224,Asia/Choibalsan
225
+ 225,Asia/Macau
226
+ 226,Pacific/Saipan
227
+ 227,America/Martinique
228
+ 228,Africa/Nouakchott
229
+ 229,America/Montserrat
230
+ 230,Europe/Malta
231
+ 231,Indian/Mauritius
232
+ 232,Indian/Maldives
233
+ 233,Africa/Blantyre
234
+ 234,America/Monterrey
235
+ 235,America/Mexico_City
236
+ 236,America/Merida
237
+ 237,America/Cancun
238
+ 238,America/Matamoros
239
+ 239,America/Hermosillo
240
+ 240,America/Chihuahua
241
+ 241,America/Mazatlan
242
+ 242,America/Santa_Isabel
243
+ 243,America/Tijuana
244
+ 244,America/Bahia_Banderas
245
+ 245,America/Ojinaga
246
+ 246,Asia/Kuala_Lumpur
247
+ 247,Asia/Kuching
248
+ 248,Africa/Maputo
249
+ 249,Africa/Windhoek
250
+ 250,Pacific/Noumea
251
+ 251,Africa/Niamey
252
+ 252,Pacific/Norfolk
253
+ 253,Africa/Lagos
254
+ 254,America/Managua
255
+ 255,Europe/Amsterdam
256
+ 256,Europe/Oslo
257
+ 257,Asia/Kathmandu
258
+ 258,Pacific/Nauru
259
+ 259,Pacific/Niue
260
+ 260,Pacific/Auckland
261
+ 261,Pacific/Chatham
262
+ 262,Asia/Muscat
263
+ 263,America/Panama
264
+ 264,America/Lima
265
+ 265,Pacific/Marquesas
266
+ 266,Pacific/Gambier
267
+ 267,Pacific/Tahiti
268
+ 268,Pacific/Port_Moresby
269
+ 269,Asia/Manila
270
+ 270,Asia/Karachi
271
+ 271,Europe/Warsaw
272
+ 272,America/Miquelon
273
+ 273,Pacific/Pitcairn
274
+ 274,America/Puerto_Rico
275
+ 275,Asia/Gaza
276
+ 276,Asia/Hebron
277
+ 277,Atlantic/Madeira
278
+ 278,Atlantic/Azores
279
+ 279,Pacific/Palau
280
+ 280,America/Asuncion
281
+ 281,Asia/Qatar
282
+ 282,Indian/Reunion
283
+ 283,Europe/Bucharest
284
+ 284,Europe/Belgrade
285
+ 285,Europe/Moscow
286
+ 286,Asia/Yekaterinburg
287
+ 287,Europe/Volgograd
288
+ 288,Europe/Samara
289
+ 289,Europe/Kaliningrad
290
+ 290,Asia/Novokuznetsk
291
+ 291,Asia/Novosibirsk
292
+ 292,Asia/Krasnoyarsk
293
+ 293,Asia/Omsk
294
+ 294,Asia/Irkutsk
295
+ 295,Asia/Yakutsk
296
+ 296,Asia/Vladivostok
297
+ 297,Asia/Kamchatka
298
+ 298,Asia/Magadan
299
+ 299,Asia/Sakhalin
300
+ 300,Asia/Anadyr
301
+ 301,Africa/Kigali
302
+ 302,Asia/Riyadh
303
+ 303,Pacific/Guadalcanal
304
+ 304,Indian/Mahe
305
+ 305,Africa/Khartoum
306
+ 306,Europe/Stockholm
307
+ 307,Asia/Singapore
308
+ 308,Atlantic/St_Helena
309
+ 309,Europe/Ljubljana
310
+ 310,Arctic/Longyearbyen
311
+ 311,Europe/Bratislava
312
+ 312,Africa/Freetown
313
+ 313,Europe/San_Marino
314
+ 314,Africa/Dakar
315
+ 315,Africa/Mogadishu
316
+ 316,America/Paramaribo
317
+ 317,Africa/Juba
318
+ 318,Africa/Sao_Tome
319
+ 319,America/El_Salvador
320
+ 320,America/Lower_Princes
321
+ 321,Asia/Damascus
322
+ 322,Africa/Mbabane
323
+ 323,America/Grand_Turk
324
+ 324,Africa/Ndjamena
325
+ 325,Indian/Kerguelen
326
+ 326,Africa/Lome
327
+ 327,Asia/Bangkok
328
+ 328,Asia/Dushanbe
329
+ 329,Pacific/Fakaofo
330
+ 330,Asia/Ashgabat
331
+ 331,Africa/Tunis
332
+ 332,Pacific/Tongatapu
333
+ 333,Europe/Istanbul
334
+ 334,America/Port_of_Spain
335
+ 335,Pacific/Funafuti
336
+ 336,Asia/Taipei
337
+ 337,Africa/Dar_es_Salaam
338
+ 338,Europe/Simferopol
339
+ 339,Europe/Kiev
340
+ 340,Europe/Zaporozhye
341
+ 341,Europe/Uzhgorod
342
+ 342,Africa/Kampala
343
+ 343,America/Chicago
344
+ 344,America/New_York
345
+ 345,America/Indiana/Indianapolis
346
+ 346,America/Indiana/Vincennes
347
+ 347,America/Indiana/Tell_City
348
+ 348,America/Kentucky/Louisville
349
+ 349,America/Indiana/Marengo
350
+ 350,America/Indiana/Petersburg
351
+ 351,America/Indiana/Vevay
352
+ 352,America/Kentucky/Monticello
353
+ 353,America/Detroit
354
+ 354,America/Indiana/Knox
355
+ 355,America/Indiana/Winamac
356
+ 356,America/Menominee
357
+ 357,America/Phoenix
358
+ 358,America/Los_Angeles
359
+ 359,America/Denver
360
+ 360,America/Shiprock
361
+ 361,America/Juneau
362
+ 362,America/Sitka
363
+ 363,America/Metlakatla
364
+ 364,America/Boise
365
+ 365,America/North_Dakota/Beulah
366
+ 366,America/North_Dakota/Center
367
+ 367,America/North_Dakota/New_Salem
368
+ 368,Pacific/Honolulu
369
+ 369,America/Anchorage
370
+ 370,America/Adak
371
+ 371,America/Nome
372
+ 372,America/Montevideo
373
+ 373,Asia/Samarkand
374
+ 374,Asia/Tashkent
375
+ 375,Europe/Vatican
376
+ 376,America/St_Vincent
377
+ 377,America/Caracas
378
+ 378,America/Tortola
379
+ 379,America/St_Thomas
380
+ 380,Asia/Ho_Chi_Minh
381
+ 381,Pacific/Efate
382
+ 382,Pacific/Wallis
383
+ 383,Pacific/Apia
384
+ 384,Asia/Aden
385
+ 385,Indian/Mayotte
386
+ 386,Africa/Johannesburg
387
+ 387,Africa/Lusaka
388
+ 388,Africa/Harare
@@ -0,0 +1,16 @@
1
+ require "csv"
2
+ require "geokdtree"
3
+ require "andand"
4
+
5
+ require "require_all"
6
+ require_rel "./nearest_time_zone"
7
+
8
+ module NearestTimeZone
9
+
10
+ def self.to(latitude, longitude)
11
+ City.nearest(latitude, longitude).andand.time_zone.name
12
+ end
13
+ end
14
+
15
+ # load the kdtree so that everything is fast
16
+ NearestTimeZone::City.kdtree
@@ -0,0 +1,69 @@
1
+ module NearestTimeZone
2
+ class City
3
+
4
+ attr_accessor :id, :latitude, :longitude, :time_zone_id
5
+
6
+ def initialize(id, latitude, longitude, time_zone_id)
7
+ self.id, self.latitude, self.longitude, self.time_zone_id = id, latitude, longitude, time_zone_id
8
+ end
9
+
10
+ def self.kdtree
11
+ @kdtree ||= build_kdtree
12
+ end
13
+
14
+ def id=(value)
15
+ @id = value.to_i
16
+ end
17
+
18
+ def latitude=(value)
19
+ @latitude = value.to_f
20
+ end
21
+
22
+ def longitude=(value)
23
+ @longitude = value.to_f
24
+ end
25
+
26
+ def self.all
27
+ @all ||= load_all
28
+ end
29
+
30
+ def self.find(id)
31
+ all[id.to_i]
32
+ end
33
+
34
+ def self.nearest(latitude, longitude)
35
+ result = kdtree.nearest([latitude, longitude])
36
+ all[result.data] if result
37
+ end
38
+
39
+ def time_zone
40
+ TimeZone.find(time_zone_id)
41
+ end
42
+
43
+ private
44
+
45
+ def self.load_all
46
+ begin
47
+ Marshal.load(File.read(File.expand_path("../../../data/cities.dump", __FILE__)))
48
+ rescue
49
+ cities = CSV.open(File.expand_path("../../../data/cities.txt", __FILE__))
50
+ Hash[
51
+ cities.collect do |city|
52
+ [city[0].to_i, NearestTimeZone::City.new(*(0..3).collect { |n| city[n] })]
53
+ end
54
+ ]
55
+ end
56
+ end
57
+
58
+ def self.build_kdtree
59
+ begin
60
+ Marshal.load(File.read(File.expand_path("../../../data/cities.dump", __FILE__)))
61
+ rescue
62
+ Geokdtree::Tree.new(2).tap do |tree|
63
+ all.each { |_, city| tree.insert [city.latitude, city.longitude], city.id }
64
+ end
65
+ end
66
+ end
67
+
68
+ end
69
+ end