Skip to main content

A simple and effective Python wrapper around the Open Geo DB managed by YAT

Project description

YAT Geo DB

An elegantly simple Geo Reference manager with managed database of US, Canada and Mexico. Quickly perform auto-complete style fuzzy search, fetch record details and search a mile radius around a specific place.

Geo DB file lists available at https://yat-geo-db.sfo3.digitaloceanspaces.com/

Install

With Python 3.7 or greater install the package with simple pip command.

pip install yat-geo-db

Usage

The manager utilizes two flat files maintained by YAT available at <location>. On initial load those files will be downloaded to local machined and stored on machine as a form of cache. You can specify a specific version denoted by date or utilize the current version.

Import and load data

from yat_geo_db import GeoManager as GeoManagerImport

GeoManager = GeoManagerImport()

GeoManager.load_data(
    force_db_fetch= False, cache_local=True, compressed=True
)

Refresh local data (current version)

from yat_geo_db import GeoManager as GeoManagerImport

GeoManager = GeoManagerImport()

GeoManager.load_data(force_db_fetch=True)

Perform Auto-complete style search

search_param = "Nashvil"
filters = {"ref_data.state_prov": "TN", "ref_data.country": "US"}
fuzzy_res = GeoManager.fuzzy_search(
    search_param, num_results=2, filters=filters
)
print([(value["value"], value["id"]) for value in fuzzy_res])
>>> [('Nashville, TN', 'us__tn__nashville'), ('Nashville Metro Area, TN', 'nashville_tn_us_metro')]

Apply filters for any element in shape object including geo_type and ref_data, latter allowing to refine search to specific country or state.

search_param = "Nashvil"
filters = {"geo_type": "ZipCode", "ref_data.country": "US"}
fuzzy_res = GeoManager.fuzzy_search(
    search_param, num_results=2, filters=filters
)
print([(value["value"], value["id"]) for value in fuzzy_res])
>>> []

Fetch a shape object by the reference code. All reference codes follow a hierarchical structure, for below example <country>__<state>__<name with _ seperator>.

reference_code = 'us__tn__nashville'

res = GeoManager.get_shape_by_ref_code(reference_code=reference_code)

print(res)

>>> {'value': 'Nashville, TN',
>>>  'clean_value': 'nashville tn',
>>>  'id': 6818,
>>>  'area': 0.0,
>>>  'bbox': {'ll_latitude': '36.165890',
>>>   'ur_latitude': '36.165890',
>>>   'll_longitude': '-86.784440',
>>>   'ur_longitude': '-86.784440'},
>>>  'geo_type': 'City',
>>>  'latitude': 36.16589,
>>>  'ref_data': {'city': 'Nashville',
>>>   'country': 'US',
>>>   'zip_code': '37222',
>>>   'state_prov': 'TN'},
>>>  'longitude': -86.78444,
>>>  'population': 530852,
>>>  'is_zip_code': False,
>>>  'is_aggregate': False,
>>>  'long_display': 'Nashville, TN 37222',
>>>  'short_display': 'Nashville, TN',
>>>  'primary_source': None,
>>>  'reference_code': 'us__tn__nashville',
>>>  'primary_timezone': 'America/Chicago',
>>>  'related_shape_id': 6718,
>>>  'primary_source_id': None,
>>>  'is_three_digit_zip_code': False}

Perform radius search around a Geo Object, utilizing a reference code, radius in miles and indicator to return results within the same country. Results returned are a list of Geo Shape IDs or with full_results=True a full list of Geo Objects returned.

reference_code = 'us__tn__nashville'

res = GeoManager.radius_search(
    reference_code=reference_code, radius=10, country_exact=True
)

print(res)
>>> [6702, 6831, 142898, 142897, 142895, 142901, 142903, 142904, 142905, 142910, 142893, 119979, 104924, 258833, 259091, 118948, 
>>> 118950, 119199, 119208, 119565, 119569, 119570, 119978, 259331, 239701, 242429, 6764, 98, 6609, 6818, 242049, 6612, 6621, 
>>> 142899, 142900, 241027, 119206, 119572, 133787, 119196, 119567, 119977, 6622, 134214, 134217, 143024, 179468, 133797, 133808, 
>>> 119980, 119201, 119204, 119205, 119210, 142902, 142906, 142907, 142908, 142909]

Example

For an example microservice implementation with Flask check out this repository.

Of try out the free API with documentation here YAT Demo.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yat_geo_db-1.1.1.tar.gz (13.6 kB view details)

Uploaded Source

Built Distribution

yat_geo_db-1.1.1-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

Details for the file yat_geo_db-1.1.1.tar.gz.

File metadata

  • Download URL: yat_geo_db-1.1.1.tar.gz
  • Upload date:
  • Size: 13.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.8

File hashes

Hashes for yat_geo_db-1.1.1.tar.gz
Algorithm Hash digest
SHA256 c2927fb68b2516cb62cda2f2522074f5c575c99233764683a5c85866c51807b4
MD5 ae819093d92aef9f94d88c277dc2e43d
BLAKE2b-256 e6bdb09e978509ffdef6368febe9e85470ec267ad02c51555cec4080536ff2d8

See more details on using hashes here.

File details

Details for the file yat_geo_db-1.1.1-py3-none-any.whl.

File metadata

  • Download URL: yat_geo_db-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 12.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.8

File hashes

Hashes for yat_geo_db-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 043d1742fa83f14c022a596c25e85a78074904fc337f8455af9ddb2d3837a73f
MD5 73cf00020d8bd1280c510fa95eb9963f
BLAKE2b-256 4e47e98948ffab6efc86ff6c1a41db9cdba4ced30e3c658aa4f34802bac28be3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page