我在解决这个问题时遇到了一些困难。我有一张MySQL表格,其中包含英国邮政编码及其经度和纬度值列表。我希望能够在表格上进行搜索,以找到给定长/拉特对的最接近的邮政编码。
我一直在尝试使用的查询是:
"SELECT id, outcode AS thecode, @la := MATCH(lat) AGAINST(?) AS score_lat, @ln := MATCH(lng) AGAINST(?) AS score_lng, @la + @ln AS score_total FROM postcodes ORDER BY score_total DESC LIMIT 10
然而,这只是返回似乎是随机的邮政编码,例如与纬度:55.775549和龙:-4.047556
Array
(
[0] => Array
(
[id] => 929
[thecode] => FK14
[score_lat] => 0
[score_lng] => 0
[score_total] => 0
)
[1] => Array
(
[id] => 2785
[thecode] => UB3
[score_lat] => 0
[score_lng] => 0
[score_total] => 0
)
[2] => Array
(
[id] => 993
[thecode] => G70
[score_lat] => 0
[score_lng] => 0
[score_total] => 0
)
[3] => Array
(
[id] => 2849
[thecode] => WC2B
[score_lat] => 0
[score_lng] => 0
[score_total] => 0
)
[4] => Array
(
[id] => 1057
[thecode] => GU29
[score_lat] => 0
[score_lng] => 0
[score_total] => 0
)
[5] => Array
(
[id] => 2913
[thecode] => WS13
[score_lat] => 0
[score_lng] => 0
[score_total] => 0
)
[6] => Array
(
[id] => 1121
[thecode] => HP20
[score_lat] => 0
[score_lng] => 0
[score_total] => 0
)
[7] => Array
(
[id] => 1185
[thecode] => IG6
[score_lat] => 0
[score_lng] => 0
[score_total] => 0
)
[8] => Array
(
[id] => 1249
[thecode] => IV25
[score_lat] => 0
[score_lng] => 0
[score_total] => 0
)
[9] => Array
(
[id] => 1313
[thecode] => KA8
[score_lat] => 0
[score_lng] => 0
[score_total] => 0
)
)
数据库的架构是:
CREATE TABLE `postcodes` (
`id` int(11) NOT NULL auto_increment,
`outcode` varchar(4) NOT NULL,
`lat` varchar(20) NOT NULL,
`lng` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `lat` (`lat`),
FULLTEXT KEY `lng` (`lng`)
) ENGINE=MyISAM AUTO_INCREMENT=2975 DEFAULT CHARSET=latin1 AUTO_INCREMENT=2975 ;
我希望有人能帮助!如果您需要了解更多信息,请只问...
感谢,
tip2tail
你看过吗:http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html你的应用程序相当简单,因为它只是距离公式的基本应用程序,但你问的是一个空间问题。你在做什么试图匹配字符串,你实际要问的问题是一个距离问题。这种方法永远不会有效。 – hsanders 2012-08-01 19:03:09
@hsanders我不知道该从哪里开始!你能提供任何建议或例子,说明我可以如何实现我所需要的?谢谢tip2tail – tip2tail 2012-08-01 19:23:37