计算哪对坐标在另一对的距离内
Calculate what pair of coordinates are within a distance of another pair
我需要一些帮助来解决以下问题:
我有一个 Table X,我用一对坐标存储一些街道名称。
Table X
Street | x | y
street1, 22.342342, 44.234242
street2, 23.4324324, 44.432554
etc.
例如,如果我的输入是街道 1 数据,我想查找街道 1 500 米半径范围内的其他街道。如何在不使用 SQL 服务器中的地理信息的情况下做到这一点?
在不使用地图软件的情况下,您可以做的最好的事情是计算两点之间的 Straight Line Distance
。
Here 很好 link 解释了我过去使用的 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;
}
如果坐标是笛卡尔坐标且以米为单位,您可以对 return 相应的街道执行此操作:
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
其中 'street1'
可以是任何输入街道。如果这很重要,X.Street <> 'street1'
行可避免输入街道被 return 编辑。
我需要一些帮助来解决以下问题: 我有一个 Table X,我用一对坐标存储一些街道名称。
Table X
Street | x | y
street1, 22.342342, 44.234242
street2, 23.4324324, 44.432554
etc.
例如,如果我的输入是街道 1 数据,我想查找街道 1 500 米半径范围内的其他街道。如何在不使用 SQL 服务器中的地理信息的情况下做到这一点?
在不使用地图软件的情况下,您可以做的最好的事情是计算两点之间的 Straight Line Distance
。
Here 很好 link 解释了我过去使用的 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;
}
如果坐标是笛卡尔坐标且以米为单位,您可以对 return 相应的街道执行此操作:
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
其中 'street1'
可以是任何输入街道。如果这很重要,X.Street <> 'street1'
行可避免输入街道被 return 编辑。