Repository files navigation

UK Postcode data for Nominatim

The Nominatim server supports importing additional postcodes per country from comma-separated files, see import instructions. This document described how the file gb_postcodes.csv.gz gets created.

Older versions of Nominatim supported database dump files (gb_postcode_data.sql.gz) instead. If you want to generate those check out the older sql-file-generation tag of this repository.

Data sources and licenses

Data consists of

  1. Code-Point® Open for England, Scotland, Wales with about 1.7 million postcodes

    Ordnance Survey, the national mapping agency for Great Britain, publishes the open dataset four times per year at https://osdatahub.os.uk/downloads/open/CodePointOpen

  2. About 27.000 Northern Ireland postcodes

    https://github.com/osm-uk/NI-Postcodes derived from Food Hygiene Ratings Scheme Data sets. The data set contains duplicates which aggregate_ni.py removes by calculating a center point for each postcode. That leads to about 10.000 postcodes.

Both are licensed under Open Government Licence (v3).

GB vs UK

Great Britain is England, Scotland, Wales.

United Kingdom is England, Scotland, Wales, Northern Ireland.

For probably historical reasons the the ISO-3166 country code for the United Kingdom is 'GB'. Nominatim, and OpenStreetMap database in general, expects 'gb' thus the output filename contains 'gb'.

