我正在尝试为整个世界生成矩形网格,并在350米(宽度和高度相等)中固定像元大小。
我试图做的事情:
1)在主循环中迭代范围[-180; 180]
2)在嵌套循环中迭代范围[-85.06; 85.06](网络墨卡托界)
3)使用Java GeographicLib Geodesic.WGS84.Direct()递增在东(主循环)和北(嵌套循环)中绑定到350米的像元。
Java代码:
double lon_min = -180;
double lon_max = 180;
double lat_min = -85.06;
double lat_max = 85.06;
double lon_max_c = lon_min;
double lon_min_c = lon_min;
int grid_x = 0;
int grid_y = 0;
int cell_id = 0;
while(lon_max_c < lon_max)
{
double lat_min_c = lat_min;
double lat_max_c = lat_min;
lon_min_c = lon_max_c;
GeodesicData g = Geodesic.WGS84.Direct(lat_min_c, lon_min_c, 90, 350);
boolean isXlast = g.lon2 > lon_max || (lon_min_c > 0 && g.lon2 < 0);
lon_max_c = isXlast? lon_max : g.lon2;
grid_y = 0;
while(lat_max_c < lat_max)
{
lat_min_c = lat_max_c;
GeodesicData g1 = Geodesic.WGS84.Direct(lat_min_c, lon_min_c, 0, 350);
boolean isYlast = g1.lat2 > lat_max;
lat_max_c = isYlast? lat_max : g1.lat2;
System.out.print("\rid: " + cell_id + " lon: " + lon_max_c + " lat: " + lat_max_c);
grid_y = grid_y + 1;
cell_id = cell_id + 1;
}
grid_x = grid_x + 1;
}
结果,产生了约5.3亿个细胞。但是,整个星球的面积约为510M平方公里。因此,细胞总数应约为40亿。我对测地线数学很陌生,那怎么了?我该怎么做才能正确生成此网格?
答案 0 :(得分:0)
整个世界的矩形网格,其像元大小固定为350米(宽度和高度相等)
您要尝试做的事是不可能的,因为地球不是矩形。有关更多信息,请参见https://en.wikipedia.org/wiki/Map_projection。
尽管这种影响在小范围内可以忽略不计,例如“范围[-180; 180]的经度”,“范围[-85.06; 85.06]的纬度”,忽略它是不可行的。