通过其他连接获得laravel 5中的纬度和经度

时间:2016-07-30 17:11:57

标签: mysql laravel laravel-5 latitude-longitude

这对我来说非常复杂。我有一个搜索路线 - 效果很好,除了我无法通过邮政编码搜索到最近的lat和一个给定的邮政编码。也就是说,我可以计算出lat和long,但我不确定如何将它集成到我现有的查询中。此查询是没有邮政编码的搜索查询:

$query = DB::table('dogs');
$query->leftJoin('dog_addresses','dogs.id','=','dog_addresses.dog_id');
$query->leftJoin('dog_videos','dogs.id','=','dogs_videos.dog_id');
$query->leftJoin('dogs_breeds','dogs.breed_id','=','dogs_breeds.id');
if($request->input("breed") && $request->input("breed") != "" && $request->input("breed") != "any")
    {
        $breed = Dog_Breed::where("breed_name", $request->input("breed"))->first();
        $query->where('dogs.breed_id', $breed->id);
    }
$results = $query->get();

我要在查询中添加一些内容以获取邮政编码的纬度和经度:

if($request->input("postcode")) 
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_URL, "http://api.postcodes.io/postcodes/" . $request->input('postcode'));
    $result = json_decode(curl_exec($curl));
    curl_close($curl);
    $postcode_lat = $result->result->latitude;
    $postcode_long = $result->result->longitude;            
}

这让我可以获得我的邮政编码和经度。 但是我不知道如何根据dog_addresses表中存在的lat和long列来获取狗的位置,该表连接到dog表。我该怎么做?

所以如果我的dog_addresses表有Lat和Long列。

所以狗:

id | user_id | dog_name | age

dog_addresses:

id | dog_id | address_line_1 | town | postcode | lat | long

所以对于我的查询我需要得到所有的狗,其中繁殖ID为1,但我想内部加入视频,以便我可以获取所有视频信息和地址信息,但我也想排序返回的狗的顺序它们与我输入的邮政编码有多接近,基于lat和long。

我很困惑。我发现了这个:

( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance

但我仍然不确定如何整合它,或者它对我有什么用处。 请帮忙

2 个答案:

答案 0 :(得分:4)

下面的代码可以按照您想要的方式检索结果。代码说明在线。

hashtable[0][recurrence_code] = 0;
 hashtable[0][products][0][code] = 0;
 hashtable[0][products][0][qty] = 0;
 hashtable[0][products][1][code] = 1;
 hashtable[0][products][1][qty] = 1;
 hashtable[0][start_date] = 0;
 hashtable[0][payment_type] = 'pay_as_you_go';
 hashtable[0][payment_method] = 'sms2_pay_and_email';

hashtable[1][recurrence_code] = 0;
hashtable[1][products][0][code] = 0;
hashtable[1][products][0][qty] = 0;
hashtable[1][products][1][code] = 1;
hashtable[1][products][1][qty] = 1;
hashtable[1][start_date] = 0;
hashtable[1][payment_type] = 'pay_as_you_go';
hashtable[1][payment_method] = 'sms2_pay_and_email';

答案 1 :(得分:1)

您可以尝试使用mysql的GLength函数:

SELECT 
    *,  GLength(LineString(GeomFromText('POINT(latPosCode,lngPosCode)'),GeomFromText('POINT(latInDataBase,lngInDataBase)'),)) AS DISTANCE
FROM dogs           
ORDER BY DISTANCE