コード例 #1
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);
}
コード例 #2
0
ファイル: flt2ned.c プロジェクト: jeffboody/nedgz
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;
}
コード例 #3
0
ファイル: heightmap.c プロジェクト: jeffboody/nedgz
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;
}