{"text_format":"1","workbook":"xlsx","n_sheets":6,"sheets":["Elsewhere","ZipData","Sheet1","UndoSheet","Notes","HelpContent"],"not_rendered":{"charts":0,"images":0,"macros":1,"external_links":0,"defined_names":0,"comments":0,"pivot_tables":0},"unopened":[],"bounds":{"document_bytes":16777216,"sheet_cells":100000,"rows_first":2000,"rows_last":500,"rows_between":2000,"halvings":0,"cell_chars":16384,"cell_head_chars":4096},"cells_cut":0,"cells_raw":0,"read":"whole","date_system":"1900"}

{"sheet":"Elsewhere","index":0,"n_rows":15,"n_cols":2,"rows_kept":15,"cut":false,"hidden":true,"merged":[]}
["gb","us"]
["open","open"]
["https://streetmap.co.uk/postcode/#","http://www.melissadata.com/lookups/GeoCoder.asp?InData=#&submit=Search"]
["#","#"]
["find","find"]
["_SM_locationLX =",">Latitude"]
["Eastings","find"]
["find","class='padd'>"]
["_SM_locationLY =","latitude"]
["Northings","find"]
["end",">Longitude"]
[null,"find"]
[null,"class='padd'>"]
[null,"longitude"]
[null,"end"]

{"sheet":"ZipData","index":1,"n_rows":11,"n_cols":4,"rows_kept":11,"cut":false,"hidden":true,"merged":[]}
["Program","Postcode","Latitude","Longitude"]
["open","SW1A1AA",51.500957489013672,-0.14156852662563324]
["https://streetmap.co.uk/postcode/#"]
["#"]
["find"]
["_SM_locationLX ="]
["Eastings"]
["find"]
["_SM_locationLY ="]
["Northings"]
["end"]

{"sheet":"Sheet1","index":2,"n_rows":4,"n_cols":1,"rows_kept":4,"cut":false,"hidden":false,"merged":[]}
[]
[]
[]
["This sheet should not be visible from the addin."]

{"sheet":"UndoSheet","index":3,"n_rows":0,"n_cols":0,"rows_kept":0,"cut":false,"hidden":true,"merged":[]}

