Skip to content

Instantly share code, notes, and snippets.

@terrycojones
Created August 6, 2014 09:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save terrycojones/741ebcd228e0d29dd595 to your computer and use it in GitHub Desktop.
Save terrycojones/741ebcd228e0d29dd595 to your computer and use it in GitHub Desktop.
package AC::Location;
use strict;
use Carp;
# The keys in this array should have nothing but A-Z (and maybe 0-9).
# The values give the canonical display names of places.
#
# Make sure that if you have a value with a hyphen (or other punc)
# that you also have that value without the hyphen as a key (that
# also leads to that value). That makes sure that if we're given
# the preferred value it also leads to itself.
#
# The rule to follow here is to put a single hyphen between components
# in the values. Don't use any other punc.
#
my %preferredLocation = (
'ANGTHONG' => 'ANG-THONG',
'AYTTHAYA' => 'AYATTHAYA',
'BADENWURTTEMBERG' => 'BADEN-WURTTEMBERG',
'BADENWURTTEMBURG' => 'BADEN-WURTTEMBERG',
'BADENWURTTENBERG' => 'BADEN-WURTTEMBERG',
'BADENWURTTENBURG' => 'BADEN-WURTTEMBERG',
'BAGKOK' => 'BANGKOK',
'BAGKOKI' => 'BANGKOK',
'BANGKOKI' => 'BANGKOK',
'BEIIJNG' => 'BEIJING',
'BEIJINGXUANWU' => 'BEIJING',
'BEIJINXUANWU' => 'BEIJING',
'BEIJNG' => 'BEIJING',
'BURIRUM' => 'BURIRAM',
'CA' => 'CALIFORNIA',
'CANADASYLIKE' => 'CANADA',
'CERAA' => 'CEARA',
'CHANTABURI' => 'CHANTHABURI',
'CHIBAC' => 'CHIBA',
'CHILE' => 'SANTIAGO',
'CHINACNIC' => 'CHINA',
'CONGQING' => 'CHONGQING',
'COSTARICA' => 'COSTA-RICA',
'EKATEZINBURG' => 'EKATERINBURG',
'EXTREMAD' => 'EXTREMADURA',
'FIRENZE' => 'FLORENCE',
'FUKUOKAC' => 'FUKUOKA',
'FUOKA' => 'FUKUOKA',
'GERONA' => 'GIRONA',
'GIFUC' => 'GIFU',
'GOTEBURG' => 'GOTEBORG',
'GOTENBORG' => 'GOTEBORG',
'GUALDALAGARA' => 'GUADALAJARA',
'GTEBORG' => 'GOTEBORG',
'HAMAMATSUC' => 'HAMAMATSU',
'HAMAMATUC' => 'HAMAMATU',
'HIROSHIMAC' => 'HIROSHIMA',
'HK' => 'HONG-KONG',
'HONGKONGK' => 'HONG-KONG',
'HONGKONG' => 'HONG-KONG',
'KITAKYUSYU' => 'KITAKYUSHU',
'KUMAMOTOC' => 'KUMAMOTO',
'KWANGJIN' => 'KWANGJU',
'KYOTOC' => 'KYOTO',
'KYUNGBUK' => 'KYONGBUK',
'LAREUNION' => 'REUNION',
'LAMOANG' => 'LAMPANG',
'LINNKOPING' => 'LINKOPING',
'LIPETZK' => 'LIPETSK',
'LOBBURI' => 'LOP-BURI',
'LOPBURI' => 'LOP-BURI',
'LYONCHU' => 'LYON',
'LYONTRS' => 'LYON',
'MACU' => 'MACAU',
'MAEHONGSORN' => 'MAE-HONG-SON',
'MAEHONGSON' => 'MAE-HONG-SON',
'MASSACHUSETS' => 'MASSACHUSETTS',
'NAKHONNAYOK' => 'NAKHON-NAYOK',
'NAKONNAYOK' => 'NAKHON-NAYOK',
'NAPAL' => 'NEPAL',
'NEWYORK' => 'NEW-YORK',
'NIGATA' => 'NIIGATA',
'NIIGATAC' => 'NIIGATA',
'NORDRHEINWESTFALEN' => 'NORDRHEIN',
'NORTHDAKOTA' => 'NORTH-DAKOTA',
'NRW' => 'NORDRHEIN',
'NY' => 'NEW-YORK',
'OSAKAC' => 'OSAKA',
'OTAGA' => 'OTAGO',
'PATHUMTHANI' => 'PATHUM-THANI',
'PHILIPINES' => 'PHILIPPINES',
'PHILLIPINES' => 'PHILIPPINES',
'POL' => 'POLAND',
'PRABCHINBURI' => 'PRACHIN-BURI',
'PRACHINBURI' => 'PRACHIN-BURI',
'PRACHINMURI' => 'PRACHIN-BURI',
'PRACHUAPKHIRIKHAN' => 'PRACHUAP-KHIRI-KHAN',
'PRACHUAPKHIRIKKAN' => 'PRACHUAP-KHIRI-KHAN',
'ROMA' => 'ROME',
'ROSTOVONDON' => 'ROSTOVDON',
'RU' => 'RUSSIA',
'SAMUTPRAKAN' => 'SAMUT-PRAKAN',
'SAMUTPRAKHAN' => 'SAMUT-PRAKAN',
'SANTIAGAO' => 'SANTIAGO',
'SENDAIH' => 'SENDAI',
'SHIZUOKAC' => 'SHIZUOKA',
'SHIZUOKAC' => 'SHIZUOKA',
'SOUTHDAKOTA' => 'SOUTH-DAKOTA',
'SPAIN' => 'MADRID',
'STPETERSBURG' => 'ST-PETERSBURG',
'STETIENNE' => 'ST-ETIENNE',
'SUPHANBURI' => 'SUPHAN-BURI',
'TENNESEE' => 'TENNESSEE',
'THESSALONIKA' => 'THESSALONIKI',
'UBONRATCHATHANI' => 'UBON-RATCHATHANI',
'UK' => 'UK',
'UME' => 'UMEA',
'UNITEDKINGDOM' => 'UK',
'URAGUAY' => 'URUGUAY',
'URUAGUAY' => 'URUGUAY',
'USSRRUSSIA' => 'RUSSIA',
'WESTVIRGINIA' => 'WEST-VIRGINIA',
'WY' => 'WYOMING',
'YAMANASHII' => 'YAMANASHI',
'YAMANESHI' => 'YAMANASHI',
'YARYSLAVL' => 'YAROSLAVL',
'ZARAGOSSA' => 'ZARAGOZA',
);
#
# These abbreviations are used in matching sera abbreviations
# found in HI tables against strain names.
#
my %locationAbbr = (
'AFGHANISTAN' => 'JN',
'AGADIR' => 'DP',
'AICHI' => 'AC',
'AKITA' => 'AK',
'ALABAMA' => 'AB',
'ALASKA' => 'AX',
'ALBANIA' => 'AD',
'ALGERIA' => 'AE',
'ALICESPRINGS' => 'AS',
'AMSTERDAM' => 'AM',
'ANG-THONG' => 'AQ',
'ANGTHONG' => 'EB',
'ANHUI' => 'AN',
'ANNARBOR' => 'AA',
'ANNECY' => 'FF',
'ANTALYA' => 'JE',
'AOMORI' => 'AO',
'ARAGON' => 'RG',
'ARGENTINA' => 'AG',
'ARIZONA' => 'AR',
'ARKANSAS' => 'QD',
'ARVAIKHEER' => 'RV',
'ASTRAKHAN' => 'FY',
'ASTURIAS' => 'AI',
'ATHENS' => 'DQ',
'ATLANTA' => 'AT',
'AUCKLAND' => 'AU',
'AUSTRALIA' => 'AL',
'AUSTRIA' => 'AH',
'AVILA' => 'VV',
'AYATTHAYA' => 'AZ',
'AYTTHAYA' => 'AY',
'AZERBAIJAN' => 'ZB',
'BADEN-WURTTEMBERG' => 'BD',
'BAGKOK' => 'BT',
'BALEARES' => 'BF',
'BANGKOK' => 'BA',
'BANGKOKI' => 'BK',
'BANGLADESH' => 'QB',
'BARCELONA' => 'BO',
'BAYERN' => 'BY',
'BEIIJNG' => 'BJ',
'BEIJING' => 'BE',
'BEIJINGXUANWU' => 'IJ',
'BEIJINXUANWU' => 'IX',
'BELEM' => 'BL',
'BELGIUM' => 'BG',
'BELGRADE' => 'BH',
'BENELUX' => 'UX',
'BERLIN' => 'BN',
'BILBAO' => 'BB',
'BILTHOVEN' => 'BI',
'BOLIVIA' => 'OJ',
'BORDEAUX' => 'QZ',
'BRANDENBURG' => 'JB',
'BRANDYS' => 'DY',
'BRASOV' => 'BS',
'BRATISLAVA' => 'RL',
'BRAZIL' => 'BZ',
'BREMEN' => 'BM',
'BRISBANE' => 'BR',
'BUCHAREST' => 'BC',
'BURGOS' => 'RS',
'BURIRAM' => 'BX',
'BURIRUM' => 'BP',
'BURSA' => 'JC',
'BUSAN' => 'BU',
'BYDGOSZCZ' => 'YD',
'CA' => 'DC',
'CAEN' => 'CI',
'CALARASI' => 'CS',
'CALIFORNIA' => 'CF',
'CAMBODIA' => 'FP',
'CANADA' => 'CA',
'CANARIAS' => 'CQ',
'CANBERRA' => 'CA',
'CARTAGENA' => 'CV',
'CASABLANCA' => 'DL',
'CASTILLA' => 'LL',
'CEARA' => 'CR',
'CERAA' => 'CR',
'CHACHOENGSAO' => 'EO',
'CHAIYAPUM' => 'IY',
'CHANGWON' => 'CW',
'CHANTABURI' => 'CU',
'CHANTHABURI' => 'HY',
'CHEJU' => 'CJ',
'CHENGMEI' => 'CM',
'CHEONBUK' => 'CK',
'CHEONNAM' => 'CE',
'CHIANGMAI' => 'CM',
'CHIANGRAI' => 'CR',
'CHIANGMAI' => 'AP',
'CHIBA' => 'CB',
'CHIBA' => 'CH',
'CHILE' => 'CL',
'CHINA' => 'CH',
'CHITA' => 'CT',
'CHOIBALSAN' => 'OL',
'CHONGQING' => 'OQ',
'CHRISTCHURCH' => 'CC',
'CHUNGBUK' => 'ZX',
'CHUNGNAM' => 'CG',
'CLERMONTFERRAND' => 'MF',
'CLUJ' => 'CP',
'COLLINDALE' => 'CD',
'COLOMBIA' => 'QF',
'COLORADO' => 'CO',
'CONGQING' => 'QQ',
'CONNECTICUT' => 'CN',
'COOK-ISLAND' => 'VF',
'CORDOBA' => 'QC',
'COSTA-RICA' => 'VC',
'COSTARICA' => 'VC',
'CX-ROUSSE' => 'XX',
'CZECHOSLOVAKIA' => 'CZ',
'DAEGU' => 'DA',
'DAEJEON' => 'DJ',
'DAKAR' => 'DK',
'DARWIN' => 'DW',
'DELFT' => 'DE',
'DENMARK' => 'DN',
'DESGENETTES' => 'DS',
'DEVA' => 'DV',
'DISTRICT-OF-COLUMBIA' => '-O',
'DUBAI' => 'FT',
'DUNDIN' => 'DD',
'DUNEDIN' => 'DU',
'ECUADOR' => 'EC',
'EDIRNE' => 'JD',
'EGYPT' => 'EG',
'EHIME' => 'EH',
'EINDHOVEN' => 'EI',
'EKATERINBURG' => 'EK',
'EKATEZINBURG' => 'EZ',
'EL-SALVADOR' => 'EL',
'ENGLAND' => 'EN',
'ENSCHEDE' => 'ES',
'EQUADOR' => 'EQ',
'EUSKADI' => 'EU',
'EXTREMAD' => 'ET',
'EXTREMADURA' => 'EX',
'FATICK' => 'FA',
'FES' => 'FD',
'FIJI' => 'FJ',
'FINLAND' => 'FI',
'FIRENZE' => 'FE',
'FLORENCE' => 'FO',
'FLORIDA' => 'FL',
'FOSHAN' => 'FH',
'FRANCE' => 'FR',
'FRENCH-GUIANA' => '-G',
'FUJIAN' => 'FU',
'FUKUI' => 'FB',
'FUKUOKA' => 'FK',
'FUKUOKA-C' => 'FC',
'FUKUOKAC' => 'QP',
'FUKUSHIMA' => 'FS',
'FUOKA' => 'FK',
'FUZHOU' => 'FZ',
'GALICIA' => 'GQ',
'GANGWON' => 'WO',
'GANSU' => 'GS',
'GANSUCHENGGUAN' => 'FV',
'GENEVA' => 'GE',
'GENOA' => 'GB',
'GEORGIA' => 'GG',
'GERMANY' => 'GY',
'GERONA' => 'QN',
'GIFU' => 'GI',
'GIFU-C' => 'GP',
'GIFUC' => 'QR',
'GIRONA' => 'GH',
'GOTEBORG' => 'GT',
'GOTEBURG' => 'GK',
'GOTENBORG' => 'GO',
'GRANADA' => 'GN',
'GREECE' => 'GC',
'GRONINGEN' => 'GR',
'GUADALAJARA' => 'GJ',
'GUADELOUPE' => 'OP',
'GUALDALAGARA' => 'GL',
'GUAM' => 'GA',
'GUANGDONG' => 'GD',
'GUANGXI' => 'GX',
'GUANGZHOU' => 'GZ',
'GUATEMALA' => 'VJ',
'GUIDLFORD' => 'GF',
'GUIZHOU' => 'GU',
'GUMMA' => 'GM',
'GUNMA' => 'GW',
'GUYANE' => 'UY',
'GWANGJU' => 'WG',
'GYEONGNAM' => 'YE',
'GöTEBORG' => 'öT',
'HAINAN' => 'HQ',
'HAMAMATSU-C' => 'HT',
'HAMAMATU-C' => 'HT',
'HAMBURG' => 'IZ',
'HANNOVER' => 'HV',
'HARBIN' => 'HB',
'HAWAII' => 'HA',
'HEBEI' => 'HE',
'HENAN' => 'HM',
'HESSEN' => 'QM',
'HIME' => 'HL',
'HIROSHIMA' => 'HF',
'HIROSHIMA-C' => 'HS',
'HIROSHIMAC' => 'QS',
'HK' => 'HK',
'HOKKAIDO' => 'HD',
'HOLLAND' => 'FQ',
'HONDURAS' => 'FW',
'HONG-KONG' => 'HK',
'HONG-KONGK' => 'HP',
'HONGKONG' => 'HK',
'HOUSTON' => 'HO',
'HUBEI' => 'HI',
'HUNAN' => 'HN',
'HUNGARY' => 'HG',
'HUNTINGTON' => 'HU',
'HYOGO' => 'HJ',
'IASI' => 'IA',
'IBARAKI' => 'IB',
'ICELAND' => 'IE',
'IDAHO' => 'IH',
'ILLINOIS' => 'IL',
'INCHEON' => 'IC',
'INDIA' => 'II',
'INDIANA' => 'IN',
'INDONESIA' => 'ID',
'INVERNESS' => 'IV',
'IOWA' => 'JZ',
'IRAN' => 'IF',
'IRELAND' => 'IR',
'ISHIKAWA' => 'IK',
'ISRAEL' => 'IS',
'ISTANBUL' => 'IU',
'ITALY' => 'IT',
'IVORY-COAST' => 'VY',
'IWATE' => 'IW',
'IZMIR' => 'ZI',
'JAMAICA' => 'QG',
'JAPAN' => 'JP',
'JEJU' => 'JJ',
'JEONBUK' => 'VH',
'JHB' => 'JH',
'JIANGSU' => 'JS',
'JIANGXI' => 'JA',
'JIANGXIDONGHU' => 'JX',
'JILIN' => 'JI',
'JOHANNESBURG' => 'JO',
'KAGAWA' => 'KB',
'KAGOSHIMA' => 'KG',
'KALASIN' => 'EF',
'KALININGRAD' => 'FX',
'KAMPHAENG-PHET' => 'KQ',
'KANAGAWA' => 'KD',
'KANCHANABURI' => 'KV',
'KANGWON' => 'KN',
'KANSAS' => 'JW',
'KASAULI' => 'KA',
'KAWASAKI' => 'KS',
'KENTUCKY' => 'JR',
'KENYA' => 'VP',
'KHABAROVSK' => 'KH',
'KHON-KAEN' => 'KL',
'KHOVD' => 'JF',
'KIEV' => 'QI',
'KITAKYUSHU' => 'KY',
'KITAKYUSYU' => 'KU',
'KOBE' => 'KO',
'KOCHI' => 'KC',
'KOREA' => 'KR',
'KRASNOYARSK' => 'RY',
'KUM' => 'KF',
'KUMAMOTO' => 'KM',
'KUMAMOTO-C' => 'KE',
'KUMAMOTOC' => 'QV',
'KWANGJIN' => 'KW',
'KWANGJU' => 'KJ',
'KYONGBUK' => 'KK',
'KYONGGI' => 'KI',
'KYONGNAM' => 'KZ',
'KYOTO' => 'EY',
'KYOTO-C' => 'KT',
'KYUNGBUK' => 'YN',
'KYUNGGI' => 'DF',
'KYUNGNAM' => 'KX',
'LA-REUNION' => 'LR',
'LAMOANG' => 'LK',
'LAMPANG' => 'LJ',
'LATVIA' => 'LT',
'LAUSANNE' => 'LA',
'LEICESTERSHIRE' => 'LX',
'LENINGRAD' => 'LE',
'LEON' => 'LN',
'LIAONING' => 'LG',
'LIMOGES' => 'LM',
'LINCOLN' => 'LZ',
'LINNKOPING' => 'LI',
'LIPETSK' => 'LP',
'LIPETZK' => 'LP',
'LISBON' => 'LS',
'LOBBURI' => 'LF',
'LOEI' => 'LQ',
'LOP-BURI' => 'LC',
'LOPBURI' => 'LB',
'LOSANGELES' => 'LO',
'LOUISIANA' => 'LU',
'LYON' => 'LY',
'LYON-CHU' => 'LH',
'LYON-TRS' => 'LD',
'MACAU' => 'MQ',
'MACU' => 'FG',
'MAD' => 'MD',
'MADAGASCAR' => 'MR',
'MADRID' => 'MA',
'MAE-HONG-SON' => 'MN',
'MAE-HONG-SORN' => 'MH',
'MAINE' => 'OX',
'MALAYSIA' => 'ML',
'MALMO' => 'MM',
'MALY' => 'ML',
'MARRAKECH' => 'DO',
'MARSEILLE' => 'QY',
'MARTINIQUE' => 'QE',
'MARYLAND' => 'YL',
'MASSACHUSETS' => 'MZ',
'MASSACHUSETTS' => 'JV',
'MAURITIUS' => 'QO',
'MAYOCLINIC' => 'MY',
'MECKLENBURG-VORPO.' => '-V',
'MEKNES' => 'DM',
'MEMPHIS' => 'ME',
'MEXICO' => 'MX',
'MICHIGAN' => 'MC',
'MIE' => 'MJ',
'MILAN' => 'DH',
'MINNESOTA' => 'MS',
'MISSISSIPPI' => 'MI',
'MISSOURI' => 'MO',
'MIYAGI' => 'MG',
'MIYAZAKI' => 'MK',
'MONGOLIA' => 'MV',
'MONTANA' => 'JY',
'MONTPELLIER' => 'MP',
'MOROCCO' => 'MB',
'MOSCOW' => 'MW',
'MURMANSK' => 'IP',
'NAGANO' => 'NK',
'NAGASAKI' => 'NS',
'NAGOYA' => 'NM',
'NAKHON-PATHOM' => 'KP',
'NAKHON-RATCHASIMA' => 'NZ',
'NAKHON-SAWAN' => 'HW',
'NAKHONNAYOK' => 'YY',
'NAKONNAYOK' => 'OO',
'NANCHANG' => 'NA',
'NAPAL' => 'NQ',
'NARA' => 'NH',
'NARATHIWAT' => 'RW',
'NEBRASKA' => 'NB',
'NEPAL' => 'EE',
'NETHERLANDS' => 'NL',
'NEVADA' => 'NV',
'NEW-CALEDONIA' => 'NW',
'NEW-HAMPSHIRE' => 'EP',
'NEW-JERSEY' => 'NJ',
'NEW-MEXICO' => 'WX',
'NEW-YORK' => 'NY',
'NEWCASTLE' => 'NC',
'NEWMARKET' => 'WW',
'NEWYORK' => 'JG',
'NICE' => 'NE',
'NIEDERSACHSEN' => 'ED',
'NIGATA' => 'NP',
'NIGERIA' => 'JQ',
'NIIGATA' => 'NG',
'NIIGATA-C' => 'NT',
'NIIGATAC' => 'QW',
'NIJMEGEN' => 'NI',
'NINGBO' => 'NN',
'NINGXIA' => 'NX',
'NONTHABURI' => 'NU',
'NORDRHEIN' => 'OD',
'NORDRHEIN-WESTFALEN' => '-D',
'NORTH-CAROLINA' => 'NO',
'NORTH-DAKOTA' => 'ND',
'NORWAY' => 'OW',
'NOUACKCHOTT' => 'QL',
'NOVGOROD' => 'JK',
'NOVOSIBIRSK' => 'NR',
'NOVY-BYDZOV' => 'OB',
'NRW' => 'NF',
'NY' => 'DB',
'ODESSA' => 'QJ',
'OHIO' => 'OH',
'OITA' => 'OI',
'OKAYAMA' => 'OY',
'OKINAWA' => 'ON',
'OKLAHOMA' => 'OK',
'OMSK' => 'OM',
'ORADEA' => 'OR',
'OREGON' => 'OG',
'OREL' => 'OF',
'ORENSE' => 'OE',
'OSAKA' => 'OA',
'OSAKA-C' => 'OA',
'OSLO' => 'OS',
'OTAGA' => 'OC',
'OTAGO' => 'OT',
'OUJDA' => 'OU',
'OVIEDO' => 'OV',
'PALENCIA' => 'QK',
'PANAMA' => 'PM',
'PARAGUAY' => 'PY',
'PARIS' => 'PA',
'PARMA' => 'PB',
'PATHUM-THANI' => 'PT',
'PATHUMTHANI' => 'PQ',
'PATTANI' => 'BQ',
'PAU' => 'DG',
'PENNSYLVANIA' => 'PS',
'PERTH' => 'PE',
'PERU' => 'PU',
'PERUGIA' => 'PG',
'PHARE' => 'BV',
'PHATTHALUNG' => 'PF',
'PHETCHABUN' => 'PX',
'PHICHIT' => 'BW',
'PHILIPPINES' => 'PH',
'PHILLIPINES' => 'PV',
'PHITSANULOK' => 'EJ',
'PHUKET' => 'PK',
'PILSEN' => 'PL',
'POITIERS' => 'PI',
'POL' => 'QH',
'POLAND' => 'PD',
'PONTEVEORA' => 'EV',
'PORT-CHALMERS' => 'PC',
'PRABCHINBURI' => 'PZ',
'PRACHINBURI' => 'PW',
'PRACHINMURI' => 'RC',
'PRACHUAP-KHIRI-KHAN' => 'PP',
'PRACHUAPKHIRIKHAN' => 'RP',
'PRACHUAPKHIRIKKAN' => 'EM',
'PRAGUE' => 'PR',
'PRAJIANBURI' => 'PJ',
'PUERTO-MONTT' => '-M',
'PUERTO-RICO' => 'PO',
'PUSAN' => 'PN',
'QINGDAO' => 'QT',
'QUANZHOU' => 'QA',
'QUEENSLAND' => 'QU',
'RABAT' => 'RF',
'RATCHABURI' => 'RT',
'REUNION' => 'RE',
'RHEINLAND-PFALZ' => 'RH',
'RHODE-ISLAND' => '-I',
'RIO-DE-JANEIRO' => 'RJ',
'ROI-ET' => 'RB',
'ROMA' => 'RO',
'ROMANIA' => 'RM',
'ROME' => 'RA',
'ROSTOV-ON-DON' => 'RQ',
'ROSTOVDON' => 'RX',
'ROTTERDAM' => 'RD',
'RU' => 'RU',
'RUSSIA' => 'OZ',
'RYAZAN' => 'ZN',
'SA-KAEO' => '-K',
'SACHSEN' => 'HC',
'SACHSEN-ANHALT' => 'SQ',
'SAGA' => 'SB',
'SAINSHAND' => 'FN',
'SAITAMA' => 'ZY',
'SAKAI' => 'AJ',
'SAKON-NAKHON' => '-N',
'SALAMANCA' => 'DI',
'SAMARA' => 'SM',
'SAMUT-PRAKAN' => 'MU',
'SAMUT-SAKHON' => 'MT',
'SAMUTPRAKAN' => 'UP',
'SAMUTPRAKHAN' => 'RK',
'SAN-ANTONIO' => '-T',
'SAN-SEBASTIAN' => '-S',
'SANTANDER' => 'DR',
'SANTIAGAO' => 'AV',
'SANTIAGO' => 'SZ',
'SAPPORO' => 'SR',
'SARABURI' => 'RR',
'SAUDI-ARABIA' => '-A',
'SCHLESWIG-HOLSTEIN' => 'LW',
'SCOTLAND' => 'SL',
'SEGOVIA' => 'GV',
'SENDAI' => 'SE',
'SENDAI-H' => 'SE',
'SENDAIH' => 'QX',
'SENDI-H' => '-H',
'SEOUL' => 'SU',
'SHAANXI' => 'HX',
'SHANGDONG' => 'SD',
'SHANGHAI' => 'SH',
'SHANTOU' => 'SV',
'SHENZHEN' => 'SW',
'SHIGA' => 'SG',
'SHIMANE' => 'IM',
'SHIZUOKA' => 'HH',
'SHIZUOKA-C' => 'HZ',
'SHIZUOKAC' => 'ZU',
'SICHUAN' => 'SI',
'SIENA' => 'EA',
'SING' => 'VQ',
'SINGAPORE' => 'SP',
'SLOVAKIA' => 'VK',
'SLOVENIA' => 'LV',
'SOFIA' => 'SF',
'SOLOMON-ISLANDS' => 'IO',
'SOPHIA' => 'SX',
'SORIA' => 'RI',
'SOUTH-AFRICA' => 'AF',
'SOUTH-AUSTRALIA' => 'SA',
'SOUTH-CAROLINA' => 'SC',
'SOUTH-DAKOTA' => 'SO',
'SPAIN' => 'SJ',
'SRI-LANKA' => '-L',
'ST-ETIENNE' => 'SN',
'ST-PETERSBURG' => '-P',
'ST.-ETIENNE' => 'SK',
'ST.-PETERSBURG' => 'SS',
'STAVROPOL' => 'VR',
'STOCKHOLM' => 'ST',
'STPETERSBURG' => 'IQ',
'SUCEAVA' => 'UV',
'SUDAN' => 'JM',
'SUKHBAATAR' => 'FM',
'SUKHOTHAI' => 'UO',
'SUPHAN-BURI' => '-B',
'SUPHANBURI' => 'UH',
'SURIN' => 'RN',
'SW' => 'SW',
'SWITZERLAND' => 'WZ',
'SYDNEY' => 'SY',
'TAIWAN' => 'TA',
'TAK' => 'TK',
'TALCAHUANO' => 'JT',
'TANGER' => 'TZ',
'TARRAGONA' => 'TF',
'TASMANIA' => 'TM',
'TEHRAN' => 'TR',
'TENNESEE' => 'DX',
'TENNESSEE' => 'TW',
'TEXAS' => 'TE',
'THAILAND' => 'TL',
'THESSALONIKA' => 'TH',
'THESSALONIKI' => 'TH',
'THURINGEN' => 'TB',
'TIANJIN' => 'TJ',
'TILBURG' => 'TI',
'TOCHIGI' => 'TC',
'TOKUSHIMA' => 'TQ',
'TOKYO' => 'TY',
'TOMSK' => 'ER',
'TONGA' => 'TG',
'TOTTORI' => 'TT',
'TOULON' => 'TN',
'TOULOUSE' => 'TO',
'TOWNSVILLE' => 'TV',
'TOYAMA' => 'TP',
'TRABZON' => 'RZ',
'TRANG' => 'DZ',
'TRENTO' => 'TD',
'TRIESTE' => 'TS',
'TULA' => 'TU',
'TURKEY' => 'JL',
'TX' => 'TX',
'U.K.' => 'UA',
'UBON-RATCHATHANI' => 'UE',
'UBONRATCHATHANI' => 'UF',
'UD' => 'UC',
'UDORN' => 'UD',
'UK' => 'UK',
'UKRAINE' => 'UZ',
'ULAANBAATAR' => 'UW',
'ULAN-UDE' => 'UU',
'ULSAN' => 'UL',
'UMEA' => 'UM',
'UMEå' => 'UQ',
'UNITED-KINGDOM' => 'UI',
'UNITEDKINGDOM' => 'UN',
'URUAGUAY' => 'UG',
'URUGUAY' => 'UR',
'USSR/RUSSIA' => 'US',
'UTAH' => 'JU',
'UTHAI-THANI' => 'UJ',
'UTRECHT' => 'UT',
'UTTARADIT' => 'UB',
'VALENCIA' => 'VA',
'VALLADOLID' => 'VD',
'VENEZUELA' => 'VZ',
'VERMONT' => 'VT',
'VICTORIA' => 'VI',
'VIENNA' => 'VN',
'VIETNAM' => 'VE',
'VINA-DEL-MAR' => 'VB',
'VIRGINIA' => 'VG',
'VLADIMIR' => 'VM',
'VOLGOGRAD' => 'VL',
'VORONEZH' => 'VO',
'WAIKATO' => 'WK',
'WAKAYAMA' => 'WM',
'WARSAW' => 'WR',
'WASHINGTON' => 'WA',
'WELLINGTON' => 'WE',
'WEST-VIRGINIA' => 'WS',
'WESTVIRGINIA' => 'WV',
'WISCONSIN' => 'WN',
'WUHAN' => 'WU',
'WUZHOU' => 'WH',
'WY--' => 'WB',
'WYOMING' => 'WY',
'XIAMEN' => 'XM',
'XINJIANG-HUTUBI' => 'XJ',
'XINJIANGCHANGJI' => 'XI',
'XINJIANGHUTUBI' => 'XN',
'YAMAGA' => 'YA',
'YAMAGATA' => 'YT',
'YAMAGUCHI' => 'YG',
'YAMANASHI' => 'YM',
'YAMANASHII' => 'YI',
'YAMANESHI' => 'YI',
'YAROSLAVL' => 'YS',
'YARYSLAVL' => 'YR',
'YOKOHAMA' => 'YO',
'YOKOSUKA' => 'YK',
'YUNAN' => 'YB',
'YUNGNAM' => 'YZ',
'YUNNAN' => 'YU',
'ZAGREB' => 'ZE',
'ZAMBIA' => 'ZA',
'ZAMORA' => 'ZM',
'ZARAGOSSA' => 'ZG',
'ZARAGOZA' => 'ZR',
'ZHEJIANG' => 'ZH',
'ZLIN' => 'ZL'
);
sub lookup_location($){
my ($location) = @_;
$location = uc($location);
return uc($locationAbbr{$location}) if exists $locationAbbr{$location};
$location = canonicalizeLocation($location);
return uc($locationAbbr{$location}) if exists $locationAbbr{$location};
$location;
}
sub canonicalizeLocation($){
my ($location) = @_;
$location = uc($location);
$location =~ s/[^0-9A-Z]//g;
$location = uc($preferredLocation{$location}) if exists $preferredLocation{$location};
$location;
}
1;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment