home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / e / e032 / 3.ddi / FILES / MISCELLA.PAK / CITYDATA.M < prev    next >
Encoding:
Text File  |  1992-07-29  |  9.6 KB  |  371 lines

  1.  
  2. (* :Title: City Data *)
  3.  
  4. (* :Author: John M. Novak *)
  5.  
  6. (* :Summary:
  7.     A database for information about cities.  Also, a useful
  8.     model of a database in Mathematica.
  9. *)
  10.  
  11. (* :Context: Miscellaneous`CityData`;
  12.     also loads Miscellaneous`Geodesy` *)
  13.  
  14. (* :Package Version: 1.0 *)
  15.  
  16. (* :History:
  17.     V 1.0, April, 1991, by John M. Novak.
  18. *)
  19.  
  20. (* :Keywords:
  21.     cities, geography, databases
  22. *)
  23.  
  24. (* :Sources:
  25.     Map, a Macintosh Control Panel Device V1.1 by Mark Davis.
  26.     Esselte Map Service, Concise Earth Book World Atlas,
  27.         Earthbooks, Inc., 1990
  28. *)
  29.  
  30. (* :Mathematica Version: 2.0 *)
  31.  
  32. BeginPackage["Miscellaneous`CityData`",
  33.     "Miscellaneous`Geodesy`"]
  34.  
  35. CityData::usage =
  36.     "CityData[city,type] will return data of the requested type
  37.     for the city specified. CityData[type] will return a list
  38.     of cities in the database for which information of the specified
  39.     type is available.  CityData[city] will return any information
  40.     on city of types specified in the global variable $CityFields."
  41.  
  42. $CityFields::usage =
  43.     "Contains a list of data types (fields) in the CityData
  44.     database."
  45.  
  46. CityPosition::usage =
  47.     "CityPosition is a type of data for CityData.  Position
  48.     information is in the form of latitude and longitude,
  49.     expressed as {lat,long}. Coordinates will be in the form
  50.     {d,m} or {d,m,s}."
  51.  
  52. CityDistance::usage =
  53.     "CityDistance[city1,city2] returns the distance in km between
  54.     the two cities.  CityDistance[city1,city2,
  55.     CityDistanceMethod->method] finds the distance using the
  56.     function method."
  57.  
  58. CityDistanceMethod::usage =
  59.     "CityDistanceMethod is an option for CityDistance; it specifies
  60.     a pure function taking two arguments that determines the
  61.     distance between coordinates."
  62.  
  63. Begin["`Private`"]
  64.  
  65. $CityFields = {CityPosition};
  66.  
  67. CityData::alternates =
  68.     "Requested city not in database.  Possible alternatives: `1`";
  69.  
  70. CityData[symbol_Symbol] :=
  71.     Map[#[[1,1,1]]&,DownValues[symbol]]
  72.  
  73. CityData[cit:(_String | {__String})] :=
  74.     Module[{dat,alts},
  75.         dat = Map[{#,#[cit]}&,$CityFields];
  76.         dat = Select[dat,Not[MemberQ[$CityFields,Head[Last[#]]]]&];
  77.         If[dat === {} && ((alts =
  78.                 Union @@ Map[checkspell[cit,CityData[#]]&,$CityFields]) =!=
  79.                 {}),
  80.             Message[CityData::alternates,alts]
  81.         ];
  82.         dat/;dat =!= {}
  83.     ]
  84.             
  85. CityData[cit:(_String | {__String}),symbol_Symbol] :=
  86.     Module[{return = symbol[cit],dv,alts},
  87.         If[Head[return] === symbol,
  88.             dv = CityData[symbol];
  89.             If[Length[tmp = checkclose[cit,dv]] === 1,
  90.                 return = symbol[First[tmp]],
  91.                 If[(alts = checkspell[cit,dv]) =!= {},
  92.                     Message[CityData::alternates,alts]
  93.                 ]
  94.             ]
  95.         ];
  96.         return/;Head[return] =!= symbol]
  97.  
  98. checkclose[cit_String,list_List] :=
  99.     Select[list,(Head[#] === List && First[#] === cit)&]
  100.  
  101. checkclose[cit_List, list_List] :=
  102.     Select[list,(Head[#] === String && # === First[cit])&]
  103.  
  104. checkspell[cit_,list_List] :=
  105.     Module[{city = If[Head[cit] === List, First[cit],cit]},
  106.         Select[list,If[Head[#] === List,
  107.                 StringMatchQ[city,First[#],SpellingCorrection->True,
  108.                     IgnoreCase->True],
  109.                 StringMatchQ[city,#,SpellingCorrection->True,
  110.                     IgnoreCase->True]]&]
  111.     ]
  112.  
  113. Options[CityDistance] =
  114.     {DistanceMethod->SphericalDistance}
  115.  
  116. CityDistance[city1_,city2_,opts___] :=
  117.     Module[{meth,pos},
  118.         {meth} = {DistanceMethod}/.{opts}/.Options[CityDistance];
  119.         pos = {CityData[city1,CityPosition],
  120.             CityData[city2,CityPosition]};
  121.         N[Apply[meth,pos]]/;VectorQ[Flatten[pos]]
  122.     ]
  123.  
  124. (* City Information *)
  125.  
  126. CityPosition["Abu Dhabi"] = {{24, 28}, {54, 25}}
  127.  
  128. CityPosition["Addis Ababa"] = {{9, 3}, {38, 42}}
  129.  
  130. CityPosition["Aden"] = {{12, 46}, {45, 1}}
  131.  
  132. CityPosition["Algiers"] = {{36, 50}, {3, 0}}
  133.  
  134. CityPosition["Amman"] = {{31, 57}, {35, 56}}
  135.  
  136. CityPosition["Amsterdam"] = {{52, 21}, {4, 54}}
  137.  
  138. CityPosition["Anchorage"] = {{61, 13}, {-149, -53}}
  139.  
  140. CityPosition["Ankara"] = {{39, 55}, {32, 50}}
  141.  
  142. CityPosition["Asuncion"] = {{-25, -16}, {-57, -40}}
  143.  
  144. CityPosition["Athens"] = {{38, 0}, {23, 44}}
  145.  
  146. CityPosition["Atlanta"] = {{33, 45}, {-84, -23}}
  147.  
  148. CityPosition["Baghdad"] = {{33, 20}, {44, 26}}
  149.  
  150. CityPosition["Bangkok"] = {{13, 44}, {100, 30}}
  151.  
  152. CityPosition["Beijing"] = {{39, 55}, {116, 25}}
  153.  
  154. CityPosition["Beirut"] = {{33, 52}, {35, 30}}
  155.  
  156. CityPosition["Belgrade"] = {{44, 50}, {20, 30}}
  157.  
  158. CityPosition["Beograd"] = {{44, 50}, {20, 30}}
  159.  
  160. CityPosition["Berlin"] = {{52, 31}, {13, 24}}
  161.  
  162. CityPosition["Bern"] = {{46, 57}, {7, 30}}
  163.  
  164. CityPosition["Bogota"] = {{4, 36}, {-74, -5}}
  165.  
  166. CityPosition["Bombay"] = {{18, 56}, {72, 51}}
  167.  
  168. CityPosition["Bonn"] = {{50, 44}, {7, 6}}
  169.  
  170. CityPosition["Boston"] = {{42, 20}, {-71, -5}}
  171.  
  172. CityPosition["Brasilia"] = {{-15, -47}, {-47, -55}}
  173.  
  174. CityPosition["Brussels"] = {{50, 50}, {4, 21}}
  175.  
  176. CityPosition["Budapest"] = {{47, 30}, {19, 5}}
  177.  
  178. CityPosition["Buenos Aires"] = {{-34, -37}, {-58, -24}}
  179.  
  180. CityPosition["Cairo"] = {{30, 3}, {31, 15}}
  181.  
  182. CityPosition["Calcutta"] = {{22, 35}, {88, 21}}
  183.  
  184. CityPosition["Cape Town"] = {{-33, -56}, {18, 22}}
  185.  
  186. CityPosition["Caracas"] = {{10, 30}, {-66, -56}}
  187.  
  188. CityPosition["Cardiff"] = {{51, 30}, {-3, -13}}
  189.  
  190. CityPosition["Cayenne"] = {{4, 55}, {-52, -18}}
  191.  
  192. CityPosition["Chicago"] = {{41, 50}, {-87, -45}}
  193.  
  194. CityPosition["Mexico City"] = {{19, 24}, {-99, -9}}
  195.  
  196. CityPosition["Copenhagen"] = {{55, 43}, {12, 34}}
  197.  
  198. CityPosition["Cupertino"] = {{37, 21}, {-121, -57}}
  199.  
  200. CityPosition["Dacca"] = {{23, 42}, {90, 22}}
  201.  
  202. CityPosition["Dallas"] = {{32, 47}, {-96, -49}}
  203.  
  204. CityPosition["Damascus"] = {{33, 30}, {36, 15}}
  205.  
  206. CityPosition["Denver"] = {{39, 44}, {-104, -59}}
  207.  
  208. CityPosition["Djakarta"] = {{-6, -8}, {106, 45}}
  209.  
  210. CityPosition["Doha"] = {{25, 17}, {51, 32}}
  211.  
  212. CityPosition["Dublin"] = {{53, 20}, {-6, -15}}
  213.  
  214. CityPosition["Edinburgh"] = {{55, 57}, {-3, -13}}
  215.  
  216. CityPosition["Geneva"] = {{46, 10}, {6, 9}}
  217.  
  218. CityPosition["Georgetown"] = {{6, 46}, {-58, -10}}
  219.  
  220. CityPosition["Godthab"] = {{64, 15}, {-51, -40}}
  221.  
  222. CityPosition["Havana"] = {{22, 8}, {-82, -22}}
  223.  
  224. CityPosition["Helsinki"] = {{60, 10}, {24, 58}}
  225.  
  226. CityPosition["Hong Kong"] = {{22, 15}, {114, 10}}
  227.  
  228. CityPosition["Honolulu"] = {{21, 19}, {-157, -52}}
  229.  
  230. CityPosition["Istanbul"] = {{41, 2}, {28, 59}}
  231.  
  232. CityPosition["Jerusalem"] = {{31, 47}, {35, 14}}
  233.  
  234. CityPosition["Kabul"] = {{34, 30}, {69, 12}}
  235.  
  236. CityPosition["Karachi"] = {{24, 51}, {67, 2}}
  237.  
  238. CityPosition["Khartoum"] = {{15, 36}, {32, 32}}
  239.  
  240. CityPosition["Kuwait"] = {{29, 20}, {48, 0}}
  241.  
  242. CityPosition["Lagos"] = {{6, 27}, {3, 23}}
  243.  
  244. CityPosition["La Habana"] = {{22, 8}, {-82, -22}}
  245.  
  246. CityPosition["La Paz"] = {{-16, -30}, {-68, -9}}
  247.  
  248. CityPosition["Leningrad"] = {{59, 55}, {30, 15}}
  249.  
  250. CityPosition["Lima"] = {{-12, -3}, {-77, -3}}
  251.  
  252. CityPosition["Lisboa"] = {{38, 44}, {-9, -8}}
  253.  
  254. CityPosition["Lisbon"] = {{38, 44}, {-9, -8}}
  255.  
  256. CityPosition["London"] = {{51, 30}, {0, -10}}
  257.  
  258. CityPosition["Los Angeles"] = {{34, 4}, {-118, -15}}
  259.  
  260. CityPosition["Madrid"] = {{40, 25}, {-3, -43}}
  261.  
  262. CityPosition["Manama"] = {{26, 12}, {50, 35}}
  263.  
  264. CityPosition["Manila"] = {{14, 36}, {120, 59}}
  265.  
  266. CityPosition["Mecca"] = {{21, 27}, {39, 49}}
  267.  
  268. CityPosition["Mexico City"] = {{19, 24}, {-99, -9}}
  269.  
  270. CityPosition["Miami"] = {{25, 46}, {-80, -12}}
  271.  
  272. CityPosition["Minneapolis"] = {{44, 59}, {-93, -13}}
  273.  
  274. CityPosition["Mogadisho"] = {{2, 2}, {45, 21}}
  275.  
  276. CityPosition["Montevideo"] = {{-34, -55}, {-56, -10}}
  277.  
  278. CityPosition["Montreal"] = {{45, 30}, {-73, -36}}
  279.  
  280. CityPosition["Moscow"] = {{55, 45}, {37, 35}}
  281.  
  282. CityPosition["Muscat"] = {{23, 29}, {58, 33}}
  283.  
  284. CityPosition["Nairobi"] = {{-1, -17}, {36, 50}}
  285.  
  286. CityPosition["New Delhi"] = {{28, 37}, {77, 13}}
  287.  
  288. CityPosition["New York"] = {{40, 43}, {-74, -1}}
  289.  
  290. CityPosition["Nouakchott"] = {{18, 9}, {-15, -58}}
  291.  
  292. CityPosition["Osaka"] = {{34, 40}, {135, 30}}
  293.  
  294. CityPosition["Oslo"] = {{59, 56}, {10, 45}}
  295.  
  296. CityPosition["Ottawa"] = {{45, 25}, {-75, -42}}
  297.  
  298. CityPosition["Paramaribo"] = {{5, 52}, {-55, -10}}
  299.  
  300. CityPosition["Paris"] = {{48, 52}, {2, 20}}
  301.  
  302. CityPosition["Peking"] = {{39, 55}, {116, 25}}
  303.  
  304. CityPosition["Perth"] = {{-31, -56}, {115, 50}}
  305.  
  306. CityPosition["Philadelphia"] = {{39, 37}, {-75, -7}}
  307.  
  308. CityPosition["Portland"] = {{45, 33}, {-122, -36}}
  309.  
  310. CityPosition["Prague"] = {{50, 5}, {14, 26}}
  311.  
  312. CityPosition["Quito"] = {{0, -14}, {-78, -30}}
  313.  
  314. CityPosition["Rabat"] = {{34, 2}, {-6, -51}}
  315.  
  316. CityPosition["Reykjavik"] = {{64, 9}, {-21, -57}}
  317.  
  318. CityPosition["Rio de Janeiro"] = {{-22, -53}, {-43, -17}}
  319.  
  320. CityPosition["Riyadh"] = {{24, 39}, {46, 43}}
  321.  
  322. CityPosition["Rome"] = {{41, 53}, {12, 30}}
  323.  
  324. CityPosition["Saint Louis"] = {{38, 38}, {-90, -11}}
  325.  
  326. CityPosition["Salt Lake City"] = {{40, 46}, {-111, -53}}
  327.  
  328. CityPosition["San Diego"] = {{32, 43}, {-117, -9}}
  329.  
  330. CityPosition["San Francisco"] = {{37, 48}, {-122, -24}}
  331.  
  332. CityPosition["San Jose"] = {{9, 59}, {-84, -4}}
  333.  
  334. CityPosition["Seoul"] = {{37, 33}, {126, 58}}
  335.  
  336. CityPosition["Shanghai"] = {{31, 14}, {121, 30}}
  337.  
  338. CityPosition["Singapore"] = {{1, 17}, {103, 51}}
  339.  
  340. CityPosition["Sao Paulo"] = {{-23, -33}, {-46, -39}}
  341.  
  342. CityPosition["Stockholm"] = {{59, 20}, {18, 3}}
  343.  
  344. CityPosition["Sydney"] = {{-33, -52}, {151, 13}}
  345.  
  346. CityPosition["Tehran"] = {{35, 40}, {51, 26}}
  347.  
  348. CityPosition["Tianjin"] = {{39, 8}, {117, 12}}
  349.  
  350. CityPosition["Tokyo"] = {{35, 42}, {139, 46}}
  351.  
  352. CityPosition["Tripoli"] = {{32, 53}, {13, 12}}
  353.  
  354. CityPosition["Tunis"] = {{36, 48}, {10, 11}}
  355.  
  356. CityPosition["Vancouver"] = {{49, 16}, {-123, -7}}
  357.  
  358. CityPosition["Vienna"] = {{48, 13}, {16, 22}}
  359.  
  360. CityPosition["Warsaw"] = {{52, 15}, {21, 0}}
  361.  
  362. CityPosition["Washington"] = {{38, 53}, {-77, 0}}
  363.  
  364. CityPosition["Wellington"] = {{-41, -17}, {174, 47}}
  365.  
  366. CityPosition["Zurich"] = {{47, 23}, {8, 33}}
  367.  
  368. End[]
  369.  
  370. EndPackage[]
  371.