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

我正在访问这个给我全球天气的 API:


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


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


我想我可以遍历每个纬度经度,每 2 个纬度和 2 个经度,给我一个世界上的点,每约 120 英里,大约 100 度北/南,这应该给我 16,200 个 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;

  }

}


慕姐4208626
浏览 170回答 1
1回答

30秒到达战场

这在某种程度上是一种范式转变,但我不会对这个问题使用嵌套的 for 循环。在许多情况下,您正在考虑对整个结果集进行迭代,通常可以在不损失太多或任何有效性的情况下大幅削减覆盖率。缓存、修剪、确定优先级……这些是您需要的:不是 for 循环。完全切开部分 - 也许你可以忽略海洋,也许你可以忽略南极和北极(因为那里的人无论如何都有更好的方法来检查天气)根据人口密度更改搜索频率。也许加拿大北部不需要像洛杉矶或芝加哥那样彻底检查。依靠低使用率区域的缓存 - 大概您可以跟踪实际使用的区域,然后可以更频繁地刷新这些部分。所以你最终得到的是某种加权缓存系统,它考虑了人口密度、使用模式和其他优先级,以确定要检查的纬度/经度坐标以及检查频率。高级代码可能如下所示:void executeUpdateSweep(List<CoordinateCacheItem> cacheItems){&nbsp; &nbsp; for(CoordinateCacheItem item : cacheItems)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; if(shouldRefreshCache(item))&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //call api with lat = item.y , lng = item.x&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}boolean shouldRefreshCache(item){&nbsp; &nbsp; long ageWeight = calculateAgeWeight(item);//how long since last update?&nbsp; &nbsp; long basePopulationWeight = item.getBasePopulationWeight();//how many people (users and non-users) live here?&nbsp; &nbsp; long usageWeight = calculateUsageWeight(item);//how much is this item requested?&nbsp; &nbsp; return ageWeight + basePopulationWeight + usageWeight > someArbitraryThreshold;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java