메뉴 건너뛰기

자료실

DATA

[PHP] 마커 계산 라이브러리

소프터 2019.08.14 17:43 조회 수 : 22

<?

class Marker_cal{

  function __construct($select){
    $arr = explode(",",$select);
    $this->lat = $arr[0];
    $this->lng = $arr[1];
    $this->idx = $arr[2];

  }

  public function _deg2rad($deg){
   $radians = 0.0;
   $radians = $deg * M_PI/180.0;
   return($radians);
  }

  public function geoDistance($lat1, $lon1, $lat2, $lon2, $unit="k") {
   $theta = $lon1 - $lon2;
   $dist = sin($this->_deg2rad($lat1)) * sin($this->_deg2rad($lat2)) + cos($this->_deg2rad($lat1)) * cos($this->_deg2rad($lat2)) * cos($this->_deg2rad($theta));

   $dist = acos($dist);

   $dist = rad2deg($dist);

   $miles = $dist * 60 * 1.1515;
   $unit = strtolower($unit);

   if ($unit == "k") {
   return ($miles * 1.609344);
   } else {
   return $miles;
   }
  }

  public function run($sell,$lv){
    $out_put = array();

    $level_arr = [0,0.02,0.03,0.05,0.1,0.25,0.8,1.5,2.5,4,8,16,32,64,128];

    $dis_km = $level_arr[$lv];

    for ($c=0; $c <100 ; $c++) {
     //sort($sell);
     $f_se_lat = $sell[0][$this->lat]; //초기값
     $f_se_lng = $sell[0][$this->lng]; //초기값

     $sell_count = count($sell);

     $counts = 0;
     $temp_array = array();
     $i= 0;

     for ($s=0; $s <$sell_count ; $s++){

     $rs = $this->geoDistance($f_se_lat,$f_se_lng,$sell[$s][$this->lat],$sell[$s][$this->lng]);
     $dis = round($rs,4);

     if(is_nan($dis)){
     $dis = 0;
     }
     if($dis_km > $dis || $f_se_lat == $sell[$s][$this->lat]){
     $temp_array[$this->lat] += $sell[$s][$this->lat];
     $temp_array[$this->lng] += $sell[$s][$this->lng];
     $temp_array['se_idx'] .= "@".$sell[$s][$this->idx];
     $counts++;
     unset($sell[$s]);

     }
     }
     $sell = array_values($sell);

     $sell_data[$this->lat] = $sell[0][$this->lat];
     $sell_data[$this->lng] = $sell[0][$this->lng];
     $sell_data['counts'] = $counts;
     $sell_data['idx_list'] = $temp_array[$this->idx];

     $out_put[] = $sell_data;
     if(count($sell) == 0){
     break;
     }

    }
    return $out_put;
  }

}


?>

 

 

 

<?php

include_once('./_common.php');
include_once('./marker_lib.php'); // Marker_cal class

$locations = $_GET['locations'];

$qry_plus .= " AND se_view = 'Y' ";
$location_arr = explode(",",$locations);
// lat,lng,idx 순서로 입력
$select = "se_lat,se_lng,se_idx";
$mc = new Marker_cal($select);

$lat_st = $location_arr[0];
$lat_la = $location_arr[2];
$lng_st = $location_arr[1];
$lng_la = $location_arr[3];

$sql_search .= "(se_view = 'Y') AND";
$sql_search .= "(se_lat BETWEEN '{$location_arr[0]}' AND '{$location_arr[2]}') AND";
$sql_search .= "(se_lng BETWEEN '{$location_arr[1]}' AND '{$location_arr[3]}')";


$sql = "SELECT {$select} FROM sell
WHERE {$sql_search} ORDER BY se_idx DESC";

$rs = sql_query($sql);
$sell_list = array();
$i = 0;

while ($row = sql_fetch_array($rs)){
$sell[$i] = $row;
$i++;
}

$out_put = $mc->run($sell,$location_arr[4]);

$json['positions'] = $out_put;

$out = json_encode($json);
if (json_last_error() != JSON_ERROR_NONE) {
    printf("JSON Error: %s", json_last_error_msg());
}

echo $out;


?>

 

 

 

 

 

/////////   1단계 ///////////////

new Marker_cal($select); 생성 자를 생성 하실때

 

lat,lng,idx 순서로 입력

 

$select = "se_lat,se_lng,se_idx"; << JSON 배열 값과 DB 컬럼명이 일치하게 해야됩니다

$mc = new Marker_cal($select);

 

///////////// 2단계 ///////////////////

 

$sql = "SELECT {$select} FROM sell

WHERE {$sql_search} ORDER BY se_idx DESC"; <<< 

 

이부분을 바꿔줍니다 원하는 쿼리문으로 바꿔줍니다

 

///////////// 3단계 ///////////////////

$out_put <<<  을 출력해서 클라이언트에 뿌려줍니다

 

 

counts : 현재 위치에 몇개의 위치값이 있는지 리턴합니다

idx_list : @로 짤린 인덱스값 나중에 배열로 분해하셔서 해당 위치에 값들을 가져올때 사용합니다

 

번호 제목 글쓴이 날짜 조회 수
20 우분투 mod_rewrite사용하기 소프터 2020.03.18 1
19 [CodeIgniter] index.php 제거 소프터 2020.03.18 1
18 MariaDB 루트 접근 1698 에러날때 소프터 2020.03.18 0
17 우분투16 php-mbstring 설치 mysql mbstring 에러 잡을때 소프터 2020.03.18 1
16 우분투 16.04 에서 아파치 실행 APM 설치하는법 소프터 2020.03.18 2
15 아파치 셋팅후 php 생략방법 소프터 2020.03.18 0
14 ******* 리액트 네이티브 안드로이드 어플 배포방법 ******** 소프터 2020.03.10 9
13 2020 03 06 리액트 네이티브 스텍 소프터 2020.03.06 4
12 안드로이드 스튜디오 Module not specified 오류시 소프터 2020.01.07 3
11 무료이면서도 빠른 JS/CSS CDN 서버 소프터 2019.10.17 10
10 JS OPEN CND 라이브러리 다운받을 수 있는곳 소프터 2019.10.17 3
9 [CSS]폰트와 관련된 속성 소프터 2019.09.17 3
8 [개발환경] 아톰에디터 ftp 느려지는 경우 소프터 2019.09.17 15
7 [CSS]구글 웹폰트 익스에서 안깨지게 하는법 file 소프터 2019.09.06 5
6 [폰트]웹폰트 불어오기 편한 사이트 소프터 2019.09.05 5
5 [CSS] CSS 애니메이션 참고 사이트 소프터 2019.09.05 4
4 [그누보드]관리자 패스워드,비밀번호 분실했을때 간단하게 변경방법 소프터 2019.09.05 3
» [PHP] 마커 계산 라이브러리 소프터 2019.08.14 22
2 [css] 글자간에 자간 설정 소프터 2019.08.13 10
1 [제이쿼리] input name 으로 선택 소프터 2019.08.12 7