Geocoding street addresses

Geocoding options

ArcGIS Pro: Geocoding https://pro.arcgis.com/en/pro-app/latest/tool-reference/geocoding/an-overview-of-the-geocoding-toolbox.htm

QGIS Geocoding: with MMQGIS and QuickMapServices(to visually verify results) 

  • Download & install QGIS for your Mac or PC
  • Click Plugins menu > Manage and Install Plugins...
  • In the Search... box, enter MMQGIS to search and click "Install Plugin" and close the Plugins box 
  • A new menu should appear at the top of QGIS: MMQGIS 
  • Click MMQGIS menu > Geocode > Geocode with web service 

https://spatialitics.com/HIPAA-Geocoder  Spatialitics HIPAA-Compliant Geocoder

https://www.geocod.io/healthcare/  HIPAA Compliant high-volume geocoder 
https://geoservices.tamu.edu/News/Stories/View.aspx?id=92 Texas A&M geocoding services and products

PostgreSQL in-database geocoding:  see https://postgis.net/docs/Geocode.html

Postgres databases with PostGIS and data imported from the U.S. Census Bureau can be used as a in-database geocoder

Using a database administration tool such as dBeaver, connect to a pre-built Postgres database 

Uploaded Image (Thumbnail)

--  Once connected to the test database for New Hampshire streets, test the geocoder with a single address

SELECT g.rating, ST_X(g.geomout) As lon, ST_Y(g.geomout) As lat,

(addy).address As stno, (addy).streetname As street,

(addy).streettypeabbrev As styp, (addy).location As city,

(addy).stateabbrev As st,(addy).zip FROM

geocode('15 west wheelock, hanover, nh 03755', 1) As g;

 

Create a table to hold the results: 

CREATE TABLE IF NOT EXISTS GeocodedAddresses (
    id_number SERIAL PRIMARY KEY,
    original_address VARCHAR(255),
    rating FLOAT,
    lon FLOAT,
    lat FLOAT,
    stno VARCHAR(50),
    street VARCHAR(255),
    styp VARCHAR(50),
    city VARCHAR(100),
    st CHAR(2),
    zip VARCHAR(20)
);

Next, run the geocoder: 

-- Geocoding multiple addresses, insert the addresses using a loop in a DO block
DO $$
DECLARE
    address_list TEXT[] := ARRAY[
        '25 Capitol St, Concord, NH 03301',
        '107 N Main St, Concord, NH 03301',
        '33 Capitol St, Concord, NH 03301',
'64 N Main St, Concord, NH 03301',
    ];
    addr TEXT;
BEGIN
    FOREACH addr IN ARRAY address_list
    LOOP
        INSERT INTO GeocodedAddresses (original_address, rating, lon, lat, stno, street, styp, city, st, zip)
        SELECT 
            addr AS original_address,
            g.rating, 
            ST_X(g.geomout) As lon, 
            ST_Y(g.geomout) As lat, 
            (addy).address As stno, 
            (addy).streetname As street, 
            (addy).streettypeabbrev As styp, 
            (addy).location As city, 
            (addy).stateabbrev As st,
            (addy).zip 
        FROM 
            geocode(addr, 1) As g;
    END LOOP;
END $$;

To view the geocoded results, select all from the table (in dBeaver, you can right-click the resulting table and export it to a CSV) 

select * from geocodedaddresses g ;

Uploaded Image (Thumbnail)

To compare results to base maps, CSV files with latitude and longitude values can be imported to QGIS or ArcGIS Pro