Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中遍历每个纬度/经度_Java - Fatal编程技术网

如何在Java中遍历每个纬度/经度

如何在Java中遍历每个纬度/经度,java,Java,我正在访问提供全球天气的API: 但是,它将lat/lng作为输入参数,我需要整个世界的数据 我想我可以在每一个经纬度、每两个纬度和每两个经度之间循环,给我一个世界上的点,每120英里,大约100度北/南,这应该给我16200个API调用中的所有数据((360/2)*(180/2)) 如何在Java中有效地实现这一点 我曾经设想过这样的事情;但是有没有更好的方法呢 for(int i = 0; i < 360; i+2){ var la = i; for(int x = 0 x

我正在访问提供全球天气的API:

但是,它将lat/lng作为输入参数,我需要整个世界的数据

我想我可以在每一个经纬度、每两个纬度和每两个经度之间循环,给我一个世界上的点,每120英里,大约100度北/南,这应该给我16200个API调用中的所有数据((360/2)*(180/2))

如何在Java中有效地实现这一点

我曾经设想过这样的事情;但是有没有更好的方法呢

for(int i = 0; i < 360; i+2){
  var la = i;
  for(int x = 0 x < 180; x+2) {
    var ln = x;
    //call api with lat = i, lng = x;
  }
}
for(int i=0;i<360;i+2){
var la=i;
对于(int x=0 x<180;x+2){
var ln=x;
//调用lat=i,lng=x的api;
}
}

这在某种程度上是一种范式转换,但我不会使用嵌套for循环来解决这个问题。在许多情况下,您希望迭代整个结果集,通常可以在不损失太多或任何有效性的情况下大幅缩减覆盖率缓存、修剪、优先排序。。。这些是您需要的东西:不是for循环

  • 完全切面——也许你可以忽略海洋,也许你可以忽略南极和北极(因为那里的人们有更好的方法来检查天气)
  • 根据人口密度更改搜索频率。也许加拿大北部不需要像洛杉矶或芝加哥那样彻底检查
  • 依赖于低使用率区域中的缓存—大概您可以跟踪实际使用的区域,然后可以更频繁地刷新这些区域
  • 因此,您最终得到的是某种加权缓存系统,它考虑了人口密度、使用模式和其他优先级,以确定要检查的纬度/经度坐标以及检查频率。 高级代码可能如下所示:

    void executeUpdateSweep(List<CoordinateCacheItem> cacheItems)
    {
        for(CoordinateCacheItem item : cacheItems)
        {
            if(shouldRefreshCache(item))
            {
                //call api with lat = item.y , lng = item.x
            }
        }
    }
    
    boolean shouldRefreshCache(item)
    {
        long ageWeight = calculateAgeWeight(item);//how long since last update?
        long basePopulationWeight = item.getBasePopulationWeight();//how many people (users and non-users) live here?
        long usageWeight = calculateUsageWeight(item);//how much is this item requested?
    
        return ageWeight + basePopulationWeight + usageWeight > someArbitraryThreshold;
    }
    
    void executeUpdateSweep(列出缓存项)
    {
    用于(CoordinateCacheItem:cacheItems)
    {
    如果(应刷新缓存(项目))
    {
    //调用api时lat=item.y,lng=item.x
    }
    }
    }
    布尔值shouldRefreshCache(项)
    {
    long ageWeight=calculateAgeWeight(项目);//上次更新后多长时间?
    long basePopulationWeight=item.getBasePopulationWeight();//有多少人(用户和非用户)住在这里?
    long usageWeight=calculateUsageWeight(物品);//此物品需要多少钱?
    return ageWeight+basePopulationWeight+usageWeight>someArbitraryThreshold;
    }
    
    你几乎肯定会达到该API的速率限制,更不用说这将非常耗时。为什么你到处都需要天气,你不只是关心人们在哪里吗?在你的
    for
    循环中,你可能指的是
    i+=2
    x+=2
    ,而不是
    i+2
    x+2
    。“人们几乎无处不在“但并不是所有人都会使用你的应用程序,当然也不是同一个实例。我认为,如果你需要覆盖整个地球,那么你需要重新思考你的应用程序设计,因为一个用户几乎四分之三的地球表面被水覆盖。你真的需要了解太平洋中部的天气吗?