Sql 计算哪一对坐标在另一对的距离内

Sql 计算哪一对坐标在另一对的距离内,sql,sql-server-2008,geometry,distance,Sql,Sql Server 2008,Geometry,Distance,我需要一些关于以下问题的帮助: 我有一个表X,其中存储了一些街道名称和一对坐标 表十 Street | x | y street1, 22.342342, 44.234242 street2, 23.4324324, 44.432554 etc. 例如,如果我的输入是street 1数据,我希望找到street 1 500米半径范围内的其他街道。如果不在SQL Server中使用地理信息,如何做到这一点?如果不使用映射软件,最好的方法是计算两点之间的直线距离 这是一个很好的链接,可以解释我过

我需要一些关于以下问题的帮助: 我有一个表X,其中存储了一些街道名称和一对坐标

表十

Street | x | y
street1, 22.342342, 44.234242
street2, 23.4324324, 44.432554

etc.

例如,如果我的输入是street 1数据,我希望找到street 1 500米半径范围内的其他街道。如果不在SQL Server中使用地理信息,如何做到这一点?

如果不使用映射软件,最好的方法是计算两点之间的直线距离

这是一个很好的链接,可以解释我过去使用过的
Haversine
方法

以下是显示计算的代码段:

function haversineDistance(latlong1,latlong2)
{
    var lat1 = DegtoRad(latlong1.Latitude);
    var lon1 = DegtoRad(latlong1.Longitude);
    var lat2 = DegtoRad(latlong2.Latitude);
    var lon2 = DegtoRad(latlong2.Longitude);
    var dLat = lat2-lat1;
    var dLon = lon2-lon1;
    var cordLength = Math.pow(Math.sin(dLat/2),2)+Math.cos(lat1)*Math.cos(lat2)*Math.pow(Math.sin(dLon/2),2);
    var centralAngle = 2 * Math.atan2(Math.sqrt(cordLength), Math.sqrt(1-cordLength));
    return earthRadius * centralAngle;
}

如果坐标为笛卡尔坐标且以米为单位,则可以执行此操作以返回相应的街道:

SELECT             
     X.Street 
FROM             
     X as X,             
     X as REF             

WHERE             
    REF.Street = 'street1' and
    X.Street <> 'street1' and 
    SQRT(SQUARE(X.x - REF.x) + SQUARE(X.y - REF.y)) < 500
选择
十街
从…起
X作为X,
X作为参考
哪里
参考街道=‘街道1’和
十.街"一号街"及
SQRT(正方形(X.X-参考X)+正方形(X.y-参考y))<500
其中,
'street1'
可以是任何输入街道。如果重要的话,
X.Street'street1'
行可以避免返回输入街道

可能相关: