게시판 리스트 거리순 정렬 질문입니다.

게시판 리스트 거리순 정렬 질문입니다.

QA

게시판 리스트 거리순 정렬 질문입니다.

답변 2

본문

게시판 리스트를 사용자 기준 거리순으로 정렬하려고 하는데요

어렵습니다. 고수님들 아래 스크립트 보시고 조언좀 부탁드립니다."꾸벅"

 

<script>

//게시판리스트를 불러와 wr_1에 주소 검색
var position = [
<?
$sql = "select * from g5_write_atable1 order by wr_num";
$result = sql_query($sql);
while($row = sql_fetch_array($result)) {
  $address = $row['wr_1'];
  $url = "https://dapi.kakao.com/v2/local/search/address.json?query=".urlencode($address);
 
}

//좌표구하기
if($result["documents"][0]->road_address->x){
 $lat = $result["documents"][0]->road_address->y;
 $Ing = $result["documents"][0]->road_address->x;
}else{
 $lat = $result["documents"][0]->address->y;
 $lng = $result["documents"][0]->address->x;
}
curl_close($ch);//종료 
?>
]

 

//거리계산 함수

function getDistance(lat1, lon1, lat2, lon2, unit) {

var radlat1 = Math.PI * lat1/180
var radlat2 = Math.PI * lat2/180
var radlon1 = Math.PI * lon1/180
var radlon2 = Math.PI * lon2/180
var theta = lon1-lon2
var radtheta = Math.PI * theta/180
var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2)
dist = Math.acos(dist)
dist = dist * 180/Math.PI
dist = dist * 60 * 1.1515
if (unit == "k") { dist = dist * 1.609344 }
if (unit == "N") { dist = dist * 0.8684 }
return dist
}

//현재사용자 위치

navigator.geolocation.getCurrentPosition(function(position) => {
 var latitude = position.coords.latitude, // 위도
 var longitude = position.coords.longitude; // 경도

//반복문

for (var i=0; i<position.length; i++) {
var distance = getDistance(latitube, longitube, position[i].latitube, position[i].longitube, "k");
position[i].distance = distance;
}

//디스턴스 정렬

var newTourList = position.sort(function (a, b) {
 if (a.distance > b.distance) {
renturn 1;
}
if (a.distance < b.distance) {
return -1;
}
// a must be equal to b
return 0;
});

} (err) => {
});
</script>

이 질문에 댓글 쓰기 :

답변 2

개념적인 설명으로는..

 

1) DB 의 전체 게시물 리스트를 별도의 배열에 담습니다.

 

2) 별도의 배열에 거리순 값 정보를 추가하여 저장합니다.

 

3) 해당 배열을 거리순 값으로 정렬(sort) 합니다.

 

4) 배열의 내용을 출력합니다.

 

-----------

 

// DB 게시물 정보를 별도 배열($list)에 저장 

for($i = 0; $row = sql_fetch_array($result); $i++) {

  $address = $row['wr_1'];
  $url = "https://dapi.kakao.com/v2/local/search/address.json?query=".urlencode($address);

 

  $list[$i] = $row;  

  $list[$i]['address'] = $address;

  $list[$i]['url'] = $url;

 

  $distance = ~; // 거리값

  $list[$i]['distance'] = $distance;

}

 

// $list 2차 배열의 서브 배열의 특정값으로 정렬

=> https://stackoverflow.com/a/4508158 참조

 

// $list 배열 출력

for ($i = 0; $i < count($list) ; $i++) {

  echo $list[$i]['address'];

  ~

}

 

마르스컴퍼니님 제가 초보라 그냥 알려주신대로 다른건 그대로 둔상태에서
맨위 배열에 아래처럼 복사해서 넣었는데요
아무런 변화가 없네요 ㅠ 제가 초보라 이해할 수 있도록 쉽게 설명좀 해주세요"꾸벅"

var position = [

for($i = 0; $row = sql_fetch_array($result); $i++) {
  $address = $row['wr_1'];
  $url = "https://dapi.kakao.com/v2/local/search/address.json?query=".urlencode($address);

  $list[$i] = $row; 
  $list[$i]['address'] = $address;
  $list[$i]['url'] = $url;

  $distance = ~;
  $list[$i]['distance'] = $distance;
}

for ($i = 0; $i < count($list) ; $i++) {
echo $list[$i]['address'];
~
}
]

난이도가 높은 부분이라..

소스 전체를 알려드리기에는 저도 쉽지 않은 부분입니다.

그래서 참고할 수 있는 개념적인 부분만 말씀드린 것이었습니다.

while($row = sql_fetch_array($result)) {
  $address = $row['wr_1'];
  $url = "https://dapi.kakao.com/v2/local/search/address.json?query=".urlencode($address);
 
}

여기서 curl 등으로 위도 경도를 구해서 배열에 넣어야 될 듯합니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 220
© SIRSOFT
현재 페이지 제일 처음으로