【问题标题】:GPS coordinates: 1km square around a pointGPS坐标:一个点周围1平方公里
【发布时间】:2010-10-22 20:53:27
【问题描述】:

我希望有人可以为我提供一个方程来计算给定点周围 1 公里的正方形(X 从 a.aaa 到 b.bbb,Y 从 c.ccc 到 c.ccc),例如 lat = 53.38292839lon = -6.1843984?我还需要一个点周围 2 公里、5 公里和 10 公里的方格。

我试过谷歌搜索无济于事......现在是深夜,希望有人可以在我深入研究三角函数之前快速修复......

我将用 Javascript 运行所有这些,尽管任何语言都可以。

【问题讨论】:

  • 您意识到它们在大多数意义上都不是“正方形”,尤其是当您的点靠近两极时?
  • 您需要正方形,还是半径可以解决问题?
  • @Paul Tomblin 是的,您对“正方形”的看法是正确的。出于所有意图和目的,我所说的那种简单的正方形对我来说已经足够了!
  • @mna,我需要一个范围来在数据库中进行搜索。因此广场。我不知道如何在线性数据库中搜索圆。

标签: javascript math gps coordinates


【解决方案1】:

如果世界是一个完美的球体,根据基本三角学...

纬度在世界任何地方都有相同的直线距离,因为所有纬度线的大小都相同。所以1纬度等于地球周长的1/360,也就是40075公里的1/360。

经线的长度取决于纬度。纬度 l 处的经线将是 cos(l)*40,075 公里。 1 度经度将是其 1/360。

所以你可以从那开始倒退。假设您想要非常接近一平方公里的东西,您需要 1 * (360/40075) = 0.008983 纬度。

在您的示例纬度 53.38292839 处,经线将是 cos(53.38292839)*40075 = [大约] 23903.297 公里长。所以 1 公里是 1 * (360/23903.297) = 0.015060 度。

实际上,地球并不是一个完美的球体,它在赤道处更胖。以上为世界上大多数有用的区域提供了一个非常好的答案,但在两极附近很容易变得有点奇怪(长/纬度的矩形不再看起来像地球上的矩形)。例如,如果您在赤道上,则假设的经线长度为 0 公里。因此,您将如何处理需要计算学位的问题将取决于您想要这些数字的原因。

【讨论】:

  • 好的。吉姆的 1 英里 = 0.014472 纬度(或相当于 0.008983 公里)似乎恰到好处。非常感谢。
  • 注意:在计算 cos(lat) 时,请务必将 lat 转换为弧度,因为几乎所有编程语言都在其 Cos/Sin 三角法中使用弧度。
【解决方案2】:

这是我的笔记中的一些内容,可在带有十进制 GPS 的 Android 上使用。

纬度: 纽约市 40N 47 73W 58 40.783333 73.966667

洗涤 DC 38N 53 77W 02 38.883333 77.033333

收益 = 209 英里!非常接近

距离(英里)(x) = 69.1 (lat2-lat1) 距离(英里) (y) = 53.0 (long2 - long1) 像乌鸦飞一样 sqrt (x2 + y2) ... duh!@

三角洲(纬度)/英里 = .014472 增量(长)/英里 = .018519

使用方框作为近似值 在 100 英里(北 100 / 南 100,东 100 / 西 100)内找到某人 从 0,0 -14.472 / + 14.472 , -18.519 / 18.519

【讨论】:

  • 好的,那么 delta_lat 是 0.014472 英里,而 delta_lon 是 0.018519?很酷,我将其转换为公里,我应该进行排序。非常感谢。我认为它会比这复杂得多!
  • 纬度和经度的距离不服从毕达哥拉斯,因为你是在一个曲面上追踪,而不是在一个平面上。查找 hasrsine 公式以获得正确的结果 - 它并不漂亮,但您可以立即用大约 5 行代码重现它,然后将其放入某个库中。
  • 我知道这一点,这在 200 英里的距离内效果很好,这就是我为它添加书签的原因。在服务器上速度很快。如果你想要更精确的东西....来吧! meridianworlddata.com/Distance-Calculation.asp
  • 请记住,如果您要使用正方形来使您的数据库查询易于管理,正方形中心的对角线可能比半径大 50%...嗯,该怎么办?
  • 是的,我正在寻找一个正方形。感谢您的回复。
【解决方案3】:

在给定中心的情况下生成 gps 正方形的更简单方法是使用间接 Vincenty 算法。此处的 Javascript 代码显示了如何做到这一点http://www.movable-type.co.uk/scripts/latlong.html。 使用圆形创建正方形并不难。正方形到每个点的距离相等。因此,给定一个中心点,距中心的距离,根据正方形的旋转将方位从 0 或任何数字更改并增加 90 度或 PI/2 弧度。通过每次增加 90 度,您将在圆形空间中形成一个正方形。

我自己使用它来围绕中心点生成具有给定距离的 GPS 点 ..... --/- --0-- -/-- .----.

【讨论】:

    【解决方案4】:

    TL;DR

    10 km = 0.08999 来自某个geopoint 的半径。此计算仅基于纬度值,仅适用于具有 WGS84 投影的地理点。

    更多详情

    如果您想要一个更准确的答案,您必须通过构建某种函数来计算它。但是它仍然不能保证,因为人们甚至会为错误的程度而争吵。考虑高度,墨卡托与否等。

    注意

    上面的值只是一个经验法则,所以不要将它用于关键应用程序。

    参考

    GIS StackExchange,How do I calculate the bounding box for given a distance and latitude/longitudeDavid the Australian developer 回答

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-11
      • 2014-05-06
      • 2014-01-29
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多