接口链接: /Api/Meet/Map/getPoint?latitude=30.478379&longitude=114.392454&lc=1
latitude:纬度
longitude:经度
lc:距离(km)
sql语句:
SELECT * FROM ( SELECT * , sqrt((114.392454 - gsm_longitude) * pi() * 12656 * cos((30.478379 + gsm_latitude) / 2 * pi() / 180) / 180 * ((114.392454 - gsm_longitude) * pi() * 12656 * cos((30.478379 + gsm_latitude) / 2 * pi() / 180) / 180) + (30.478379 - gsm_latitude) * pi() * 12656 / 180 * ((30.478379 - gsm_latitude) * pi() * 12656 / 180)) AS lc FROM _cabinet ) _cabinet WHERE lc < 10 ORDER BY lc
接口代码:
try {
$longitude = $this->request()->getQueryParam('longitude');
$latitude = $this->request()->getQueryParam('latitude');
$lc = $this->request()->getQueryParam('lc');
if (!$longitude || !$latitude || !$lc) {
return $this->writeJson(401, [], '参数缺失');
}
$queryBuild = new QueryBuilder();
// 支持参数绑定 第二个参数非必传
$queryBuild->raw("SELECT * FROM ( SELECT * , sqrt(({$longitude} - gsm_longitude) * pi() * 12656 * cos(({$latitude} + gsm_latitude) / 2 * pi() / 180) / 180 * (({$longitude} - gsm_longitude) * pi() * 12656 * cos(({$latitude} + gsm_latitude) / 2 * pi() / 180) / 180) + ({$latitude} - gsm_latitude) * pi() * 12656 / 180 * (({$latitude} - gsm_latitude) * pi() * 12656 / 180)) AS lc FROM _cabinet ) _cabinet WHERE lc < ? ORDER BY lc", [abs($lc)]);
// var_dump($queryBuild->getLastQuery());
// $queryBuild->raw("select * from test where name = 'siam'");
// 第二个参数 raw 指定true,表示执行原生sql
// 第三个参数 connectionName 指定使用的连接名,默认 default
$list = DbManager::getInstance()->query($queryBuild, true);
$list = $list->getResult();
$res = [];
foreach ($list as $item) {
$res[] = [
'id' => $item['id'],
'latitude' => $item['gsm_latitude'],
'longitude' => $item['gsm_longitude'],
'title' => $item['serial_num'],
'iconPath' => '/static/play.png',
'rotate' => 0,
'joinCluster' => true,
'width' => 20,
'height' => 20,
'anchor' => [
'x' => 0.5,
'y' => 1
],
];
}
return $this->writeJson(200, $res, '点位列表');
} catch (\Throwable $throwable) {
return $this->writeJson(500, [], $throwable->getMessage());
}

发表回复