微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何显示每个结果的距离?

如何解决如何显示每个结果的距离?

我正在尝试显示每个结果的距离。我在地址表中具有纬度和经度,该地址表以1比1的比例连接到场所表。

我已经设法做到了,以便将所有距离都排列在一个数组中,但是当我尝试将它们添加到场地中时,它只是列表中的最后一个。如果我在它们周围包裹一个foreach,那么它将显示每个场所的所有距离。

我的控制器代码

public function venues(Request $request)
    {
        $types = DB::table('types')
            ->join('venues','venues.type_id','=','types.id')
            ->join('icons','types.icon_id','icons.id')
            ->where('venues.is_approved',1)
            ->select('types.*','icons.*')
            ->groupBy('types.id')
            ->get();

        $type = $request->query('type');

        if ($type) {
            $venues = Venue::whereHas('type',function (Builder $query) use ($type) {
                $query->whereIn('name',$type);

            })->where('is_approved',1)->get();
        } else {
            $venues = Venue::where('is_approved','1')->get();
        }

        if (auth()->user()->address) {
            foreach ($venues as $venue) {
                $earthRadius = '3959';
                $latFrom = deg2rad(auth()->user()->address->address_latitude);
                $lonFrom = deg2rad(auth()->user()->address->address_longitude);
                $latTo = deg2rad($venue->address->address_latitude);
                $lonTo = deg2rad($venue->address->address_longitude);

                $latDelta = $latTo - $latFrom;
                $lonDelta = $lonTo - $lonFrom;

                $angle = 2 * asin(sqrt(pow(sin($latDelta / 2),2) +
                        cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2),2)));
                $distance[] = $angle * $earthRadius;
            }
        } else {
            $distance = '';
        }

        return view('venue.venues',compact('venues','types','distance'));
    }

我的Blade代码

@foreach ($venues as $venue)
                <div class="venue-card">
                    <a href="{{ url('venue/' . $venue->id .'/'. str_replace(' ','-',$venue->name)) }}">
                        @if (!$venue->photos->count() == 0)
                            @foreach ($venue->photos->take(1) as $photo)
                                <div class="main_image" style="background-image: url({{ asset('/uploads/venues/thumbnails/'.$photo->image_url)}});"></div>
                            @endforeach
                        @else
                            <div class="main_image noimage" style="background-image: url({{ asset('/assets/images/no-photos.svg')}});"></div>
                        @endif
                        <div class="venue-overview">
                            @if ($venue->type->icon_id)
                                <img class="icon" src="{{ asset($venue->type->icon->icon_url) }}">
                            @endif
                            <span> {{$venue->type->name}}</span>
                            <h3>{{$venue->name}}</h3>
                            <p>{{$venue->description}}</p>
                                @if (!$distance == '')
                                        <p><span>{{round($distance,0)}}</span> miles from your address</p>
                                @endif
                                @auth
                                    <div class="fav_venue">
                                        <favorite
                                                :venue={{ $venue->id }}
                                                        :favorited={{ $venue->favorited() ? 'true' : 'false' }}
                                        ></favorite>
                                    </div>
                                @endauth
                        </div>
                    </a>
                </div>
            @endforeach

我可能走错了路,但是任何有关如何使它适应场地上正确距离的帮助都会有很大帮助。

解决方法

因此,经过几个小时的游戏,我已经做到了,现在可以正常工作了:

if (auth()->user()->address) {
            foreach ($venues as $key => $venue) {
                $earthRadius = '3959';
                $latFrom = deg2rad(auth()->user()->address->address_latitude);
                $lonFrom = deg2rad(auth()->user()->address->address_longitude);
                $latTo = deg2rad($venue->address->address_latitude);
                $lonTo = deg2rad($venue->address->address_longitude);

                $latDelta = $latTo - $latFrom;
                $lonDelta = $lonTo - $lonFrom;

                $angle = 2 * asin(sqrt(pow(sin($latDelta / 2),2) +
                        cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2),2)));
                $venue->distance = $angle * $earthRadius;
            }
        } else {
            $venues->distance = '';
        }

        $venues = $venues->sortBy('distance');

        $venues->values()->all();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?