将坐标分为longtitue和latitude

Ame*_*iny 1 sql-server function coordinates

我的数据库中的坐标存储为(55.573012889640765,9.72362365248182).我想创建一个能得到这个值的函数并将它们放在@latitude = 55.573012889640765和@long = 9.72362365248182上.

所以实际上函数获取坐标并分别返回两点.我想得到这个,所以我可以用以下函数计算两点之间的距离:

CREATE FUNCTION dbo.fnCalcDistanceKM(@lat1 FLOAT, @lon1 FLOAT, @lat2 FLOAT, @lon2 FLOAT)
RETURNS FLOAT 
AS
BEGIN

    RETURN ACOS(SIN(PI()*@lat1/180.0)*SIN(PI()*@lat2/180.0)+COS(PI()*@lat1/180.0)*COS(PI()*@lat2/180.0)*COS(PI()*@lon2/180.0-PI()*@lon1/180.0))*6371
END
Run Code Online (Sandbox Code Playgroud)

如您所见,此功能需要分离点,在我的数据库中,我将它们作为一个.你能告诉我如何分割部件或修改上述功能以适应我的代码.

先感谢您

Joh*_*van 5

使用SQL的几何函数可以节省一些精力.

declare @coords1 nvarchar(64) = '(55.573012889640765, 9.72362365248182)'
, @coords2 nvarchar(64) = '(56.573012889640765, 9.72362365248182)'

declare @g1 geometry = geometry::STGeomFromText('POINT' + replace(@coords1,',',' '), 0)
, @g2 geometry = geometry::STGeomFromText('POINT' + replace(@coords2,',',' '), 0)
SELECT @g1.STDistance(@g2);
Run Code Online (Sandbox Code Playgroud)

更多信息:http://msdn.microsoft.com/en-us/library/bb933952.aspx

或者,如果您只是想在逗号周围分割字符串,请查看此示例:如何拆分字符串以便我可以访问项目x?