Geocoding sub-addresses

1037
11
02-09-2022 06:57 AM
Darrin-Smith
New Contributor II

ArcGIS Pro 2.9 Map tab-->Locate Tool-->Search

The issue is the Locator will not return results for an address with sub units (e.g. 123 Main Street Apt 1). It only returns one choice for the primary address.  I have created a geocoding locator as a PointAddress Role and input all parsed fields including Unit, Building, Level in addition to Prefix, Name, Type, etc.

According to Primary locator roles, or Tips for improving geocoding quality, for field mapping, I can either reference a Unit field or I can reference the same Unit field for From/To where both the values are the same.

I have also enabled sub-address suggestions in my Locator properties Suggestions for partial subaddresses.

Here is what I expect the results to be where in this example they actually use a keyword Unit, but I don't believe that is even necessary.  Using type ahead, 3700 Dean Dr. should return all the choices.

DarrinSmith_0-1644417874237.png

 

Tags (3)
11 Replies
Michael_Knapp
New Contributor III

Did you ever find resolution to this? We're also having issues with subaddresses not being suggested.... we're using Pro 3.1

0 Kudos
Darrin-Smith
New Contributor II

Yes our locator is now performing as expected.  Here are things I either learned from esri tech support or learned through trial and error:

For the Create Locator tool:

  • if you have buildings, use the BUILDING input not the BUILDING NAME input

DarrinSmith_0-1691097652967.png

DarrinSmith_2-1691097938631.png

 

  • specify a POINT ADDRESS role if you have points that represent the location
  •  
  • if you want better return for the type of unit, e.g. Unit, Suite, Apartment, populate a field to store those values and reference that field in the row for UNIT TYPE
  •  
  • After your locator is created, examine the Locator Properties under Geocoding Options.  Make sure all the boxes are checked for Subaddress.  Also for type ahead performance, I use “Suggest as partial unit is typed”

DarrinSmith_1-1691097652971.png

 

  • For interactive Locate within Pro or through a webmap, (https://nconemap.maps.arcgis.com/apps/instant/media/index.html?appid=c51b8ef4c4334835807a2850b7daa85...) add on a number in your type ahead to retrieve sub units (for example at type “215 n pine 1” to return many returns where the unit number begins with 1 
  •  
  • For interactive Locate within Pro, make sure “Show All Candidates” is checked
  •  
  • If you have sub addresses but no parent, the sub address won’t be found.  You must create a parent.  For example, if I have a point “100 MAIN STREET UNIT 1”, but there are no points for “100 MAIN STREET”, Unit 1 won’t be found.

 

Michael_Knapp
New Contributor III
  • If you have sub addresses but no parent, the sub address won’t be found.  You must create a parent.  For example, if I have a point “100 MAIN STREET UNIT 1”, but there are no points for “100 MAIN STREET”, Unit 1 won’t be found.

Thanks Darrin........ not having a parent address was our issue. We scripted those to be added and the subaddress portion of the locator works perfectly now.

AdamCottrell
Occasional Contributor II

Would you care to share the script to that you used to add points based off of subaddesses?  I'm running into the same issue.  I'm currently in the process of moving our LGIM data into Pro and I'm finding a lot of nuances that seem to break years of work done in ArcMap.  

0 Kudos
Darrin-Smith
New Contributor II

Attached zip contains a readme and a python script.

  • Assumes you're running within Visual Studio Code and not Pro.  It uses many pathname variables you would need to define.
  • The premise of the script is:
    • Export a selected set of your addresses that contain sub addresses e.g. 100 MAIN ST UNIT 1
    • Use a cursor to mimic ADDJOIN that determines if a parent exists in the primary set e.g. does 100 MAIN ST exists and if not create a new faux point.
    • Create a mean center faux point based on the cluster of the sub addresses that don't have a parent.
    • Append the faux set and the original set to create a complete set that can be used as input to CREATE LOCATOR
  •  
0 Kudos
AdamCottrell
Occasional Contributor II

@Darrin-Smith Thank you!

0 Kudos
AdamCottrell
Occasional Contributor II

I'm having issues with the Global and boto3 modules.  The "ProgressBar" too but I'm less worried about that at the moment.  See errors below.  Running Python version 3.9.18.  I will try to do more research on it this evening try again tomorrow.  Thanks for the assistance.  I'm fairly new to python.

 

AdamCottrell_0-1709840570739.png

 

0 Kudos
Darrin-Smith
New Contributor II

Keep in mind, this code is just one part of thousands of lines to accomplish many specific tasks.  The imports at the top of the script are just residual for my purposes.  I would say you can delete all those lines except for import arcpy and possibly import datetime as time is reported through the script.  If you look at the INPUTS/OUTPUTS near the top, I tried to give you an idea of variables used in the script.  I retain all my variables in Global hence the import statement you are having issues with.  You will need to define your local variables and my recommendation would be to use the ones I have to do so.  For example, the variable for "in_layer_name_path" should point to your featureclass for all your address points.  You'll also find I use fields you might not have and schema's I use that might not be applicable.  At a minimum, to resolve geocoding issues with sub addresses, you need to create a faux point that has a parent and append that point to your master set and then run the Create Locator on that set in order to account for the parent.  My script will tell which points don't have parents.  Then your geocode result should give you options for the parent sub addresses.  My script goes one step further to actually determine where the mean center of the faux point should be based on proximity to all the sub addresses.  Hope this helps.

0 Kudos
AdamCottrell
Occasional Contributor II

Thanks.  I made the changes to the input/outputs.  I really appreciate the notes!  I was confused with the imports mostly.  So that explains it.

Again, thank you so much.  I appreciate your assistance and response.  I should be able to get this off the ground shortly.  ...As long as I'm not pulled in another direction before then.  😕

0 Kudos