我已经测试了我的地理定位查询一段时间了,直到现在都没有发现任何问题。
我正在尝试搜索给定半径内的所有城市,通常情况下,我使用该城市的坐标来搜索周围的城市,但最近我尝试在一个城市周围搜索,发现这个城市本身没有被返回。
我在数据库中有这些城市的摘录:
city latitude longitude
Saint-Mathieu 45.316708 -73.516253
Saint-Édouard 45.233374 -73.516254
Saint-Michel 45.233374 -73.566256
Saint-Rémi 45.266708 -73.616257
然而,当我使用以下查询在圣雷米市周围运行我的查询时...
SELECT tblcity.city, tblcity.latitude, tblcity.longitude,
truncate((degrees(acos( sin(radians(tblcity.latitude))
* sin(radians(45.266708))
+ cos(radians(tblcity.latitude))
* cos(radians(45.266708))
* cos(radians(tblcity.longitude - -73.616257) ) ) )
* 69.09*1.6),1) as distance
FROM tblcity HAVING distance < 10 ORDER BY distance desc
我得到了以下结果:
city latitude longitude distance
Saint-Mathieu 45.316708 -73.516253 9.5
Saint-Édouard 45.233374 -73.516254 8.6
Saint-Michel 45.233374 -73.566256 5.3
搜索结果中缺少圣雷米镇。
因此,我尝试了修改后的查询,希望能得到更好的结果:
SELECT tblcity.city, tblcity.latitude, tblcity.longitude,
truncate(( 6371 * acos( cos( radians( 45.266708 ) )
* cos( radians( tblcity.latitude ) )
* cos( radians( tblcity.longitude )
- radians( -73.616257 ) )
+ sin( radians( 45.266708 ) )
* sin( radians( tblcity.latitude ) ) ) ),1) AS distance
FROM tblcity HAVING distance < 10 ORDER BY distance desc
但是我得到的结果却相同……
然而,如果我稍微修改圣雷米的坐标,只需将纬度或经度的最后一位数字更改1,两个查询都将返回圣雷米。此外,如果我将查询中心放在上述任何其他城市之一,搜索的城市也将出现在结果中。
有人可以解释一下为什么我的上述查询不能显示搜索的圣雷米城吗?下面是表格的示例(去除了额外的字段)。
我正在使用MySQL 5.0.45,提前感谢您的帮助。
CREATE TABLE `tblcity` (
`IDCity` int(1) NOT NULL auto_increment,
`City` varchar(155) NOT NULL default '',
`Latitude` decimal(9,6) NOT NULL default '0.000000',
`Longitude` decimal(9,6) NOT NULL default '0.000000',
PRIMARY KEY (`IDCity`)
) ENGINE=MyISAM AUTO_INCREMENT=52743 DEFAULT CHARSET=latin1 AUTO_INCREMENT=52743;
INSERT INTO `tblcity` (`city`, `latitude`, `longitude`) VALUES
('Saint-Mathieu', 45.316708, -73.516253),
('Saint-Édouard', 45.233374, -73.516254),
('Saint-Michel', 45.233374, -73.566256),
('Saint-Rémi', 45.266708, -73.616257);