2013-01-24 1 views
1

현재지도 위치 근처에있는 일반 상점 목록을 표시하려고합니다.Google지도 + haversine 수식이있는 SQL Server의 현재 위치 근처에 장소

모든 것이 정상적으로 작동하지만 현재지도 위치에 인접한 곳이없는 SQL Server 데이터베이스에서 많은지도를 저장할 수 있습니다.

예 :

나는 DB에 독일에있는 상점이 있습니다

Venue  Venue_Lat  Venue_Lng 
Bookstore 51.165712  10.451547 

내가있는 하버 사인 수식을 사용하고 내 절차 [GetNearbyLocations] 가정하는 상점을 검색하기 위해 저장 현재 위치에서 50 마일 이내에 있다고 가정하면 반경 50 마일의 미국으로 현재 위치를 통과합니다.

Radius: 50 
USA Lat: 38.5554745 
USA Lng: -95.6649999 

독일에서 상점이 호출됩니다. 심지어 50 마일 반경 내에 있지는 않지만. 수식이 100 % 정확하지는 않지만 이것이 보통입니까? 누구든지이 점에 대해 친절하게 조언을 해줄 수 있습니까? 감사.

SPROC의 일부 :

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 

답변

1

이 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); 

당신은이를 수정해야합니다을 사용하여 소송

수정 수식에 추가 계산이 있습니다. 나는 당신이 가지고 있어야하는 것을 보여주기 위해 나의 진술을 편집했다. 나는 대괄호를 제거하고 a[Stores] a에서 가져오고 별칭은 필요 없지만 SQL Server가 없으므로 쿼리를 실행할 수 없습니다.

"SELECT 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 HAVING distance < @Radius ORDER BY distance LIMIT 0 , 20" 
+0

내 실수이지만 이전에 실제로 동일한 결과를 산출하는 하베스틴 수식을 사용했습니다. 어쨌든 내 게시물을 편집했습니다. – k80sg

+0

감사. 수식이 맞다고 생각합니다. 오류가 제 끝 부분에 있는지 확인하기 위해 귀하의 측면에서 직접 시도해 볼 수 있습니까? – k80sg

+0

실행해야하는 코드가 수정되었습니다. SQL 서버가 없으므로 실행할 수 없습니다. –

관련 문제