【发布时间】:2018-05-29 09:13:20
【问题描述】:
MySql 表中有类似的数据。 (大约 500k)条记录
id latitude longitude
------ ---------- ------------
106837 24.7218925 68.2604037
106838 24.7218947 68.260412
106839 24.7219007 68.2604083
106840 24.721902 68.260403
106841 24.7219149 68.260416
106842 24.7219169 68.2604118
106843 24.7219172 68.2604141
106844 24.7219269 68.2604097
106845 24.7219299 68.2604039
106846 24.7219346 68.2603994
106847 24.7219409 68.2604027
106848 24.7219434 68.2604129
106849 24.721956 68.2603941
106850 24.7219879 68.2603614
106851 24.7268579 68.2586257
106852 24.7283047 68.2575022
106853 24.7283047 68.2575032
106854 24.7283141 68.2575256
106855 24.728375 68.2575342
106856 24.7283862 68.2575007
106857 24.7284202 68.2575555
106858 24.7284468 68.257605
106859 24.7284485 68.2576076
106860 24.7284639 68.2576095
106861 24.7284675 68.2576157
我想过滤所有相距 100 米的坐标。
我有 500k 个坐标,其中一些坐标大约取自相同的位置并相互重叠,但我只想区分所有至少相距 100 米的坐标
架构:
CREATE TABLE `coordinates` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`region` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`area` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`territory` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`town` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`latitude` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`longitude` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`completed` tinyint(1) NOT NULL DEFAULT '0',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=533273 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
用图片和更多细节更新我的问题。
如您所见,我在地图 A、B、C、D、E、F 上有 6 个坐标,我的表格中有这些坐标,如下所示。
现在,只检索 A、B、C 和 D 坐标的查询是什么?我不想得到 E 和 F,因为 E 已经离 D 最近,而 F 离 C 很近,或者我们可以说 E、F 都在其他坐标的 100 米半径范围内。希望你能理解我的问题。
【问题讨论】:
-
你可以通过使用
where子句得到这个,其中差值大于等于100 -
你在解决这个问题的哪一部分?
-
如果这些代表地球上的坐标,那么我认为所有点之间的距离都远远超过 100m。
-
请看现在我已经更新了我的数据,我的桌子上有真实的坐标。
标签: mysql coordinates latitude-longitude