Address Geocoding

Address Geocoding

Auto-geocode addresses using OpenStreetMap Nominatim (free, no API key required)

function geocodeAddress(addressString) { var result = { "success": false, "error": "" }; if (len(trim(addressString)) EQ 0) { result.error = "Empty address"; return result; } try { var httpService = new http(); httpService.setMethod("GET"); httpService.setUrl("https://nominatim.openstreetmap.org/search?q=" & urlEncodedFormat(addressString) & "&format=json&limit=1"); httpService.addParam(type="header", name="User-Agent", value="Payfrit/1.0"); httpService.setTimeout(10); var httpResult = httpService.send().getPrefix(); if (httpResult.statusCode CONTAINS "200") { var data = deserializeJSON(httpResult.fileContent); if (arrayLen(data) GT 0) { result.success = true; result.lat = data[1].lat; result.lng = data[1].lon; return result; } result.error = "No results found"; return result; } result.error = "HTTP " & httpResult.statusCode; return result; } catch (any e) { result.error = e.message; return result; } } function buildAddressString(line1, line2, city, zipCode) { var parts = []; if (len(trim(line1))) arrayAppend(parts, trim(line1)); if (len(trim(line2))) arrayAppend(parts, trim(line2)); if (len(trim(city))) arrayAppend(parts, trim(city)); if (len(trim(zipCode))) arrayAppend(parts, trim(zipCode)); return arrayToList(parts, ", "); } SELECT AddressLine1, AddressLine2, AddressCity, AddressZIPCode FROM Addresses WHERE AddressID = UPDATE Addresses SET AddressLat = , AddressLng = WHERE AddressID =
Geocoded Address ID #addressId#: #geo.lat#, #geo.lng#
Failed: #geo.error#
SELECT AddressID, AddressLine1, AddressLine2, AddressCity, AddressZIPCode FROM Addresses WHERE (AddressLat IS NULL OR AddressLat = 0) AND AddressLine1 IS NOT NULL AND AddressLine1 != '' UPDATE Addresses SET AddressLat = , AddressLng = WHERE AddressID =
Geocoded #successCount# addresses. #failCount# failed.
SELECT b.BusinessID, b.BusinessName, a.AddressID, a.AddressLine1, a.AddressLine2, a.AddressCity, a.AddressZIPCode, a.AddressLat, a.AddressLng FROM Businesses b LEFT JOIN Addresses a ON b.BusinessAddressID = a.AddressID ORDER BY b.BusinessName

#missingCount# addresses missing coordinates. (~#missingCount# seconds due to rate limiting)

Business Address Coordinates Action
#addresses.BusinessName# #chr(10003)# #chr(9679)# #addresses.AddressLine1#, #addresses.AddressLine2#
#addresses.AddressCity# #addresses.AddressZIPCode# No address
#numberFormat(addresses.AddressLat, "_.______")#
#numberFormat(addresses.AddressLng, "_.______")# -