Stored procedures 通过存储过程sql server调用Google matrix distance api
我想通过存储过程调用Google的Distance Matrix Api…这样我将传递两个参数作为起点和终点,并从SP获得距离和小时数…提前感谢我已经完成了…如果以后有人需要,我将发布它…我在这里制作一个SP…将Pin码作为参数传递给它并获得距离结果。。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
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
结束
使用直接距离