我正在制作一个脚本,将一个业务负载加载到一个纬度和经度的mySQL数据库中。然后我用经度纬度(最终用户)提供该脚本,脚本必须计算从提供的lat / long到从数据库获取的条目的距离,并按照最接近最远的顺序排列它们的距离。

我只是现实地需要大约10或20个“最近”的结果,但是除了从数据库中获取所有结果,并对其中每一个进行数组排序,我都无法想像这样做。

这是我已经:

function getDistance($point1, $point2){

$radius = 3958; // Earth's radius (miles)

$pi = 3.1415926;

$deg_per_rad = 57.29578; // Number of degrees/radian (for conversion)

$distance = ($radius * $pi * sqrt(

($point1['lat'] - $point2['lat'])

* ($point1['lat'] - $point2['lat'])

+ cos($point1['lat'] / $deg_per_rad) // Convert these to

* cos($point2['lat'] / $deg_per_rad) // radians for cos()

* ($point1['long'] - $point2['long'])

* ($point1['long'] - $point2['long'])

) / 180);

$distance = round($distance,1);

return $distance; // Returned using the units used for $radius.

}

include("../includes/application_top.php");

$lat = (is_numeric($_GET['lat'])) ? $_GET['lat'] : 0;

$long = (is_numeric($_GET['long'])) ? $_GET['long'] : 0;

$startPoint = array("lat"=>$lat,"long"=>$long);

$sql = "SELECT * FROM mellow_listings WHERE active=1";

$result = mysql_query($sql);

while($row = mysql_fetch_array($result)){

$thedistance = getDistance($startPoint,array("lat"=>$row['lat'],"long"=>$row['long']));

$data[] = array('id' => $row['id'],

'name' => $row['name'],

'description' => $row['description'],

'lat' => $row['lat'],

'long' => $row['long'],

'address1' => $row['address1'],

'address2' => $row['address2'],

'county' => $row['county'],

'postcode' => strtoupper($row['postcode']),

'phone' => $row['phone'],

'email' => $row['email'],

'web' => $row['web'],

'distance' => $thedistance);

}

// integrate google local search

$url = "http://ajax.googleapis.com/ajax/services/search/local?";

$url .= "q=Off+licence"; // query

$url .= "&v=1.0"; // version number

$url .= "&rsz=8"; // number of results

$url .= "&key=ABQIAAAAtG"

."Pcon1WB3b0oiqER"

."FZ-TRQgsWYVg721Z"

."IDPMPlc4-CwM9Xt"

."FBSTZxHDVqCffQ2"

."W6Lr4bm1_zXeYoQ"; // api key

$url .= "&sll=".$lat.",".$long;

// sendRequest

// note how referer is set manually

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_REFERER, /* url */);

$body = curl_exec($ch);

curl_close($ch);

// now, process the JSON string

$json = json_decode($body, true);

foreach($json['responseData']['results'] as $array){

$thedistance = getDistance($startPoint,array("lat"=>$array['lat'],"long"=>$array['lng']));

$data[] = array('id' => '999',

'name' => $array['title'],

'description' => '',

'lat' => $array['lat'],

'long' => $array['lng'],

'address1' => $array['streetAddress'],

'address2' => $array['city'],

'county' => $array['region'],

'postcode' => '',

'phone' => $array['phoneNumbers'][0],

'email' => '',

'web' => $array['url'],

'distance' => $thedistance);

}

// sort the array

foreach ($data as $key => $row) {

$id[$key] = $row['id'];

$distance[$key] = $row['distance'];

}

array_multisort($distance, SORT_ASC, $data);

header("Content-type: text/xml");

echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";

echo ''."\n";

echo ''."\n";

echo ''."\n";

for($i = 0; isset($distance[$i]); $i++){

//echo $data[$i]['id']." -> ".$distance[$i]."
";

echo ''."\n";

foreach($data[$i] as $key => $val){

echo ''."\n";

echo ''."\n";

}

echo ''."\n";

}

echo ''."\n";

echo ''."\n";

?>

现在,运行速度足够快,只有数据库中的2或3个企业,但是我目前正在加载5k的企业到数据库中,我担心每个条目都将运行速度非常慢。你怎么看?

它不是我可以缓存的数据类型,因为两个用户具有相同纬度/长度的可能性可能难以置信的罕见,因此不会有帮助。

我能做些什么呢?

感谢任何帮助和任何建议。他们都非常感激。

