【问题标题】:Calculate MAX and MIN latitude and longitude with variable distance from a location计算距某个位置的可变距离的 MAX 和 MIN 纬度和经度
【发布时间】: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


【解决方案1】:

事实证明,我对我需要做的事情有正确的公式,但我用错了。我没有意识到我正在插入以英里为单位的度数 (@area) 我想搜索我应该将基线放置在 1 度的位置。

更改我输入的值可以实现每次 1 度区域过滤的所需扩展 - 因此在原点 40 英里范围内搜索内容将过滤掉所有不在 69 英里范围内的数据库结果原点,搜索 94mi 以外的会过滤掉不在 138mi 以内的等等。

我意识到@degree 在这种情况下不必声明,但我发现这样做澄清了我的问题。

DECLARE @degree int = 69
DECLARE @area int = @degree * (FLOOR(@maxDist/@degree) + 1);
DECLARE @lonMin float = @originLon - @area/(abs(cos(radians(@originLat)) * @degree));
DECLARE @lonMax float = @originLon + @area/(abs(cos(radians(@originLat)) * @degree));
DECLARE @latMin float = @originLat - (@area/@degree);
DECLARE @latMax float = @originLat + (@area/@degree);

【讨论】:

    猜你喜欢
    • 2021-05-10
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    相关资源
    最近更新 更多