Google map+使用haversine公式从SQL Server将位置放在当前位置附近

Google map+使用haversine公式从SQL Server将位置放在当前位置附近,sql,sql-server,google-maps,google-maps-api-3,Sql,Sql Server,Google Maps,Google Maps Api 3,我正在尝试显示当前地图位置附近的常规商店列表 一切正常,但我刚刚意识到,无论我将地图平移到何处,许多不靠近当前地图位置的商店都会收到来自我的SQL Server DB的调用 例如: 我在德国DB有一家商店: Venue Venue_Lat Venue_Lng Bookstore 51.165712 10.451547 我在我的存储过程[GetNearbyLocations]中使用Haversine公式来检索假定位于当前位置50英里范围内的商店,比如我

我正在尝试显示当前地图位置附近的常规商店列表

一切正常,但我刚刚意识到,无论我将地图平移到何处,许多不靠近当前地图位置的商店都会收到来自我的SQL Server DB的调用

例如:

我在德国DB有一家商店:

Venue        Venue_Lat       Venue_Lng
Bookstore    51.165712       10.451547
我在我的存储过程[GetNearbyLocations]中使用Haversine公式来检索假定位于当前位置50英里范围内的商店,比如我在一个半径为50英里的美国的当前位置通过:

Radius: 50
USA Lat: 38.5554745
USA Lng: -95.6649999
德国的这家商店也会接到电话,尽管它不在50英里半径之内。我理解并接受公式并非100%准确,但这是否正常?请任何人对此提出建议。谢谢

存储过程的一部分:

DECLARE @intMilesModifier int
SET @intMilesModifier = 3959

    SELECT .... some fields,
     [Venue_Lat],
     [Venue_Long],
    (@intMilesModifier*acos(cos(radians(@dmlLat))*cos(radians(Venue_Lat))*cos(radians(Venue_Long)-radians(@dmlLng))+sin(radians(@dmlLat))*sin(radians(Venue_Lat)))) AS distance
    FROM  [Stores] a 
    WHERE (@intMilesModifier*acos(cos(radians(@dmlLat))*cos(radians(Venue_Lat))*cos(radians(Venue_Long)-radians(@dmlLng))+sin(radians(@dmlLat))*sin(radians(Venue_Lat)))) < @Radius

这个PHP/MySQL PDO SQL语句使用公式6371表示公里,3959表示英里

$stmt = $dbh->prepare("SELECT  name, lat, lng, ( 3959 * acos( cos( radians(?) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(?) ) + sin( radians(?) ) * sin( radians( lat ) ) ) ) AS distance FROM gbstn HAVING distance < ? ORDER BY distance LIMIT 0 , 20");
    // Assign parameters
    $stmt->bindParam(1,$center_lat);//coordinate of center
    $stmt->bindParam(2,$center_lng);//coordinate of center
    $stmt->bindParam(3,$center_lat);
    $stmt->bindParam(4,$radius);

这个PHP/MySQL PDO SQL语句使用公式6371表示公里,3959表示英里

$stmt = $dbh->prepare("SELECT  name, lat, lng, ( 3959 * acos( cos( radians(?) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(?) ) + sin( radians(?) ) * sin( radians( lat ) ) ) ) AS distance FROM gbstn HAVING distance < ? ORDER BY distance LIMIT 0 , 20");
    // Assign parameters
    $stmt->bindParam(1,$center_lat);//coordinate of center
    $stmt->bindParam(2,$center_lng);//coordinate of center
    $stmt->bindParam(3,$center_lat);
    $stmt->bindParam(4,$radius);

谢谢,我的错误,但事实上,我以前使用的是哈维辛公式,它产生了相同的结果,不管怎样,我已经编辑了我的帖子。谢谢。我认为这个公式是正确的。您是否可以在您这边尝试一下,以确保错误在我这边?我已经修改了应该运行的代码。我不能运行它,因为我没有SQL Server谢谢,我的错误,但实际上我以前使用的是Harvesine公式,它产生了相同的结果,无论如何我已经编辑了我的帖子。谢谢。我认为这个公式是正确的。您是否可以在您这边尝试一下,以确保错误在我这边?我已经修改了应该运行的代码。我无法运行它,因为我没有SQL server