Skip to main content

Building Data Utilities

Building Data Utilities Workflow

Given a list of addresses, this workflow will automatically go through the following steps:

  • Normalize each address - address consists of (at least) street, city, state. Could contain postal_code and country.
  • Geocode each address via Amazon Location Services to a lat/long coordinate
  • Download the Microsoft Building Footprints for all areas encompassed by the geocoded coordinates
  • Find the footprint that intersects (or is closest to) each geocoded coordinate
  • Generate the UBID for each footprint
  • Export the resulting data as csv and GeoJSON

Prerequisites

  1. Optionally create a Virtualenv Environment

  2. Dependencies are managed through Poetry, install with pip install poetry

  3. Install dependencies with poetry install

  4. Create a .env file in the root with your Amazon Location Services API key in the following format. You will also need to specify the Amazon base url. If none is specified, the following will be used: https://places.geo.us-east-2.api.aws/v2. For NREL gateway, you will also need to specify an APP ID.

    AMAZON_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    AMAZON_BASE_URL=https://places.geo.us-east-2.api.aws/v2
    AMAZON_APP_ID=XXXXXXXXX
    

Note that if the env keys for AMAZON_API_KEY, AMAZON_BASE_URL, and AMAZON_APP_ID exist in your profile, then it use that over the .env file.

For NREL users using the rate-limited key, use the following as the AMAZON_BASE_URL: https://developer.nrel.gov/api/tada/amazon-location-service/places/v2

Due to the nature of this application, we are passing IntendedUse=Storage to the Amazon Location Services API. This results in a slightly higher rate per transaction, but allows us to store the results.

  1. Create a locations.json file in the root containing a list of addresses to process in the format:

    [
      {
        "street": "100 W 14th Ave Pkwy",
        "city": "Denver",
        "state": "CO"
      },
      {
        "street": "200 E Colfax Ave",
        "city": "Denver",
        "state": "CO"
      },
      {
        "street": "320 W Colfax Ave",
        "city": "Denver",
        "state": "CO"
      }
    ]
    

Running the Workflow

  1. Run the workflow with python main.py or poetry run python main.py
  2. The results will be saved to ./data/covered-buildings.csv and ./data/covered-buildings.geojson. Example of these files are in the tests/data directory as well.

Notes

  • This workflow is optimized to be self-updating, and only downloads quadkeys and quadkey dataset-links if they haven't previously been downloaded or if an update is available
  • Possible next steps:
    • Cache geocoding results (if allowed) to avoid API limit penalties when re-running
    • Allow other geocoders like Google, without persisting the geocoding results
    • Add distance from geocoded result to footprint boundary, proximity_to_geocoding_coord (intersections would be 0)

Disclaimer

When using this tool with the Amazon Location Services geocoding API (or any other geocoder) always confirm that the terms of service allow for using and storing geocoding results. For Amazon Location Services, passing the IntendedUse=Storage parameter to each query allows the user to store the geocoding results.

Metadata

Release files for building-data-utilities 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for building-data-utilities 0.1.0
File Size Uploaded
building_data_utilities-0.1.0.tar.gz 14.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for building-data-utilities 0.1.0
File Interpreter ABI Platform
building_data_utilities-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 32.9 kB

Release files / building_data_utilities-0.1.0.tar.gz

Download URL building_data_utilities-0.1.0.tar.gz
Size 14.6 kB
Tags Source
SHA-256 checksum
How to use checksums
f661b332608c012c6008191251445d8181ad1fa7704056d05ee8d7033bba5fac
BLAKE2b-256 checksum
How to use checksums
23ca84a73a8b56353cb78e24992aece6a906e5f43b4050389f4271ad956a1e9f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2025.

Transparency log

Release files / building_data_utilities-0.1.0-py3-none-any.whl

Download URL building_data_utilities-0.1.0-py3-none-any.whl
Size 18.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9e13e29f4083acd41498eadf93c9ba48efd63ac3c31ef78a6f72fbba6c282c4c
BLAKE2b-256 checksum
How to use checksums
94dae156e241f7079173277bd01c826fe1c2b415b39764df97ffeddb3e5ce63f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page