Python 分组/分组纬度和经度

Python 分组/分组纬度和经度,python,algorithm,latitude-longitude,geo,geography,Python,Algorithm,Latitude Longitude,Geo,Geography,这与其说是技术问题,不如说是逻辑问题。所以请你们不要在上面做标记 我想用python编写一个方法,它采用两个参数->纬度和经度。此方法应返回组/桶。应根据0.05度进行分组 def get_bucket(lat,lng): #body 例如: 获取1.05,1.05->b1 获取1.05,1.03->b1 因此,假设地球被划分为0.05度方格,落在方格中的任何纬度/长度都共享同一个桶。以下是一种实现: def get_bucket(lat,lng): int(lng/0.05)*(

这与其说是技术问题,不如说是逻辑问题。所以请你们不要在上面做标记

我想用python编写一个方法,它采用两个参数->纬度和经度。此方法应返回组/桶。应根据0.05度进行分组

def get_bucket(lat,lng):
  #body
例如:

获取1.05,1.05->b1 获取1.05,1.03->b1


因此,假设地球被划分为0.05度方格,落在方格中的任何纬度/长度都共享同一个桶。

以下是一种实现:

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

通常有180度的纬度-90到90度和360度的经度-180到180度

所以纬度有18000个百分之一度的增量,即-90.00,-89.99。。。经度的百分之89.99、90.00和36000度增量

假设你把它放在一个二维数组中。如果您想要.05度的增量,则需要3600 18000/5行作为纬度,7200列36000/5行作为纬度

因此,您需要将经度/纬度转换为两个数组索引。这里有一个方法:

取你的纬度值,在-90到90之间,再加上90。这会给你一个从0到180的数字。 乘以100,然后四舍五入。这会给你一个从0到18000的数字。 除以5。 这是您的行索引

对经度执行相同的操作,但添加180可以得到一个介于0和360之间的数字。这将提供您的列编号

例如:

德克萨斯州奥斯汀的位置为拉特:30.267,液化天然气:-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
德克萨斯州奥斯汀市将进入24501645号水桶


当然,将索引转换回纬度和经度只是原始转换的反向。对于纬度,乘以5,除以1000,再减去90。

最初的想法是只除以和下限,但0.15/0.05并不等于3。乘以100,再除以5?因为地球不是平的,当你接近两极时,你的水桶会逐渐变成三角形。这意味着,粗略地说,你最大的桶将是有更多人的地方,如果你的问题领域受到人口的影响,这可能真的很糟糕。当然,如果你只对地球上的一小片区域感兴趣,尤其是在赤道附近,这并不重要。那么你的问题是什么?你试过什么吗?如果您想根据除以2的结果将0到1000之间的所有整数放入存储桶中,您需要多少个存储桶?如果你能解决这个问题,那么你就可以解决这个问题。这是什么?尽可能高的纬度是多少is@Juvenik90度?这颗行星是球形的。