#include "ruby.h" #include "quad_tile.h" static VALUE tile_for_point(VALUE self, VALUE lat, VALUE lon) { unsigned int x = lon2x(NUM2DBL(lon)); unsigned int y = lat2y(NUM2DBL(lat)); return UINT2NUM(xy2tile(x, y)); } static VALUE tiles_for_area(VALUE self, VALUE minlat, VALUE minlon, VALUE maxlat, VALUE maxlon) { unsigned int minx = lon2x(NUM2DBL(minlon)); unsigned int maxx = lon2x(NUM2DBL(maxlon)); unsigned int miny = lat2y(NUM2DBL(minlat)); unsigned int maxy = lat2y(NUM2DBL(maxlat)); VALUE tiles = rb_ary_new(); unsigned int x; unsigned int y; for (x = minx; x <= maxx; x++) { for (y = miny; y <= maxy; y++) { rb_ary_push(tiles, UINT2NUM(xy2tile(x, y))); } } return tiles; } static VALUE tile_for_xy(VALUE self, VALUE x, VALUE y) { return UINT2NUM(xy2tile(NUM2UINT(x), NUM2UINT(y))); } void Init_quad_tile_so(void) { VALUE m = rb_define_module("QuadTile"); rb_define_module_function(m, "tile_for_point", tile_for_point, 2); rb_define_module_function(m, "tiles_for_area", tiles_for_area, 4); rb_define_module_function(m, "tile_for_xy", tile_for_xy, 2); return; }