static int sample_tile(int x, int y, int zoom) { LOGD("debug x=%i, y=%i, zoom=%i", x, y, zoom); nedgz_tile_t* tile = nedgz_tile_new(x, y, zoom); if(tile == NULL) { return 0; } // sample subtiles i,j int j; int i; for(i = 0; i < NEDGZ_SUBTILE_COUNT; ++i) { for(j = 0; j < NEDGZ_SUBTILE_COUNT; ++j) { if(sample_subtile(tile, i, j) == 0) { goto fail_sample; } } } if(nedgz_tile_export(tile, "ned") == 0) { goto fail_export; } nedgz_tile_delete(&tile); // success return 1; // failure fail_export: fail_sample: nedgz_tile_delete(&tile); return 0; }
static void sample_data(texgz_tex_t* src, texgz_tex_t* dst, int x, int y, int i, int j, int m, int n, double latT, double lonL, double latB, double lonR) { assert(src); assert(dst); LOGD("debug x=%i, y=%i, i=%i, j=%i, m=%i, n=%i, latT=%lf, lonL=%lf, latB=%lf, lonR=%lf", x, y, i, j, m, n, latT, lonL, latB, lonR); // make a dummy tile nedgz_tile_t* tile = nedgz_tile_new(x, y, 9); if(tile == NULL) { return; } // compute sample coords double lat; double lon; tile_coord(tile, i, j, m, n, &lat, &lon); // compute u, v float u = (float) ((lon - lonL)/(lonR - lonL)); float v = (float) ((lat - latT)/(latB - latT)); // interpolate color unsigned char r; unsigned char g; unsigned char b; interpolatec(src, u, v, &r, &g, &b); // store color unsigned char* pixels = dst->pixels; int stride = dst->stride; int bpp = texgz_tex_bpp(dst); int idx = m*stride*bpp + n*bpp; pixels[idx + 0] = r; pixels[idx + 1] = g; pixels[idx + 2] = b; nedgz_tile_delete(&tile); }
static int sample_tile(int x, int y, int zoom) { LOGD("debug x=%i, y=%i, zoom=%i", x, y, zoom); // create directories if necessary char dname[256]; snprintf(dname, 256, "heightmap/%i", zoom); if(mkdir(dname, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) == -1) { if(errno == EEXIST) { // already exists } else { LOGE("mkdir %s failed", dname); return 0; } } nedgz_tile_t* tile = nedgz_tile_new(x, y, zoom); if(tile == NULL) { return 0; } char fname[256]; snprintf(fname, 256, "heightmap/%i/%i_%i.pak", zoom, x, y); pak_file_t* pak = pak_file_open(fname, PAK_FLAG_WRITE); if(pak == NULL) { goto fail_pak; } // sample subtiles i,j int j; int i; for(i = 0; i < NEDGZ_SUBTILE_COUNT; ++i) { for(j = 0; j < NEDGZ_SUBTILE_COUNT; ++j) { if(sample_subtile(tile, i, j, pak) == 0) { goto fail_sample; } } } pak_file_close(&pak); nedgz_tile_delete(&tile); // success return 1; // failure fail_sample: pak_file_close(&pak); fail_pak: nedgz_tile_delete(&tile); return 0; }