Stored procedures 通过存储过程sql server调用Google matrix distance api

Stored procedures 通过存储过程sql server调用Google matrix distance api,stored-procedures,google-api,Stored Procedures,Google Api,我想通过存储过程调用Google的Distance Matrix Api…这样我将传递两个参数作为起点和终点,并从SP获得距离和小时数…提前感谢我已经完成了…如果以后有人需要,我将发布它…我在这里制作一个SP…将Pin码作为参数传递给它并获得距离结果。。 I Have Done It...I Am Posting It If Later Any Body Need This....I Make An SP Here...Pass Pin Codes as Parameters to it an

我想通过存储过程调用Google的Distance Matrix Api…这样我将传递两个参数作为起点和终点,并从SP获得距离和小时数…提前感谢我已经完成了…如果以后有人需要,我将发布它…我在这里制作一个SP…将Pin码作为参数传递给它并获得距离结果。。
I Have Done It...I Am Posting It If Later Any Body Need This....I Make An SP Here...Pass Pin Codes as Parameters to  it and get Distance As Result..

USE [CalculateDistance]
GO
/****** Object:  StoredProcedure [dbo].[CalculateDistence]    Script Date: 12/1/2014 12:49:42 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Rajay Sachdeva>
-- Create date: <Create 25/11/2014,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[CalculateDistence] --'','','','37064','','','','78701',''
(
@ToAddress varchar(100) =null,
@ToCity varchar(100)=null,
@ToState varchar(100)=null,
@ToPostCode varchar(100)=null,
@FromAddress varchar(100)=null,
@FromCity varchar(100)=null,
@FromState varchar(100)=null,
@FromPostCode varchar(100)=null,
@DistanceInKilometers varchar(100) output
)
AS

     Declare @Object as Int;
Declare @ResponseText as Varchar(8000);
Declare @serviceUrl as varchar(500)
  set @serviceUrl = 'http://maps.googleapis.com/maps/api/distancematrix/xml?origins=' +@ToAddress+@ToCity+@ToState+@ToPostCode+
   '&destinations=' +@FromAddress+@FromCity+@FromState+ @FromPostCode +'&mode=driving&language=en-EN&units=metric;'
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'get',
                @serviceUrl, --Your Web Service Url (invoked)
                 'false'
Exec sp_OAMethod @Object, 'send'
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT

Declare @Response as XML

--Select @ResponseText as XMLList

SET @Response = CAST(@ResponseText AS XML);

  Declare @Status as varchar(20)
   Declare @Distance as varchar(20)


  set @Status= @Response.value('(DistanceMatrixResponse/row/element/status)[1]', 'varchar(20)') 
  print @Status
  if(@Status='ZERO_RESULTS')

   Begin

                     set @Distance=@Status
   End
   else

   Begin
   set @Distance=@Response.value('(DistanceMatrixResponse/row/element/distance/text)[1]', 'varchar(20)') 
   End
  --Select @Response.value('(DistanceMatrixResponse/row/element/distance/text)[1]', 'varchar(10)') as Distance 
  select @Distance as Distance
使用[计算站] 去 /******对象:StoredProcess[dbo].[CalculatedInstance]脚本日期:12/1/2014 12:49:42 PM******/ 将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 -- ============================================= --作者: --创建日期: --说明: -- ============================================= 更改过程[dbo]。[CalculateDistence]-'','','','37064','','','','','','78701',' ( @ToAddress varchar(100)=空, @ToCity varchar(100)=空, @ToState varchar(100)=空, @拓扑代码varchar(100)=空, @FromAddress varchar(100)=空, @FromCity varchar(100)=空, @FromState varchar(100)=null, @FromPostCode varchar(100)=空, @距离仪表varchar(100)输出 ) 作为 将@Object声明为Int; 将@ResponseText声明为Varchar(8000); 将@serviceUrl声明为varchar(500) 设置@serviceUrl=http://maps.googleapis.com/maps/api/distancematrix/xml?origins=“++@ToAddress++@ToCity++@ToState++@ToPostCode”+ “&destinations=”++@FromAddress++@FromCity++@FromState++@FromPostCode+”&mode=driving&language=en&units=metric;' Exec sp_OACreate'MSXML2.XMLHTTP',@Object OUT; Exec sp_OAMethod@Object'open',NULL'get', @serviceUrl,--您的Web服务Url(已调用) “假” Exec sp_OAMethod@Object'send' Exec sp_OAMethod@Object,'responseText',@responseText输出 将@Response声明为XML --选择@ResponseText作为XMLList 设置@Response=CAST(@ResponseText为XML); 将@Status声明为varchar(20) 将@Distance声明为varchar(20) set@Status=@Response.value('(DistanceMatrixResponse/row/element/Status)[1],'varchar(20)' 打印@状态 如果(@Status='ZERO_RESULTS') 开始 设置@Distance=@状态 终点 其他的 开始 设置@Distance=@Response.value('(DistanceMatrixResponse/row/element/Distance/text)[1],'varchar(20)' 终点 --选择@Response.value('(DistanceMatrixResponse/row/element/distance/text)[1],'varchar(10')作为距离 选择@Distance作为距离
可能有点晚,但这也可以:

CREATE FUNCTION [dbo].[CalculateGoogleDistance]
    (
    @Latitude1   nvarchar(1000),
    @Longitude1  nvarchar(1000),
    @Latitude2   nvarchar(1000),
    @Longitude2  nvarchar(1000)
    )
returns nvarchar(1000)
as

begin


DECLARE @g geography;
DECLARE @h geography;
SET @g = geography::STGeomFromText('POINT(' + @Latitude1 + ' ' + @Longitude1 + ')', 4326);
SET @h = geography::STGeomFromText('POINT(' + @Latitude2 + ' ' + @Longitude2 + ')', 4326);


DECLARE @dist float
DECLARE @distType varchar(10)

if FLOOR(CONVERT(float, @g.STDistance(@h)))  < 100
BEGIN
SET @dist = FLOOR(CONVERT(float, @g.STDistance(@h)))
SET @distType = 'cm'
END

ELSE if FLOOR(CONVERT(float, @g.STDistance(@h)))  < 1000
BEGIN
SET @dist = FLOOR(CONVERT(float, @g.STDistance(@h)))
SET @distType = 'm'
END
ELSE    
BEGIN
SET @dist = FLOOR(CONVERT(float, @g.STDistance(@h))/1000)
SET @distType = 'km'
END

return CAST(@dist as nvarchar(1000)) + ' ' + @distType


end
创建函数[dbo]。[CalculateLogleDistance]
(
@Latitude1 nvarchar(1000),
@Longitude1 nvarchar(1000),
@Latitude2 nvarchar(1000),
@Longitude2 nvarchar(1000)
)
返回nvarchar(1000)
作为
开始
宣布@g地理;
宣布@h地理;
SET@g=geography::stgeomefromtext('POINT(+@Latitude1++'++@Longitude1+'),4326);
SET@h=geography::stgeomefromtext('POINT(+@Latitude2++'++@Longitude2+'),4326);
声明@dist float
声明@distType varchar(10)
如果地板(转换(浮动,@g.STDistance(@h)))<100
开始
设置@dist=FLOOR(转换(float,@g.STDistance(@h)))
设置@distType='cm'
结束
否则,如果地板(转换(浮动,@g.STDistance(@h))<1000
开始
设置@dist=FLOOR(转换(float,@g.STDistance(@h)))
SET@distType='m'
结束
其他的
开始
设置@dist=FLOOR(转换(浮动,@g.STDistance(@h))/1000)
设置@distType='km'
结束
返回类型(@dist为nvarchar(1000))+'+@distType
结束

使用直接距离