【发布时间】:2012-07-09 08:28:43
【问题描述】:
给定一个包含 4 个圆的数据库,其中每个圆都有一个半径和一个地理定位中心:
id | radius | latitude | longitude
---+--------+----------+----------
1 | 3 | 40.71 | 100.23
2 | 10 | 50.13 | 100.23
3 | 12 | 39.92 | 100.23
4 | 4 | 80.99 | 100.23
注意:为了简单起见,每个圆圈的经度都是相同的。
假设我们在圈2,我想根据latitude/longitude坐标和每个圈的radius找到附近的每个圈。
例如,根据经纬度坐标,我们有这样的顺序:
- 圈 1(因为接近:
9.42 <- 50.13 - 40.71) - 第 3 圈(因为靠近:
10.21 <- 50.13 - 39.92) - 第 4 圈(因为靠近:
30.86 <- 80.99 - 50.13)
但是根据经纬度坐标和每个圆的半径,我们应该有:
- 第 3 圈(因为靠近:
1.79 <- 12 - 10.21) - 圈 1(因为接近:
6.42 <- 9.42 - 3) - 第 4 圈(因为靠近:
26.86 <- 30.86 - 4)
在 SQL 中有没有一种简单的方法可以做到这一点?
【问题讨论】:
-
你想在 MySQL 还是 PostgreSQL 中做这个?
-
我更喜欢使用 PostgreSQL。但即使只有 MySQL,我也会很高兴 ;)
-
您打算如何计算这些顺序?由于您认为半径很重要,因此您不仅关心圆心之间的距离,因此请扩大。
-
你只是指中心之间的gc距离除以所考虑圆的半径吗? (不太确定这个计算有什么用,但它会产生你要求的顺序)
-
实际上顺序将根据我们的圆的地理定位中心与我们要列出的每个其他圆的圆周的近点(根据半径)之间的距离来计算。所以我们可以这样说:圆的周长和考虑的圆之间的 gc 距离。
标签: mysql sql postgresql geolocation neo4j