@hebcal/geo-sqlite 4.1.0 → 4.4.0

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.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! @hebcal/geo-sqlite v4.1.0 */
1
+ /*! @hebcal/geo-sqlite v4.4.0 */
2
2
  'use strict';
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -19,7 +19,7 @@ var events__default = /*#__PURE__*/_interopDefaultLegacy(events);
19
19
  var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
20
20
  var readline__default = /*#__PURE__*/_interopDefaultLegacy(readline);
21
21
 
22
- var Ashdod=295629;var Atlanta=4180439;var Austin=4671654;var Baghdad=98182;var Baltimore=4347778;var Berlin=2950159;var Bogota=3688689;var Boston=4930956;var Buffalo=5110629;var Chicago=4887398;var Cincinnati=4508722;var Cleveland=5150529;var Dallas=4684888;var Denver=5419384;var Detroit=4990729;var Eilat=295277;var Gibraltar=2411585;var Haifa=294801;var Hawaii=5856195;var Houston=4699066;var Jerusalem=281184;var Johannesburg=993800;var Kiev=703448;var Livingston=5100572;var London=2643743;var Melbourne=2158177;var Miami=4164138;var Montreal=6077243;var Moscow=524901;var Omaha=5074472;var Ottawa=6094817;var Paris=2988507;var Philadelphia=4560349;var Phoenix=5308655;var Pittsburgh=5206379;var Seattle=5809844;var Sydney=2147714;var Tiberias=293322;var Toronto=6167865;var Vancouver=6173331;var city2geonameid = {"AD-Andorra La Vella":3041563,"AE-Abu Dhabi":292968,"AE-Dubai":292223,"AF-Kabul":1138958,"AI-The Valley":3573374,"AL-Tirana":3183875,"AM-Yerevan":616052,"AO-Luanda":2240449,"AR-Buenos Aires":3435910,"AR-Cordoba":3860259,"AR-Rosario":3838583,"AS-Pago Pago":5881576,"AT-Vienna":2761369,"AU-Adelaide":2078025,"AU-Brisbane":2174003,"AU-Canberra":2172517,"AU-Gold Coast":2165087,"AU-Hobart":2163355,"AU-Melbourne":2158177,"AU-Perth":2063523,"AU-Sydney":2147714,"AW-Oranjestad":3577154,"AZ-Baku":587084,Ashdod:Ashdod,Atlanta:Atlanta,Austin:Austin,"BA-Sarajevo":3191281,"BB-Bridgetown":3374036,"BD-Chittagong":1205733,"BD-Dhaka":1185241,"BD-Khulna":1336135,"BE-Brussels":2800866,"BF-Ouagadougou":2357048,"BG-Sofia":727011,"BH-Manama":290340,"BI-Bujumbura":425378,"BJ-Porto-novo":2392087,"BM-Hamilton":3573197,"BN-Bandar Seri Begawan":1820906,"BO-La Paz":3911925,"BO-Santa Cruz de la Sierra":3904906,"BR-Belo Horizonte":3470127,"BR-Brasilia":3469058,"BR-Fortaleza":3399415,"BR-Rio de Janeiro":3451190,"BR-Salvador":3450554,"BR-Sao Paulo":3448439,"BS-Nassau":3571824,"BT-Thimphu":1252416,"BW-Gaborone":933773,"BY-Minsk":625144,"BZ-Belmopan":3582672,Baghdad:Baghdad,Baltimore:Baltimore,"Be'er Sheva":295530,"Beer Sheva":295530,"Bene Beraq":295514,"IL-Bene Beraq":295514,Berlin:Berlin,"Bnei Brak":295514,Bogota:Bogota,Boston:Boston,"Buenos Aires":3435910,Buffalo:Buffalo,"CA-Calgary":5913490,"CA-Edmonton":5946768,"CA-Halifax":6324729,"CA-Mississauga":6075357,"CA-Montreal":6077243,"CA-Ottawa":6094817,"CA-Quebec City":6325494,"CA-Regina":6119109,"CA-Saskatoon":6141256,"CA-St. John's-05":6324733,"CA-Toronto":6167865,"CA-Vancouver":6173331,"CA-Victoria":6174041,"CA-Winnipeg":6183235,"CD-Kinshasa":2314302,"CD-Lubumbashi":922704,"CF-Bangui":2389853,"CG-Brazzaville":2260535,"CH-Bern":2661552,"CH-Geneva":2660646,"CH-Zurich":2657896,"CI-Abidjan":2293538,"CI-Yamoussoukro":2279755,"CK-Avarua":4035715,"CL-Santiago":3871336,"CM-Douala":2232593,"CM-Yaounde":2220957,"CN-Beijing":1816670,"CN-Chengdu":1815286,"CN-Chongqing":1814906,"CN-Guangzhou":1809858,"CN-Harbin":2037013,"CN-Kaifeng":1804879,"CN-Lanzhou":1804430,"CN-Nanchong":1800146,"CN-Nanjing":1799962,"CN-Puyang":1798422,"CN-Shanghai":1796236,"CN-Shenyang":2034937,"CN-Shenzhen":1795565,"CN-Shiyan":1794903,"CN-Tai'an":1793724,"CN-Tianjin":1792947,"CN-Wuhan":1791247,"CN-Xi'an":1790630,"CN-Yueyang":1927639,"CN-Zhumadian":1783873,"CO-Barranquilla":3689147,"CO-Bogota":3688689,"CO-Bogotá":3688689,"CO-Cali":3687925,"CO-Medellin":3674962,"CR-San Jose":3621849,"CR-San José":3621849,"CR-San José":3621849,"CU-Havana":3553478,"CV-Praia":3374333,"CW-Willemstad":3513090,"CY-Nicosia":146268,"CZ-Prague":3067696,Chicago:Chicago,Cincinnati:Cincinnati,Cleveland:Cleveland,"DE-Berlin":2950159,"DE-Hamburg":2911298,"DE-Munich":2867714,"DK-Copenhagen":2618425,"DM-Roseau":3575635,"DO-Santiago de los Caballeros":3492914,"DO-Santo Domingo":3492908,"DZ-Algiers":2507480,Dallas:Dallas,Denver:Denver,Detroit:Detroit,"EC-Guayaquil":3657509,"EC-Quito":3652462,"EE-Tallinn":588409,"EG-Al Jizah":360995,"EG-Alexandria":361058,"EG-Cairo":360630,"ER-Asmara":343300,"ES-Barcelona":3128760,"ES-Madrid":3117735,"ET-Addis Ababa":344979,Eilat:Eilat,"FI-Helsinki":658225,"FJ-Suva":2198148,"FK-Stanley":3426691,"FO-Tórshavn":2611396,"FR-Marseilles":2995469,"FR-Paris":2988507,"GA-Libreville":2399697,"GB-Belfast":2655984,"GB-Birmingham":2655603,"GB-Bristol":2654675,"GB-Cardiff":2653822,"GB-Edinburgh":2650225,"GB-Glasgow":2648579,"GB-Leeds":2644688,"GB-Liverpool":2644210,"GB-London":2643743,"GB-Manchester":2643123,"GB-Sheffield":2638077,"GE-Tbilisi":611717,"GH-Accra":2306104,"GH-Kumasi":2298890,"GI-Gibraltar":2411585,"GL-Nuuk":3421319,"GM-Banjul":2413876,"GN-Camayenne":2422488,"GN-Conakry":2422465,"GQ-Malabo":2309527,"GR-Athens":264371,"GT-Guatemala City":3598132,"GW-Bissau":2374775,"GY-Georgetown":3378644,Gibraltar:Gibraltar,"HK-Hong Kong":1819729,"HN-Tegucigalpa":3600949,"HR-Zagreb":3186886,"HT-Port-au-Prince":3718426,"HU-Budapest":3054643,Haifa:Haifa,Hawaii:Hawaii,Houston:Houston,"ID-Bandung":1650357,"ID-Bekasi":1649378,"ID-Depok":1645518,"ID-Jakarta":1642911,"ID-Makassar":1622786,"ID-Medan":1214520,"ID-Palembang":1633070,"ID-Semarang":1627896,"ID-South Tangerang":8581443,"ID-Surabaya":1625822,"ID-Tangerang":1625084,"IE-Dublin":2964574,"IL-Ashdod":295629,"IL-Ashkelon":295620,"IL-Ashqelon":295620,"IL-Bat Yam":295548,"IL-Be'er Sheva":295530,"IL-Beer Sheva":295530,"IL-Beit Shemesh":295432,"IL-Bet Shemesh":295432,"IL-Bnei Brak":295514,"IL-Eilat":295277,"IL-Hadera":294946,"IL-Haifa":294801,"IL-Herzliya":294778,"IL-Herzliyya":294778,"IL-Holon":294751,"IL-Jerusalem":281184,"IL-Kfar Saba":294514,"IL-Lod":294421,"IL-Modiin":282926,"IL-Nazareth":294098,"IL-Netanya":294071,"IL-Petach Tikvah":293918,"IL-Petah Tikvah":293918,"IL-Petah Tiqwa":293918,"IL-Ra'anana":293807,"IL-Raanana":293807,"IL-Ramat Gan":293788,"IL-Ramla":293768,"IL-Rishon LeZion":293703,"IL-Rishon Leziyyon":293703,"IL-Tel Aviv":293397,"IL-Tiberias":293322,"IM-Douglas":3042237,"IN-Ahmadabad":1279233,"IN-Bangalore":1277333,"IN-Bombay":1275339,"IN-Calcutta":1275004,"IN-Chennai":1264527,"IN-Cochin":1273874,"IN-Hyderabad":1269843,"IN-Jaipur":1269515,"IN-Kanpur":1267995,"IN-New Delhi":1261481,"IN-Pune":1259229,"IN-Surat":1255364,"IQ-Baghdad":98182,"IR-Tehran":112931,"IS-Reykjavik":3413829,"IS-Reykjavík":3413829,"IT-Milano":3173435,"IT-Rome":3169070,"JM-Kingston":3489854,"JO-Amman":250441,"JP-Kobe-shi":1859171,"JP-Kyoto":1857910,"JP-Nagoya-shi":1856057,"JP-Osaka-shi":1853909,"JP-Sapporo":2128295,"JP-Tokyo":1850147,Jerusalem:Jerusalem,Johannesburg:Johannesburg,"KE-Nairobi":184745,"KG-Bishkek":1528675,"KH-Phnom Penh":1821306,"KM-Moroni":921772,"KN-Basseterre":3575551,"KP-Pyongyang":1871859,"KR-Busan":1838524,"KR-Seoul":1835848,"KW-Kuwait":285787,"KY-George Town":3580661,"KZ-Almaty":1526384,"KZ-Astana":1526273,Kiev:Kiev,"LA-Vientiane":1651944,"LB-Beirut":276781,"LC-Castries":3576812,"LI-Vaduz":3042030,"LR-Monrovia":2274895,"LS-Maseru":932505,"LT-Vilnius":593116,"LU-Luxemburg":2960316,"LV-Riga":456172,"LY-Tripoli":2210247,"La Paz":3911925,Livingston:Livingston,London:London,"Los Angeles":5368361,"MA-Casablanca":2553604,"MA-Rabat":2538475,"MD-Chisinau":618426,"ME-Podgorica":3193044,"MG-Antananarivo":1070940,"MK-Skopje":785842,"ML-Bamako":2460596,"MM-Mandalay":1311874,"MM-Rangoon":1298824,"MN-Ulaanbaatar":2028462,"MP-Saipan":7828758,"MR-Nouakchott":2377450,"MS-Plymouth":3578069,"MT-Valletta":2562305,"MU-Port Louis":934154,"MW-Lilongwe":927967,"MX-Cancun":3531673,"MX-Guadalajara":4005539,"MX-Iztapalapa":3526683,"MX-Mazatlan":3996322,"MX-Mexico City":3530597,"MX-Monterrey":3995465,"MX-Puerto Vallarta":3991328,"MX-Tijuana":3981609,"MY-Kota Bharu":1736376,"MY-Kuala Lumpur":1735161,"MZ-Maputo":1040652,Melbourne:Melbourne,"Mexico City":3530597,Miami:Miami,Montreal:Montreal,Moscow:Moscow,"NA-Windhoek":3352136,"NC-Noumea":2139521,"NC-Nouméa":2139521,"NE-Niamey":2440485,"NG-Abuja":2352778,"NG-Lagos":2332459,"NI-Managua":3617763,"NL-Amsterdam":2759794,"NO-Oslo":3143244,"NP-Kathmandu":1283240,"NU-Alofi":4036284,"NZ-Auckland":2193733,"NZ-Christchurch":2192362,"NZ-Wellington":2179537,"New York":5128581,"OM-Muscat":287286,Omaha:Omaha,Ottawa:Ottawa,"PA-Panama City":3703443,"PE-Lima":3936456,"PF-Papeete":4033936,"PG-Port Moresby":2088122,"PH-Manila":1701668,"PK-Islamabad":1176615,"PK-Karachi":1174872,"PL-Warsaw":756135,"PR-San Juan":4568127,"PT-Lisbon":2267057,"PY-Asuncion":3439389,"Panama City":3703443,Paris:Paris,"Petach Tikvah":293918,"Petah Tikvah":293918,"Petah Tikva":293918,"Petah Tiqwa":293918,"Petaẖ Tiqwa":293918,Philadelphia:Philadelphia,Phoenix:Phoenix,Pittsburgh:Pittsburgh,"QA-Doha":290030,"RO-Bucharest":683506,"RS-Belgrade":792680,"RU-Moscow":524901,"RU-Novosibirsk":1496747,"RU-Saint Petersburg":498817,"RU-Yekaterinburg":1486209,"RW-Kigali":202061,"Ra'anana":293807,"SA-Jeddah":105343,"SA-Mecca":104515,"SA-Medina":109223,"SA-Riyadh":108410,"SB-Honiara":2108502,"SC-Victoria":241131,"SD-Khartoum":379252,"SD-Omdurman":365137,"SE-Stockholm":2673730,"SG-Singapore":1880252,"SH-Jamestown":3370903,"SI-Ljubljana":3196359,"SK-Bratislava":3060972,"SL-Freetown":2408770,"SN-Dakar":2253354,"SO-Mogadishu":53654,"SR-Paramaribo":3383330,"ST-Sao Tome":2410763,"ST-São Tomé":2410763,"SV-San Salvador":3583361,"SY-Aleppo":170063,"SY-Damascus":170654,"SZ-Mbabane":934985,"Saint Louis":4407066,"Saint Petersburg":498817,"San Francisco":5391959,Seattle:Seattle,Sydney:Sydney,"TC-Cockburn Town":3576994,"TD-Ndjamena":2427123,"TG-Lome":2365267,"TG-Lomé":2365267,"TH-Bangkok":1609350,"TJ-Dushanbe":1221874,"TM-Ashgabat":162183,"TN-Tunis":2464470,"TR-Adana":325363,"TR-Ankara":323786,"TR-Bursa":750269,"TR-Istanbul":745044,"TR-Izmir":311046,"TV-Funafuti":2110394,"TW-Kaohsiung":1673820,"TW-Taipei":1668341,"TZ-Dar es Salaam":160263,"TZ-Dodoma":160196,"Tel Aviv":293397,Tiberias:Tiberias,Toronto:Toronto,"UA-Kharkiv":706483,"UA-Kiev":703448,"UG-Kampala":232422,"US-Atlanta-GA":4180439,"US-Austin-TX":4671654,"US-Baltimore-MD":4347778,"US-Boston-MA":4930956,"US-Buffalo-NY":5110629,"US-Chicago-IL":4887398,"US-Cincinnati-OH":4508722,"US-Cleveland-OH":5150529,"US-Columbus-OH":4509177,"US-Dallas-TX":4684888,"US-Denver-CO":5419384,"US-Detroit-MI":4990729,"US-Hartford-CT":4835797,"US-Honolulu-HI":5856195,"US-Houston-TX":4699066,"US-Lakewood-NJ":5100280,"US-Las Vegas-NV":5506956,"US-Livingston-NY":5100572,"US-Los Angeles-CA":5368361,"US-Memphis-TN":4641239,"US-Miami-FL":4164138,"US-Milwaukee-WI":5263045,"US-Monsey-NY":5127315,"US-New Haven-CT":4839366,"US-New York-NY":5128581,"US-Omaha-NE":5074472,"US-Orlando-FL":4167147,"US-Passaic-NJ":5102443,"US-Philadelphia-PA":4560349,"US-Phoenix-AZ":5308655,"US-Pittsburgh-PA":5206379,"US-Portland-OR":5746545,"US-Providence-RI":5224151,"US-Richmond-VA":4781708,"US-Rochester-NY":5134086,"US-Saint Louis-MO":4407066,"US-Saint Paul-MN":5045360,"US-San Diego-CA":5391811,"US-San Francisco-CA":5391959,"US-Seattle-WA":5809844,"US-Silver Spring-MD":4369596,"US-Teaneck-NJ":5105262,"US-Washington-DC":4140963,"US-White Plains-NY":5144336,"UY-Montevideo":3441575,"UZ-Tashkent":1512569,"VC-Kingstown":3577887,"VE-Caracas":3646738,"VE-Maracaibo":3633009,"VE-Maracay":3632998,"VE-Valencia":3625549,"VG-Road Town":3577430,"VN-Hanoi":1581130,"VN-Ho Chi Minh City":1566083,Vancouver:Vancouver,"WS-Apia":4035413,"Washington DC":4140963,"White Plains":5144336,"YE-Sanaa":71137,"YT-Mamoudzou":921815,"ZA-Cape Town":3369157,"ZA-Durban":1007311,"ZA-Johannesburg":993800,"ZA-Pretoria":964137,"ZM-Lusaka":909137,"ZW-Harare":890299};
22
+ const Ashdod=295629;const Atlanta=4180439;const Austin=4671654;const Baghdad=98182;const Baltimore=4347778;const Berlin=2950159;const Bogota=3688689;const Boston=4930956;const Buffalo=5110629;const Chicago=4887398;const Cincinnati=4508722;const Cleveland=5150529;const Dallas=4684888;const Denver=5419384;const Detroit=4990729;const Eilat=295277;const Gibraltar=2411585;const Haifa=294801;const Hawaii=5856195;const Houston=4699066;const Jerusalem=281184;const Johannesburg=993800;const Kiev=703448;const Livingston=5100572;const London=2643743;const Melbourne=2158177;const Miami=4164138;const Montreal=6077243;const Moscow=524901;const Omaha=5074472;const Ottawa=6094817;const Paris=2988507;const Philadelphia=4560349;const Phoenix=5308655;const Pittsburgh=5206379;const Seattle=5809844;const Sydney=2147714;const Tiberias=293322;const Toronto=6167865;const Vancouver=6173331;var city2geonameid = {"AD-Andorra La Vella":3041563,"AE-Abu Dhabi":292968,"AE-Dubai":292223,"AF-Kabul":1138958,"AI-The Valley":3573374,"AL-Tirana":3183875,"AM-Yerevan":616052,"AO-Luanda":2240449,"AR-Buenos Aires":3435910,"AR-Cordoba":3860259,"AR-Rosario":3838583,"AS-Pago Pago":5881576,"AT-Vienna":2761369,"AU-Adelaide":2078025,"AU-Brisbane":2174003,"AU-Canberra":2172517,"AU-Gold Coast":2165087,"AU-Hobart":2163355,"AU-Melbourne":2158177,"AU-Perth":2063523,"AU-Sydney":2147714,"AW-Oranjestad":3577154,"AZ-Baku":587084,Ashdod:Ashdod,Atlanta:Atlanta,Austin:Austin,"BA-Sarajevo":3191281,"BB-Bridgetown":3374036,"BD-Chittagong":1205733,"BD-Dhaka":1185241,"BD-Khulna":1336135,"BE-Brussels":2800866,"BF-Ouagadougou":2357048,"BG-Sofia":727011,"BH-Manama":290340,"BI-Bujumbura":425378,"BJ-Porto-novo":2392087,"BM-Hamilton":3573197,"BN-Bandar Seri Begawan":1820906,"BO-La Paz":3911925,"BO-Santa Cruz de la Sierra":3904906,"BR-Belo Horizonte":3470127,"BR-Brasilia":3469058,"BR-Fortaleza":3399415,"BR-Rio de Janeiro":3451190,"BR-Salvador":3450554,"BR-Sao Paulo":3448439,"BS-Nassau":3571824,"BT-Thimphu":1252416,"BW-Gaborone":933773,"BY-Minsk":625144,"BZ-Belmopan":3582672,Baghdad:Baghdad,Baltimore:Baltimore,"Be'er Sheva":295530,"Beer Sheva":295530,"Bene Beraq":295514,"IL-Bene Beraq":295514,Berlin:Berlin,"Bnei Brak":295514,Bogota:Bogota,Boston:Boston,"Buenos Aires":3435910,Buffalo:Buffalo,"CA-Calgary":5913490,"CA-Edmonton":5946768,"CA-Halifax":6324729,"CA-Mississauga":6075357,"CA-Montreal":6077243,"CA-Ottawa":6094817,"CA-Quebec City":6325494,"CA-Regina":6119109,"CA-Saskatoon":6141256,"CA-St. John's-05":6324733,"CA-Toronto":6167865,"CA-Vancouver":6173331,"CA-Victoria":6174041,"CA-Winnipeg":6183235,"CD-Kinshasa":2314302,"CD-Lubumbashi":922704,"CF-Bangui":2389853,"CG-Brazzaville":2260535,"CH-Bern":2661552,"CH-Geneva":2660646,"CH-Zurich":2657896,"CI-Abidjan":2293538,"CI-Yamoussoukro":2279755,"CK-Avarua":4035715,"CL-Santiago":3871336,"CM-Douala":2232593,"CM-Yaounde":2220957,"CN-Beijing":1816670,"CN-Chengdu":1815286,"CN-Chongqing":1814906,"CN-Guangzhou":1809858,"CN-Harbin":2037013,"CN-Kaifeng":1804879,"CN-Lanzhou":1804430,"CN-Nanchong":1800146,"CN-Nanjing":1799962,"CN-Puyang":1798422,"CN-Shanghai":1796236,"CN-Shenyang":2034937,"CN-Shenzhen":1795565,"CN-Shiyan":1794903,"CN-Tai'an":1793724,"CN-Tianjin":1792947,"CN-Wuhan":1791247,"CN-Xi'an":1790630,"CN-Yueyang":1927639,"CN-Zhumadian":1783873,"CO-Barranquilla":3689147,"CO-Bogota":3688689,"CO-Bogotá":3688689,"CO-Cali":3687925,"CO-Medellin":3674962,"CR-San Jose":3621849,"CR-San José":3621849,"CR-San José":3621849,"CU-Havana":3553478,"CV-Praia":3374333,"CW-Willemstad":3513090,"CY-Nicosia":146268,"CZ-Prague":3067696,Chicago:Chicago,Cincinnati:Cincinnati,Cleveland:Cleveland,"DE-Berlin":2950159,"DE-Hamburg":2911298,"DE-Munich":2867714,"DK-Copenhagen":2618425,"DM-Roseau":3575635,"DO-Santiago de los Caballeros":3492914,"DO-Santo Domingo":3492908,"DZ-Algiers":2507480,Dallas:Dallas,Denver:Denver,Detroit:Detroit,"EC-Guayaquil":3657509,"EC-Quito":3652462,"EE-Tallinn":588409,"EG-Al Jizah":360995,"EG-Alexandria":361058,"EG-Cairo":360630,"ER-Asmara":343300,"ES-Barcelona":3128760,"ES-Madrid":3117735,"ET-Addis Ababa":344979,Eilat:Eilat,"FI-Helsinki":658225,"FJ-Suva":2198148,"FK-Stanley":3426691,"FO-Tórshavn":2611396,"FR-Marseilles":2995469,"FR-Paris":2988507,"GA-Libreville":2399697,"GB-Belfast":2655984,"GB-Birmingham":2655603,"GB-Bristol":2654675,"GB-Cardiff":2653822,"GB-Edinburgh":2650225,"GB-Glasgow":2648579,"GB-Leeds":2644688,"GB-Liverpool":2644210,"GB-London":2643743,"GB-Manchester":2643123,"GB-Sheffield":2638077,"GE-Tbilisi":611717,"GH-Accra":2306104,"GH-Kumasi":2298890,"GI-Gibraltar":2411585,"GL-Nuuk":3421319,"GM-Banjul":2413876,"GN-Camayenne":2422488,"GN-Conakry":2422465,"GQ-Malabo":2309527,"GR-Athens":264371,"GT-Guatemala City":3598132,"GW-Bissau":2374775,"GY-Georgetown":3378644,Gibraltar:Gibraltar,"HK-Hong Kong":1819729,"HN-Tegucigalpa":3600949,"HR-Zagreb":3186886,"HT-Port-au-Prince":3718426,"HU-Budapest":3054643,Haifa:Haifa,Hawaii:Hawaii,Houston:Houston,"ID-Bandung":1650357,"ID-Bekasi":1649378,"ID-Depok":1645518,"ID-Jakarta":1642911,"ID-Makassar":1622786,"ID-Medan":1214520,"ID-Palembang":1633070,"ID-Semarang":1627896,"ID-South Tangerang":8581443,"ID-Surabaya":1625822,"ID-Tangerang":1625084,"IE-Dublin":2964574,"IL-Ashdod":295629,"IL-Ashkelon":295620,"IL-Ashqelon":295620,"IL-Bat Yam":295548,"IL-Be'er Sheva":295530,"IL-Beer Sheva":295530,"IL-Beit Shemesh":295432,"IL-Bet Shemesh":295432,"IL-Bnei Brak":295514,"IL-Eilat":295277,"IL-Hadera":294946,"IL-Haifa":294801,"IL-Herzliya":294778,"IL-Herzliyya":294778,"IL-Holon":294751,"IL-Jerusalem":281184,"IL-Kfar Saba":294514,"IL-Lod":294421,"IL-Modiin":282926,"IL-Nazareth":294098,"IL-Netanya":294071,"IL-Petach Tikvah":293918,"IL-Petah Tikvah":293918,"IL-Petah Tiqwa":293918,"IL-Ra'anana":293807,"IL-Raanana":293807,"IL-Ramat Gan":293788,"IL-Ramla":293768,"IL-Rishon LeZion":293703,"IL-Rishon Leziyyon":293703,"IL-Tel Aviv":293397,"IL-Tiberias":293322,"IM-Douglas":3042237,"IN-Ahmadabad":1279233,"IN-Bangalore":1277333,"IN-Bombay":1275339,"IN-Calcutta":1275004,"IN-Chennai":1264527,"IN-Cochin":1273874,"IN-Hyderabad":1269843,"IN-Jaipur":1269515,"IN-Kanpur":1267995,"IN-New Delhi":1261481,"IN-Pune":1259229,"IN-Surat":1255364,"IQ-Baghdad":98182,"IR-Tehran":112931,"IS-Reykjavik":3413829,"IS-Reykjavík":3413829,"IT-Milano":3173435,"IT-Rome":3169070,"JM-Kingston":3489854,"JO-Amman":250441,"JP-Kobe-shi":1859171,"JP-Kyoto":1857910,"JP-Nagoya-shi":1856057,"JP-Osaka-shi":1853909,"JP-Sapporo":2128295,"JP-Tokyo":1850147,Jerusalem:Jerusalem,Johannesburg:Johannesburg,"KE-Nairobi":184745,"KG-Bishkek":1528675,"KH-Phnom Penh":1821306,"KM-Moroni":921772,"KN-Basseterre":3575551,"KP-Pyongyang":1871859,"KR-Busan":1838524,"KR-Seoul":1835848,"KW-Kuwait":285787,"KY-George Town":3580661,"KZ-Almaty":1526384,"KZ-Astana":1526273,Kiev:Kiev,"LA-Vientiane":1651944,"LB-Beirut":276781,"LC-Castries":3576812,"LI-Vaduz":3042030,"LR-Monrovia":2274895,"LS-Maseru":932505,"LT-Vilnius":593116,"LU-Luxemburg":2960316,"LV-Riga":456172,"LY-Tripoli":2210247,"La Paz":3911925,Livingston:Livingston,London:London,"Los Angeles":5368361,"MA-Casablanca":2553604,"MA-Rabat":2538475,"MD-Chisinau":618426,"ME-Podgorica":3193044,"MG-Antananarivo":1070940,"MK-Skopje":785842,"ML-Bamako":2460596,"MM-Mandalay":1311874,"MM-Rangoon":1298824,"MN-Ulaanbaatar":2028462,"MP-Saipan":7828758,"MR-Nouakchott":2377450,"MS-Plymouth":3578069,"MT-Valletta":2562305,"MU-Port Louis":934154,"MW-Lilongwe":927967,"MX-Cancun":3531673,"MX-Guadalajara":4005539,"MX-Iztapalapa":3526683,"MX-Mazatlan":3996322,"MX-Mexico City":3530597,"MX-Monterrey":3995465,"MX-Puerto Vallarta":3991328,"MX-Tijuana":3981609,"MY-Kota Bharu":1736376,"MY-Kuala Lumpur":1735161,"MZ-Maputo":1040652,Melbourne:Melbourne,"Mexico City":3530597,Miami:Miami,Montreal:Montreal,Moscow:Moscow,"NA-Windhoek":3352136,"NC-Noumea":2139521,"NC-Nouméa":2139521,"NE-Niamey":2440485,"NG-Abuja":2352778,"NG-Lagos":2332459,"NI-Managua":3617763,"NL-Amsterdam":2759794,"NO-Oslo":3143244,"NP-Kathmandu":1283240,"NU-Alofi":4036284,"NZ-Auckland":2193733,"NZ-Christchurch":2192362,"NZ-Wellington":2179537,"New York":5128581,"OM-Muscat":287286,Omaha:Omaha,Ottawa:Ottawa,"PA-Panama City":3703443,"PE-Lima":3936456,"PF-Papeete":4033936,"PG-Port Moresby":2088122,"PH-Manila":1701668,"PK-Islamabad":1176615,"PK-Karachi":1174872,"PL-Warsaw":756135,"PR-San Juan":4568127,"PT-Lisbon":2267057,"PY-Asuncion":3439389,"Panama City":3703443,Paris:Paris,"Petach Tikvah":293918,"Petah Tikvah":293918,"Petah Tikva":293918,"Petah Tiqwa":293918,"Petaẖ Tiqwa":293918,Philadelphia:Philadelphia,Phoenix:Phoenix,Pittsburgh:Pittsburgh,"QA-Doha":290030,"RO-Bucharest":683506,"RS-Belgrade":792680,"RU-Moscow":524901,"RU-Novosibirsk":1496747,"RU-Saint Petersburg":498817,"RU-Yekaterinburg":1486209,"RW-Kigali":202061,"Ra'anana":293807,"SA-Jeddah":105343,"SA-Mecca":104515,"SA-Medina":109223,"SA-Riyadh":108410,"SB-Honiara":2108502,"SC-Victoria":241131,"SD-Khartoum":379252,"SD-Omdurman":365137,"SE-Stockholm":2673730,"SG-Singapore":1880252,"SH-Jamestown":3370903,"SI-Ljubljana":3196359,"SK-Bratislava":3060972,"SL-Freetown":2408770,"SN-Dakar":2253354,"SO-Mogadishu":53654,"SR-Paramaribo":3383330,"ST-Sao Tome":2410763,"ST-São Tomé":2410763,"SV-San Salvador":3583361,"SY-Aleppo":170063,"SY-Damascus":170654,"SZ-Mbabane":934985,"Saint Louis":4407066,"Saint Petersburg":498817,"San Francisco":5391959,Seattle:Seattle,Sydney:Sydney,"TC-Cockburn Town":3576994,"TD-Ndjamena":2427123,"TG-Lome":2365267,"TG-Lomé":2365267,"TH-Bangkok":1609350,"TJ-Dushanbe":1221874,"TM-Ashgabat":162183,"TN-Tunis":2464470,"TR-Adana":325363,"TR-Ankara":323786,"TR-Bursa":750269,"TR-Istanbul":745044,"TR-Izmir":311046,"TV-Funafuti":2110394,"TW-Kaohsiung":1673820,"TW-Taipei":1668341,"TZ-Dar es Salaam":160263,"TZ-Dodoma":160196,"Tel Aviv":293397,Tiberias:Tiberias,Toronto:Toronto,"UA-Kharkiv":706483,"UA-Kiev":703448,"UG-Kampala":232422,"US-Atlanta-GA":4180439,"US-Austin-TX":4671654,"US-Baltimore-MD":4347778,"US-Boston-MA":4930956,"US-Buffalo-NY":5110629,"US-Chicago-IL":4887398,"US-Cincinnati-OH":4508722,"US-Cleveland-OH":5150529,"US-Columbus-OH":4509177,"US-Dallas-TX":4684888,"US-Denver-CO":5419384,"US-Detroit-MI":4990729,"US-Hartford-CT":4835797,"US-Honolulu-HI":5856195,"US-Houston-TX":4699066,"US-Lakewood-NJ":5100280,"US-Las Vegas-NV":5506956,"US-Livingston-NY":5100572,"US-Los Angeles-CA":5368361,"US-Memphis-TN":4641239,"US-Miami-FL":4164138,"US-Milwaukee-WI":5263045,"US-Monsey-NY":5127315,"US-New Haven-CT":4839366,"US-New York-NY":5128581,"US-Omaha-NE":5074472,"US-Orlando-FL":4167147,"US-Passaic-NJ":5102443,"US-Philadelphia-PA":4560349,"US-Phoenix-AZ":5308655,"US-Pittsburgh-PA":5206379,"US-Portland-OR":5746545,"US-Providence-RI":5224151,"US-Richmond-VA":4781708,"US-Rochester-NY":5134086,"US-Saint Louis-MO":4407066,"US-Saint Paul-MN":5045360,"US-San Diego-CA":5391811,"US-San Francisco-CA":5391959,"US-Seattle-WA":5809844,"US-Silver Spring-MD":4369596,"US-Teaneck-NJ":5105262,"US-Washington-DC":4140963,"US-White Plains-NY":5144336,"UY-Montevideo":3441575,"UZ-Tashkent":1512569,"VC-Kingstown":3577887,"VE-Caracas":3646738,"VE-Maracaibo":3633009,"VE-Maracay":3632998,"VE-Valencia":3625549,"VG-Road Town":3577430,"VN-Hanoi":1581130,"VN-Ho Chi Minh City":1566083,Vancouver:Vancouver,"WS-Apia":4035413,"Washington DC":4140963,"White Plains":5144336,"YE-Sanaa":71137,"YT-Mamoudzou":921815,"ZA-Cape Town":3369157,"ZA-Durban":1007311,"ZA-Johannesburg":993800,"ZA-Pretoria":964137,"ZM-Lusaka":909137,"ZW-Harare":890299};
23
23
 
