sleep(20); } } /////////////////////////////////// //idエンコード /////////////////////////////////// function IDSolrencode($id=""){ $search = array('+','&', '|', '!','(',')','{','}','[',']','^','"','~','*','?'); $id2=str_replace($search,"",$id); $search = array(':','-'); $replace = array('\:', '\-'); $id2=str_replace($search,$replace,$id2); //$this->log("IDencode($id) -> [$id2]",LOG_DEBUG); return $id2; } /////////////////////////////////// //SOLR検索 /////////////////////////////////// function SearchSpotList($cat,$genrecd,$page, $prefcd,$citycd, $lat1,$lat2,$lng1,$lng2,$lat,$lng, $keyword,$address, $maxpage=10){ $Spotdetails=array(); if ( $page == "" ){ $page=1; } if ( $lat1!="" and $lng1!="" and $lat2!="" and $lng2!="" ){ $lat_sa=($lat2 - $lat1) * 0.1; $lng_sa=($lng2 - $lng1) * 0.1; $lat1 = $lat1 + $lat_sa; $lat2 = $lat2 - $lat_sa; $lng1 = $lng1 + $lng_sa; $lng2 = $lng2 - $lng_sa; $lat = $lat1 + ($lat2 - $lat1) / 2; $lng = $lng1 + ($lng2 - $lng1) / 2; } if ( $lat != "" and $lng != "" ){ if ( $lat1=="" or $lng1=="" or $lat2=="" or $lng2=="" ){ $lat_sa=0.01; $lng_sa=0.01; $lat1 = $lat - $lat_sa; $lat2 = $lat + $lat_sa; $lng1 = $lng - $lng_sa; $lng2 = $lng + $lng_sa; } } //$this->log("LAT=[$lat] LNG=[$lng] [$lat1,$lng1][$lat2,$lng2]",LOG_DEBUG); //値チェック if ( $lat1 < -90 or $lat1 > 90 ){ return $Spotdetails; } if ( $lat2 < -90 or $lat2 > 90 ){ return $Spotdetails; } if ( $lng1 < 0 or $lng1 > 360 ){ return $Spotdetails; } if ( $lng2 < 0 or $lng2 > 360 ){ return $Spotdetails; } //抽出条件 $query="pri:[50 TO 1000]"; if ( $cat != "" ){ $query.=" AND cat:$cat"; } if ( $lat1 != "" and $lng1 != "" and $lat2 != "" and $lng2 != ""){ $query.=" AND lat:[$lat1 TO $lat2]"; $query.=" AND lng:[$lng1 TO $lng2]"; } if ( $genrecd != "" ){ if ( strlen($genrecd) > 3 ){ $query.=" AND gen_s:$genrecd"; }else if ( strlen($genrecd) == 3 ){ $query.=" AND gen_l:$genrecd"; } } if ( $keyword != "" ){ $keyword=CommonComponent::IDSolrencode($keyword); $query.=" AND (name:$keyword OR address:$keyword OR pr_s:$keyword OR pr_l:$keyword OR zipcd:$keyword OR keywords:$keyword)"; } if ( $address != "" ){ $address=CommonComponent::IDSolrencode($address); $query.=" AND address:${address}"; } if ( $prefcd != "" ){ $query.=" AND prefcd:$prefcd"; } if ( $citycd != "" ){ $query.=" AND citycd:$citycd"; } $conditions = $query; //ソート条件 $sort_opt=""; if ( $keyword == "" and $address == "" ){ $sort_opt.='pri desc'; } if ( $lat=="" or $lng=="" ){ $options=array( 'sort' => $sort_opt ); }else{ if ( $sort_opt != "" ){ $sort_opt.=","; } $sort_opt.='geodist() asc'; $options=array( 'sort' => $sort_opt, 'sfield'=>"store", 'pt'=>"$lat,$lng", 'spatial'=>true ); } //Solr問い合わせ $this->paginate = array( 'conditions'=>$conditions , 'page'=>$page, 'options'=>$options, 'limit'=>$maxpage ); $this->log("conditions=[$query] sort=[$sort_opt] pt=[$lat,$lng]",LOG_DEBUG); $Spotdetails=$this->paginate('solrdb'); //$this->log($Spotdetails,LOG_DEBUG); return $Spotdetails; } ////////////////////////////////////////////////////////////////////// //変換 ////////////////////////////////////////////////////////////////////// function SpotDataConvert($spotlikes){ for($i=0; $i 0) ? ($page-floor($disp/2)) : 1; //始点 $end = ($start> 1) ? ($page+floor($disp/2)) : $disp; //終点 $start = ($limit <$end)? $start-($end-$limit):$start; //始点再計算 if($page != 1 ) { $ret.="\n"; } return $ret; } ////////////////////////////////////////////////////////////////////// //URL ////////////////////////////////////////////////////////////////////// function MakePagingUrl($func,$para1, $para2, $para3, $page_name, $class){ if ( $func == "area" ){ $url="$page_name\n"; }elseif ( $func == "genre" ){ $url="$page_name\n"; }elseif ( $func == "search" ){ $url="$page_name\n"; }elseif ( $func == "station" ){ $url="$page_name\n"; }elseif ( $func == "recommend" ){ $url="$page_name\n"; }elseif ( $func == "areasearch" ){ $url="$page_name\n"; }elseif ( $func == "geosearch" ){ $url="$page_name\n"; }else{ if ( $para2 == "" ){ $para2=0; } $url="$page_name\n"; } return $url; } /////////////////////////////////// //2点間の距離 /////////////////////////////////// function distance_2point($lat1,$lng1, $lat2,$lng2){ $earth_r = 6378.137; //地球の半径 $idoSa = deg2rad($lat2 - $lat1); //緯度差をラジアンに $keidoSa = deg2rad($lng2 - $lng1); //経度差をラジアンに $nanbokuKyori = $earth_r * $idoSa; //南北の距離 $touzaiKyori = cos(deg2rad($lat1)) * $earth_r * $keidoSa; //東西の距離 $kyori_m = sprintf("%.0f", sqrt(pow($touzaiKyori,2) + pow( $nanbokuKyori,2)) * 1000); //三平方の定理でdを求める $toho_m = sprintf("%.0f", ceil($kyori_m / 80) ); //分速80m return array($kyori_m, $toho_m); } } ?> (cache) Errors