CREATE PROCEDURE [dbo].[Usp_TomTomGeo]
@ADDRESS VARCHAR(80) = NULL OUTPUT,
@STREET VARCHAR(128) = NULL OUTPUT,
@HOMENUMBER VARCHAR(80) = NULL OUTPUT,
@HOMENUMBERADD VARCHAR(80) = NULL OUTPUT,
@CITY VARCHAR(40) = NULL OUTPUT,
@STATE VARCHAR(40) = NULL OUTPUT,
@COUNTRY VARCHAR(40) = NULL OUTPUT,
@ZIP VARCHAR(20) = NULL OUTPUT,
@COUNTY VARCHAR(40) = NULL OUTPUT,
@LON NUMERIC(9,6) = NULL OUTPUT,
@LAT NUMERIC(9,6) = NULL OUTPUT,
@URI VARCHAR(1024) = NULL OUTPUT,
@KEY VARCHAR(128)
AS
BEGIN
SET NOCOUNT ON
DECLARE @URL varchar(MAX)
SET @URL = ‘https://api.tomtom.com/search/2/geocode/’ +
CASE WHEN @ADDRESS IS NOT NULL THEN @ADDRESS ELSE ” END +
CASE WHEN @CITY IS NOT NULL THEN ‘, ‘ + @CITY ELSE ” END +
CASE WHEN @STATE IS NOT NULL THEN ‘, ‘ + @STATE ELSE ” END +
CASE WHEN @ZIP IS NOT NULL THEN ‘, ‘ + @ZIP ELSE ” END +
CASE WHEN @COUNTRY IS NOT NULL THEN ‘, ‘ + @COUNTRY ELSE ” END
SET @URL = @URL+’.xml’+’?key=’+@KEY+’&limit=1′
print @URL
DECLARE @RESPONSE VARCHAR(8000)
DECLARE @XML XML
DECLARE @OBJ INT
DECLARE @RESULT INT
DECLARE @HTTPSTATUS INT
DECLARE @ERRORMSG VARCHAR(MAX)
EXEC @RESULT = sp_OACreate ‘MSXML2.ServerXMLHttp’, @OBJ OUT
BEGIN TRY
EXEC @RESULT = sp_OAMethod @OBJ, ‘open’, NULL, ‘GET’, @URL, false
EXEC @RESULT = sp_OAMethod @OBJ, ‘setRequestHeader’, NULL, ‘Content-Type’, ‘application/x-www-form-urlencoded’
EXEC @RESULT = sp_OAMethod @OBJ, send, NULL, ”
EXEC @RESULT = sp_OAGetProperty @OBJ, ‘status’, @HTTPSTATUS OUT
EXEC @RESULT = sp_OAGetProperty @OBJ, ‘responseXML.xml’, @RESPONSE OUT
END TRY
BEGIN CATCH
SET @ERRORMSG = ERROR_MESSAGE()
END CATCH
EXEC @RESULT = sp_OADestroy @OBJ
IF (@ERRORMSG IS NOT NULL) OR (@HTTPSTATUS <> 200) BEGIN
SET @ERRORMSG = ‘Error in spGeocode: ‘ + ISNULL(@ERRORMSG, ‘HTTP result is: ‘ + CAST(@HTTPSTATUS AS varchar(10)))
RAISERROR(@ERRORMSG, 16, 1, @HTTPSTATUS)
RETURN
END
print @RESPONSE
SET @XML = CAST(@RESPONSE AS XML)
SET @STREET = @XML.value(‘(/response/results/item/address/streetName) [1]’, ‘nvarchar(128)’)
SET @HOMENUMBER = @XML.value(‘(/response/results/item/address/streetNumber) [1]’, ‘nvarchar(80)’)
SET @CITY = @XML.value(‘(/response/results/item/address/localName) [1]’, ‘nvarchar(80)’)
SET @ZIP = @XML.value(‘(/response/results/item/address/extendedPostalCode) [1]’, ‘nvarchar(80)’)
SET @STATE = @XML.value(‘(/response/results/item/address/countrySubdivision) [1]’, ‘nvarchar(80)’)
SET @COUNTRY = @XML.value(‘(/response/results/item/address/countryCode) [1]’, ‘nvarchar(80)’)
SET @COUNTY = @XML.value(‘(/response/results/item/address/municipality) [1]’, ‘nvarchar(80)’)
SET @LON = @XML.value(‘(/response/results/item/position/lon) [1]’, ‘nvarchar(80)’)
SET @LAT = @XML.value(‘(/response/results/item/position/lat) [1]’, ‘nvarchar(80)’)
SELECT
@STREET AS Street
,@HOMENUMBER AS Homenumber
,@CITY AS Residence
,@ZIP AS Zip
,@STATE AS State
,@COUNTRY AS Country
,@COUNTY AS County
,@LON AS Longitude
,@LAT As Latitude
END
GO