gpt4 book ai didi

php - 使用 Laravel 进行 GEO 位置查询 PHP 和 SQL

转载 作者:行者123 更新时间:2023-11-29 20:03:39 26 4
gpt4 key购买 nike

我目前正在 Laravel 5.2 中编写事件/广告脚本。我有一个包含广告的表格,例如:广告名称、位置(纬度/经度)、半径(+10 公里)。

现在我有一个用户位置(纬度/经度)。我想看看他是否在任何广告的半径内并向他展示广告。

我有这个:

public function scopeAdsInLocation($query, $from_latitude, $from_longitude)
{
$query = CampaignModel::
where(\DB::raw('111.1111 * DEGREES(ACOS(COS(RADIANS(' . $from_latitude . ')) * COS(RADIANS(campaigns.loc_lat)) * COS(RADIANS(' . $from_longitude .' -
campaigns.loc_long)) + SIN(RADIANS(' . $from_latitude . ')) * SIN(RADIANS(campaigns.loc_lat))))'), '<=', 'campaigns.loc_radius')
->get();
return $query;
}

我这样调用它:

$ads = CampaignModel::adsInLocation(51.191320, 5.987772);
var_dump($ads);

此代码有效,但前提是我将半径设置为固定值。因此,当我将campaigns.loc_radius 替换为“100”时,它就可以工作了。但从每个战役的半径来看,它似乎并不能完成这项工作。你知道为什么吗?或者有一个解决方案。

最佳答案

where() 中,您可以使用

\DB::raw("`campaigns`.`loc_radius`")

所以你的查询将是:

public function scopeAdsInLocation($query, $from_latitude, $from_longitude)
{
$query = CampaignModel::
where(\DB::raw('111.1111 * DEGREES(ACOS(COS(RADIANS(' . $from_latitude . ')) * COS(RADIANS(campaigns.loc_lat)) * COS(RADIANS(' . $from_longitude .' -
campaigns.loc_long)) + SIN(RADIANS(' . $from_latitude . ')) * SIN(RADIANS(campaigns.loc_lat))))'), '<=', \DB::raw("`campaigns`.`loc_radius`"))
->get();
return $query;
}

关于php - 使用 Laravel 进行 GEO 位置查询 PHP 和 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40428982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com