{"sheet":"Notes","index":4,"n_rows":89,"n_cols":2,"rows_kept":89,"cut":false,"hidden":true,"merged":[]}
["2013-08-11","start changing from int to long in gpx.   CompGPX18.xls"]
[null,"doevents to stop freezing in importgpx"]
[]
["2013-08-13","Only output excel line no. and route name during KMLexport if  points needed "]
[]
["2013-08-19","Caching in latitude & longitude functions"]
[]
["2013-08-20","Modified ExportKML to scan array twice rather than creating string for line plotting"]
[]
["2013-08-21","Cosmetic changes to status reporting"]
[]
["2013-08-29","compGPX22.xls  triple split in compact    "]
["2013-09-02","stats"]
[null,"minimise stack load"]
[null,"Set all cells to general before writing array"]
[null,"allow cancel when asking tolerance."]
["2013-09-09","Allow zero tolerances - ot treated as cancel"]
[null,"Select cells after import and compact."]
[null,"Give cell addresses in overwrite warning"]
[null,"Make depth a calling parameter in processsegment not a global  - to show properly in PM. "]
["2013-10-01","Allow selection of destination"]
["2013-10-02","Revised progress indication"]
["2013-10-05","Catch bad cell spec in writeArraytoSheet"]
["2013-10-22","fix links routine added in case data moved from system to system "]
["2019-12-29","Started ribbon variant for Excel 2016 / OSX compatibility."]
["2019-01-01","Selective compilation for 2003 xls/xla and 2016 xlsm/xlam"]
["2019-01-01","Revised fix links"]
["2019-01-01","Whitaker data 2019 added"]
["2019-01-01","Revised strategy for fixin links.  Needs reload?"]
["2019-01-01","Revised getfilename routines to avoid contentious 'filter' parameter for mac."]
["2019-01-28","Added GrantAccessToMultipleFiles in GetFileName for mac."]
[]
["2020-04-01","Continued MAC development with Ian's assistance .  Rewrite GetFileName in module misc"]
["2020-04-27","Fixed wrong delibrate error in compact"]
[null,"Check file extension in getfilename read"]
[null,"Clear splash window if error"]
[null,"Return correct filename on MAC if user changes file extension during write."]
["2020-04-28","Removed deliberate errors.  Ianmac06.  Generated test add-in."]
["2020-04-30","Updated date on license"]
["2020-05-06","New sub openfile - Trying 'finder' for mac opening file."]
[null,"Added test code in 'about'"]
["16:00:00","Modified 'about' to include whether add-in or not.  Ianmac09B"]
["2020-05-07","Sent to Ian."]
["2020-05-11","Allow user to specify command to open gpx/kml file.  IanMac09D"]
["2020-05-11","Remove diagnostic stuiff in openfile and about."]
["2020-05-12","Removed redundant and abandoned GetFilname routines."]
["2020-05-12","Revised line folding of license text  "]
["2020-05-14","Improved error handling in GetLL inr zip extraction.   IanMac11.xlsm"]
["2020-05-18","Included mac routine to read url.  Ianmac12"]
["2020-05-22","Intermediate version13 allowed right click menu.  That caused problems with the addin.  Removed!"]
["2020-05-22","All instances or err changed to err.number"]
["2020-05-22","Zip code changed - tidied up zipdataread and changed.   Hope to now only invite  zip write-back at end if necessary."]
["2020-05-22","help  and zip  sheets hidden   Ianmac14"]
["2020-05-24","These comments typo checked"]
["2020-05-28","diagnostic stop in import & export GPX & compact.  InanMac15"]
["2020-06-01","Allow deletemenu to run if not mac  (reverses 22/5/20).  This will remove amy spurious right click menus.  Ianmac15 still."]
["2020-06-02","Don't compile deletemenu stuff if mac."]
["2020-06-03","Exclude bulk of createmenu with #if UseRibbon.    Suspicion it causes problems on mac??  IanMac16"]
["2020-06-10","Change strategy with undo sheet.  Instead of delete and recreate, leave it but clear contents.   Only save undo data if sheet exists."]
["2020-06-10","Commented out splashscreen progress - hardly necessary now with faster systems."]
["2020-06-10","Added progress tags to importgpx and writearraytosheet to report in postmortem."]
["2020-06-11","In writearrayto sheet changed clearcontents to thisworkbook.cells …"]
["2020-06-11","Checked all err.raise to be 50000 not 5000 to match expectations in postmortem routine.   IanMac21"]
["2020-06-14","reply in openfile should be variant.  Ianmac24"]
["2020-06-14","Allow command change in openfile"]
["2020-06-15","close #2 before opening postmortem file.  Ianmac24"]
["2020-06-16","New function Permissionsok.  Called in GetFilename (twice) and Openfile.  Ianmac24"]
["2020-06-17","Exclude excel<2016 from permission checks.   Ianmac25"]
["2020-06-18","Remoived diagnostics from Permissionsok.  Removed open for append in Getfilename for writing."]
["2020-07-04","New getfilename function.  Added  Applescriptmissing and grantpermissions functions.   Ianmac26"]
["2020-07-06","Removed spurious reference to klm - changed to kml  Ianmac27"]
["2020-07-07","Removed diagnostics from permissionsok"]
["2020-07-07","Fiddle to allow import of Memory Map gpx files - these have no <?xml   …> at the start.  We now Stack a dummy ?xml at start of parse."]
["2020-07-17","Added acknowledgements for Ian Baines and Phil Newby.  Ianmac28"]
["2020-08-24","Added location to OSGB > About.  Ianmac32"]
["2020-09-28","GetFileName #if MAC2016: Expanded mismatch suffix message to include filename; Check for blank name; Diagnostics if blank name or error."]
["2020-09-28","Checked all 'open' statements; closed file if error detected. "]
["2020-09-30","Permissionok - only if version>=16"]
["2020-10-01","In GetFileName treat mac pre 2016 as windows."]
["2020-10-01","Added suffix check to both sections of GetFileName (but will only happen with mac)"]
["2020-10-10","Abandon mac<16 support.  Changes to permissionsok, applescriptmissing and getfilename.. "]
["2020-10-12","Bug in fixlinks - IsError a more reliable indication of cell needing edit rather than mismatch between formula and corrected value."]
["2020-10-20","Fixlinks again:  Only edit cell if a name error.   IanMac37"]
["2020-10-23","Mac 16.16 fails to open Basecamp etc - edit OpenFile to try new applescript function osgbopen instead"]
["2020-10-23","Fixlinks again:  Edit cell if holds osgb function OR if has name error.   IanMAc38"]
["2020-10-29","diagnostics in openfile"]
["2020-11-10","Openfile again - allow either strategy for mac - shell or applescript.  Ianmac40"]
["2020-11-13","Removed shell option from Openfile.  Ianmac41"]
["2020-11-28","Comment out diagnostics following mac open for writing.  Ianmac42."]

