根据一个经纬度求几公里范围内的数据

/**
     *求两个已知经纬度之间的距离,单位为米
     *@param lng1,lng2 经度
     *@param lat1,lat2 纬度
     *@return float 距离,单位米
     **/
    function getDistance($lng1,$lat1,$lng2,$lat2){
        //将角度转为狐度
        $radLat1=deg2rad($lat1);//deg2rad()函数将角度转换为弧度
        $radLat2=deg2rad($lat2);
        $radLng1=deg2rad($lng1);
        $radLng2=deg2rad($lng2);
        $a=$radLat1-$radLat2;
        $b=$radLng1-$radLng2;
        $s=2*asin(sqrt(pow(sin($a/2),2)+cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)))*6378.137*1000;
        return $s;
    }
sql版:这里x是经度,Y是纬度

SELECT  FORMAT(((6370996.81)*ACOS(COS( coordy2 *PI()/180) * COS({$y}*PI()/180) * COS(( coordx2 *PI()/180)-({$x}*PI()/180)) + SIN( coordy2 *PI()/180)*SIN( {$y} *PI()/180)))/1000,2) as distance

解释一下下

这里是两个版本,一个是封装的函数  一个是sql语句

在sql版本中,$x,$y因为是变量所以加了{},正式写的时候是不用加的

例如

因为这里除以了1000,并且保留2为小数,如图:

所以最后算下来是公里!如果想要米数,那么就把/1000去掉

例如:

下边的例子调用:

时间: 2024-10-14 00:17:27

根据一个经纬度求几公里范围内的数据的相关文章

在平面内,已知一个矩形的四个角坐标,将矩形绕中心点转动一个角度,求旋转后的角坐标.

在平面内,已知一个矩形的四个角坐标,将矩形绕中心点转动一个角度,求旋转后的角坐标.也就是已知半径,求每个点旋转后的坐标. 把旋转前和旋转后的点加上中心点看成一个等腰三角形就好解决了,不用扇形公式,而是用三角形公式.假设矩形的左上角为(left, top),右下角为(right, bottom),则矩形上任意点(x0, y0)绕其中心(xcenter,ycenter)逆时针旋转angle角度后,新的坐标位置(x′, y′)的计算公式为: xcenter = (right - left + 1) /

关于地图取多少公里范围内的司机/商户的查询优化

基于百度/高德地图的一些应用经常会有这样一种场景的查询: 取X公里范围内最近的Y位司机/商户. 某公司是这样做的:司机有一张司机信息表DriverInfo,另有一张司机位置信息表DriverPosition. DriverPosition会实时更新司机目前的经度和纬度. 获取X公里范围内的司机使用到了一个标量值函数GetDistance,传入客户的经度和纬度,以及司机的经度和纬度 结果返回两者之间的距离.那么典型的查询就是这样的: DECLARE @longitude AS FLOAT = 31

模板小程序】求小于等于N范围内的质数

xiaoxi666 联系邮箱: [email protected] 博客园 首页 新随笔 联系 订阅 管理 [模板小程序]求小于等于N范围内的质数 1 //筛法求N以内的素数(普通法+优化),N>=2 2 #include <iostream> 3 #include <cmath> 4 #include <vector> 5 using namespace std; 6 ///寻找N以内的质数 7 vector<int> find_Prime(int

求n*m网格内矩形的数目

求n*m网格内矩形的数目求n*m网格内矩形的数目,布布扣,bubuko.com

经纬度计算是否在圆形内,是否在矩形内,是否在多边形内方法

class 点面关系{static void Main(string[] args){//Vector2D point1 = new Vector2D(39.909209536859834, 116.3225715637207);//inVector2D point1 = new Vector2D(39.901045, 116.415596);//outVector2D cPoint = new Vector2D(39.909209536859834, 116.3225715637207); C

2.2确定一个字符是否在指定范围内

知识点: 1.大小在两个字符之间 问题: 要确定一个char数据类型中的字符是否在一个范围内,如数字1-5之间,或介于字母A—M之间 解决方案 可以使用Char数据类型内置的比较支持.以下代码显示了如何使用这个内置的比较支持: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namesp

A、B两个整数集合,设计一个算法求他们的交集

代码留作记录,本人水平有限,看了别人的解法真是自愧不如. 关于此题的详细探讨可以参考:http://blog.csdn.net/thebestdavid/article/details/12056293 /*A.B两个整数集合,设计一个算法求他们的交集,尽可能的高效.*/ #include <iostream> #include <cstring> #include <set> #define M 8 #define N 5 using namespace std; i

【C语言】实现一个函数求字符串长度(不能创建第三方变量)

//实现一个函数求字符串长度(不能创建第三方变量) #include <stdio.h> #include <assert.h> int my_strlen(const char *p) { assert(p); if (*p == '\0') return 0; else return 1 + my_strlen(++p); } int main() { char *p = "abcdefg"; printf("%d\n", my_strl

C++刷题——2706: 编写一个函数求最大的n 值。

2706: 编写一个函数求最大的n 值. /* Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作者:陈丹妮 * 完成日期:2015年 5 月 26 日 * 版 本 号:v1.0 */ Description 编写一个函数求满足以下条件的最大的n.:12+22+32+-+n2<k,k值由键盘输入(1000<k<=2000) Sample Input 1500 Sample Output 17 #