| layout | default |
|---|---|
| title | Geocoding Setup |
| parent | Configuration |
| nav_order | 2 |
{: .no_toc }
Configure address extraction and geocoding for your region. {: .fs-6 .fw-300 }
{: .no_toc .text-delta }
- TOC {:toc}
iCAD Dispatch extracts addresses from radio transcripts and converts them to map coordinates.
Primary provider: Nominatim (OpenStreetMap) — free, no API key required Fallback: Google Maps Geocoding API — requires API key, paid after free tier
- Go to Dashboard → Systems → Your System
- Click Address Extraction tab
- Toggle Enable Address Extraction
- Save
Geocoding regions tell the system which state/province and counties to accept results from.
- In the Address Extraction settings, find Geocoding Regions
- Click Add Region
- Select your state/province from the dropdown
Examples:
ON(Ontario)NY(New York)TX(Texas)CA(California)
- Click Add County within your state
- Enter county names one per line
Examples:
Renfrew County
Ottawa County
Carleton County
Why counties? The geocoder validates that results fall within your configured counties. This prevents false matches (e.g., a street in another city with the same name).
Nominatim is the default geocoder and requires no API key.
| Setting | Description | Default |
|---|---|---|
| Primary Geocoder | Select Nominatim | Nominatim |
| Use Bounding Box | Restrict searches to your configured regions | Enabled |
| User Agent | Identifies your requests to OSM | icad_dispatch (your@email.com) |
Nominatim has strict rate limits:
- 1 request per second
- Maximum identifiable traffic
iCAD Dispatch respects these limits automatically. For high-volume dispatch centers, consider:
- Self-hosting Nominatim (instructions)
- Using Google Maps as fallback
Google Maps provides better results for rural addresses and private roads.
- Go to Google Cloud Console
- Create a new project or select existing
- Enable the Geocoding API
- Create an API key under Credentials
- Restrict the key to Geocoding API only
- Add to your
.envfile:GOOGLE_MAPS_API_KEY=your-api-key-here - Restart containers:
docker compose -f docker-compose.production.yml restart icad_dispatch
- Free tier: $200/month credit (approx. 40,000 geocoding requests)
- Paid tier: $5 per 1,000 requests
- Most small-medium agencies stay within free tier
- Go to Dashboard → Test Upload
- Upload a test audio file with a known address
- Check the extracted address and coordinates
- View the location on the public map
curl -X POST https://dispatch.yourdomain.com/api/call-upload \
-H "X-API-Key: YOUR_API_KEY" \
-F "audio=@test.mp3" \
-F "talkgroup=410837" \
-F "system_id=1"Then check the call in the dashboard or public map.
- Check the transcript quality — garbled audio = poor extraction
- Verify the county whitelist includes the correct county
- Try enabling Google Maps fallback
- Check Nominatim rate limits in logs
- Verify county names match exactly (e.g., "Renfrew County" not "Renfrew")
- Ensure the state code is correct (e.g.,
ONnotOntario) - Check bounding box is enabled
- Check internet connectivity from the container
- Verify Nominatim is accessible:
curl https://nominatim.openstreetmap.org/search?q=test&format=json - Consider adding Google Maps fallback
- Nominatim enforces 1 req/s rate limit
- For high volume, self-host Nominatim or use Google Maps
- Check if address extraction LLM is enabled (adds latency)
For high-volume dispatch centers (100+ calls/day):
# Using Docker
docker run -d \
--name nominatim \
-p 8080:8080 \
-v nominatim-data:/var/lib/postgresql/14/main \
mediagis/nominatim:4.2Then update iCAD to use http://nominatim:8080 instead of the public API.