Я уже некоторое время тестирую свой запрос геолокации, и до сих пор не обнаружил никаких проблем с ним.
Я пытаюсь найти все города в пределах данного радиуса, часто я ищу города, окружающие город, используя координаты этого города, но недавно я пытался искать вокруг города и обнаружил, что сам город былне вернулся.
В моей базе данных есть выдержка из этих городов:
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
Но я получаю тот же результат ...
Однако, если я изменю Saint-Координаты Rémi немного изменив последнюю цифру лат или long на 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);