地图 计算2点距离等

/**
    *计算某个经纬度的周围某段距离的正方形的四个点
    *
    *@param lng float 经度
    *@param lat float 纬度
    *@param distance float 该点所在圆的半径,该圆与此正方形内切,默认值为0.5千米
    *@return array 正方形的四个点的经纬度坐标
     用法
     使用此函数计算得到结果后,带入sql查询。
     $squares = returnSquarePoint($lng, $lat);
    */
    private function returnSquarePoint($lng, $lat,$distance = 1){
       $dlng =  2 * asin(sin($distance / (2 * EARTH_RADIUS)) / cos(deg2rad($lat)));
       $dlng = rad2deg($dlng);
       $dlat = $distance/EARTH_RADIUS;
       $dlat = rad2deg($dlat);
       return array(
           ‘left-top‘=>array(‘lat‘=>$lat + $dlat,‘lng‘=>$lng-$dlng),
           ‘right-top‘=>array(‘lat‘=>$lat + $dlat, ‘lng‘=>$lng + $dlng),
           ‘left-bottom‘=>array(‘lat‘=>$lat - $dlat, ‘lng‘=>$lng - $dlng),
           ‘right-bottom‘=>array(‘lat‘=>$lat - $dlat, ‘lng‘=>$lng + $dlng)
        );
    }
    
    //获取2点之间的距离
    private function GetDistance($lat1, $lng1, $lat2, $lng2){
        $radLat1 = $lat1 * (PI / 180);
        $radLat2 = $lat2 * (PI / 180);
        $a = $radLat1 - $radLat2;
        $b = ($lng1 * (PI / 180)) - ($lng2 * (PI / 180));
        $s = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)));
        $s = $s * EARTH_RADIUS;
        $s = round($s * 10000) / 1000;//10000
        return $s;
    }

