게시판 리스트 거리순 정렬 질문입니다.
본문
게시판 리스트를 사용자 기준 거리순으로 정렬하려고 하는데요
어렵습니다. 고수님들 아래 스크립트 보시고 조언좀 부탁드립니다."꾸벅"
<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'];
~
}
while($row = sql_fetch_array($result)) {
$address = $row['wr_1'];
$url = "https://dapi.kakao.com/v2/local/search/address.json?query=".urlencode($address);
}
여기서 curl 등으로 위도 경도를 구해서 배열에 넣어야 될 듯합니다.