【问题标题】:Find the object that is farthest from the rest找到离其他物体最远的物体
【发布时间】:2022-01-14 01:31:56
【问题描述】:

这些点遍布全岛,但显然有一个点绝对是我要找的那个点

我在处理空间日期时遇到了 Postgres 的问题。我有一个包含列的表:对象 ID、纬度、经度和几何。我需要找到离其他物体最远的物体(点)。我怎么能这样做?

数据

CREATE TABLE cultural_sites
(
    cult_site_id text COLLATE pg_catalog."default" NOT NULL,
    name text COLLATE pg_catalog."default",
    type_id integer,
    found_year integer,
    prot_cat_id integer,
    closest_house_id integer,
    lat double precision,
    "long" double precision,
    geom geometry(Point,4326),
    CONSTRAINT cult_site_id PRIMARY KEY (cult_site_id)
);

INSERT INTO cultural_sites(cult_site_id, lat, long)
VALUES (923048800130006, 46.152222, 33.7015), (911711012380005, 44.43722, 34.104166), (911711012630005, 44.42833, 34.1225), (911710892610005, 44.95, 34.097222), (911710892840005, 44.958084, 34.106479), (911710988820005, 44.947788, 34.099440), (911710988990005, 44.952224, 34.095908), (911710989390005, 44.9449409, 34.097), (911710989490005, 44.955555, 34.093888), (911710989510005, 44.946944, 34.1019444);

ALTER TABLE cultural_sites
ALTER COLUMN geom
type geometry(Point,4326) using st_point(long,lat);

【问题讨论】:

  • 显然,如果集合只包含两个点,那么两者或下一个都是“离其余点最远的”。人们可以描绘出具有相似属性的更大的点集合(例如,所有点等距地位于圆的圆周上)。这就是说 - 你确定你的数据集中存在这样一个独特的点吗?
  • 欢迎来到 SO。请提供表结构、样本数据和预期结果。最好在小提琴中。
  • @JimJones 我更新了帖子。如果我误解了什么,我很抱歉,我的英语不是那么好
  • @VorobiovaKristina 您必须将数据和表结构发布为 SQL 语句。我们无法从屏幕截图中复制和粘贴代码。另外,把它放在一个小提琴中;)这是一个让你开始的例子:dbfiddle.uk/…
  • @JimJones 是的,非常感谢!

标签: sql postgresql postgis spatial


【解决方案1】:

进行自连接以计算参考点到表中最远点的距离,并在外部查询中使用ORDER BY LIMIT 再次对其进行过滤以获得最长距离:

SELECT t1.geom,t1.geom <-> j.geom AS distance
FROM cultural_sites t1
CROSS JOIN LATERAL (
  SELECT geom FROM cultural_sites t2    
  WHERE NOT t1.geom = t2.geom
  ORDER BY t1.geom <-> t2.geom
  LIMIT 1) j 
ORDER BY 2 DESC
LIMIT 1;

                        geom                        |      distance      
----------------------------------------------------+--------------------
 0101000020E61000006F1283C0CAD94040A9DDAF027C134740 | 1.2593570786051942

演示:db&lt;&gt;fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多