【问题标题】:Eeek! - Calculate Radius having only latitudes and longitudes哎呀! - 计算只有纬度和经度的半径
【发布时间】:2011-06-01 22:32:00
【问题描述】:

我有一个如下所示的 MySQL 数据库:

Postcode int(4),
City varchar, 
State varchar,
Latitude decimal(7,4),
Longitude decimal(7,4)

我希望用户输入他们的邮政编码(例如1660)和 x 半径(比如说10)英里或公里。当他们点击搜索时,我想返回该半径内所有城市的列表。我有一个数据库,其中包含澳大利亚所有地区的所有邮政编码、城市、纬度、经度等。

【问题讨论】:

  • 密切相关(如果不重复):Formulas to Calculate Geo Proximity
  • 一个类似的问题,不特定于 SQL 中的实现:stackoverflow.com/q/27928/238688
  • 是的,仍然很困惑。 Forumla 仍然没有任何意义,因为它没有具体告诉我在 a 点 10 公里内返回的是什么。只有点 a 和 b 相距 x 公里。为了给伤口加盐,他们这样说“正如你所看到的,Haversine 公式和余弦球定律之间没有明显的区别,但是与 Vincenty 公式相比,两者的距离偏移量高达 22 公里,因为它使用地球的近似椭球体,而不是球体。” 22公里偏移?好吧,这似乎一点也不准确!!????
  • 22 公里对于愿意旅行 1000 公里以上的客户来说可以忽略不计。使用 Google Maps API 从邮政编码中获取纬度和经度。
  • 如果 r 大于“相距 x 公里”,则“相距 x 公里”在 r 内!!

标签: mysql latitude-longitude


【解决方案1】:

如果您可以牺牲一些精度(通过选择距离邮政编码 1660 10 英里的矩形区域内的城市),那么解决方案可以很简单:

  1. 找出邮政编码1660的经纬度
  2. 计算矩形区域的左上角和右下角(左上角 10 英里,右下角 10 英里)
  3. 使用如下查询:从表中选择城市,其中纬度在 bottom_right_latitude 和 top_left_latitude 之间,经度在 top_left_longitude 和 bottom_right_longitude 之间

如果它必须是精确的半径 10 英里(这意味着该区域是一个圆),那么解决方案将非常复杂,恐怕无法在单个查询中完成。您需要考虑一些辅助列并使用距离和方位计算公式来完成它。

参考:Calculate distance, bearing and more between Latitude/Longitude points

【讨论】:

    猜你喜欢
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    相关资源
    最近更新 更多