首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中迭代每一个纬度/经度

如何在Java中迭代每一个纬度/经度
EN

Stack Overflow用户
提问于 2018-09-10 15:19:49
回答 1查看 413关注 0票数 1

我正在访问这个API,它给我提供了全球天气:

https://callforcode.weather.com/doc/v3-global-weather-notification-headlines/

然而,它以lat/lng作为输入参数,我需要整个世界的数据。

我想我可以遍历每一个纬度,每两个纬度和两个经度,给我一个世界上的点,每120英里,南北大约100度,这应该给我16,200个API调用((360/2) * (180/2))中的所有数据。

如何在Java中有效地做到这一点?

我想出了这样的主意,但有什么更好的办法吗?

代码语言:javascript
复制
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;
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-10 18:23:48

这在某种程度上是一种范式转变,但我不会使用嵌套的for -循环来解决这个问题。在许多情况下,您正在考虑对整个结果集进行迭代,通常可以在不损失很多或任何效果的情况下大幅减少覆盖范围。缓存,裁剪,排序.这些都是你需要的东西:而不是换循环。

  1. 完全切断部分-也许你可以忽略海洋,也许你可以忽略南极和北极(因为那里的人有更好的方法来检查天气)
  2. 根据人口密度更改搜索频率。也许加拿大北部不需要像洛杉矶或芝加哥那样被彻底检查。
  3. 依赖于低使用率区域中的缓存--想必您可以跟踪实际使用的区域,然后可以更频繁地刷新这些部分。

因此,您最终得到的是某种加权缓存系统,它考虑了人口密度、使用模式和其他优先级,以确定要检查的纬度/经度坐标以及检查频率。高级代码可能如下所示:

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52260948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档