//每一次电工打开app会想我传一个坐标位置   用户查看附近的电工时会根据这个经纬度查看附近的电工
    public function ssdg(){
        $only_label = I(‘only_label‘);
        $lat = I(‘lat‘);
        $longs = I(‘longs‘);
        if($lat == "" || $longs == ""){// || $id == ""
            $this->json(‘10003‘,‘参数缺少‘);
        }
        $res = M("user")->where("only_label = ‘$only_label‘")->find();
        if($res){
            $datainfo[‘lat‘] = $lat;
            $datainfo[‘longs‘] = $longs;
            M("user")->where("only_label = ‘$only_label‘")->save($datainfo);
            $this->json(‘10001‘);
        }else{
            $this->json(‘10009‘,‘没有这个电工的id‘);
        }
    }
    
    //用户查看电工的
    public function yhcdg(){
        //纬度
        $lat = I(‘lat‘);
        //经度
        $longs = I(‘longs‘);
        if($lat == "" || $longs == ""){
            $this->json(‘10003‘,‘参数缺少‘);
        }
        $squares = $this->returnSquarePoint($longs, $lat);
        $arr_info = M("user_address")
            ->where("(lat > {$squares[‘right-bottom‘][‘lat‘]} and lat < {$squares[‘left-top‘][‘lat‘]})
            and (longs > {$squares[‘left-top‘][‘lng‘]} and longs < {$squares[‘right-bottom‘][‘lng‘]})")
            ->select();
        foreach ($arr_info as $k=>$v){
            $arr_info[$k][‘juli‘] = $this->GetDistance($lat, $longs, $v[‘lat‘], $v[‘longs‘]);
        }
        $skill_label = M("skill")->select();
        //dump($skill_label);die;
        foreach($skill_label as $key => $val){
            $skl[$val[‘id‘]] = $val[‘name‘];
        }
        //dump($skl);die;
        foreach ($arr_info as $key => $val){
            if($val[‘skill_label‘] == ‘‘){
                $arr_info[$key][‘skill_label‘] = ‘***‘;
            } else {
                $label = explode(‘,‘, $val[‘skill_label‘]);
                foreach($label as $key => $val){
                    $data1[$val[‘id‘]] = $skl[$val];
                }
                foreach ($arr_info as $k=>$v){
                    $arr_info[$k][‘skill_label‘] = implode(‘,‘,$data1);
                }
            }
        }
        foreach($arr_info as $key=> $val){
            $f_id = $val[‘uid‘];
            $wan = M("order")->where("f_id=‘$f_id‘ and statics=‘11‘")->count();//完成总数
            $zcment_sum = M("order_comment")->where("f_id=‘$f_id‘")->sum("zcment");//求和
            $zcment_num = M("order_comment")->where("f_id=‘$f_id‘")->count();//总数
            $zcment = $zcment_sum/$zcment_num;//综合评价
            if($zcment){
                $arr_info[$key][‘zcment‘] = $zcment;
            } else {
                $arr_info[$key][‘zcment‘] = ‘***‘;
            }
            $arr_info[$key][‘dan‘] = $wan;
        }
        //dump($arr_info);die;
        $this->json(10001,array("data"=>$arr_info));
    }

//电工首页
    public function dgshouye(){
        //用户id
        $uid = I("uid");
        //纬度
        $lat = I(‘lat‘);
        //经度
        $longs = I(‘longs‘);
        if($lat == ""){
            //纬度为空
            $this->json(‘10003‘,‘参数缺少‘);
        }
        if($longs == ""){
            //经度为空
            $this->json(‘10003‘,‘参数缺少‘);
        }
        if($uid == ‘‘){
            //用户为空
            $this->json(‘10003‘,‘参数缺少‘);
        }
        //获取附近0.5千米的所有订单
        $squares = $this->returnSquarePoint($longs, $lat);
        $res = M("order_offer")->where("uid=‘$uid‘")->find();
        if($res){
            $o_id = $res[‘o_id‘];
            //返回的电工坐标附近1千米的所有订单
            $arr_info = M("user_address d")
                    ->join("dian_order o on d.id = o.address_id")
                    ->field("*,o.id o_id")
                    ->where("(d.lat > {$squares[‘right-bottom‘][‘lat‘]} and
                    d.lat < {$squares[‘left-top‘][‘lat‘]}) and
                    (d.longs > {$squares[‘left-top‘][‘lng‘]} and
                            d.longs < {$squares[‘right-bottom‘][‘lng‘]}) and o.id!=‘$o_id‘ and o.statics=1")//and 0.f_id == ‘‘
                    ->select();
        } else {
            //返回的电工坐标附近1千米的所有订单
            $arr_info = M("user_address d")
                    ->join("dian_order o on d.id = o.address_id")
                    ->field("*,o.id o_id")
                    ->where("(d.lat > {$squares[‘right-bottom‘][‘lat‘]} and
                    d.lat < {$squares[‘left-top‘][‘lat‘]}) and
                    (d.longs > {$squares[‘left-top‘][‘lng‘]} and
                            d.longs < {$squares[‘right-bottom‘][‘lng‘]}) and o.statics=1 ")//and 0.f_id == ‘‘
                    ->select();
        }        
        $this->json(10001,array("info"=>$arr_info));
    }

时间: 2024-08-13 11:29:37

地图 计算2点距离等的相关文章

php 腾讯 地图 计算 坐标 两点 距离 微信 网页

$r = https_request('http://apis.map.qq.com/ws/geocoder/v1/?address='.$addr['addr'].'&key=F2GBZ-SREWQ-A3K56-GSLK5-ELOHS-PRB2X'); if($r['status'] == 0){ $lng = $r['result']['location']['lng']; $lat = $r['result']['location']['lat']; $r2 = https_request

C#面向对象思想计算两点之间距离

题目为计算两点之间距离. 面向过程的思维方式,两点的横坐标之差,纵坐标之差,平方求和,再开跟,得到两点之间距离. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Classes_2_point_distance { class Program { static void Main(string[

iOS之计算上次日期距离现在多久, 如 xx 小时前、xx 分钟前等

/**  *  计算上次日期距离现在多久  *  *  @param lastTime    上次日期(需要和格式对应)  *  @param format1     上次日期格式  *  @param currentTime 最近日期(需要和格式对应)  *  @param format2     最近日期格式  *  *  @return xx分钟前.xx小时前.xx天前  */ + (NSString *)timeIntervalFromLastTime:(NSString *)lastT

JavaScript基础 计算现在时间 距离 过去一时间 相差多少天

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=ut

JavaScript基础 计算现在时间 距离 未来一时间 相差多少天

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=ut

Java根据两点的经纬度来计算之间的距离

import java.util.HashMap; import java.util.Map; public class MapDistance { private static double EARTH_RADIUS = 6378.137; private static double rad(double d) { return d * Math.PI / 180.0; } /** * 根据两个位置的经纬度,来计算两地的距离(单位为KM) * 参数为String类型 * @param lat1

Levenshtein计算相似度距离

使用Levenshtein计算相似度距离,装下模块,调用下函数就好. 拿idf还得自己去算权重,而且不一定准确度高,一般做idf还得做词性归一化,把动词形容词什么全部转成名词,很麻烦. Levenshtein.distance(str1,str2) 计算编辑距离(也称Levenshtein距离).是描述由一个字串转化成另一个字串最少的操作次数,在其中的操作包括插入.删除.替换.如 例如将eeba转变成abac: ① eba(删除第一个e) ② aba(将剩下的e替换成a) ③ abac(在末尾插

计算经纬度、距离、方位角

1.根据两点经纬度计算其间距离,发现有3种公式,结果区别不是很大. 2.根据一点的经纬度与到另外一点的距离.方位角,计算另一点的经纬度,误差不是很大. 1 package com.zhs.util; 2 3 /** 4 * 5 * 计算经纬度.距离.方位角 6 * 7 * @author lillian.he 8 * @time 2016-06-02 9 * */ 10 public class CalculationLogLatDistance { 11 /** 12 * 地球赤道半径(km)

计算经纬度之间距离

传递两个经纬度,计算中间的距离,单位km USE [Witbank_Times] GO /****** Object: UserDefinedFunction [dbo].[fnGetDistance] Script Date: 2016/9/9 15:23:10 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: