【发布时间】:2020-07-03 07:12:34
【问题描述】:
假设我们有一个包含纬度和经度(数字)列、范围列、名称列等的表格。
我们有一个输入 - 坐标纬度和经度
我想构造一个查询以仅获取此表中的行,其中与 输入坐标 的距离(以米为单位)小于 范围列 中的值。
问题是,如何做到这一点最有效?
我可以想象这样做: 首先,对百万条记录(driver_users)进行一些“第一次切割” - 我将应用经典查询来选择最小和最大之间的坐标......所以,我们将减少收集的行数,然后我们将在每一行上应用半正弦公式并进行比较范围列中的值。问题也是如何计算截止的最小值和最大值。假设距离 输入坐标 最大 50 公里 - 我认为也可能是方形的,因为它只是初始选择以减少使用 hasrsine 公式的数量。
但我不确定这是否真的有效。我正在使用 java (spring boot)、hibernate/jpa 和 postgresql。 SQL表如果不好,也可以完全重做。谢谢。
CREATE TABLE public.driver_users
(
username character varying(100) NOT NULL,
longitude numeric,
latitude numeric,
range integer NOT NULL,
UNIQUE (username),
FOREIGN KEY (username)
REFERENCES public.users (username) MATCH SIMPLE
ON UPDATE CASCADE
ON DELETE CASCADE,
CONSTRAINT driver_users_pkey PRIMARY KEY (username)
);
【问题讨论】:
标签: java postgresql optimization gps coordinates