24
24
  const GEONAME_SQL = `SELECT
25
25
  g.name as name,
@@ -64,11 +64,12 @@ WHERE CityMixedCase MATCH ?
64
64
  ORDER BY Population DESC
65
65
  LIMIT 15`;
66
66
  const GEONAME_COMPLETE_SQL = `SELECT geonameid, asciiname, admin1, country,
67
- population, latitude, longitude, timezone
67
+ population, latitude, longitude, timezone,
68
+ ((sqrt(population)/40) + (-30 * rank)) as myrank
68
69
  FROM geoname_fulltext
69
- WHERE longname MATCH ?
70
+ WHERE geoname_fulltext MATCH ?
70
71
  GROUP BY geonameid
71
- ORDER BY population DESC
72
+ ORDER BY myrank DESC
72
73
  LIMIT 15`;
73
74
  const stateNames = {
74
75
  'AK': 'Alaska',
@@ -149,7 +150,7 @@ class GeoDb {
149
150
  /** @type {Map<number, Location>} */
150
151
 
151
152
  this.geonamesCache = new Map();
152
- /** @type {Map<string, Location>} */
153
+ /** @type {Map<string, number>} */
153
154
 
154
155
  this.legacyCities = new Map();
155
156
 
@@ -222,6 +223,7 @@ class GeoDb {
222
223
  const cityDescr = `${result.CityMixedCase}, ${result.State} ${zip}`;
223
224
  const location = new core.Location(result.Latitude, result.Longitude, false, tzid, cityDescr, 'US', zip);
224
225
  location.admin1 = location.state = result.State;
226
+ location.stateName = stateNames[location.state];
225
227
  location.geo = 'zip';
226
228
  location.zip = zip;
227
229
  return location;
@@ -327,11 +329,12 @@ class GeoDb {
327
329
  /**
328
330
  * Generates autocomplete results based on a query string
329
331
  * @param {string} qraw
332
+ * @param {boolean} latlong
330
333
  * @return {Object[]}
331
334
  */
332
335
 
333
336
 
334
- autoComplete(qraw) {
337
+ autoComplete(qraw, latlong = false) {
335
338
  qraw = qraw.trim();
336
339
 
337
340
  if (qraw.length === 0) {
@@ -353,10 +356,11 @@ class GeoDb {
353
356
  }
354
357
 
355
358
  qraw = qraw.replace(/\"/g, '""');
356
- const geoRows = this.geonamesCompStmt.all(`"${qraw}*"`);
359
+ const geoRows = this.geonamesCompStmt.all(`{asciiname country admin1} : "${qraw}" *`);
357
360
  const geoMatches = geoRows.map(res => {
358
361
  const country = res.country || '';
359
362
  const admin1 = res.admin1 || '';
363
+ const rank = Math.trunc(res.myrank * 100.0) / 100.0;
360
364
  const obj = {
361
365
  id: res.geonameid,
362
366
  value: core.Location.geonameCityDescr(res.asciiname, admin1, country),
@@ -367,7 +371,8 @@ class GeoDb {
367
371
  longitude: res.longitude,
368
372
  timezone: res.timezone,
369
373
  population: res.population,
370
- geo: 'geoname'
374
+ geo: 'geoname',
375
+ rank: rank
371
376
  };
372
377
 
373
378
  if (country) {
@@ -378,7 +383,6 @@ class GeoDb {
378
383
  obj.admin1 = admin1;
379
384
  }
380
385
 
381
- obj.tokens = Array.from(new Set(res.asciiname.split(' ').concat(admin1.split(' '), country.split(' '))));
382
386
  return obj;
383
387
  });
384
388
 
@@ -406,7 +410,18 @@ class GeoDb {
406
410
 
407
411
  const values = Array.from(map.values());
408
412
  values.sort((a, b) => b.population - a.population);
409
- return values.slice(0, 10);
413
+ const topN = values.slice(0, 10);
414
+
415
+ if (!latlong) {
416
+ for (const val of topN) {
417
+ delete val.latitude;
418
+ delete val.longitude;
419
+ delete val.timezone;
420
+ delete val.population;
421
+ }
422
+ }
423
+
424
+ return topN;
410
425
  }
411
426
  }
412
427
  /** Reads entire ZIP database and caches in-memory */
@@ -564,6 +579,13 @@ async function buildGeonamesSqlite(opts) {
564
579
  } else {
565
580
  a[3] = a[3].replace(/‘/g, '\'');
566
581
  a[3] = a[3].replace(/’/g, '\'');
582
+ a[3] = a[3].replace(/Ḥ/g, 'Ch');
583
+ a[3] = a[3].replace(/H̱/g, 'Ch');
584
+ a[3] = a[3].replace(/ẖ/g, 'ch');
585
+ a[3] = a[3].replace(/Ẕ/g, 'Tz');
586
+ a[3] = a[3].replace(/ẕ/g, 'tz');
587
+ a[3] = a[3].replace(/ā/g, 'a');
588
+ a[3] = a[3].replace(/é/g, 'e');
567
589
  }
568
590
 
569
591
  return true;
@@ -579,27 +601,27 @@ async function buildGeonamesSqlite(opts) {
579
601
  `);
580
602
  doSql(logger, db, `update admin1 set name='',asciiname='' where key like 'PS.%';`, `update country set country = '' where iso = 'PS';`, `delete from geoname where geonameid = 7303419;`);
581
603
  doSql(logger, db, `DROP TABLE IF EXISTS geoname_fulltext`, `CREATE VIRTUAL TABLE geoname_fulltext
582
- USING fts3(geonameid int, longname text,
583
- asciiname text, admin1 text, country text,
584
- population int, latitude real, longitude real, timezone text
604
+ USING fts5(geonameid,
605
+ asciiname, admin1, country,
606
+ population, latitude, longitude, timezone
585
607
  );
586
608
  `, `DROP TABLE IF EXISTS geoname_non_ascii`, `CREATE TABLE geoname_non_ascii AS
587
609
  SELECT geonameid FROM geoname WHERE asciiname <> name`, `INSERT INTO geoname_fulltext
588
- SELECT g.geonameid, g.asciiname||', '||a.asciiname||', '||c.Country,
610
+ SELECT g.geonameid,
589
611
  g.asciiname, a.asciiname, c.Country,
590
612
  g.population, g.latitude, g.longitude, g.timezone
591
613
  FROM geoname g, admin1 a, country c
592
614
  WHERE g.country = c.ISO
593
615
  AND g.country||'.'||g.admin1 = a.key
594
616
  `, `INSERT INTO geoname_fulltext
595
- SELECT g.geonameid, g.asciiname||', '||c.Country,
617
+ SELECT g.geonameid,
596
618
  g.asciiname, '', c.Country,
597
619
  g.population, g.latitude, g.longitude, g.timezone
598
620
  FROM geoname g, country c
599
621
  WHERE g.country = c.ISO
600
622
  AND (g.admin1 = '' OR g.admin1 = '00')
601
623
  `, `INSERT INTO geoname_fulltext
602
- SELECT g.geonameid, g.name||', '||a.name||', '||c.Country,
624
+ SELECT g.geonameid,
603
625
  g.name, a.name, c.Country,
604
626
  g.population, g.latitude, g.longitude, g.timezone
605
627
  FROM geoname_non_ascii gna, geoname g, admin1 a, country c
@@ -607,7 +629,7 @@ async function buildGeonamesSqlite(opts) {
607
629
  AND g.country = c.ISO
608
630
  AND g.country||'.'||g.admin1 = a.key
609
631
  `, `INSERT INTO geoname_fulltext
610
- SELECT g.geonameid, alt.name||', ישראל',
632
+ SELECT g.geonameid,
611
633
  alt.name, '', 'ישראל',
612
634
  g.population, g.latitude, g.longitude, g.timezone
613
635
  FROM geoname g, altnames alt
@@ -615,7 +637,7 @@ async function buildGeonamesSqlite(opts) {
615
637
  AND alt.isolanguage = 'he'
616
638
  AND g.geonameid = alt.geonameid
617
639
  `, `INSERT INTO geoname_fulltext
618
- SELECT g.geonameid, alt.name||', '||a1.asciiname||', Israel',
640
+ SELECT g.geonameid,
619
641
  alt.name, a1.asciiname, 'Israel',
620
642
  g.population, g.latitude, g.longitude, g.timezone
621
643
  FROM geoname g, admin1 a1, altnames alt
@@ -623,7 +645,7 @@ async function buildGeonamesSqlite(opts) {
623
645
  AND alt.isolanguage = 'en'
624
646
  AND g.geonameid = alt.geonameid
625
647
  AND g.country||'.'||g.admin1 = a1.key
626
- `);
648
+ `, 'VACUUM');
627
649
  db.close();
628
650
  return Promise.resolve(true);
629
651
  }
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! @hebcal/geo-sqlite v4.1.0 */
1
+ /*! @hebcal/geo-sqlite v4.4.0 */
2
2
  import Database from 'better-sqlite3';
3
3
  import { Location, Locale } from '@hebcal/core';
4
4
  import '@hebcal/cities';
@@ -7,7 +7,7 @@ import events from 'events';
7
7
  import fs from 'fs';
8
8
  import readline from 'readline';
9
9
 
10
- var Ashdod=295629;var Atlanta=4180439;var Austin=4671654;var Baghdad=98182;var Baltimore=4347778;var Berlin=2950159;var Bogota=3688689;var Boston=4930956;var Buffalo=5110629;var Chicago=4887398;var Cincinnati=4508722;var Cleveland=5150529;var Dallas=4684888;var Denver=5419384;var Detroit=4990729;var Eilat=295277;var Gibraltar=2411585;var Haifa=294801;var Hawaii=5856195;var Houston=4699066;var Jerusalem=281184;var Johannesburg=993800;var Kiev=703448;var Livingston=5100572;var London=2643743;var Melbourne=2158177;var Miami=4164138;var Montreal=6077243;var Moscow=524901;var Omaha=5074472;var Ottawa=6094817;var Paris=2988507;var Philadelphia=4560349;var Phoenix=5308655;var Pittsburgh=5206379;var Seattle=5809844;var Sydney=2147714;var Tiberias=293322;var Toronto=6167865;var Vancouver=6173331;var city2geonameid = {"AD-Andorra La Vella":3041563,"AE-Abu Dhabi":292968,"AE-Dubai":292223,"AF-Kabul":1138958,"AI-The Valley":3573374,"AL-Tirana":3183875,"AM-Yerevan":616052,"AO-Luanda":2240449,"AR-Buenos Aires":3435910,"AR-Cordoba":3860259,"AR-Rosario":3838583,"AS-Pago Pago":5881576,"AT-Vienna":2761369,"AU-Adelaide":2078025,"AU-Brisbane":2174003,"AU-Canberra":2172517,"AU-Gold Coast":2165087,"AU-Hobart":2163355,"AU-Melbourne":2158177,"AU-Perth":2063523,"AU-Sydney":2147714,"AW-Oranjestad":3577154,"AZ-Baku":587084,Ashdod:Ashdod,Atlanta:Atlanta,Austin:Austin,"BA-Sarajevo":3191281,"BB-Bridgetown":3374036,"BD-Chittagong":1205733,"BD-Dhaka":1185241,"BD-Khulna":1336135,"BE-Brussels":2800866,"BF-Ouagadougou":2357048,"BG-Sofia":727011,"BH-Manama":290340,"BI-Bujumbura":425378,"BJ-Porto-novo":2392087,"BM-Hamilton":3573197,"BN-Bandar Seri Begawan":1820906,"BO-La Paz":3911925,"BO-Santa Cruz de la Sierra":3904906,"BR-Belo Horizonte":3470127,"BR-Brasilia":3469058,"BR-Fortaleza":3399415,"BR-Rio de Janeiro":3451190,"BR-Salvador":3450554,"BR-Sao Paulo":3448439,"BS-Nassau":3571824,"BT-Thimphu":1252416,"BW-Gaborone":933773,"BY-Minsk":625144,"BZ-Belmopan":3582672,Baghdad:Baghdad,Baltimore:Baltimore,"Be'er Sheva":295530,"Beer Sheva":295530,"Bene Beraq":295514,"IL-Bene Beraq":295514,Berlin:Berlin,"Bnei Brak":295514,Bogota:Bogota,Boston:Boston,"Buenos Aires":3435910,Buffalo:Buffalo,"CA-Calgary":5913490,"CA-Edmonton":5946768,"CA-Halifax":6324729,"CA-Mississauga":6075357,"CA-Montreal":6077243,"CA-Ottawa":6094817,"CA-Quebec City":6325494,"CA-Regina":6119109,"CA-Saskatoon":6141256,"CA-St. John's-05":6324733,"CA-Toronto":6167865,"CA-Vancouver":6173331,"CA-Victoria":6174041,"CA-Winnipeg":6183235,"CD-Kinshasa":2314302,"CD-Lubumbashi":922704,"CF-Bangui":2389853,"CG-Brazzaville":2260535,"CH-Bern":2661552,"CH-Geneva":2660646,"CH-Zurich":2657896,"CI-Abidjan":2293538,"CI-Yamoussoukro":2279755,"CK-Avarua":4035715,"CL-Santiago":3871336,"CM-Douala":2232593,"CM-Yaounde":2220957,"CN-Beijing":1816670,"CN-Chengdu":1815286,"CN-Chongqing":1814906,"CN-Guangzhou":1809858,"CN-Harbin":2037013,"CN-Kaifeng":1804879,"CN-Lanzhou":1804430,"CN-Nanchong":1800146,"CN-Nanjing":1799962,"CN-Puyang":1798422,"CN-Shanghai":1796236,"CN-Shenyang":2034937,"CN-Shenzhen":1795565,"CN-Shiyan":1794903,"CN-Tai'an":1793724,"CN-Tianjin":1792947,"CN-Wuhan":1791247,"CN-Xi'an":1790630,"CN-Yueyang":1927639,"CN-Zhumadian":1783873,"CO-Barranquilla":3689147,"CO-Bogota":3688689,"CO-Bogotá":3688689,"CO-Cali":3687925,"CO-Medellin":3674962,"CR-San Jose":3621849,"CR-San José":3621849,"CR-San José":3621849,"CU-Havana":3553478,"CV-Praia":3374333,"CW-Willemstad":3513090,"CY-Nicosia":146268,"CZ-Prague":3067696,Chicago:Chicago,Cincinnati:Cincinnati,Cleveland:Cleveland,"DE-Berlin":2950159,"DE-Hamburg":2911298,"DE-Munich":2867714,"DK-Copenhagen":2618425,"DM-Roseau":3575635,"DO-Santiago de los Caballeros":3492914,"DO-Santo Domingo":3492908,"DZ-Algiers":2507480,Dallas:Dallas,Denver:Denver,Detroit:Detroit,"EC-Guayaquil":3657509,"EC-Quito":3652462,"EE-Tallinn":588409,"EG-Al Jizah":360995,"EG-Alexandria":361058,"EG-Cairo":360630,"ER-Asmara":343300,"ES-Barcelona":3128760,"ES-Madrid":3117735,"ET-Addis Ababa":344979,Eilat:Eilat,"FI-Helsinki":658225,"FJ-Suva":2198148,"FK-Stanley":3426691,"FO-Tórshavn":2611396,"FR-Marseilles":2995469,"FR-Paris":2988507,"GA-Libreville":2399697,"GB-Belfast":2655984,"GB-Birmingham":2655603,"GB-Bristol":2654675,"GB-Cardiff":2653822,"GB-Edinburgh":2650225,"GB-Glasgow":2648579,"GB-Leeds":2644688,"GB-Liverpool":2644210,"GB-London":2643743,"GB-Manchester":2643123,"GB-Sheffield":2638077,"GE-Tbilisi":611717,"GH-Accra":2306104,"GH-Kumasi":2298890,"GI-Gibraltar":2411585,"GL-Nuuk":3421319,"GM-Banjul":2413876,"GN-Camayenne":2422488,"GN-Conakry":2422465,"GQ-Malabo":2309527,"GR-Athens":264371,"GT-Guatemala City":3598132,"GW-Bissau":2374775,"GY-Georgetown":3378644,Gibraltar:Gibraltar,"HK-Hong Kong":1819729,"HN-Tegucigalpa":3600949,"HR-Zagreb":3186886,"HT-Port-au-Prince":3718426,"HU-Budapest":3054643,Haifa:Haifa,Hawaii:Hawaii,Houston:Houston,"ID-Bandung":1650357,"ID-Bekasi":1649378,"ID-Depok":1645518,"ID-Jakarta":1642911,"ID-Makassar":1622786,"ID-Medan":1214520,"ID-Palembang":1633070,"ID-Semarang":1627896,"ID-South Tangerang":8581443,"ID-Surabaya":1625822,"ID-Tangerang":1625084,"IE-Dublin":2964574,"IL-Ashdod":295629,"IL-Ashkelon":295620,"IL-Ashqelon":295620,"IL-Bat Yam":295548,"IL-Be'er Sheva":295530,"IL-Beer Sheva":295530,"IL-Beit Shemesh":295432,"IL-Bet Shemesh":295432,"IL-Bnei Brak":295514,"IL-Eilat":295277,"IL-Hadera":294946,"IL-Haifa":294801,"IL-Herzliya":294778,"IL-Herzliyya":294778,"IL-Holon":294751,"IL-Jerusalem":281184,"IL-Kfar Saba":294514,"IL-Lod":294421,"IL-Modiin":282926,"IL-Nazareth":294098,"IL-Netanya":294071,"IL-Petach Tikvah":293918,"IL-Petah Tikvah":293918,"IL-Petah Tiqwa":293918,"IL-Ra'anana":293807,"IL-Raanana":293807,"IL-Ramat Gan":293788,"IL-Ramla":293768,"IL-Rishon LeZion":293703,"IL-Rishon Leziyyon":293703,"IL-Tel Aviv":293397,"IL-Tiberias":293322,"IM-Douglas":3042237,"IN-Ahmadabad":1279233,"IN-Bangalore":1277333,"IN-Bombay":1275339,"IN-Calcutta":1275004,"IN-Chennai":1264527,"IN-Cochin":1273874,"IN-Hyderabad":1269843,"IN-Jaipur":1269515,"IN-Kanpur":1267995,"IN-New Delhi":1261481,"IN-Pune":1259229,"IN-Surat":1255364,"IQ-Baghdad":98182,"IR-Tehran":112931,"IS-Reykjavik":3413829,"IS-Reykjavík":3413829,"IT-Milano":3173435,"IT-Rome":3169070,"JM-Kingston":3489854,"JO-Amman":250441,"JP-Kobe-shi":1859171,"JP-Kyoto":1857910,"JP-Nagoya-shi":1856057,"JP-Osaka-shi":1853909,"JP-Sapporo":2128295,"JP-Tokyo":1850147,Jerusalem:Jerusalem,Johannesburg:Johannesburg,"KE-Nairobi":184745,"KG-Bishkek":1528675,"KH-Phnom Penh":1821306,"KM-Moroni":921772,"KN-Basseterre":3575551,"KP-Pyongyang":1871859,"KR-Busan":1838524,"KR-Seoul":1835848,"KW-Kuwait":285787,"KY-George Town":3580661,"KZ-Almaty":1526384,"KZ-Astana":1526273,Kiev:Kiev,"LA-Vientiane":1651944,"LB-Beirut":276781,"LC-Castries":3576812,"LI-Vaduz":3042030,"LR-Monrovia":2274895,"LS-Maseru":932505,"LT-Vilnius":593116,"LU-Luxemburg":2960316,"LV-Riga":456172,"LY-Tripoli":2210247,"La Paz":3911925,Livingston:Livingston,London:London,"Los Angeles":5368361,"MA-Casablanca":2553604,"MA-Rabat":2538475,"MD-Chisinau":618426,"ME-Podgorica":3193044,"MG-Antananarivo":1070940,"MK-Skopje":785842,"ML-Bamako":2460596,"MM-Mandalay":1311874,"MM-Rangoon":1298824,"MN-Ulaanbaatar":2028462,"MP-Saipan":7828758,"MR-Nouakchott":2377450,"MS-Plymouth":3578069,"MT-Valletta":2562305,"MU-Port Louis":934154,"MW-Lilongwe":927967,"MX-Cancun":3531673,"MX-Guadalajara":4005539,"MX-Iztapalapa":3526683,"MX-Mazatlan":3996322,"MX-Mexico City":3530597,"MX-Monterrey":3995465,"MX-Puerto Vallarta":3991328,"MX-Tijuana":3981609,"MY-Kota Bharu":1736376,"MY-Kuala Lumpur":1735161,"MZ-Maputo":1040652,Melbourne:Melbourne,"Mexico City":3530597,Miami:Miami,Montreal:Montreal,Moscow:Moscow,"NA-Windhoek":3352136,"NC-Noumea":2139521,"NC-Nouméa":2139521,"NE-Niamey":2440485,"NG-Abuja":2352778,"NG-Lagos":2332459,"NI-Managua":3617763,"NL-Amsterdam":2759794,"NO-Oslo":3143244,"NP-Kathmandu":1283240,"NU-Alofi":4036284,"NZ-Auckland":2193733,"NZ-Christchurch":2192362,"NZ-Wellington":2179537,"New York":5128581,"OM-Muscat":287286,Omaha:Omaha,Ottawa:Ottawa,"PA-Panama City":3703443,"PE-Lima":3936456,"PF-Papeete":4033936,"PG-Port Moresby":2088122,"PH-Manila":1701668,"PK-Islamabad":1176615,"PK-Karachi":1174872,"PL-Warsaw":756135,"PR-San Juan":4568127,"PT-Lisbon":2267057,"PY-Asuncion":3439389,"Panama City":3703443,Paris:Paris,"Petach Tikvah":293918,"Petah Tikvah":293918,"Petah Tikva":293918,"Petah Tiqwa":293918,"Petaẖ Tiqwa":293918,Philadelphia:Philadelphia,Phoenix:Phoenix,Pittsburgh:Pittsburgh,"QA-Doha":290030,"RO-Bucharest":683506,"RS-Belgrade":792680,"RU-Moscow":524901,"RU-Novosibirsk":1496747,"RU-Saint Petersburg":498817,"RU-Yekaterinburg":1486209,"RW-Kigali":202061,"Ra'anana":293807,"SA-Jeddah":105343,"SA-Mecca":104515,"SA-Medina":109223,"SA-Riyadh":108410,"SB-Honiara":2108502,"SC-Victoria":241131,"SD-Khartoum":379252,"SD-Omdurman":365137,"SE-Stockholm":2673730,"SG-Singapore":1880252,"SH-Jamestown":3370903,"SI-Ljubljana":3196359,"SK-Bratislava":3060972,"SL-Freetown":2408770,"SN-Dakar":2253354,"SO-Mogadishu":53654,"SR-Paramaribo":3383330,"ST-Sao Tome":2410763,"ST-São Tomé":2410763,"SV-San Salvador":3583361,"SY-Aleppo":170063,"SY-Damascus":170654,"SZ-Mbabane":934985,"Saint Louis":4407066,"Saint Petersburg":498817,"San Francisco":5391959,Seattle:Seattle,Sydney:Sydney,"TC-Cockburn Town":3576994,"TD-Ndjamena":2427123,"TG-Lome":2365267,"TG-Lomé":2365267,"TH-Bangkok":1609350,"TJ-Dushanbe":1221874,"TM-Ashgabat":162183,"TN-Tunis":2464470,"TR-Adana":325363,"TR-Ankara":323786,"TR-Bursa":750269,"TR-Istanbul":745044,"TR-Izmir":311046,"TV-Funafuti":2110394,"TW-Kaohsiung":1673820,"TW-Taipei":1668341,"TZ-Dar es Salaam":160263,"TZ-Dodoma":160196,"Tel Aviv":293397,Tiberias:Tiberias,Toronto:Toronto,"UA-Kharkiv":706483,"UA-Kiev":703448,"UG-Kampala":232422,"US-Atlanta-GA":4180439,"US-Austin-TX":4671654,"US-Baltimore-MD":4347778,"US-Boston-MA":4930956,"US-Buffalo-NY":5110629,"US-Chicago-IL":4887398,"US-Cincinnati-OH":4508722,"US-Cleveland-OH":5150529,"US-Columbus-OH":4509177,"US-Dallas-TX":4684888,"US-Denver-CO":5419384,"US-Detroit-MI":4990729,"US-Hartford-CT":4835797,"US-Honolulu-HI":5856195,"US-Houston-TX":4699066,"US-Lakewood-NJ":5100280,"US-Las Vegas-NV":5506956,"US-Livingston-NY":5100572,"US-Los Angeles-CA":5368361,"US-Memphis-TN":4641239,"US-Miami-FL":4164138,"US-Milwaukee-WI":5263045,"US-Monsey-NY":5127315,"US-New Haven-CT":4839366,"US-New York-NY":5128581,"US-Omaha-NE":5074472,"US-Orlando-FL":4167147,"US-Passaic-NJ":5102443,"US-Philadelphia-PA":4560349,"US-Phoenix-AZ":5308655,"US-Pittsburgh-PA":5206379,"US-Portland-OR":5746545,"US-Providence-RI":5224151,"US-Richmond-VA":4781708,"US-Rochester-NY":5134086,"US-Saint Louis-MO":4407066,"US-Saint Paul-MN":5045360,"US-San Diego-CA":5391811,"US-San Francisco-CA":5391959,"US-Seattle-WA":5809844,"US-Silver Spring-MD":4369596,"US-Teaneck-NJ":5105262,"US-Washington-DC":4140963,"US-White Plains-NY":5144336,"UY-Montevideo":3441575,"UZ-Tashkent":1512569,"VC-Kingstown":3577887,"VE-Caracas":3646738,"VE-Maracaibo":3633009,"VE-Maracay":3632998,"VE-Valencia":3625549,"VG-Road Town":3577430,"VN-Hanoi":1581130,"VN-Ho Chi Minh City":1566083,Vancouver:Vancouver,"WS-Apia":4035413,"Washington DC":4140963,"White Plains":5144336,"YE-Sanaa":71137,"YT-Mamoudzou":921815,"ZA-Cape Town":3369157,"ZA-Durban":1007311,"ZA-Johannesburg":993800,"ZA-Pretoria":964137,"ZM-Lusaka":909137,"ZW-Harare":890299};
10
+ const Ashdod=295629;const Atlanta=4180439;const Austin=4671654;const Baghdad=98182;const Baltimore=4347778;const Berlin=2950159;const Bogota=3688689;const Boston=4930956;const Buffalo=5110629;const Chicago=4887398;const Cincinnati=4508722;const Cleveland=5150529;const Dallas=4684888;const Denver=5419384;const Detroit=4990729;const Eilat=295277;const Gibraltar=2411585;const Haifa=294801;const Hawaii=5856195;const Houston=4699066;const Jerusalem=281184;const Johannesburg=993800;const Kiev=703448;const Livingston=5100572;const London=2643743;const Melbourne=2158177;const Miami=4164138;const Montreal=6077243;const Moscow=524901;const Omaha=5074472;const Ottawa=6094817;const Paris=2988507;const Philadelphia=4560349;const Phoenix=5308655;const Pittsburgh=5206379;const Seattle=5809844;const Sydney=2147714;const Tiberias=293322;const Toronto=6167865;const Vancouver=6173331;var city2geonameid = {"AD-Andorra La Vella":3041563,"AE-Abu Dhabi":292968,"AE-Dubai":292223,"AF-Kabul":1138958,"AI-The Valley":3573374,"AL-Tirana":3183875,"AM-Yerevan":616052,"AO-Luanda":2240449,"AR-Buenos Aires":3435910,"AR-Cordoba":3860259,"AR-Rosario":3838583,"AS-Pago Pago":5881576,"AT-Vienna":2761369,"AU-Adelaide":2078025,"AU-Brisbane":2174003,"AU-Canberra":2172517,"AU-Gold Coast":2165087,"AU-Hobart":2163355,"AU-Melbourne":2158177,"AU-Perth":2063523,"AU-Sydney":2147714,"AW-Oranjestad":3577154,"AZ-Baku":587084,Ashdod:Ashdod,Atlanta:Atlanta,Austin:Austin,"BA-Sarajevo":3191281,"BB-Bridgetown":3374036,"BD-Chittagong":1205733,"BD-Dhaka":1185241,"BD-Khulna":1336135,"BE-Brussels":2800866,"BF-Ouagadougou":2357048,"BG-Sofia":727011,"BH-Manama":290340,"BI-Bujumbura":425378,"BJ-Porto-novo":2392087,"BM-Hamilton":3573197,"BN-Bandar Seri Begawan":1820906,"BO-La Paz":3911925,"BO-Santa Cruz de la Sierra":3904906,"BR-Belo Horizonte":3470127,"BR-Brasilia":3469058,"BR-Fortaleza":3399415,"BR-Rio de Janeiro":3451190,"BR-Salvador":3450554,"BR-Sao Paulo":3448439,"BS-Nassau":3571824,"BT-Thimphu":1252416,"BW-Gaborone":933773,"BY-Minsk":625144,"BZ-Belmopan":3582672,Baghdad:Baghdad,Baltimore:Baltimore,"Be'er Sheva":295530,"Beer Sheva":295530,"Bene Beraq":295514,"IL-Bene Beraq":295514,Berlin:Berlin,"Bnei Brak":295514,Bogota:Bogota,Boston:Boston,"Buenos Aires":3435910,Buffalo:Buffalo,"CA-Calgary":5913490,"CA-Edmonton":5946768,"CA-Halifax":6324729,"CA-Mississauga":6075357,"CA-Montreal":6077243,"CA-Ottawa":6094817,"CA-Quebec City":6325494,"CA-Regina":6119109,"CA-Saskatoon":6141256,"CA-St. John's-05":6324733,"CA-Toronto":6167865,"CA-Vancouver":6173331,"CA-Victoria":6174041,"CA-Winnipeg":6183235,"CD-Kinshasa":2314302,"CD-Lubumbashi":922704,"CF-Bangui":2389853,"CG-Brazzaville":2260535,"CH-Bern":2661552,"CH-Geneva":2660646,"CH-Zurich":2657896,"CI-Abidjan":2293538,"CI-Yamoussoukro":2279755,"CK-Avarua":4035715,"CL-Santiago":3871336,"CM-Douala":2232593,"CM-Yaounde":2220957,"CN-Beijing":1816670,"CN-Chengdu":1815286,"CN-Chongqing":1814906,"CN-Guangzhou":1809858,"CN-Harbin":2037013,"CN-Kaifeng":1804879,"CN-Lanzhou":1804430,"CN-Nanchong":1800146,"CN-Nanjing":1799962,"CN-Puyang":1798422,"CN-Shanghai":1796236,"CN-Shenyang":2034937,"CN-Shenzhen":1795565,"CN-Shiyan":1794903,"CN-Tai'an":1793724,"CN-Tianjin":1792947,"CN-Wuhan":1791247,"CN-Xi'an":1790630,"CN-Yueyang":1927639,"CN-Zhumadian":1783873,"CO-Barranquilla":3689147,"CO-Bogota":3688689,"CO-Bogotá":3688689,"CO-Cali":3687925,"CO-Medellin":3674962,"CR-San Jose":3621849,"CR-San José":3621849,"CR-San José":3621849,"CU-Havana":3553478,"CV-Praia":3374333,"CW-Willemstad":3513090,"CY-Nicosia":146268,"CZ-Prague":3067696,Chicago:Chicago,Cincinnati:Cincinnati,Cleveland:Cleveland,"DE-Berlin":2950159,"DE-Hamburg":2911298,"DE-Munich":2867714,"DK-Copenhagen":2618425,"DM-Roseau":3575635,"DO-Santiago de los Caballeros":3492914,"DO-Santo Domingo":3492908,"DZ-Algiers":2507480,Dallas:Dallas,Denver:Denver,Detroit:Detroit,"EC-Guayaquil":3657509,"EC-Quito":3652462,"EE-Tallinn":588409,"EG-Al Jizah":360995,"EG-Alexandria":361058,"EG-Cairo":360630,"ER-Asmara":343300,"ES-Barcelona":3128760,"ES-Madrid":3117735,"ET-Addis Ababa":344979,Eilat:Eilat,"FI-Helsinki":658225,"FJ-Suva":2198148,"FK-Stanley":3426691,"FO-Tórshavn":2611396,"FR-Marseilles":2995469,"FR-Paris":2988507,"GA-Libreville":2399697,"GB-Belfast":2655984,"GB-Birmingham":2655603,"GB-Bristol":2654675,"GB-Cardiff":2653822,"GB-Edinburgh":2650225,"GB-Glasgow":2648579,"GB-Leeds":2644688,"GB-Liverpool":2644210,"GB-London":2643743,"GB-Manchester":2643123,"GB-Sheffield":2638077,"GE-Tbilisi":611717,"GH-Accra":2306104,"GH-Kumasi":2298890,"GI-Gibraltar":2411585,"GL-Nuuk":3421319,"GM-Banjul":2413876,"GN-Camayenne":2422488,"GN-Conakry":2422465,"GQ-Malabo":2309527,"GR-Athens":264371,"GT-Guatemala City":3598132,"GW-Bissau":2374775,"GY-Georgetown":3378644,Gibraltar:Gibraltar,"HK-Hong Kong":1819729,"HN-Tegucigalpa":3600949,"HR-Zagreb":3186886,"HT-Port-au-Prince":3718426,"HU-Budapest":3054643,Haifa:Haifa,Hawaii:Hawaii,Houston:Houston,"ID-Bandung":1650357,"ID-Bekasi":1649378,"ID-Depok":1645518,"ID-Jakarta":1642911,"ID-Makassar":1622786,"ID-Medan":1214520,"ID-Palembang":1633070,"ID-Semarang":1627896,"ID-South Tangerang":8581443,"ID-Surabaya":1625822,"ID-Tangerang":1625084,"IE-Dublin":2964574,"IL-Ashdod":295629,"IL-Ashkelon":295620,"IL-Ashqelon":295620,"IL-Bat Yam":295548,"IL-Be'er Sheva":295530,"IL-Beer Sheva":295530,"IL-Beit Shemesh":295432,"IL-Bet Shemesh":295432,"IL-Bnei Brak":295514,"IL-Eilat":295277,"IL-Hadera":294946,"IL-Haifa":294801,"IL-Herzliya":294778,"IL-Herzliyya":294778,"IL-Holon":294751,"IL-Jerusalem":281184,"IL-Kfar Saba":294514,"IL-Lod":294421,"IL-Modiin":282926,"IL-Nazareth":294098,"IL-Netanya":294071,"IL-Petach Tikvah":293918,"IL-Petah Tikvah":293918,"IL-Petah Tiqwa":293918,"IL-Ra'anana":293807,"IL-Raanana":293807,"IL-Ramat Gan":293788,"IL-Ramla":293768,"IL-Rishon LeZion":293703,"IL-Rishon Leziyyon":293703,"IL-Tel Aviv":293397,"IL-Tiberias":293322,"IM-Douglas":3042237,"IN-Ahmadabad":1279233,"IN-Bangalore":1277333,"IN-Bombay":1275339,"IN-Calcutta":1275004,"IN-Chennai":1264527,"IN-Cochin":1273874,"IN-Hyderabad":1269843,"IN-Jaipur":1269515,"IN-Kanpur":1267995,"IN-New Delhi":1261481,"IN-Pune":1259229,"IN-Surat":1255364,"IQ-Baghdad":98182,"IR-Tehran":112931,"IS-Reykjavik":3413829,"IS-Reykjavík":3413829,"IT-Milano":3173435,"IT-Rome":3169070,"JM-Kingston":3489854,"JO-Amman":250441,"JP-Kobe-shi":1859171,"JP-Kyoto":1857910,"JP-Nagoya-shi":1856057,"JP-Osaka-shi":1853909,"JP-Sapporo":2128295,"JP-Tokyo":1850147,Jerusalem:Jerusalem,Johannesburg:Johannesburg,"KE-Nairobi":184745,"KG-Bishkek":1528675,"KH-Phnom Penh":1821306,"KM-Moroni":921772,"KN-Basseterre":3575551,"KP-Pyongyang":1871859,"KR-Busan":1838524,"KR-Seoul":1835848,"KW-Kuwait":285787,"KY-George Town":3580661,"KZ-Almaty":1526384,"KZ-Astana":1526273,Kiev:Kiev,"LA-Vientiane":1651944,"LB-Beirut":276781,"LC-Castries":3576812,"LI-Vaduz":3042030,"LR-Monrovia":2274895,"LS-Maseru":932505,"LT-Vilnius":593116,"LU-Luxemburg":2960316,"LV-Riga":456172,"LY-Tripoli":2210247,"La Paz":3911925,Livingston:Livingston,London:London,"Los Angeles":5368361,"MA-Casablanca":2553604,"MA-Rabat":2538475,"MD-Chisinau":618426,"ME-Podgorica":3193044,"MG-Antananarivo":1070940,"MK-Skopje":785842,"ML-Bamako":2460596,"MM-Mandalay":1311874,"MM-Rangoon":1298824,"MN-Ulaanbaatar":2028462,"MP-Saipan":7828758,"MR-Nouakchott":2377450,"MS-Plymouth":3578069,"MT-Valletta":2562305,"MU-Port Louis":934154,"MW-Lilongwe":927967,"MX-Cancun":3531673,"MX-Guadalajara":4005539,"MX-Iztapalapa":3526683,"MX-Mazatlan":3996322,"MX-Mexico City":3530597,"MX-Monterrey":3995465,"MX-Puerto Vallarta":3991328,"MX-Tijuana":3981609,"MY-Kota Bharu":1736376,"MY-Kuala Lumpur":1735161,"MZ-Maputo":1040652,Melbourne:Melbourne,"Mexico City":3530597,Miami:Miami,Montreal:Montreal,Moscow:Moscow,"NA-Windhoek":3352136,"NC-Noumea":2139521,"NC-Nouméa":2139521,"NE-Niamey":2440485,"NG-Abuja":2352778,"NG-Lagos":2332459,"NI-Managua":3617763,"NL-Amsterdam":2759794,"NO-Oslo":3143244,"NP-Kathmandu":1283240,"NU-Alofi":4036284,"NZ-Auckland":2193733,"NZ-Christchurch":2192362,"NZ-Wellington":2179537,"New York":5128581,"OM-Muscat":287286,Omaha:Omaha,Ottawa:Ottawa,"PA-Panama City":3703443,"PE-Lima":3936456,"PF-Papeete":4033936,"PG-Port Moresby":2088122,"PH-Manila":1701668,"PK-Islamabad":1176615,"PK-Karachi":1174872,"PL-Warsaw":756135,"PR-San Juan":4568127,"PT-Lisbon":2267057,"PY-Asuncion":3439389,"Panama City":3703443,Paris:Paris,"Petach Tikvah":293918,"Petah Tikvah":293918,"Petah Tikva":293918,"Petah Tiqwa":293918,"Petaẖ Tiqwa":293918,Philadelphia:Philadelphia,Phoenix:Phoenix,Pittsburgh:Pittsburgh,"QA-Doha":290030,"RO-Bucharest":683506,"RS-Belgrade":792680,"RU-Moscow":524901,"RU-Novosibirsk":1496747,"RU-Saint Petersburg":498817,"RU-Yekaterinburg":1486209,"RW-Kigali":202061,"Ra'anana":293807,"SA-Jeddah":105343,"SA-Mecca":104515,"SA-Medina":109223,"SA-Riyadh":108410,"SB-Honiara":2108502,"SC-Victoria":241131,"SD-Khartoum":379252,"SD-Omdurman":365137,"SE-Stockholm":2673730,"SG-Singapore":1880252,"SH-Jamestown":3370903,"SI-Ljubljana":3196359,"SK-Bratislava":3060972,"SL-Freetown":2408770,"SN-Dakar":2253354,"SO-Mogadishu":53654,"SR-Paramaribo":3383330,"ST-Sao Tome":2410763,"ST-São Tomé":2410763,"SV-San Salvador":3583361,"SY-Aleppo":170063,"SY-Damascus":170654,"SZ-Mbabane":934985,"Saint Louis":4407066,"Saint Petersburg":498817,"San Francisco":5391959,Seattle:Seattle,Sydney:Sydney,"TC-Cockburn Town":3576994,"TD-Ndjamena":2427123,"TG-Lome":2365267,"TG-Lomé":2365267,"TH-Bangkok":1609350,"TJ-Dushanbe":1221874,"TM-Ashgabat":162183,"TN-Tunis":2464470,"TR-Adana":325363,"TR-Ankara":323786,"TR-Bursa":750269,"TR-Istanbul":745044,"TR-Izmir":311046,"TV-Funafuti":2110394,"TW-Kaohsiung":1673820,"TW-Taipei":1668341,"TZ-Dar es Salaam":160263,"TZ-Dodoma":160196,"Tel Aviv":293397,Tiberias:Tiberias,Toronto:Toronto,"UA-Kharkiv":706483,"UA-Kiev":703448,"UG-Kampala":232422,"US-Atlanta-GA":4180439,"US-Austin-TX":4671654,"US-Baltimore-MD":4347778,"US-Boston-MA":4930956,"US-Buffalo-NY":5110629,"US-Chicago-IL":4887398,"US-Cincinnati-OH":4508722,"US-Cleveland-OH":5150529,"US-Columbus-OH":4509177,"US-Dallas-TX":4684888,"US-Denver-CO":5419384,"US-Detroit-MI":4990729,"US-Hartford-CT":4835797,"US-Honolulu-HI":5856195,"US-Houston-TX":4699066,"US-Lakewood-NJ":5100280,"US-Las Vegas-NV":5506956,"US-Livingston-NY":5100572,"US-Los Angeles-CA":5368361,"US-Memphis-TN":4641239,"US-Miami-FL":4164138,"US-Milwaukee-WI":5263045,"US-Monsey-NY":5127315,"US-New Haven-CT":4839366,"US-New York-NY":5128581,"US-Omaha-NE":5074472,"US-Orlando-FL":4167147,"US-Passaic-NJ":5102443,"US-Philadelphia-PA":4560349,"US-Phoenix-AZ":5308655,"US-Pittsburgh-PA":5206379,"US-Portland-OR":5746545,"US-Providence-RI":5224151,"US-Richmond-VA":4781708,"US-Rochester-NY":5134086,"US-Saint Louis-MO":4407066,"US-Saint Paul-MN":5045360,"US-San Diego-CA":5391811,"US-San Francisco-CA":5391959,"US-Seattle-WA":5809844,"US-Silver Spring-MD":4369596,"US-Teaneck-NJ":5105262,"US-Washington-DC":4140963,"US-White Plains-NY":5144336,"UY-Montevideo":3441575,"UZ-Tashkent":1512569,"VC-Kingstown":3577887,"VE-Caracas":3646738,"VE-Maracaibo":3633009,"VE-Maracay":3632998,"VE-Valencia":3625549,"VG-Road Town":3577430,"VN-Hanoi":1581130,"VN-Ho Chi Minh City":1566083,Vancouver:Vancouver,"WS-Apia":4035413,"Washington DC":4140963,"White Plains":5144336,"YE-Sanaa":71137,"YT-Mamoudzou":921815,"ZA-Cape Town":3369157,"ZA-Durban":1007311,"ZA-Johannesburg":993800,"ZA-Pretoria":964137,"ZM-Lusaka":909137,"ZW-Harare":890299};
11
11
 
12
12
  const GEONAME_SQL = `SELECT
13
13
  g.name as name,
@@ -52,11 +52,12 @@ WHERE CityMixedCase MATCH ?
52
52
  ORDER BY Population DESC
53
53
  LIMIT 15`;
54
54
  const GEONAME_COMPLETE_SQL = `SELECT geonameid, asciiname, admin1, country,
55
- population, latitude, longitude, timezone
55
+ population, latitude, longitude, timezone,
56
+ ((sqrt(population)/40) + (-30 * rank)) as myrank
56
57
  FROM geoname_fulltext
57
- WHERE longname MATCH ?
58
+ WHERE geoname_fulltext MATCH ?
58
59
  GROUP BY geonameid
59
- ORDER BY population DESC
60
+ ORDER BY myrank DESC
60
61
  LIMIT 15`;
61
62
  const stateNames = {
62
63
  'AK': 'Alaska',
@@ -137,7 +138,7 @@ class GeoDb {
137
138
  /** @type {Map<number, Location>} */
138
139
 
139
140
  this.geonamesCache = new Map();
140
- /** @type {Map<string, Location>} */
141
+ /** @type {Map<string, number>} */
141
142
 
142
143
  this.legacyCities = new Map();
143
144
 
@@ -210,6 +211,7 @@ class GeoDb {
210
211
  const cityDescr = `${result.CityMixedCase}, ${result.State} ${zip}`;
211
212
  const location = new Location(result.Latitude, result.Longitude, false, tzid, cityDescr, 'US', zip);
212
213
  location.admin1 = location.state = result.State;
214
+ location.stateName = stateNames[location.state];
213
215
  location.geo = 'zip';
214
216
  location.zip = zip;
215
217
  return location;
@@ -315,11 +317,12 @@ class GeoDb {
315
317
  /**
316
318
  * Generates autocomplete results based on a query string
317
319
  * @param {string} qraw
320
+ * @param {boolean} latlong
318
321
  * @return {Object[]}
319
322
  */
320
323
 
321
324
 
322
- autoComplete(qraw) {
325
+ autoComplete(qraw, latlong = false) {
323
326
  qraw = qraw.trim();
324
327
 
325
328
  if (qraw.length === 0) {
@@ -341,10 +344,11 @@ class GeoDb {
341
344
  }
342
345
 
343
346
  qraw = qraw.replace(/\"/g, '""');
344
- const geoRows = this.geonamesCompStmt.all(`"${qraw}*"`);
347
+ const geoRows = this.geonamesCompStmt.all(`{asciiname country admin1} : "${qraw}" *`);
345
348
  const geoMatches = geoRows.map(res => {
346
349
  const country = res.country || '';
347
350
  const admin1 = res.admin1 || '';
351
+ const rank = Math.trunc(res.myrank * 100.0) / 100.0;
348
352
  const obj = {
349
353
  id: res.geonameid,
350
354
  value: Location.geonameCityDescr(res.asciiname, admin1, country),
@@ -355,7 +359,8 @@ class GeoDb {
355
359
  longitude: res.longitude,
356
360
  timezone: res.timezone,
357
361
  population: res.population,
358
- geo: 'geoname'
362
+ geo: 'geoname',
363
+ rank: rank
359
364
  };
360
365
 
361
366
  if (country) {
@@ -366,7 +371,6 @@ class GeoDb {
366
371
  obj.admin1 = admin1;
367
372
  }
368
373
 
369
- obj.tokens = Array.from(new Set(res.asciiname.split(' ').concat(admin1.split(' '), country.split(' '))));
370
374
  return obj;
371
375
  });
372
376
 
@@ -394,7 +398,18 @@ class GeoDb {
394
398
 
395
399
  const values = Array.from(map.values());
396
400
  values.sort((a, b) => b.population - a.population);
397
- return values.slice(0, 10);
401
+ const topN = values.slice(0, 10);
402
+
403
+ if (!latlong) {
404
+ for (const val of topN) {
405
+ delete val.latitude;
406
+ delete val.longitude;
407
+ delete val.timezone;
408
+ delete val.population;
409
+ }
410
+ }
411
+
412
+ return topN;
398
413
  }
399
414
  }
400
415
  /** Reads entire ZIP database and caches in-memory */
@@ -552,6 +567,13 @@ async function buildGeonamesSqlite(opts) {
552
567
  } else {
553
568
  a[3] = a[3].replace(/‘/g, '\'');
554
569
  a[3] = a[3].replace(/’/g, '\'');
570
+ a[3] = a[3].replace(/Ḥ/g, 'Ch');
571
+ a[3] = a[3].replace(/H̱/g, 'Ch');
572
+ a[3] = a[3].replace(/ẖ/g, 'ch');
573
+ a[3] = a[3].replace(/Ẕ/g, 'Tz');
574
+ a[3] = a[3].replace(/ẕ/g, 'tz');
575
+ a[3] = a[3].replace(/ā/g, 'a');
576
+ a[3] = a[3].replace(/é/g, 'e');
555
577
  }
556
578
 
557
579
  return true;
@@ -567,27 +589,27 @@ async function buildGeonamesSqlite(opts) {
567
589
  `);
568
590
  doSql(logger, db, `update admin1 set name='',asciiname='' where key like 'PS.%';`, `update country set country = '' where iso = 'PS';`, `delete from geoname where geonameid = 7303419;`);
569
591
  doSql(logger, db, `DROP TABLE IF EXISTS geoname_fulltext`, `CREATE VIRTUAL TABLE geoname_fulltext
570
- USING fts3(geonameid int, longname text,
571
- asciiname text, admin1 text, country text,
572
- population int, latitude real, longitude real, timezone text
592
+ USING fts5(geonameid,
593
+ asciiname, admin1, country,
594
+ population, latitude, longitude, timezone
573
595
  );
574
596
  `, `DROP TABLE IF EXISTS geoname_non_ascii`, `CREATE TABLE geoname_non_ascii AS
575
597
  SELECT geonameid FROM geoname WHERE asciiname <> name`, `INSERT INTO geoname_fulltext
576
- SELECT g.geonameid, g.asciiname||', '||a.asciiname||', '||c.Country,
598
+ SELECT g.geonameid,
577
599
  g.asciiname, a.asciiname, c.Country,
578
600
  g.population, g.latitude, g.longitude, g.timezone
579
601
  FROM geoname g, admin1 a, country c
580
602
  WHERE g.country = c.ISO
581
603
  AND g.country||'.'||g.admin1 = a.key
582
604
  `, `INSERT INTO geoname_fulltext
583
- SELECT g.geonameid, g.asciiname||', '||c.Country,
605
+ SELECT g.geonameid,
584
606
  g.asciiname, '', c.Country,
585
607
  g.population, g.latitude, g.longitude, g.timezone
586
608
  FROM geoname g, country c
587
609
  WHERE g.country = c.ISO
588
610
  AND (g.admin1 = '' OR g.admin1 = '00')
589
611
  `, `INSERT INTO geoname_fulltext
590
- SELECT g.geonameid, g.name||', '||a.name||', '||c.Country,
612
+ SELECT g.geonameid,
591
613
  g.name, a.name, c.Country,
592
614
  g.population, g.latitude, g.longitude, g.timezone
593
615
  FROM geoname_non_ascii gna, geoname g, admin1 a, country c
@@ -595,7 +617,7 @@ async function buildGeonamesSqlite(opts) {
595
617
  AND g.country = c.ISO
596
618
  AND g.country||'.'||g.admin1 = a.key
597
619
  `, `INSERT INTO geoname_fulltext
598
- SELECT g.geonameid, alt.name||', ישראל',
620
+ SELECT g.geonameid,
599
621
  alt.name, '', 'ישראל',
600
622
  g.population, g.latitude, g.longitude, g.timezone
601
623
  FROM geoname g, altnames alt
@@ -603,7 +625,7 @@ async function buildGeonamesSqlite(opts) {
603
625
  AND alt.isolanguage = 'he'
604
626
  AND g.geonameid = alt.geonameid
605
627
  `, `INSERT INTO geoname_fulltext
606
- SELECT g.geonameid, alt.name||', '||a1.asciiname||', Israel',
628
+ SELECT g.geonameid,
607
629
  alt.name, a1.asciiname, 'Israel',
608
630
  g.population, g.latitude, g.longitude, g.timezone
609
631
  FROM geoname g, admin1 a1, altnames alt
@@ -611,7 +633,7 @@ async function buildGeonamesSqlite(opts) {
611
633
  AND alt.isolanguage = 'en'
612
634
  AND g.geonameid = alt.geonameid
613
635
  AND g.country||'.'||g.admin1 = a1.key
614
- `);
636
+ `, 'VACUUM');
615
637
  db.close();
616
638
  return Promise.resolve(true);
617
639
  }
package/geo-sqlite.d.ts CHANGED
@@ -3,13 +3,25 @@
3
3
  import {Location} from '@hebcal/core';
4
4
 
5
5
  declare module '@hebcal/geo-sqlite' {
6
+ export type AutoComplete = {
7
+ id: number | string;
8
+ value: string;
9
+ geo: 'geoname' | 'zip';
10
+ asciiname: string;
11
+ admin1?: string;
12
+ country?: string;
13
+ population?: number;
14
+ latitude?: number;
15
+ longitude?: number;
16
+ timezone?: string;
17
+ };
6
18
  export class GeoDb {
7
19
  constructor(logger: any, zipsFilename: string, geonamesFilename: string);
8
20
  close(): void;
9
21
  lookupZip(zip: string): Location;
10
22
  lookupGeoname(geonameid: number): Location;
11
23
  lookupLegacyCity(cityName: string): Location;
12
- autoComplete(qraw: string): Object[];
24
+ autoComplete(qraw: string, latlong?: boolean): AutoComplete[];
13
25
  cacheZips(): void;
14
26
  cacheGeonames(): void;
15
27
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hebcal/geo-sqlite",
3
- "version": "4.1.0",
3
+ "version": "4.4.0",
4
4
  "author": "Michael J. Radwin (https://github.com/mjradwin)",
5
5
  "keywords": [
6
6
  "hebcal"
@@ -28,11 +28,11 @@
28
28
  "geo-sqlite.d.ts"
29
29
  ],
30
30
  "dependencies": {
31
- "@hebcal/cities": "^3.1.1",
32
- "@hebcal/core": "^3.33.3",
33
- "better-sqlite3": "^7.5.0",
34
- "pino": "^7.8.0",
35
- "pino-pretty": "^7.5.3"
31
+ "@hebcal/cities": "^3.1.2",
32
+ "@hebcal/core": "^3.36.2",
33
+ "better-sqlite3": "^7.5.1",
34
+ "pino": "^7.11.0",
35
+ "pino-pretty": "^7.6.1"
36
36
  },
37
37
  "scripts": {
38
38
  "build": "rollup -c",
@@ -53,18 +53,18 @@
53
53
  },
54
54
  "license": "BSD-2-Clause",
55
55
  "devDependencies": {
56
- "@babel/core": "^7.17.5",
57
- "@babel/preset-env": "^7.16.11",
58
- "@babel/register": "^7.17.0",
56
+ "@babel/core": "^7.17.10",
57
+ "@babel/preset-env": "^7.17.10",
58
+ "@babel/register": "^7.17.7",
59
59
  "@rollup/plugin-babel": "^5.3.1",
60
- "@rollup/plugin-commonjs": "^21.0.2",
60
+ "@rollup/plugin-commonjs": "^22.0.0",
61
61
  "@rollup/plugin-json": "^4.1.0",
62
- "@rollup/plugin-node-resolve": "^13.1.3",
63
- "ava": "^4.0.1",
64
- "eslint": "^8.10.0",
62
+ "@rollup/plugin-node-resolve": "^13.2.1",
63
+ "ava": "^4.2.0",
64
+ "eslint": "^8.14.0",
65
65
  "eslint-config-google": "^0.14.0",
66
66
  "jsdoc": "^3.6.10",
67
67
  "jsdoc-to-markdown": "^7.1.1",
68
- "rollup": "^2.69.1"
68
+ "rollup": "^2.71.1"
69
69
  }
70
70
  }