首页 > 编程语言 >php 两地经纬度获取距离

php 两地经纬度获取距离

时间:2022-12-26 17:46:33浏览次数:43  
标签:filterShop return 经纬度 lon lat position php isset 两地

composer require jeroendesloovere/distance
<?php

namespace LonLatFilterShop;

use JeroenDesloovere\Distance\Distance;
use think\Exception;

class LonLatFilterShop
{
    /**
     * @param []起点位置经纬度
     * @param []终点位置经纬度
     * @return float
     * @throws Exception
     */
    public static function KM($position1=[],$position2=[]){
        if(!isset($position1[0]) || ($position1[0]==='')){
            throw new Exception("起点位置的经度不能为空");
        }
        if(!isset($position1[1]) || ($position1[1]==='')){
            throw new Exception("起点位置的经度不能为空");
        }
        if(!isset($position2[0]) || ($position2[0]==='')){
            throw new Exception("起点位置的经度不能为空");
        }
        if(!isset($position2[1]) || ($position2[1]==='')){
            throw new Exception("终点位置的经度不能为空");
        }
        $latitude1 = $position1[1]; #纬度
        $longitude1 = $position1[0]; #经度
        $latitude2 = $position2[1]; #纬度
        $longitude2 = $position2[0];#经度
        $distance = Distance::between(
            $latitude1,
            $longitude1,
            $latitude2,
            $longitude2
        );
        return $distance;
    }


    /**
     * @param []当前位置经纬度
     * @param $data 要过滤的数组 [['lon'=>经度,'lat'=>纬度]]
     * @param $filterDistance 大于多少公里不展示
     * @return 返回 $data
     */
    public static function filterShop($position=[],$data,$filterDistance=0){
        if(!isset($position[0]) || ($position[0]==='')){
            throw new Exception("起点位置的经度不能为空");
        }
        if(!isset($position[1]) || ($position[1]==='')){
            throw new Exception("起点位置的经度不能为空");
        }
        if(!$data){
            return [];
        }
        $filterShop = [];
        foreach ($data as $k =>$v){
//            [['lon'=>经度,'lat'=>纬度]]
            if(!isset($v['lon']) || ($v['lon']==='')){
                continue;
            }
            if(!isset($v['lat']) || ($v['lat']==='')){
                continue;
            }
            /**
             * 距离位置
             */
            $kg = self::KM($position,[$v['lon'],$v['lat']]);
            if($filterDistance && ($kg>$filterDistance)){
                continue;
            }
            $v['distance']=$kg;
            $filterShop[] = $v;
        }
        if(!$filterShop){
            return [];
        }
        $edit = array_column($filterShop,'distance');
        array_multisort($edit,SORT_ASC,$filterShop);
        return $filterShop;
    }

}

 

标签:filterShop,return,经纬度,lon,lat,position,php,isset,两地
From: https://www.cnblogs.com/chengfengchi/p/17006297.html

相关文章

  • php获取文件后缀的方法
    本文实例为大家分享了9种php获取文件后缀的方法,供大家参考,具体内容如下<?php/***CreatedbyPhpStorm.*User:liuft*Date:2016/3/7*Time:15:46*///第......
  • 选题在线提交系统(html+JS+php)
    ​​在线选题系统完善篇(含后台管理)​​前言:    作为学习委员还是有挺多的事情要忙的,比如经常统计同学们的课设题目选择结果。如果老师的要求少一点,我还可以轻松一点......
  • php post请求方法,不用curl方法的解决办法
    /***file_get_contents方法请求*@paramstring$url接口url*@paramstring$post_data接口参数*@returnstring*/if(!function_exists('send_post')......
  • PHP Composer 虚拟依赖包 - 实现按需载入钉钉对应功能模块的 php sdk
    难得钉钉官方提供了完整的apisdk,各种语言的版本的都有,而且api覆盖面非常完整。但是,composer安装下来有大几十兆,这个不符合个人的品味,我想要按需加载。于是在构思了一......
  • 墨卡托坐标转换(经纬度与米之间互转)
    https://blog.csdn.net/a_dev/article/details/80990492 //要加入GeoJSON//调用 示例 vars=MercatorCoordinatesConverter.WebMercatorMeter2Degree(12582978.2......
  • php魔术方法(1)
    PHP魔术方法目录PHP魔术方法概述:1、构造函数和析构函数。2、__sleep()3、__wakeup()概述:PHP魔术方法:一个预定义好的,在特定情况下自动触发的行为方法。魔术方法相关......
  • [CTF] 攻防世界-simple_php
    题目<?phpshow_source(__FILE__);include("config.php");$a=@$_GET['a'];$b=@$_GET['b'];if($a==0 and $a){    echo $flag1;}if(is_numeric($b)){   ......
  • 经纬度距离计算Vincenty's formulae算法
    维基百科公式原始论文importmathfromgeopy.distanceimportgeodesic#计算两点之间的椭球面距离#使用Vincent算法,使用WGS84参考椭球体。#输入两个点的经纬度......
  • 基于thinkphp的服装女装男装衣服鞋子商城服装商城
    php开发的服装商城,主要有商品分类,详情,购物车,订单等功能。演示视频https://www.bilibili.com/video/BV1Li4y1P7P9/?share_source=copy_web&vd_source=ed0f04fbb713154db5c......
  • php个人博客系统项目网站
    php开发的个人博客系统,没有用框架环境:mysql5.5+php7.3.5简单版功能:只有一个用户admin,登录,首页展示该用户的语录,该用户的博文,只能发布一篇,重复发布被替换;相册展示(不分页),......