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

我正在制作一个脚本,将一个业务负载加载到一个纬度和经度的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的企业到数据库中,我担心每个条目都将运行速度非常慢。你怎么看?

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

我能做些什么呢?

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值