首页 > 解决方案 > 按关系距离排列的地理空间顺序

问题描述

假设我有一个世界上所有城市的数据库,数据库中有纬度点字段,所有国家都有纬度。现在我有波兰和美国“活跃”(只查询这个国家的那些城市)。我有一个用户国家设置为波兰。我正在搜索“战争”,现在我在波兰有华沙,在美国有华沙,但我想按照从设置给用户的国家开始的国家距离来订购它。所以在这种情况下,首先是波兰的华沙,然后是美国的华沙。如果西班牙有“华沙”城市,则应订购:华沙(波兰)->华沙(西班牙)->华沙(美国)。

我使用 Grimzy\LaravelMysqlSpatial 包来处理这些距离操作。

$places = Place::active()->where(function ($query) use ($request) {
                $query->where('name', 'like', $request->q . '%')
                    ->orWhere('ascii_name', 'like', $request->q . '%');
            })->limit(10)->get();

“地方”和“国家”的关系是:

public function country()
    {
        return $this->belongsTo(Country::class);
    }

所以我需要得到从波兰到其他国家的距离,并按这个值排序结果的地方。我会很感激你的帮助:)

标签: phpmysqllaravelgeospatial

解决方案


推荐阅读