728x90
오늘은 PHP , MySQL 쿼리문을 Haversine 공식으로 활용하여 GET 요청에서 위도와 경도 값을 가져와 이를 기반으로 거리를 계산하고. 그런 다음 5 킬로미터 이내의 위치에 저장된 데이터를 데이터베이스에서 가져와 표시하는 예제를 만들어 보겠습니다.
Haversine 공식이란?
Haversine 공식은 경도 와 위도 고려하여 구 위의 두 점 사이의 대원 거리를 결정하는 공식입니다.
https://en.wikipedia.org/wiki/Haversine_formula
우선 제가 저장했던 MySQL DB에 저장된 데이터 입니다.
다음으로 PHP 코드입니다.
<?php
// 모든 오류를 표시하도록 설정
error_reporting(E_ALL);
ini_set("display_errors", 1);
// 데이터베이스 연결 정보
$host = ""; // 데이터베이스 서버의 호스트 이름
$user = ""; // 데이터베이스 사용자명
$password = ""; // 데이터베이스 암호
$db = ""; // 데이터베이스 이름
$con = mysqli_connect($host, $user, $password, $db); // 데이터베이스에 연결
// GET 요청에서 위도와 경도 가져오기
$latitude=$_GET['latitude']; // GET 요청에서 위도 값 가져오기
$longitude=$_GET['longitude']; // GET 요청에서 경도 값 가져오기
// 거리를 계산하고 관련 정보를 선택하는 SQL 쿼리
$sql_query = "SELECT mento_name,
(6371
*acos(
cos(radians($longitude))
*cos(radians(Latitude))
*cos(radians(Longitude) - radians($latitude))
+sin(radians($longitude))
*sin(radians(Latitude))
)
)
AS distance
FROM mento_sub_resume
HAVING distance < 5
ORDER BY distance ASC"; // 거리를 계산하고 관련 정보를 선택하는 SQL 쿼리
$res=mysqli_query($con,$sql_query); // SQL 쿼리 실행
while ($row= mysqli_fetch_assoc($res)) {
echo $row['mento_name']."<br>"; // 쿼리 결과에서 'mento_name'을 표시
}
?>
해당 파일에 GET요청을 URI 뒤에 이런식으로 적어보세요
yourAddr/phpFileName.php?latitude=127.0396007&longitude=37.5482659
latitude=127.0396007&longitude=37.5482659 해당 좌표는 수성구쪽 좌표입니다.
해당 좌표로 요청한 5키로미터 이내의 사람들을 출력한 결과입니다.
'PHP' 카테고리의 다른 글
[PHP] 변수 사용법 및 관련 메소드 예제 (0) | 2023.12.09 |
---|---|
[PHP] 에러 보고 받기 (2) | 2023.11.29 |
[PHP] ERROR 대비 종료 시 실행할 메소드 설정하기 (0) | 2023.11.19 |
[PHP] 사용자 정의 예외 처리기[set_exception_handler()] 정의하기 (0) | 2023.11.10 |
[PHP] 사용자 정의 오류 처리기[set_error_handler()] 정의하기 (0) | 2023.10.31 |