{"sheet":"HelpContent","index":5,"n_rows":455,"n_cols":3,"rows_kept":455,"cut":false,"hidden":false,"merged":[]}
[1,"<---   License agreed","22/5/2020"]
["Agreed License"]
[]
[null,"These OSGB cartographic routines are the work of Phil Brady who reserves all rights."]
[]
[null,"They are licensed solely for private non profit making"]
[null,"use and on the understanding that there will be no "]
[null,"reverse engineering or other attempts to extract the code,  "]
[null,"and that acknowledgement will be given in any published "]
[null,"work which has benefitedfrom using the product."]
[]
[null,"The author cannot be held responsible for the way the "]
[null,"product is used or interpreted nor for the accuracy of results."]
[]
[null,"Copyright 1999 ~ 2024"]
[]
[null,"The copyrights and trademarks of Ordnance Survey, Microsoft,"]
[null," Garmin and Google are acknowledged."]
[]
[null,"See OSGB > about for url for code and author's contact details."]
["Acknowledgements"]
[null,"I am greatly indebted to:"]
[]
[null,"Ian Baines for his unstinting support and help in porting OSGB to run on MAC systems."]
[]
[null,"Murray Fullerton for his help in changing from Molodensky to Helmert transformations"]
[]
[null,"Ordnance Surver for their published code"]
[]
[null,"Phil Newby for hosting the OSGB pages."]
["What are these OSGB routines?"]
[null,"These OSGB routines can be used to: "]
[]
[null,"*  Import gpx files generated by GPS devices or software."]
[null,"*  Compact routes and tracks."]
[null,"*  Export data to gpx files."]
[null,"*  Export data to kml files for displaying with Google Earth."]
[null,"*  Convert zipcode/postcodes to latitude/longitude"]
[]
[null,"*  Convert between:"]
[null,"    Ordnance survey references"]
[null,"    Latitude and Longitude"]
[null,"    Eastings and Northings"]
[]
[null,"*  Compute variations between grid, true and magnetic north"]
[]
[null,"*  Compute bearings and distances on the OS grid."]
[]
["Installing and accessing OSGB"]
[null,"The routines come as a workbook with worked examples and a separate file called an 'add-in'."]
[]
[null,"The add-in provides the functions and needs to be installed.  The simplest way is to :"]
[]
[null,"1.  download both OSGB.xlam and Examples.xlsm"]
[null,"2.  Load Excel and change permissions to allow macros. "]
[null,"3.  Open the examples workbook, allow macros and allow it to install the add-in."]
[]
[null,"This will install osgb.xla to the appropriate folder:"]
[]
[null,"The routines should available immediately and also available each time you subsequently open a workbook."]
[null,"If you subsequently wish to re-install or remove the addin, then use the pull down menu 'installation' in the examples workbook."]
[]
["Moving workbooks"]
[null,"If you move a workbook from one system to another you may end up with broken links"]
[null,"whereby functions in the cells refer to the original system.  The functions in the local add-in  "]
[null,"are thus inaccessible and and give a #NAME? error."]
[]
[null,"You can rectify these with OSGB > Fix Links"]
[]
["Measurement Systems"]
[null,"There are many measurement systems across the world, each based on their own assumptions "]
[null,"of the shape and size of the earth, the way that is transformed to a flat surface and the local origin for measurement.  "]
[]
[null,"It is important to specify the system and origin or datum as otherwise errors of up to a kilometre can be introduced."]
[]
[null,"The three systems catered for with this software are WGS84, OS 1936 and OS references."]
[]
["    WGS84 & OS 1936"]
[null,"Both these are longitude/latitude measurements, but based on different mapping models."]
[]
[null,"WGS84"]
[]
[null,"WGS84 is a relatively new mapping standard covering the whole globe which is a product of the satellite era."]
[null,"All GPS systems will be based on this, but will have conversions to local systems."]
[]
[null,"OS1936"]
[]
[null,"This is the latitude/longitude system introduced by Ordnance Survey for mapping Great Britain."]
[null,"It is based on a datum of 49 degrees north, 2 degrees west near the Channel Isles."]
[]
[null,"OS maps show latitude and longitude 'ticks' in the margin relative to datum,"]
[null,"but OS references are used in preference for locating points"]
["    The OS grid"]
[]
[null,"Points in Britain are universally referred to relative to the Ordnance Survey grid system."]
[]
[null,"This has a 'false origin' 400km west and 100km north of the datum  from"]
[null,"which eastings and northings and the grid is defined."]
[]
[null,"Points are defined by "]
[]
[null,"  Two letters showing the 100km square then"]
[null,"  2 digits to give 10 km accuracy,  or"]
[null,"  4 to give 1km accuracy  or"]
[null,"  6 to give 100m accuracy  or"]
[null,"  8 to give 10m accuracy or"]
[null," 10 to give 1 metre accuracy."]
[]
[null,"The first half of the digits give distances east from the 100km square corner (Eastings)"]
[null,"The final half give distances north from the 100km square corner (Northings)"]
[]
[null,"See the OS web site for a fuller explanation."]
["Conversion"]
[null,"There are routines to convert between the following coordinate systems:"]
[]
[null,"   OS references"]
[]
[null,"   Eastings and northings"]
[]
[null,"   Latitude and longitude (OS1936 datum)."]
[]
[null,"   Latitude and longitude (WGS84 datum)"]
[]
["      Latitude / longitude to Osreference"]
[]
[null,"=osref(datum, latitude,longitude)"]
[]
[null,"where datum is that of the latitude/longitude values."]
[]
[null,"Use a value 36 for OS1936, 84 for WGS84"]
[]
[null,"Latitude/longitude in decimal degrees - note that longitude is negative for west"]
["      Osreference to latitude /longitude"]
[]
[null,"=latitude(datum,osreference)"]
[null,"=longitude(datum,osreference)"]
[]
[null,"where datum is that required for the of the latitude/longitude."]
[]
[null,"Use a value 36 for OS1936, 84 for WGS84"]
["      Eastings and Northings:"]
[null,"Eastings and northings are the distances in metres east and north respectively from the OS 'false origin'"]
[]
[null,"OS reference to eastings/northings"]
[null,"--------------------------------------------------"]
[]
[null,"=easting(osreference)"]
[null,"=northing(osreference)"]
[]
[]
[null,"Eastings/northings to OS reference"]
[null,"--------------------------------------------------"]
[]
[null,"=MetresToOSref(eastings,northings)"]
[]
[null,"Note:   Easting and northing are in metres from false origin."]
["      Change datum"]
[null,"Change datum from Ordnance Survey 1936 to WGS84"]
[]
[null,"      =newlatitude(84,latitude,longitude)"]
[null,"      =newlongitude(84,latitude,longitude)"]
[]
[null,"Change datum from WGS84  to Ordnance Survey 1936:"]
[]
[null,"      =newlatitude(36,latitude,longitude)"]
[null,"      =newlongitude(36,latitude,longitude)"]
[]
[null,"NB Longitude is negative for west"]
["Variations"]
[null,"There are three meanings for 'North'."]
[]
[null,"  True north points to the spin pole of the earth."]
[]
[null,"  Grid north is parallel to the north/south grid lines on the map."]
[null," "]
[null,"  Magnetic north is that indicated by a magnetic compass."]
[null,"      Unfortunately, this drifts from year to year."]
[]
[null,"The angles between these three 'norths' in Britain are called variation"]
[null,"but in USA they are called declination."]
["      Grid to True variation"]
[]
[null,"The variation of grid north from true varies across the OS grid"]
[null,"but is constant and stable at any one point."]
[]
[null,"=GridVar(OSHere)"]
[]
[null,"Gives bearing of grid north relative to true.  Eg -2 implies grid is west of true."]
[]
[null,"=TrueVar(OSHere)"]
[]
[null,"Gives bearing of true north relative to grid north at the given reference."]
["      Magnetic Variation"]
[]
[null,"This varies across the UK, it drifts from year to year, "]
[null,"and has been known to alter rapidly during solar storms"]
[null,"so we can only estimate it."]
[]
[null,"Estimates in this software are based on parameters published "]
[null,"in Whitakers almanac."]
[]
[null,"You may wish to supply Whitaker data yourself but if you omit it"]
[null,"then 2019 values will be assumed."]
[]
[null,"Please refer to the sheet on variations in the examples workbook for supplying your own parameters."]
[null,"You might wish to use these if 2019 is receding into history."]
[]
[]
[null,"=MagGrid(OSRef)"]
[]
[null,"gives an estimate of magnetic variation from grid north."]
[null,"ie -2 says magnetic is 2 degrees west of grid."]
[]
[]
[null,"=MagTrue(OSRef)"]
[]
[null,"gives an estimate of magnetic variation from true north."]
[null,"ie -2 says magnetic is 2 degrees west of true."]
["Range or Distance between points"]
[]
[null,"=hypotenuse(osref here, osref there)"]
[]
[null,"Gives the distance in meters between two OS references."]
[]
[]
[null,"=hypotenusekm(Osref here, Osref there)"]
[]
[null,"Gives the distance in kilometres."]
[]
[]
[null,"Note these are calculation based on the hypotenuse distance on the rectangular grid  -"]
[]
[null,"      This is equivalent to measuring from the map with a ruler."]
[]
[null,"      They do not compute great circle distances."]
[]
[null,"      They are ONLY suitable for modest distances."]
[]
[null,"      Rule of thumb: If you can walk the distance in a day then you are fine!"]
["Bearings and targets"]
[]
[null,"=bearing(OShere,OSthere,offset)"]
[]
[null,"    Computes the bearing of reference OSthere from OShere."]
[null,"    Result is degrees between 0 and 360"]
[]
[null,"=target(Oshere, range, bearing, offset)"]
[]
[null,"    Computes the OS reference of a point 'range' from 'Oshere' on a bearing."]
[]
[]
[]
[null,"    Offset is provided in both functions to allow for the north you wish to consider.  Use:"]
[]
[null,"        0                         for a grid bearing"]
[null,"       Truevar(OShere)     for true bearing"]
[null,"       MagGrid(OShere )   for a magnetic bearing"]
[]
[]
[]
[]
[]
["KML and GPX files"]
[]
[null,"GPX files hold waypoints, routes and tracks as used by GPS devices and contain XML format data."]
[]
[null,"They have a file extension \".gpx\" and are used by many mapping products."]
[]
[null,"KML files also hold data in XML format and are the natural files for interfacing with Google Earth."]
[]
[]
["     Import GPX files"]
[]
[null,"This routine strips data out of gpx files and places it in a worksheet."]
[]
[null,"Select ImportGPX from the OSGB pull down menu or from the 'right click' menu"]
[]
[null,"You will be asked to specify: "]
[null,"  -      the gpx input file "]
[null,"  -      whether conversion of latitude and longitude to OS reference is required."]
[null,"  -      the destination on the spreadsheet"]
[]
[null,"Rows of data will be written with:"]
[null,"    a single header row describing column contents followed by:"]
[null,"    rows with waypoints, routes, route points, tracks or track points."]
[]
[null,"The columns will be:"]
[null,"   GPXType - wpt, rte, rtept, trk or trkpt."]
[null,"   OS reference OR  latitude and longitude columns"]
[null,"   Parameters in the gpx schema http://www.topografix.com/GPX/1/1/"]
[null,"                    See GPX parameters and the schema for details."]
[null,"   Other implementation specific 'extension' parameters"]
[null,"   The Garmin/EasyGPX specific label_text data used as a description of the feature."]
[]
[null,"The files are expected to have a valid gpx format"]
[null,"Please submit any valid files which cannot be parsed to the author."]
[]
[null,"The routine supports undo (control-Z)."]
["     Export GPX file"]
[]
[null,"Select your data and click ExportGPX on the OSGB menu, or on the right click menu."]
[]
[null,"This expects the first row of the selection to be headers describing the data in the columns below."]
[null,"A .gpx file will be generated, and the option given of 'opening' it with whichever "]
[null,"mapping application is your default for .gpx files."]
[]
[null,"See GPX parameters for a list of supported headers "]
["     Compact GPX points"]
[null,"This routine will 'compact' GPX routes and tracks by eliminating points which are deemed to  "]
[null,"be redundant.  These points are those which are very close to the chord joining neighbouring "]
[null,"points or distant neighbours."]
[]
[null,"It expects the data to be selected and to be in 'imported GPX' format."]
[null,"It will accept either OSGB or latitude/longitude format, though results may vary slightly."]
[]
[null,"The sensitivity of the algorithm can be adjusted  by selecting the allowable tolerance; the bigger "]
[null,"the tolerance, the greater the yield of redundant points."]
[]
[null,"Any routes or tracks which fall entirely within the tolerance may be spurious and  "]
[null,"will be identified.  The option is given to include or remove these."]
[]
[null,"The algorithm is likely to eliminate only a few points with routes which have been hand"]
[null,"generated, but with automatically generated ones (eg track logs) even a zero tolerance "]
[null,"can give significant reductions."]
[]
[null,"For very long routes/tracks the algorithm may take several seconds.  Note the progress at bottom left. "]
[]
[null,"It is stressed that the computation methods have been written with walking routes in mind. "]
[null,"They are NOT recommended for shipping or aviation!"]
[]
[null,"To invoke the routine, select the GPX data then choose OSGB > Compact selected GPX points."]
[null,"The potential for compacting will be reported before requesting the destination for the data."]
[]
[null,"Control Z will restore the original data."]
[]
["     GPX parameters"]
[null,"Headers used in GPX import/export can appear in any order and are "]
[]
[null,"Mandatory"]
[null,"   GPXtype  - allowable values are wpt, rte, rtept, trk or trkpt"]
[]
[null,"Mandatory parameters for wpt, rtept, trkpt"]
[null,"   latitude and longitude OR a single Osref header."]
[]
[null,"Valid for all:"]
[null,"  name, cmt, desc, src, link, type"]
[]
[null,"Valid for rte, trk only"]
[null,"   number"]
[]
[null,"Valid for wpt, rtept, trkpt"]
[null,"  ele, time, magvar, geoidheight, sym, fix, sat, hdpo, vdop, pdop, ageofdgpsdata,gpsid"]
[]
[null,"Garmin specific"]
[null,"    label_text"]
[]
[null,"Other parameters will be assumed to be extension data understood by the target software."]
["     Export KML file"]
[null,"This routine generates .kml files suitable for displaying data on Google Earth."]
[]
[null,"Data is expected in columns with the first row being a header describing the data."]
[]
[null,"If a GPXType column is present then the routine will assume GPX data and present the option"]
[null,"of plotting waypoints (yellow), routes (red) and tracks (green)."]
[]
[null,"If the column is not present then it will prompt for plotting pins with data bubbles, paths or both."]
[]
[null,"Name is an optional column - it will be placed alongside pins."]
[]
[null,"Either latitude and longitude OR OSRef must be specified."]
[]
[null,"Data will be displayed inside a 'bubble' if the pins are clicked within Google Earth."]
[]
[null,"Columns can be in any order and represent any data eg temperature, tree species, butterfly wingspan or lunch!"]
[]
[null,"To export data, select it then either:"]
[null,"                 right click and choose 'Export KML'  OR"]
[null,"                 click OSGB then ExportKML"]
["Zip codes and postcodes"]
[null,"Three routines are provided to locate zipcodes/postcodes, but they may require"]
[null,"some maintenace on the part of the user."]
[]
[null,"The routines are:"]
[]
[null,"   =ZipLatitude(zipcode)"]
[]
[null,"   =ZipLongitude(zipcode)     and"]
[]
[null,"   =ZipOSRef(zipcode)   [Britain only]"]
[]
[null,"Note that:"]
[]
[null,"   these do a web lookup to extract the parameters"]
[null,"   The format of the web sites are likely to change, so a \"program\" needs to be given to OSGB."]
[null,"   The results of the web lookups are retained in a cache within this OSGB addin to aid efficiency"]
[null,"   The addin needs saving to save the cache."]
[null,"   Postcodes/Zip codes may not accurately locate a property  - ."]
[null,"          - they often give the first house of the postman's round.          "]
[]
[null,"A single worksheet holds both the program and the cache."]
[null,"The data can be extracted to current selection with the pulldown menu item"]
[null,"      OSGB > Extract Zip data "]
[]
[null,"The extracted columns hold the extraction program, the cached zip code, latitude and  "]
[null,"longitude respectively.  Note that only alpha-numeric characters (A..Z and 0..9) "]
[null,"in the zipcode are stored in the cache"]
[]
[null,"The data can be replaced with OSGB > Insert new Zip data"]
["    Zip extraction programs"]
[null,"OSGB needs to be told how to extract data from a web site - hard coding would "]
[null,"be unmaintainable"]
[]
[null,"It needs a program written with this simple instruction set:"]
[null,"     open   followed by url to open, and the character in this to be substituted with zipcode."]
[null,"     find followed by the string to be found in the opened data."]
[null,"           The pointer is left pointing AFTER the item"]
[null,"     skip followed by number of characters to be skipped.  Can be negative."]
[null,"     latitude      or"]
[null,"     longitude    or"]
[null,"     eastings     or"]
[null,"     northings    to extract appropriate parameter"]
[null,"     end to finish."]
[]
[null,"To generate a program requires a suitable url and examination of its format."]
[null,"Once the program is written and inserted, then it can be tested and 'single stepped'."]
[null,"Select the cell with a test zipcode and click OSGB > trace zip lookup."]
[]
[null,"Suitable programs for Britain (sorry, not NI) and US are given in the examples workbook,"]
[null,"but please note that these may cease to operate without notice if the site authors change their pages."]
[]
["Misc Routines"]
[null,"=TextDegreesToDec(string)"]
[]
[null,"Extracts degrees from text.  Many separators are catered for."]
[]
[null,"=dms(degrees)"]
[]
[null,"This converts from decimal degrees to a readable degrees, minutes, seconds string."]
[null,"It assumes a GB context so gives north if >30, west if negative, otherwise east."]
[]
[null,"=tidyref(untidy reference, no. of digits,spaced)"]
[]
[null,"    Tidies up a reference."]
[null,"    Number of digits must be 2,4,6,8 or 10."]
[null,"    If parameter 'spaced' is non zero then spaces are inserted between letters,"]
[null,"       the eastings digits and the northings digits."]
[null,"    Note this rounds down, unlike roundref which rounds to the nearest boundary."]
[]
[null,"=roundref(untidy reference, no. of digits,spaced)"]
[]
[null,"    As above, but rounds to the nearest boundary."]
[]
[null,"=getelement "]
[null,"    extracts substring from a list"]
[null,"   eg =getelement(\"1.2,1.3,1,4,1.5,1.6\",\",\",2) returns 1.3.  (NB First element is 0)."]