Creating the file

  1. Install dependencies

     # assuming Ubuntu
    apt-get install unzip python3
    pip3 install pyproj
    
  2. Download source files

     ./download.sh
    

    You'll see a directory of CSV files.

     cat codepo_gb/Data/CSV/*.csv | wc -l
    # 1719485
    more Data/CSV/n.csv
    "N1 0AA",10,530626,183961,"E92000001","E19000003","E18000007","","E09000019","E05000368"
    "N1 0AB",10,530559,183978,"E92000001","E19000003","E18000007","","E09000019","E05000368"
    

    The coordinates are "Northings" and "Eastings" in OSGB 1936 projection.

  3. Convert data

     ./convert.py > gb_postcodes.csv
    ./aggregate_ni.py > NI-postcodes-agg.csv
    cp gb_postcodes.csv gb_and_ni_postcodes.csv
    tail -n+2 NI-postcodes-agg.csv >> gb_and_ni_postcodes.csv
    # expect about 1.7m
    wc -l gb_*postcodes.csv
    
  4. Compare to previous data

     wget -O gb_postcodes.previous.csv.gz https://downloads.opencagedata.com/public/gb_postcodes/gb_postcodes.latest.csv.gz
    gunzip -f gb_postcodes.previous.csv.gz
    ./compare.py gb_postcodes.previous.csv gb_postcodes.csv
    # Read 1717777 postcodes from old file gb_postcodes.previous.csv
    # Read 1719485 postcodes from new file gb_postcodes.csv
    # Added: 3674 (0.214%)
    # Deleted: 1966 (0.114%)
    # Position moved: 68857 (4.005%)
    # Position moved more than 100 meters: 10517 (0.612%)
    # Position moved more than 1000 meters: 553 (0.032%)
    # Position moved more than 10000 meters: 16 (0.001%)
    # Average distance difference of all updates: 83.76 meters
    
  5. Compress output

     gzip -9 -f gb_*postcodes.csv
    ls -lah *.gz
    # 14M gb_and_ni_postcodes.csv.gz
    # 13M gb_postcodes.csv.gz
    
  6. Cleanup source files

     rm -r codepo_gb.zip codepo_gb NI-postcodes.csv NI-postcodes-agg.csv gb_postcodes.previous.csv
    

License

The source code is available under a GPLv2 license.

About

Preprocessing Great Britain postdata for Nominatim geocoder

Resources

Stars

6 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

UK Postcode data for Nominatim

The Nominatim server supports importing additional postcodes per country from comma-separated files, see import instructions. This document described how the file gb_postcodes.csv.gz gets created.

Older versions of Nominatim supported database dump files (gb_postcode_data.sql.gz) instead. If you want to generate those check out the older sql-file-generation tag of this repository.

Data sources and licenses

Data consists of

  1. Code-Point® Open for England, Scotland, Wales with about 1.7 million postcodes

    Ordnance Survey, the national mapping agency for Great Britain, publishes the open dataset four times per year at https://osdatahub.os.uk/downloads/open/CodePointOpen

  2. About 27.000 Northern Ireland postcodes

    https://github.com/osm-uk/NI-Postcodes derived from Food Hygiene Ratings Scheme Data sets. The data set contains duplicates which aggregate_ni.py removes by calculating a center point for each postcode. That leads to about 10.000 postcodes.

Both are licensed under Open Government Licence (v3).

GB vs UK

Great Britain is England, Scotland, Wales.

United Kingdom is England, Scotland, Wales, Northern Ireland.

For probably historical reasons the the ISO-3166 country code for the United Kingdom is 'GB'. Nominatim, and OpenStreetMap database in general, expects 'gb' thus the output filename contains 'gb'.

Creating the file

  1. Install dependencies

     # assuming Ubuntu
    apt-get install unzip python3
    pip3 install pyproj
    
  2. Download source files

     ./download.sh
    

    You'll see a directory of CSV files.

     cat codepo_gb/Data/CSV/*.csv | wc -l
    # 1719485
    more Data/CSV/n.csv
    "N1 0AA",10,530626,183961,"E92000001","E19000003","E18000007","","E09000019","E05000368"
    "N1 0AB",10,530559,183978,"E92000001","E19000003","E18000007","","E09000019","E05000368"
    

    The coordinates are "Northings" and "Eastings" in OSGB 1936 projection.

  3. Convert data

     ./convert.py > gb_postcodes.csv
    ./aggregate_ni.py > NI-postcodes-agg.csv
    cp gb_postcodes.csv gb_and_ni_postcodes.csv
    tail -n+2 NI-postcodes-agg.csv >> gb_and_ni_postcodes.csv
    # expect about 1.7m
    wc -l gb_*postcodes.csv
    
  4. Compare to previous data

     wget -O gb_postcodes.previous.csv.gz https://downloads.opencagedata.com/public/gb_postcodes/gb_postcodes.latest.csv.gz
    gunzip -f gb_postcodes.previous.csv.gz
    ./compare.py gb_postcodes.previous.csv gb_postcodes.csv
    # Read 1717777 postcodes from old file gb_postcodes.previous.csv
    # Read 1719485 postcodes from new file gb_postcodes.csv
    # Added: 3674 (0.214%)
    # Deleted: 1966 (0.114%)
    # Position moved: 68857 (4.005%)
    # Position moved more than 100 meters: 10517 (0.612%)
    # Position moved more than 1000 meters: 553 (0.032%)
    # Position moved more than 10000 meters: 16 (0.001%)
    # Average distance difference of all updates: 83.76 meters
    
  5. Compress output

     gzip -9 -f gb_*postcodes.csv
    ls -lah *.gz
    # 14M gb_and_ni_postcodes.csv.gz
    # 13M gb_postcodes.csv.gz
    
  6. Cleanup source files

     rm -r codepo_gb.zip codepo_gb NI-postcodes.csv NI-postcodes-agg.csv gb_postcodes.previous.csv
    

License

The source code is available under a GPLv2 license.

About

Preprocessing Great Britain postdata for Nominatim geocoder

Resources

Stars

6 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

UK Postcode data for Nominatim

The Nominatim server supports importing additional postcodes per country from comma-separated files, see import instructions. This document described how the file gb_postcodes.csv.gz gets created.

Older versions of Nominatim supported database dump files (gb_postcode_data.sql.gz) instead. If you want to generate those check out the older sql-file-generation tag of this repository.

Data sources and licenses

Data consists of

  1. Code-Point® Open for England, Scotland, Wales with about 1.7 million postcodes

    Ordnance Survey, the national mapping agency for Great Britain, publishes the open dataset four times per year at https://osdatahub.os.uk/downloads/open/CodePointOpen

  2. About 27.000 Northern Ireland postcodes

    https://github.com/osm-uk/NI-Postcodes derived from Food Hygiene Ratings Scheme Data sets. The data set contains duplicates which aggregate_ni.py removes by calculating a center point for each postcode. That leads to about 10.000 postcodes.

Both are licensed under Open Government Licence (v3).

GB vs UK

Great Britain is England, Scotland, Wales.

United Kingdom is England, Scotland, Wales, Northern Ireland.

For probably historical reasons the the ISO-3166 country code for the United Kingdom is 'GB'. Nominatim, and OpenStreetMap database in general, expects 'gb' thus the output filename contains 'gb'.

Creating the file

  1. Install dependencies

     # assuming Ubuntu
    apt-get install unzip python3
    pip3 install pyproj
    
  2. Download source files

     ./download.sh
    

    You'll see a directory of CSV files.

     cat codepo_gb/Data/CSV/*.csv | wc -l
    # 1719485
    more Data/CSV/n.csv
    "N1 0AA",10,530626,183961,"E92000001","E19000003","E18000007","","E09000019","E05000368"
    "N1 0AB",10,530559,183978,"E92000001","E19000003","E18000007","","E09000019","E05000368"
    

    The coordinates are "Northings" and "Eastings" in OSGB 1936 projection.

  3. Convert data

     ./convert.py > gb_postcodes.csv
    ./aggregate_ni.py > NI-postcodes-agg.csv
    cp gb_postcodes.csv gb_and_ni_postcodes.csv
    tail -n+2 NI-postcodes-agg.csv >> gb_and_ni_postcodes.csv
    # expect about 1.7m
    wc -l gb_*postcodes.csv
    
  4. Compare to previous data

     wget -O gb_postcodes.previous.csv.gz https://downloads.opencagedata.com/public/gb_postcodes/gb_postcodes.latest.csv.gz
    gunzip -f gb_postcodes.previous.csv.gz
    ./compare.py gb_postcodes.previous.csv gb_postcodes.csv
    # Read 1717777 postcodes from old file gb_postcodes.previous.csv
    # Read 1719485 postcodes from new file gb_postcodes.csv
    # Added: 3674 (0.214%)
    # Deleted: 1966 (0.114%)
    # Position moved: 68857 (4.005%)
    # Position moved more than 100 meters: 10517 (0.612%)
    # Position moved more than 1000 meters: 553 (0.032%)
    # Position moved more than 10000 meters: 16 (0.001%)
    # Average distance difference of all updates: 83.76 meters
    
  5. Compress output

     gzip -9 -f gb_*postcodes.csv
    ls -lah *.gz
    # 14M gb_and_ni_postcodes.csv.gz
    # 13M gb_postcodes.csv.gz
    
  6. Cleanup source files

     rm -r codepo_gb.zip codepo_gb NI-postcodes.csv NI-postcodes-agg.csv gb_postcodes.previous.csv
    

License

The source code is available under a GPLv2 license.

About

Preprocessing Great Britain postdata for Nominatim geocoder

Resources

Stars

6 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

UK Postcode data for Nominatim

The Nominatim server supports importing additional postcodes per country from comma-separated files, see import instructions. This document described how the file gb_postcodes.csv.gz gets created.

Older versions of Nominatim supported database dump files (gb_postcode_data.sql.gz) instead. If you want to generate those check out the older sql-file-generation tag of this repository.

Data sources and licenses

Data consists of

  1. Code-Point® Open for England, Scotland, Wales with about 1.7 million postcodes

    Ordnance Survey, the national mapping agency for Great Britain, publishes the open dataset four times per year at https://osdatahub.os.uk/downloads/open/CodePointOpen

  2. About 27.000 Northern Ireland postcodes

    https://github.com/osm-uk/NI-Postcodes derived from Food Hygiene Ratings Scheme Data sets. The data set contains duplicates which aggregate_ni.py removes by calculating a center point for each postcode. That leads to about 10.000 postcodes.

Both are licensed under Open Government Licence (v3).

GB vs UK

Great Britain is England, Scotland, Wales.

United Kingdom is England, Scotland, Wales, Northern Ireland.

For probably historical reasons the the ISO-3166 country code for the United Kingdom is 'GB'. Nominatim, and OpenStreetMap database in general, expects 'gb' thus the output filename contains 'gb'.

Creating the file

  1. Install dependencies

     # assuming Ubuntu
    apt-get install unzip python3
    pip3 install pyproj
    
  2. Download source files

     ./download.sh
    

    You'll see a directory of CSV files.

     cat codepo_gb/Data/CSV/*.csv | wc -l
    # 1719485
    more Data/CSV/n.csv
    "N1 0AA",10,530626,183961,"E92000001","E19000003","E18000007","","E09000019","E05000368"
    "N1 0AB",10,530559,183978,"E92000001","E19000003","E18000007","","E09000019","E05000368"
    

    The coordinates are "Northings" and "Eastings" in OSGB 1936 projection.

  3. Convert data

     ./convert.py > gb_postcodes.csv
    ./aggregate_ni.py > NI-postcodes-agg.csv
    cp gb_postcodes.csv gb_and_ni_postcodes.csv
    tail -n+2 NI-postcodes-agg.csv >> gb_and_ni_postcodes.csv
    # expect about 1.7m
    wc -l gb_*postcodes.csv
    
  4. Compare to previous data

     wget -O gb_postcodes.previous.csv.gz https://downloads.opencagedata.com/public/gb_postcodes/gb_postcodes.latest.csv.gz
    gunzip -f gb_postcodes.previous.csv.gz
    ./compare.py gb_postcodes.previous.csv gb_postcodes.csv
    # Read 1717777 postcodes from old file gb_postcodes.previous.csv
    # Read 1719485 postcodes from new file gb_postcodes.csv
    # Added: 3674 (0.214%)
    # Deleted: 1966 (0.114%)
    # Position moved: 68857 (4.005%)
    # Position moved more than 100 meters: 10517 (0.612%)
    # Position moved more than 1000 meters: 553 (0.032%)
    # Position moved more than 10000 meters: 16 (0.001%)
    # Average distance difference of all updates: 83.76 meters
    
  5. Compress output

     gzip -9 -f gb_*postcodes.csv
    ls -lah *.gz
    # 14M gb_and_ni_postcodes.csv.gz
    # 13M gb_postcodes.csv.gz
    
  6. Cleanup source files

     rm -r codepo_gb.zip codepo_gb NI-postcodes.csv NI-postcodes-agg.csv gb_postcodes.previous.csv
    

License

The source code is available under a GPLv2 license.

About

Preprocessing Great Britain postdata for Nominatim geocoder

Resources

Stars

6 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

UK Postcode data for Nominatim

The Nominatim server supports importing additional postcodes per country from comma-separated files, see import instructions. This document described how the file gb_postcodes.csv.gz gets created.

Older versions of Nominatim supported database dump files (gb_postcode_data.sql.gz) instead. If you want to generate those check out the older sql-file-generation tag of this repository.

Data sources and licenses

Data consists of

  1. Code-Point® Open for England, Scotland, Wales with about 1.7 million postcodes

    Ordnance Survey, the national mapping agency for Great Britain, publishes the open dataset four times per year at https://osdatahub.os.uk/downloads/open/CodePointOpen

  2. About 27.000 Northern Ireland postcodes

    https://github.com/osm-uk/NI-Postcodes derived from Food Hygiene Ratings Scheme Data sets. The data set contains duplicates which aggregate_ni.py removes by calculating a center point for each postcode. That leads to about 10.000 postcodes.

Both are licensed under Open Government Licence (v3).

GB vs UK

Great Britain is England, Scotland, Wales.

United Kingdom is England, Scotland, Wales, Northern Ireland.

For probably historical reasons the the ISO-3166 country code for the United Kingdom is 'GB'. Nominatim, and OpenStreetMap database in general, expects 'gb' thus the output filename contains 'gb'.

Creating the file

  1. Install dependencies

     # assuming Ubuntu
    apt-get install unzip python3
    pip3 install pyproj
    
  2. Download source files

     ./download.sh
    

    You'll see a directory of CSV files.

     cat codepo_gb/Data/CSV/*.csv | wc -l
    # 1719485
    more Data/CSV/n.csv
    "N1 0AA",10,530626,183961,"E92000001","E19000003","E18000007","","E09000019","E05000368"
    "N1 0AB",10,530559,183978,"E92000001","E19000003","E18000007","","E09000019","E05000368"
    

    The coordinates are "Northings" and "Eastings" in OSGB 1936 projection.

  3. Convert data

     ./convert.py > gb_postcodes.csv
    ./aggregate_ni.py > NI-postcodes-agg.csv
    cp gb_postcodes.csv gb_and_ni_postcodes.csv
    tail -n+2 NI-postcodes-agg.csv >> gb_and_ni_postcodes.csv
    # expect about 1.7m
    wc -l gb_*postcodes.csv
    
  4. Compare to previous data

     wget -O gb_postcodes.previous.csv.gz https://downloads.opencagedata.com/public/gb_postcodes/gb_postcodes.latest.csv.gz
    gunzip -f gb_postcodes.previous.csv.gz
    ./compare.py gb_postcodes.previous.csv gb_postcodes.csv
    # Read 1717777 postcodes from old file gb_postcodes.previous.csv
    # Read 1719485 postcodes from new file gb_postcodes.csv
    # Added: 3674 (0.214%)
    # Deleted: 1966 (0.114%)
    # Position moved: 68857 (4.005%)
    # Position moved more than 100 meters: 10517 (0.612%)
    # Position moved more than 1000 meters: 553 (0.032%)
    # Position moved more than 10000 meters: 16 (0.001%)
    # Average distance difference of all updates: 83.76 meters
    
  5. Compress output

     gzip -9 -f gb_*postcodes.csv
    ls -lah *.gz
    # 14M gb_and_ni_postcodes.csv.gz
    # 13M gb_postcodes.csv.gz
    
  6. Cleanup source files

     rm -r codepo_gb.zip codepo_gb NI-postcodes.csv NI-postcodes-agg.csv gb_postcodes.previous.csv
    

License

The source code is available under a GPLv2 license.

About

Preprocessing Great Britain postdata for Nominatim geocoder

Resources

Stars

6 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

UK Postcode data for Nominatim

The Nominatim server supports importing additional postcodes per country from comma-separated files, see import instructions. This document described how the file gb_postcodes.csv.gz gets created.

Older versions of Nominatim supported database dump files (gb_postcode_data.sql.gz) instead. If you want to generate those check out the older sql-file-generation tag of this repository.

Data sources and licenses

Data consists of

  1. Code-Point® Open for England, Scotland, Wales with about 1.7 million postcodes

    Ordnance Survey, the national mapping agency for Great Britain, publishes the open dataset four times per year at https://osdatahub.os.uk/downloads/open/CodePointOpen

  2. About 27.000 Northern Ireland postcodes

    https://github.com/osm-uk/NI-Postcodes derived from Food Hygiene Ratings Scheme Data sets. The data set contains duplicates which aggregate_ni.py removes by calculating a center point for each postcode. That leads to about 10.000 postcodes.

Both are licensed under Open Government Licence (v3).

GB vs UK

Great Britain is England, Scotland, Wales.

United Kingdom is England, Scotland, Wales, Northern Ireland.

For probably historical reasons the the ISO-3166 country code for the United Kingdom is 'GB'. Nominatim, and OpenStreetMap database in general, expects 'gb' thus the output filename contains 'gb'.

Creating the file

  1. Install dependencies

     # assuming Ubuntu
    apt-get install unzip python3
    pip3 install pyproj
    
  2. Download source files

     ./download.sh
    

    You'll see a directory of CSV files.

     cat codepo_gb/Data/CSV/*.csv | wc -l
    # 1719485
    more Data/CSV/n.csv
    "N1 0AA",10,530626,183961,"E92000001","E19000003","E18000007","","E09000019","E05000368"
    "N1 0AB",10,530559,183978,"E92000001","E19000003","E18000007","","E09000019","E05000368"
    

    The coordinates are "Northings" and "Eastings" in OSGB 1936 projection.

  3. Convert data

     ./convert.py > gb_postcodes.csv
    ./aggregate_ni.py > NI-postcodes-agg.csv
    cp gb_postcodes.csv gb_and_ni_postcodes.csv
    tail -n+2 NI-postcodes-agg.csv >> gb_and_ni_postcodes.csv
    # expect about 1.7m
    wc -l gb_*postcodes.csv
    
  4. Compare to previous data

     wget -O gb_postcodes.previous.csv.gz https://downloads.opencagedata.com/public/gb_postcodes/gb_postcodes.latest.csv.gz
    gunzip -f gb_postcodes.previous.csv.gz
    ./compare.py gb_postcodes.previous.csv gb_postcodes.csv
    # Read 1717777 postcodes from old file gb_postcodes.previous.csv
    # Read 1719485 postcodes from new file gb_postcodes.csv
    # Added: 3674 (0.214%)
    # Deleted: 1966 (0.114%)
    # Position moved: 68857 (4.005%)
    # Position moved more than 100 meters: 10517 (0.612%)
    # Position moved more than 1000 meters: 553 (0.032%)
    # Position moved more than 10000 meters: 16 (0.001%)
    # Average distance difference of all updates: 83.76 meters
    
  5. Compress output

     gzip -9 -f gb_*postcodes.csv
    ls -lah *.gz
    # 14M gb_and_ni_postcodes.csv.gz
    # 13M gb_postcodes.csv.gz
    
  6. Cleanup source files

     rm -r codepo_gb.zip codepo_gb NI-postcodes.csv NI-postcodes-agg.csv gb_postcodes.previous.csv
    

License

The source code is available under a GPLv2 license.

About

Preprocessing Great Britain postdata for Nominatim geocoder

Resources

Stars

6 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

UK Postcode data for Nominatim

The Nominatim server supports importing additional postcodes per country from comma-separated files, see import instructions. This document described how the file gb_postcodes.csv.gz gets created.

Older versions of Nominatim supported database dump files (gb_postcode_data.sql.gz) instead. If you want to generate those check out the older sql-file-generation tag of this repository.

Data sources and licenses

Data consists of

  1. Code-Point® Open for England, Scotland, Wales with about 1.7 million postcodes

    Ordnance Survey, the national mapping agency for Great Britain, publishes the open dataset four times per year at https://osdatahub.os.uk/downloads/open/CodePointOpen

  2. About 27.000 Northern Ireland postcodes

    https://github.com/osm-uk/NI-Postcodes derived from Food Hygiene Ratings Scheme Data sets. The data set contains duplicates which aggregate_ni.py removes by calculating a center point for each postcode. That leads to about 10.000 postcodes.

Both are licensed under Open Government Licence (v3).

GB vs UK

Great Britain is England, Scotland, Wales.

United Kingdom is England, Scotland, Wales, Northern Ireland.

For probably historical reasons the the ISO-3166 country code for the United Kingdom is 'GB'. Nominatim, and OpenStreetMap database in general, expects 'gb' thus the output filename contains 'gb'.

Creating the file

  1. Install dependencies

     # assuming Ubuntu
    apt-get install unzip python3
    pip3 install pyproj
    
  2. Download source files

     ./download.sh
    

    You'll see a directory of CSV files.

     cat codepo_gb/Data/CSV/*.csv | wc -l
    # 1719485
    more Data/CSV/n.csv
    "N1 0AA",10,530626,183961,"E92000001","E19000003","E18000007","","E09000019","E05000368"
    "N1 0AB",10,530559,183978,"E92000001","E19000003","E18000007","","E09000019","E05000368"
    

    The coordinates are "Northings" and "Eastings" in OSGB 1936 projection.

  3. Convert data

     ./convert.py > gb_postcodes.csv
    ./aggregate_ni.py > NI-postcodes-agg.csv
    cp gb_postcodes.csv gb_and_ni_postcodes.csv
    tail -n+2 NI-postcodes-agg.csv >> gb_and_ni_postcodes.csv
    # expect about 1.7m
    wc -l gb_*postcodes.csv
    
  4. Compare to previous data

     wget -O gb_postcodes.previous.csv.gz https://downloads.opencagedata.com/public/gb_postcodes/gb_postcodes.latest.csv.gz
    gunzip -f gb_postcodes.previous.csv.gz
    ./compare.py gb_postcodes.previous.csv gb_postcodes.csv
    # Read 1717777 postcodes from old file gb_postcodes.previous.csv
    # Read 1719485 postcodes from new file gb_postcodes.csv
    # Added: 3674 (0.214%)
    # Deleted: 1966 (0.114%)
    # Position moved: 68857 (4.005%)
    # Position moved more than 100 meters: 10517 (0.612%)
    # Position moved more than 1000 meters: 553 (0.032%)
    # Position moved more than 10000 meters: 16 (0.001%)
    # Average distance difference of all updates: 83.76 meters
    
  5. Compress output

     gzip -9 -f gb_*postcodes.csv
    ls -lah *.gz
    # 14M gb_and_ni_postcodes.csv.gz
    # 13M gb_postcodes.csv.gz
    
  6. Cleanup source files

     rm -r codepo_gb.zip codepo_gb NI-postcodes.csv NI-postcodes-agg.csv gb_postcodes.previous.csv
    

License

The source code is available under a GPLv2 license.

About

Preprocessing Great Britain postdata for Nominatim geocoder

Resources

Stars

6 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

UK Postcode data for Nominatim

The Nominatim server supports importing additional postcodes per country from comma-separated files, see import instructions. This document described how the file gb_postcodes.csv.gz gets created.

Older versions of Nominatim supported database dump files (gb_postcode_data.sql.gz) instead. If you want to generate those check out the older sql-file-generation tag of this repository.

Data sources and licenses

Data consists of

  1. Code-Point® Open for England, Scotland, Wales with about 1.7 million postcodes

    Ordnance Survey, the national mapping agency for Great Britain, publishes the open dataset four times per year at https://osdatahub.os.uk/downloads/open/CodePointOpen

  2. About 27.000 Northern Ireland postcodes

    https://github.com/osm-uk/NI-Postcodes derived from Food Hygiene Ratings Scheme Data sets. The data set contains duplicates which aggregate_ni.py removes by calculating a center point for each postcode. That leads to about 10.000 postcodes.

Both are licensed under Open Government Licence (v3).

GB vs UK

Great Britain is England, Scotland, Wales.

United Kingdom is England, Scotland, Wales, Northern Ireland.

For probably historical reasons the the ISO-3166 country code for the United Kingdom is 'GB'. Nominatim, and OpenStreetMap database in general, expects 'gb' thus the output filename contains 'gb'.

Creating the file

  1. Install dependencies

     # assuming Ubuntu
    apt-get install unzip python3
    pip3 install pyproj
    
  2. Download source files

     ./download.sh
    

    You'll see a directory of CSV files.

     cat codepo_gb/Data/CSV/*.csv | wc -l
    # 1719485
    more Data/CSV/n.csv
    "N1 0AA",10,530626,183961,"E92000001","E19000003","E18000007","","E09000019","E05000368"
    "N1 0AB",10,530559,183978,"E92000001","E19000003","E18000007","","E09000019","E05000368"
    

    The coordinates are "Northings" and "Eastings" in OSGB 1936 projection.

  3. Convert data

     ./convert.py > gb_postcodes.csv
    ./aggregate_ni.py > NI-postcodes-agg.csv
    cp gb_postcodes.csv gb_and_ni_postcodes.csv
    tail -n+2 NI-postcodes-agg.csv >> gb_and_ni_postcodes.csv
    # expect about 1.7m
    wc -l gb_*postcodes.csv
    
  4. Compare to previous data

     wget -O gb_postcodes.previous.csv.gz https://downloads.opencagedata.com/public/gb_postcodes/gb_postcodes.latest.csv.gz
    gunzip -f gb_postcodes.previous.csv.gz
    ./compare.py gb_postcodes.previous.csv gb_postcodes.csv
    # Read 1717777 postcodes from old file gb_postcodes.previous.csv
    # Read 1719485 postcodes from new file gb_postcodes.csv
    # Added: 3674 (0.214%)
    # Deleted: 1966 (0.114%)
    # Position moved: 68857 (4.005%)
    # Position moved more than 100 meters: 10517 (0.612%)
    # Position moved more than 1000 meters: 553 (0.032%)
    # Position moved more than 10000 meters: 16 (0.001%)
    # Average distance difference of all updates: 83.76 meters
    
  5. Compress output

     gzip -9 -f gb_*postcodes.csv
    ls -lah *.gz
    # 14M gb_and_ni_postcodes.csv.gz
    # 13M gb_postcodes.csv.gz
    
  6. Cleanup source files

     rm -r codepo_gb.zip codepo_gb NI-postcodes.csv NI-postcodes-agg.csv gb_postcodes.previous.csv
    

License

The source code is available under a GPLv2 license.

About

Preprocessing Great Britain postdata for Nominatim geocoder

Resources

Stars

6 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages