如何在Java中遍历每个纬度/经度
我正在访问提供全球天气的API: 但是,它将lat/lng作为输入参数,我需要整个世界的数据 我想我可以在每一个经纬度、每两个纬度和每两个经度之间循环,给我一个世界上的点,每120英里,大约100度北/南,这应该给我16200个API调用中的所有数据((360/2)*(180/2)) 如何在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
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
。“人们几乎无处不在“但并不是所有人都会使用你的应用程序,当然也不是同一个实例。我认为,如果你需要覆盖整个地球,那么你需要重新思考你的应用程序设计,因为一个用户几乎四分之三的地球表面被水覆盖。你真的需要了解太平洋中部的天气吗?