现在花了几个小时,它似乎没有用。一个倾听者点击我的网站,我抓住他们的IP,最终有大致的纬度和经度。我有一张我的广播电台的表,其中有大致的纬度和经度。我只是想看看新的Listener是否在我的一个工作站25英里范围内,所以我可以给他们那个饲料。如果没有,我会给他们我的全球流。
当我使用下面的查询时,
//Connect to database
// CONNECT TO JOOMLA DATABASE
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
$query
->select($db->quoteName(array('cityName', 'countryCode', 'latitude', 'longitude')))
->select($db->quote('( 3959 * acos( cos( radians('.$latitude.') ) * cos( radians( latitude ) )
* cos( radians( longitude ) - radians('.$longitude.') ) + sin( radians('.$latitude.') )
* sin( radians( latitude ) ) ) )', 'distance'))
->from($db->quoteName('#__areas'))
->having($db->quote('distance') . ' < ' . $miles)
->order($db->quote('distance') . ' DESC')
->setLimit('1');
// Reset the query using our newly populated query object.
$db->setQuery($query);
// Load the results as a list of stdClass objects (see later for more options on retrieving data).
$row = $db->loadObject();
echo $distance = distance($latitude,$longitude,$row->latitude,$row->longitude,"M");
echo '<br />';
print_r($row);
exit;
输出结果为:
stdClass对象([cityName] =&gt;劳德代尔堡[countryCode] =&gt;美国[纬度] =&gt; 26.122299 [经度] =&gt; -80.143402 [(3959 * acos(cos(弧度(46.8898))* cos(弧度(纬度))* cos(弧度(经度) - 弧度(-114.031))+ sin(弧度(46.8898))* sin(弧度(纬度))))] =&gt;(3959 * acos(cos(弧度(46.8898))* cos(弧度(纬度))* cos(弧度(经度) - 弧度(-114.031))+ sin(弧度(46.8898))* sin(弧度(纬度)))))
长计算的结果不应该是距离而不是重复计算吗?除了合适的一个,我已经尝试过我能想到的每一个组合。可以真的使用一些帮助。谢谢!
答案 0 :(得分:0)
尝试:
->select('( 3959 * acos( cos( radians('.$latitude.') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('.$longitude.') ) + sin( radians('.$latitude.') ) * sin( radians( latitude ) ) ) ) as distance'))