Eeek! - 计算仅具有纬度和经度的半径

时间:2011-06-01 22:32:00

标签: mysql latitude-longitude

我有一个看起来像这样的MySQL数据库:

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

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

1 个答案:

答案 0 :(得分:1)

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

  1. 找出邮政编码1660的纬度和经度
  2. 计算矩形区域的左上角和右下角(左侧和顶部10英里,底部和右侧10英里)
  3. 使用以下查询:从table中选择city,其中bottom_right_latitude和top_left_latitude之间的纬度以及top_left_longitude和bottom_right_longitude之间的经度
  4. 如果它必须精确地半径10英里(这意味着该区域是一个圆圈),那么解决方案将非常复杂,我不敢在一个查询中做到这一点。您需要考虑一些辅助列并使用距离和方位计算公式来完成它。

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