首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表中纬度/经度之间的最大距离

列表中纬度/经度之间的最大距离
EN

Stack Overflow用户
提问于 2009-08-15 22:19:44
回答 4查看 1.2K关注 0票数 1

我有一个地理编码条目的数据库。我需要确定哪两个条目离总条目的子集最远。例如,我选择一个包含10个条目的列表,然后从该列表中确定该列表中表示最大距离的两个位置。

我不知道该如何处理这件事。我甚至考虑过使用弧度,但似乎没有满足要求。

仅供参考,灯堆在这里...

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-15 22:38:10

以下查询将计算所有点之间的距离,并返回距离最大的两个点:

代码语言:javascript
复制
SELECT coor1.longitude as lon1,
       coor1.latitude as lat1,
       coor2.longitude as lon2,
       coor2.latitude as lat2,
       (ACOS(
         COS(RADIANS(coor1.latitude))  * 
         COS(RADIANS(coor1.longitude)) *
         COS(RADIANS(coor2.latitude))  *
         COS(RADIANS(coor2.longitude)) + 
         COS(RADIANS(coor1.latitude))  *
         SIN(RADIANS(coor1.longitude)) *
         COS(RADIANS(coor2.latitude))  *
         SIN(RADIANS(coor2.longitude)) +
         SIN(RADIANS(coor1.latitude))  * 
         SIN(RADIANS(coor2.latitude))
         ) * 6378                        --- Use 3963.1 for miles
       ) 
AS DistanceKM
FROM coordinates coor1,
     coordinates coor2
WHERE NOT (coor1.longitude = coor2.longitude AND coor1.latitude = coor2.latitude)
ORDER BY DistanceKM DESC
LIMIT 1;                                 --- Only the biggest

现在,我建议提前做这些计算,并将结果存储在单独的表中。

票数 2
EN

Stack Overflow用户

发布于 2009-08-15 22:39:39

从外观上看,这可以通过首先找到点的convex hull (例如,使用Graham's scan ),然后对其上的直径执行rotating calipers来解决。

票数 2
EN

Stack Overflow用户

发布于 2009-08-15 22:30:26

暴力方法:

  1. 通过平均纬度和经度值来查找十个列表的中心。
  2. 对于数据库中的每个(纬度、经度)对,使用大圆公式从步骤(1)
  3. 选取最大的两个距离开始计算与中心的距离。

明显的优化:将世界分成N个“正方形”(例如,10度经度,10度纬度),并预先计算每对的中心之间的大圆距离。将其存储在数据库中。现在,您可以快速查找最远的“正方形”,并且只检查这些块中的(纬度,经度)对。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1283016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档