반응형
경도 및 위도 값을 가져온 다음 MySQL 쿼리에 입력하는 작동하는 PHP 스크립트가 있습니다. 저는 MySQL로만 만들고 싶습니다. 내 현재 PHP 코드는 다음과 같습니다.
if ($distance != "Any" && $customer_zip != "") { //get the great circle distance
//get the origin zip code info
$zip_sql = "SELECT * FROM zip_code WHERE zip_code = '$customer_zip'";
$result = mysql_query($zip_sql);
$row = mysql_fetch_array($result);
$origin_lat = $row['lat'];
$origin_lon = $row['lon'];
//get the range
$lat_range = $distance/69.172;
$lon_range = abs($distance/(cos($details[0]) * 69.172));
$min_lat = number_format($origin_lat - $lat_range, "4", ".", "");
$max_lat = number_format($origin_lat + $lat_range, "4", ".", "");
$min_lon = number_format($origin_lon - $lon_range, "4", ".", "");
$max_lon = number_format($origin_lon + $lon_range, "4", ".", "");
$sql .= "lat BETWEEN '$min_lat' AND '$max_lat' AND lon BETWEEN '$min_lon' AND '$max_lon' AND ";
}
누구든지 이것을 완전히 MySQL로 만드는 방법을 알고 있습니까? 나는 인터넷을 조금 탐색했지만 그것에 관한 대부분의 문헌은 꽤 혼란 스럽습니다.
해결 방법
다음은 37, -122 좌표에 대해 반경 25 마일 내에있는 가장 가까운 20 개 위치를 찾는 SQL 문입니다. 해당 행의 위도 / 경도와 대상 위도 / 경도를 기반으로 거리를 계산 한 다음 거리 값이 25 미만인 행만 요청하고 전체 쿼리를 거리별로 정렬하고 결과를 20 개로 제한합니다. 마일 대신 킬로미터로 검색하려면 3959를 6371로 바꿉니다.
SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) )
* cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin(radians(lat)) ) ) AS distance
FROM markers
HAVING distance < 25
ORDER BY distance
LIMIT 0 , 20;
참조 페이지 https://stackoverflow.com/questions/574691
반응형
'MySql' 카테고리의 다른 글
MySQL의 모든 테이블에 대한 모든 열 이름을 얻는 방법은 무엇입니까? (0) | 2020.10.12 |
---|---|
MySQL에서 "오버 헤드"는 무엇을 의미하며, 무엇이 나쁘고 어떻게 해결해야합니까? (0) | 2020.10.12 |
MySQL 설정 저장 (0) | 2020.10.12 |
MySQL PHP에서 select count (*) 쿼리의 결과를 얻는 방법은 무엇입니까? (0) | 2020.10.11 |
MySQL 서버가 잘못된 시간대를 반환합니다. 고급 탭으로 이동하여 수동으로 servertimezone 속성 설정 (0) | 2020.10.11 |
댓글