You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.8 KiB
80 lines
2.8 KiB
<?php
|
|
/**
|
|
* 尋找最近的作番地點
|
|
* @url /app-browser_gpslocation-find.php
|
|
* @method POST
|
|
* @return JSON
|
|
*
|
|
* request
|
|
* {
|
|
* "lat" 緯度
|
|
* "lng" 經度
|
|
* }
|
|
*
|
|
* respons json
|
|
* {
|
|
* "st" : "ok",
|
|
* "err" : ""
|
|
* }
|
|
**/
|
|
|
|
$data = [];
|
|
$rarr = array('st' => 'ok', 'err' => '');
|
|
|
|
try {
|
|
error_log("api start 1\n",3,"gps.log");
|
|
error_log("POST=".print_r($_POST,1)."\n",3,"gps.log");
|
|
if (empty($_POST) || empty($_POST["lat"]) || empty($_POST["lng"])) throw new \Exception("parameter empty");
|
|
|
|
foreach ($_POST as $k => $v) {
|
|
$$k = htmlspecialchars(stripslashes(trim($v)));
|
|
}
|
|
error_log("api start 2\n",3,"gps.log");
|
|
require_once "db/database.php";
|
|
/* Method.1
|
|
define("EARTH_RADIUS", 6371); //地球半徑,平均半徑為6371km
|
|
/**
|
|
* 計算某個經緯度的周圍某段距離的正方形的四個點
|
|
* @param lng float 經度
|
|
* @param lat float 緯度
|
|
* @param distance float 該點所在圓的半徑,該圓與此正方形內切,默認值為1公里
|
|
* @return array 正方形的四個點的經緯度坐標
|
|
*/
|
|
/*
|
|
function returnSquarePoint($lng, $lat, $distance = 5) {
|
|
$dlng = 2*asin(sin($distance/(2*EARTH_RADIUS))/cos(deg2rad($lat)));
|
|
$dlng = rad2deg($dlng);
|
|
$dlat = $distance/EARTH_RADIUS;
|
|
$dlat = rad2deg($dlat);
|
|
return array("left-top" => array("lat" => $lat+$dlat, "lng" => $lng-$dlng),
|
|
"right-top" => array("lat" => $lat+$dlat, "lng" => $lng+$dlng),
|
|
"left-bottom" => array("lat" => $lat-$dlat, "lng" => $lng-$dlng),
|
|
"right-bottom" => array("lat" => $lat-$dlat, "lng" => $lng+$dlng));
|
|
}
|
|
$squares = returnSquarePoint($lng, $lat);
|
|
$sql = "select address from facility ";
|
|
$sql .= "where latitude > '".$squares["right-bottom"]["lat"]."' and latitude < '".$squares["left-top"]["lat"]."'";
|
|
$sql .= "and longitude > '".$squares["left-top"]["lng"]."' and longitude < '".$squares["right-bottom"]["lng"]."' ";
|
|
$sql .= "group by address";
|
|
*/
|
|
/* Method.2 */
|
|
//$latitude = substr($lat, 0, strpos($lat, ".")).substr($lat, strpos($lat, "."), 4);
|
|
$latitude = substr($lat, 0, 6);
|
|
//$longitude = substr($lng, 0, strpos($lng, ".")).substr($lng, strpos($lng, "."), 4);
|
|
$longitude = substr($lng, 0, 7);
|
|
$sql = "select address from facility where latitude like '".$latitude."%' and longitude like '".$longitude."%'";
|
|
error_log($sql."\n",3,"gps.log");
|
|
$res = mysqli_query($link, $sql);
|
|
while ($row = mysqli_fetch_row($res)) {
|
|
$data[] = $row[0];
|
|
}
|
|
mysqli_free_result($res);
|
|
error_log("data=".print_r($data,1)."\n",3,"gps.log");
|
|
$rarr['content'] = $data;
|
|
}catch(\Exception $e) {
|
|
$rarr['st'] = 'err';
|
|
$rarr['err'] = $e->getMessage();
|
|
}
|
|
|
|
echo json_encode($rarr, JSON_UNESCAPED_UNICODE);
|
|
?>
|