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

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

QA

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

본문

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

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

 

<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 등으로 위도 경도를 구해서 배열에 넣어야 될 듯합니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 123,534 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT