【发布时间】:2017-06-17 08:15:05
【问题描述】:
我需要计算最大和最小纬度和经度,以便能够在计算两点之间的距离之前更轻松地过滤大量数据。
但是,我没有找到任何距离可变的东西,所以我想出了以下内容,因为我认为我可以逐步计算这些:
DECLARE @area int = (69 * FLOOR(@maxDist/69) + 1)
DECLARE @lonMin float = @originLon - @maxDist/abs(cos(radians(@originLat)) * @area);
DECLARE @lonMax float = @originLon + @maxDist/abs(cos(radians(@originLat)) * @area);
DECLARE @latMin float = @originLat - (@maxDist/@area);
DECLARE @latMax float = @originLat + (@maxDist/@area);
当我尝试应用我在 where 语句中获得的值时,当超过一个度数差异时搜索失败。
WHERE
(endPoint.Longitude >= @lonMin and endPoint.Longitude <= @lonMax)
and
(endPoint.Latitude >= @latMin and endPoint.Longitude <= @latMax)
我最好的猜测是我的 lonMin 和 lonMax 是错误的,但我不确定我在哪里弄坏了它。我相当确定我使用了正确的公式 - 到目前为止我查看的其他公式是相同的 - 我计算出的问题是 @area 还是其他什么?
(我正在使用 Miles 和示例输入,例如 33.631701,
-111.877582)
【问题讨论】:
-
您应该查看您正在使用的任何数据库的 GIS 功能或扩展。
-
我的数据库的地理功能很好,我知道它们是什么以及如何使用它们,但是使用它们的结果是速度上的巨大损失。因为它比我正在做的更大且成本更高,所以我宁愿避免它,即使会损失一些准确性(这在我的用例中并不是特别重要)
-
@Nol 我已经计算出 69 是沿赤道 1 度旅行的大致距离(以英里为单位)。但是我不知道
area应该是什么是。您写道:“我相当确定我使用了正确的公式——到目前为止我查看的其他公式是相同的”——请提供 URL。当距离为例如时,它似乎有问题。 67.5、68.0、68.5 英里。 -
当你提到 69 大约是 1 度时,你给了我一个好主意。我试着回到原来的公式,我没有尝试添加我的步骤函数
area,我发现我完全错误地插入了我的值。
标签: sql math latitude-longitude scalar