分组/搭扣纬度和经度

时间:2016-06-30 06:07:22

标签: python algorithm latitude-longitude geo geography

这比技术问题更具逻辑性问题。所以请你们请不要举报。

我想在python中编写一个方法,它接受两个参数 - >纬度和经度。此方法应返回group / bucket。分组应基于0.05度进行。

def get_bucket(lat,lng):
  #body

例如:

get_bucket(1.05,1.05) - > B1 get_bucket(1.05,1.03) - > B1

所以它假设地球被划分为0.05度网格平方,并且任何纬度/长度落在这个方格中共享同一个桶。

2 个答案:

答案 0 :(得分:5)

通常有180度纬度(-90到90度)和360度经度(-180到180度)。

因此纬度增量为18,000个百分位(即-90.00,-89.99,... 89.99,90.00),经度增量为36,000个百分位。

假设你把它放在一个二维数组中。如果你想要.05度增量,纬度需要3,600(18,000 / 5)行,纬度需要7,200列(36,000 / 5)行。

因此,您希望将经度/纬度转换为两个数组索引。这是一种方式:

  1. 获取纬度数,范围在-90到90之间,并为其添加90。这会给你一个从0到180的数字。
  2. 乘以100,然后向上舍入。这会给你一个从0到18,000的数字。
  3. 除以5。
  4. 那是你的行索引。

    使用经度进行相同操作,但添加180以获得0到360之间的数字。这会提供您的列号。

    示例:

    德克萨斯州奥斯汀的位置是纬度:30.267,lng:-97.743

    30.267 + 90 = 120.267
    120.267 * 1000 = 12027 (rounded up)
    12027 / 5 = 2405
    
    -97.743 + 180 = 82.257
    82.257 * 1000 = 8226 (rounded up)
    8226 / 5 = 1645
    

    德克萨斯州奥斯汀将陷入困境(2450,1645)

    当然,将索引转换回纬度和经度只是原始转换的逆转。对于纬度,乘以5,除以1,000,然后减去90。

答案 1 :(得分:0)

这是一个实现:

def get_bucket(lat,lng):
    int(lng/0.05)*(whatever the highest possible lat is)/0.05 + int(lat/0.05)