Using a Custom Geocoder
By default OneView and OneLink use either the Google or Esri ArcGIS geocoding service to help your staff and users find locations on a map.
Geocoding is taking an address and turning it into a Lat/Long while reverse Geocoding is taking a Lat/Long and turning it into an address.
The geocoding services from Google and Esri also provide searching by points of interest and intersections. These services are commercial grade and used to power many applications, and are very reliable. However some cities prefer to use their own geocoders in order to deliver services to their residents. It's important to note that there are some drawbacks to using custom geocoders.
Custom | Google/ArcGIS | |
Completeness | Tends to be updated in real time as changes to city parcels are changed. | Can lag behind the official record for a short while. |
Speed/uptime | Dependent on City's IT Infrastructure. | World class, infrastructure used to power google and ArcGIS global services. |
Search Results | Dependent on city's GIS complexity, search results are highly dependent on city fine tuning their ArcGIS system. | Google and ArcGIS are gold standard for searching, their systems are very fined tuned with natural language processing algorithms. |
Cities can also implement a hybrid system, where searches against their existing geocoder will fall back on to Google or ArcGIS for search results. However this option does incur a slight performance hit as users may need to do 2 geocoding searches instead of 1.
Custom Geocoder Requirements
The Customer must provide RockSolid with the following REST/JSON endpoints patterned after the ArcGIS Online geocoding services.
- http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/findAddressCandidates
- http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/reverseGeocode
Geocoding Service URL Requirements:
Pattern: | https://{customer_custom_geocoding_base_url}/GeocodeServer/findAddressCandidates?SingleLine={Address}&outSR=4326&outFields=*&f=pjson |
Input Vars:
|
{Address} |
Input Examples: |
143 Pine Chapel 2007 Cunningham 2007 Cunningham Dr Devonshire and Cynthia Gunter & Raintree |
Output: | X/Y coordinates must projected as SRID: 4326 |
Example: |
Address: 1545 Sawtelle Blvd, Los Angeles, CA 90025 http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/findAddressCandidates?singleLine=1545+Sawtelle+Blvd%2c+Los+Angeles%In all result cases, the first match will be used and must be in the format attached as findAddressCandidate.json |
Reverse-Geocoding Service URL Requirements:
Pattern: | https://{customer_custom_geocoding_base_url}/GeocodeServer/reverseGeocode?location={"x":{X},"y":{Y},"spatialReference":{"wkid":4326}}&outSR=Input |
Vars: | {X}, {Y} |
Input Examples: |
Y=37.0439873, X=-76.3844567 Y=337.0339143, X=-76.3924657 Y=37.0320313, X=-76.3912827 |
Output: | X/Y coordinates must projected as SRID: 4326 |
Example: X: |
X: -118.449149 Y: 34.047141 http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/reverseGeocode?location=-118.449149,34.047141&outSR=4326&f=pjson |
In all result cases, the first match will be used and must be in the format attached as reverseGeocode.json
Best Practices
When setting up a custom geocoder please run tests in the Geocoder sandbox to verify that speed and search results are satisfactory.
When setting up a default geocoder include a search extent so searches only take place in areas that are releavent to the customer.