Hex Artifact Content

Artifact bf1fa4609971b5afea06ea3d30d15f3ac8d16ba4:

Wiki page [Coords] by densch 2016-10-18 01:03:08.
0000: 44 20 32 30 31 36 2d 31 30 2d 31 38 54 30 31 3a  D 2016-10-18T01:
0010: 30 33 3a 30 38 2e 39 37 37 0a 4c 20 43 6f 6f 72  03:08.977.L Coor
0020: 64 73 0a 50 20 62 36 64 36 30 36 36 34 37 36 37  ds.P b6d60664767
0030: 65 39 62 37 39 31 36 31 30 30 62 31 62 32 63 32  e9b7916100b1b2c2
0040: 62 30 32 65 32 32 37 33 39 31 33 34 62 0a 55 20  b02e22739134b.U 
0050: 64 65 6e 73 63 68 0a 57 20 31 36 35 38 0a 3c 68  densch.W 1658.<h
0060: 32 3e 5a 49 50 32 43 6f 6f 72 64 73 3c 2f 68 32  2>ZIP2Coords</h2
0070: 3e 0d 0a 0d 0a 54 68 69 73 20 69 73 20 61 20 77  >....This is a w
0080: 65 62 73 65 72 76 69 63 65 20 74 68 61 74 20 61  ebservice that a
0090: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 6d 61 70 20  llows us to map 
00a0: 55 53 20 5a 49 50 20 63 6f 64 65 73 20 74 6f 20  US ZIP codes to 
00b0: 61 20 70 61 69 72 20 6f 66 0d 0a 63 6f 6f 72 64  a pair of..coord
00c0: 69 6e 61 74 65 73 2e 0d 0a 0d 0a 55 73 61 67 65  inates.....Usage
00d0: 20 69 73 20 76 65 72 79 20 73 69 6d 70 6c 65 2c   is very simple,
00e0: 20 6a 75 73 74 20 71 75 65 72 79 20 74 68 65 20   just query the 
00f0: 73 65 72 76 69 63 65 20 77 69 74 68 20 61 20 5a  service with a Z
0100: 49 50 20 63 6f 64 65 20 61 73 20 61 20 70 61 72  IP code as a par
0110: 61 6d 65 74 65 72 3a 0d 0a 3c 74 74 3e 68 74 74  ameter:..<tt>htt
0120: 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 2f 7a 69  p://localhost/zi
0130: 70 32 63 6f 6f 72 64 73 2f 3f 7a 69 70 3d 39 30  p2coords/?zip=90
0140: 32 31 30 3c 2f 74 74 3e 0d 0a 0d 0a 41 6e 64 20  210</tt>....And 
0150: 72 65 63 65 69 76 65 20 74 68 65 20 63 6f 6f 72  receive the coor
0160: 64 69 6e 61 74 65 73 20 69 6e 20 4a 53 4f 4e 20  dinates in JSON 
0170: 66 6f 72 6d 61 74 3a 0d 0a 0d 0a 3c 70 72 65 3e  format:....<pre>
0180: 0d 0a 20 20 20 20 7b 22 6c 61 74 69 74 75 64 65  ..    {"latitude
0190: 22 3a 22 33 34 2e 30 39 30 31 30 30 30 22 2c 22  ":"34.0901000","
01a0: 6c 6f 6e 67 69 74 75 64 65 22 3a 22 2d 31 31 38  longitude":"-118
01b0: 2e 34 30 36 35 30 30 30 22 7d 0d 0a 3c 2f 70 72  .4065000"}..</pr
01c0: 65 3e 0d 0a 0d 0a 44 61 74 61 20 63 6f 6d 65 73  e>....Data comes
01d0: 20 66 72 6f 6d 20 3c 61 20 68 72 65 66 3d 22 68   from <a href="h
01e0: 74 74 70 3a 2f 2f 64 6f 77 6e 6c 6f 61 64 2e 67  ttp://download.g
01f0: 65 6f 6e 61 6d 65 73 2e 6f 72 67 2f 65 78 70 6f  eonames.org/expo
0200: 72 74 2f 7a 69 70 2f 22 3e 47 65 6f 4e 61 6d 65  rt/zip/">GeoName
0210: 73 20 50 6f 73 74 61 6c 20 43 6f 64 65 73 3c 2f  s Postal Codes</
0220: 61 3e 2e 20 49 74 20 69 73 20 64 69 73 74 72 69  a>. It is distri
0230: 62 75 74 65 64 20 61 73 20 61 20 70 6c 61 69 6e  buted as a plain
0240: 20 74 65 78 74 20 66 69 6c 65 2e 20 54 6f 20 62   text file. To b
0250: 75 69 6c 64 20 74 68 65 20 4d 79 53 51 4c 20 64  uild the MySQL d
0260: 61 74 61 62 61 73 65 20 72 75 6e 20 74 68 65 20  atabase run the 
0270: 3c 74 74 3e 64 61 74 61 62 61 73 65 2f 67 65 6f  <tt>database/geo
0280: 6e 61 6d 65 73 2e 73 68 3c 2f 74 74 3e 20 73 68  names.sh</tt> sh
0290: 65 6c 6c 20 73 63 72 69 70 74 2e 20 49 74 27 6c  ell script. It'l
02a0: 6c 20 64 6f 77 6e 6c 6f 61 64 20 74 68 65 20 72  l download the r
02b0: 65 71 75 69 72 65 64 20 64 61 74 61 2c 20 73 65  equired data, se
02c0: 74 75 70 20 74 68 65 20 64 61 74 61 62 61 73 65  tup the database
02d0: 20 73 74 72 75 63 74 75 72 65 20 61 6e 64 20 69   structure and i
02e0: 6d 70 6f 72 74 20 74 68 65 20 64 61 74 61 20 69  mport the data i
02f0: 6e 74 6f 20 69 74 20 75 73 69 6e 67 20 4d 79 53  nto it using MyS
0300: 51 4c 27 73 20 6e 61 74 69 76 65 20 6c 6f 61 64  QL's native load
0310: 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 0d   functionality..
0320: 0a 0d 0a 52 65 71 75 69 72 65 73 20 50 48 50 20  ...Requires PHP 
0330: 77 69 74 68 20 50 44 4f 20 61 6e 64 20 4a 53 4f  with PDO and JSO
0340: 4e 20 73 75 70 70 6f 72 74 2e 0d 0a 0d 0a 0d 0a  N support.......
0350: 3c 68 32 3e 4e 65 61 72 65 73 74 20 4c 6f 63 61  <h2>Nearest Loca
0360: 74 69 6f 6e 3c 2f 68 32 3e 0d 0a 0d 0a 0d 0a 41  tion</h2>......A
0370: 20 77 65 62 73 65 72 76 69 63 65 20 74 6f 20 66   webservice to f
0380: 69 6e 64 20 74 68 65 20 6e 65 61 72 65 73 74 20  ind the nearest 
0390: 6c 6f 63 61 74 69 6f 6e 20 28 66 6f 72 20 65 78  location (for ex
03a0: 61 6d 70 6c 65 20 74 68 65 20 6e 65 61 72 65 73  ample the neares
03b0: 74 20 6f 66 66 69 63 65 2c 0d 0a 73 74 6f 72 65  t office,..store
03c0: 2c 20 65 74 63 20 6f 66 20 61 20 62 75 73 69 6e  , etc of a busin
03d0: 65 73 73 29 20 74 6f 20 74 68 65 20 67 69 76 65  ess) to the give
03e0: 6e 20 6c 6f 63 61 74 69 6f 6e 20 28 74 79 70 69  n location (typi
03f0: 63 61 6c 6c 79 20 74 68 65 20 75 73 65 72 27 73  cally the user's
0400: 29 2c 20 65 69 74 68 65 72 20 62 79 20 63 6f 6f  ), either by coo
0410: 72 64 69 6e 61 74 65 73 20 6f 72 20 5a 49 50 20  rdinates or ZIP 
0420: 63 6f 64 65 2c 20 69 6e 20 74 68 65 20 6c 61 74  code, in the lat
0430: 74 65 72 20 63 61 73 65 20 75 73 69 6e 67 20 74  ter case using t
0440: 68 65 20 5a 49 50 32 43 6f 6f 72 64 73 20 77 65  he ZIP2Coords we
0450: 62 73 65 72 76 69 63 65 2e 0d 0a 0d 0a 4c 6f 63  bservice.....Loc
0460: 61 74 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65  ations are store
0470: 64 20 69 6e 20 74 68 65 20 66 69 6c 65 20 3c 74  d in the file <t
0480: 74 3e 6c 6f 63 61 74 69 6f 6e 73 2e 6a 73 6f 6e  t>locations.json
0490: 3c 2f 74 74 3e 20 69 6e 20 4a 53 4f 4e 20 66 6f  </tt> in JSON fo
04a0: 72 6d 61 74 2e 0d 0a 0d 0a 54 6f 20 75 73 65 20  rmat.....To use 
04b0: 6a 75 73 74 20 71 75 65 72 79 20 74 68 65 20 73  just query the s
04c0: 65 72 76 69 63 65 20 77 69 74 68 20 65 69 74 68  ervice with eith
04d0: 65 72 20 61 20 5a 49 50 20 63 6f 64 65 20 6f 72  er a ZIP code or
04e0: 20 61 20 70 61 69 72 20 6f 66 20 63 6f 6f 72 64   a pair of coord
04f0: 69 6e 61 74 65 73 3a 20 3c 74 74 3e 68 74 74 70  inates: <tt>http
0500: 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 2f 6e 65 61  ://localhost/nea
0510: 72 65 73 74 2f 3f 7a 69 70 3d 39 30 32 31 30 3c  rest/?zip=90210<
0520: 2f 74 74 3e 20 6f 72 20 3c 74 74 3e 68 74 74 70  /tt> or <tt>http
0530: 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 2f 6e 65 61  ://localhost/nea
0540: 72 65 73 74 2f 3f 6c 61 74 3d 34 30 26 6c 6e 67  rest/?lat=40&lng
0550: 3d 2d 37 33 3c 2f 74 74 3e 2e 0d 0a 0d 0a 54 6f  =-73</tt>.....To
0560: 20 67 65 74 20 61 20 72 65 73 70 6f 6e 73 65 20   get a response 
0570: 73 75 63 68 20 61 73 3a 0d 0a 0d 0a 3c 70 72 65  such as:....<pre
0580: 3e 0d 0a 7b 0d 0a 20 20 20 20 22 6c 6f 63 61 74  >..{..    "locat
0590: 69 6f 6e 22 3a 20 22 4f 72 6c 61 6e 64 6f 22 2c  ion": "Orlando",
05a0: 0d 0a 20 20 20 20 22 55 52 4c 22 3a 20 22 68 74  ..    "URL": "ht
05b0: 74 70 3a 5c 2f 5c 2f 6c 6f 63 61 6c 68 6f 73 74  tp:\/\/localhost
05c0: 5c 2f 4f 72 6c 61 6e 64 6f 5f 46 4c 2e 68 74 6d  \/Orlando_FL.htm
05d0: 6c 22 2c 0d 0a 20 20 20 20 22 64 69 73 74 61 6e  l",..    "distan
05e0: 63 65 22 3a 20 31 39 38 2e 34 36 33 30 33 34 30  ce": 198.4630340
05f0: 38 36 34 36 2c 0d 0a 20 20 20 20 22 6c 61 74 69  8646,..    "lati
0600: 74 75 64 65 22 3a 20 32 38 2e 36 36 31 36 35 33  tude": 28.661653
0610: 2c 0d 0a 20 20 20 20 22 6c 6f 6e 67 69 74 75 64  ,..    "longitud
0620: 65 22 3a 20 2d 38 31 2e 33 35 34 35 35 38 0d 0a  e": -81.354558..
0630: 7d 0d 0a 3c 2f 70 72 65 3e 0d 0a 0d 0a 52 65 71  }..</pre>....Req
0640: 75 69 72 65 73 20 50 48 50 20 77 69 74 68 20 63  uires PHP with c
0650: 55 52 4c 20 73 75 70 70 6f 72 74 20 61 6e 64 20  URL support and 
0660: 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f  <a href="http://
0670: 77 77 77 2e 6d 65 6d 63 61 63 68 65 64 2e 6f 72  www.memcached.or
0680: 67 2f 22 3e 6d 65 6d 63 61 63 68 65 64 3c 2f 61  g/">memcached</a
0690: 3e 2e 20 20 54 6f 20 72 75 6e 20 74 68 65 20 74  >.  To run the t
06a0: 65 73 74 73 20 79 6f 75 20 6e 65 65 64 20 3c 61  ests you need <a
06b0: 20 68 72 65 66 3d 22 68 74 74 70 73 3a 2f 2f 70   href="https://p
06c0: 68 70 75 6e 69 74 2e 64 65 2f 22 3e 50 48 50 55  hpunit.de/">PHPU
06d0: 6e 69 74 3c 2f 61 3e 2e 0a 5a 20 37 61 62 64 33  nit</a>..Z 7abd3
06e0: 62 36 34 64 61 64 33 66 37 65 36 36 35 34 62 35  b64dad3f7e6654b5
06f0: 62 32 35 35 64 39 65 30 64 36 30 0a              b255d9e0d60.