Introduction
In collaboration with Treasurer/Tax Collector and the Department of Public Health, we have written a restful street address geocoding service. This page describes that service. We try to follow the OGC geocoding standard which is described here. The service uses EAS addresses. While EAS addresses are bound to the street network, the results will differ significantly from a street network geocoding service. For example, if you try to geocode "100 Main St" using this service, you will get zero candidates. That's because (at the time of this writing) there is no "100 Main St" in EAS. Although there is a street segment that supports "100 Main St" there is no building or proposed building that has that address. Why use EAS geocoding? If you want units or parcels that are associated with an address, this is probably your best bet. EAS addresses are curated and maintained (not mined) and we synchronize the streets and parcels with Dept. of Public Works on a daily basis. To see what EAS address look like, check out the web interface which is here (internal).
User Contacts
Contact | Department |
---|---|
Richard Hagner | Treasurer/Tax Collector |
Darrell Ascano | Treasurer/Tax Collector |
Stephanie Cowles | Dept. of Public Health |
Aksel Olsen | Dept. of Planning |
Example URLs
The URL is case sensitive.
Here is a simple query for 115 Main St.
A query for "1200 18th" will result in 2 candidates.
Your query does not have to include the zip code.
A query for 2655 Hyde returns lots of parcels.
A query for 1000 Pine returns lots of units.
Example Response
We currently support JSON; see just below for an example. The basic structure follows the OGC eocoding standard which ESRI helped specify. As you can infer from the sample below, EAS provides unit level and parcel level information. We currently exclude included only unretired entitities (base address, unit address, parcel). To see what's available, either contact us or take a look the data model.
{ "spatialReference": { "wkid": 4326 }, "candidates": [ { "address": "115 MAIN ST", "location": { "y": 37.79152826999239, "x": -122.39400753158013 }, "score": 100, "attributes": { "base_address_num": 115, "base_address_suffix": null, "street_name": "MAIN", "street_type": "ST", "zipcode": "94105", "parcels": [ { "address_base_flg": true, "blk_lot": "3717012", "unit_num": null }, { "address_base_flg": true, "blk_lot": "3717013", "unit_num": null } ], "units": [] } } ] }
Results and Performance
Using this example file from Dept. of Public Health, we saw a rate of about 1000 addresses per minute with barely any load on the servers. The results on this same dataset are summarized in this table.
score | percent |
---|---|
88 | 0.02 |
90 | 0.10 |
94 | 6.28 |
96 | 2.89 |
98 | 90.29 |
Source Code and Dependences
The server code is here and here.
The tests are over here.
And here is a working command line client and a sample data file.
You'll need python 2.7 or better and you'll need to install the simplejson library.
If you are running this alongside an ESRI product that uses a different version of python, you'll need to take some special steps - we hope to include note on how to do that later.
0 Comments