php位置,php – 如何有效地找到一个给定位置附近最近的位置相关推荐

  1. python盒中取球_在Python中找到占据给定球的盒子的位置

    假设我们有两个数组A和B.A的大小是行数,A [i]是第i行中的框数.B是球的阵列,其中B [i]表示球上的数字.给定该球i(值B [i])将放置在从开始位置为B [i]的盒子中.我们必须找到与每个B ...

  2. html中row位置居中,如何快速找到html和row text对应的位置?

    之前想过这个需求,这次看到这个题目才正式想了一下. 这个思路可能不大成熟,希望一起测试和改进. const ori = 'I want to eat hamburger to span on a sp ...

  3. 11 一道几何题,众所周知,坠帅坠可爱的ZZZ学长是计算几何的大师,这次他遇到了这样一个题目。 给定3个点a,b,c 找到一个点,使得如果我们把平面绕着这个点旋转一定的角度,a可以落在b原来的位置,

    11 一道几何题 众所周知,坠帅坠可爱的ZZZ学长是计算几何的大师,这次他遇到了这样一个题目. 给定3个点a,b,c. 找到一个点,使得如果我们把平面绕着这个点旋转一定的角度,a可以落在b原来的位置, ...

  4. Java黑皮书课后题第8章:***8.35(最大块)给定一个元素为0或者1的方阵,编写程序,找到一个元素都为1的最大的子方阵。程序提示用户输入矩阵的行数。然后显示最大的子方阵的第一个元素、行数

    ***8.35(最大块)给定一个元素为0或者1的方阵,编写程序,找到一个元素都为1的最大的子方阵.程序提示用户输入矩阵的行数.然后显示最大的子方阵的第一个元素.行数 题目 题目描述与运行示例 破题 代 ...

  5. 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。

    描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 0 到 n-1. ...

  6. 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

    题目描述 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 ...

  7. 2022-12-14:给定一个正数n, 表示从0位置到n-1位置每个位置放着1件衣服 从0位置到n-1位置不仅有衣服,每个位置还摆着1个机器人 给定两个长度为n的数组,powers和rates pow

    2022-12-14:给定一个正数n, 表示从0位置到n-1位置每个位置放着1件衣服 从0位置到n-1位置不仅有衣服,每个位置还摆着1个机器人 给定两个长度为n的数组,powers和rates pow ...

  8. PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询–合理利用算法,效率提高2125倍...

    目前的工作是需要对用户的一些数据进行分析,每个用户都有若干条记录,每条记录中有用户的一个位置,是用经度和纬度表示的. 还有一个给定的数据库,存储的是一些已知地点以及他们的经纬度,内有43W多条的数据. ...

  9. 快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值

    我觉得写得很清晰,希望没有侵犯作者的著作权,原文地址http://blog.csdn.net/hackbuteer1/article/details/6699642 快速找出一个数组中的两个数字,让这 ...

  10. 算法练习day10——190328(二叉树的先序、 中序、 后序遍历, 包括递归方式和非递归方式、找到一个节点的后继节点、二叉树的序列化和反序列化)

    1.实现二叉树的先序. 中序. 后序遍历, 包括递归方式和非递归方式 1.1 访问节点的顺序 节点访问顺序如下图所示: 访问顺序:1 2 4 4 4 2 5 5 5 2 1 3 6 6 6 3 7 7 ...

最新文章

  1. Knockoutjs 实践入门 (2) 绑定事件
  2. Elasticsearch对外提供分词服务实践
  3. mysql-on duplicate key update实现insertOrUpdate官方文档
  4. java 指针 引用_java中的引用与c中的指针
  5. 《Essential C++》笔记之传指针(pass by pointer)分析
  6. makefile高级应用
  7. matlab 纹理映射
  8. macvlan 详解
  9. 非对称密钥/对称密钥加解密工具
  10. ubuntu安装nessus
  11. Switch开关大调节和提示文字样式调节
  12. 关于计算机论文摘要和引言,论文摘要和背景的区别_论文前言与摘要的区别_引言和摘要有什么区别...
  13. 企业支付宝转账到银行卡(免费率 无限额)PHP 演示示例
  14. dubbo暴露出HTTP服务
  15. android9 apk自动安装功能,Android app自动更新总结(已适配9.0)
  16. PHP下载文件的正确方式
  17. 计算机打数据执行保护删除不掉,XP老是出现“数据执行保护”怎么办?教你方法轻松解决此问题...
  18. Unified diagnostic services (UDS)
  19. 80C51单片机:2.初学点亮发光二极管,流水灯案例
  20. 我的世界服务器修改武器伤害,我的世界:8张特性图,武器伤害没上限,物品全靠刷,老mc秒懂!...

热门文章

  1. indesign用于产品排班_2019年机器人行业十大新品盘点,过去一年最受关注的产品都在这...
  2. Raki的读paper小记:LOOKING BACK ON LEARNED EXPERIENCES FOR CLASS/TASK INCREMENTAL LEARNING
  3. mycat管理mysql_Mycat用户和权限控制管理
  4. php画弧,75、PHP图像处理之画圆、弧线、网站饼状统计图绘制
  5. java中的并发是什么意思_java中的并发是什么
  6. linux脚本中使用转义括号,Linux之shell中的大括号、中括号、小括号的使用详解+多示例...
  7. oracle服务器cpu 100,Oracle数据库服务器CPU一直100%怎么处理-sql优化方面
  8. 从零开始学算法 - 快速排序
  9. 处理网页上的字符溢出的方法
  10. JVM内存模型及垃圾回收机制