X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/f63ca925baa9bd8b9d9d346cb6be00268ed14269..9979924fa3b7982b47b57555215e258dcc4d51c1:/src/viktmsmapsource.c?ds=inline diff --git a/src/viktmsmapsource.c b/src/viktmsmapsource.c index 2e56e9de..674a5f2d 100644 --- a/src/viktmsmapsource.c +++ b/src/viktmsmapsource.c @@ -43,10 +43,12 @@ #include "globals.h" #include "viktmsmapsource.h" +#include "maputils.h" static gboolean _coord_to_mapcoord ( VikMapSource *self, const VikCoord *src, gdouble xzoom, gdouble yzoom, MapCoord *dest ); static void _mapcoord_to_center_coord ( VikMapSource *self, MapCoord *src, VikCoord *dest ); -static gboolean _supports_download_only_new (VikMapSource *self ); +static gboolean _supports_download_only_new ( VikMapSource *self ); +static gboolean _is_direct_file_access ( VikMapSource *self ); static gchar *_get_uri( VikMapSourceDefault *self, MapCoord *src ); static gchar *_get_hostname( VikMapSourceDefault *self ); @@ -206,6 +208,7 @@ vik_tms_map_source_class_init (VikTmsMapSourceClass *klass) grandparent_class->coord_to_mapcoord = _coord_to_mapcoord; grandparent_class->mapcoord_to_center_coord = _mapcoord_to_center_coord; grandparent_class->supports_download_only_new = _supports_download_only_new; + grandparent_class->is_direct_file_access = _is_direct_file_access; parent_class->get_uri = _get_uri; parent_class->get_hostname = _get_hostname; @@ -253,36 +256,14 @@ vik_tms_map_source_class_init (VikTmsMapSourceClass *klass) object_class->finalize = vik_tms_map_source_finalize; } -/* 1 << (x) is like a 2**(x) */ -#define GZ(x) ((1<<(x))) - -static const gdouble scale_mpps[] = { GZ(0), GZ(1), GZ(2), GZ(3), GZ(4), GZ(5), GZ(6), GZ(7), GZ(8), GZ(9), - GZ(10), GZ(11), GZ(12), GZ(13), GZ(14), GZ(15), GZ(16), GZ(17) }; - -static const gint num_scales = (sizeof(scale_mpps) / sizeof(scale_mpps[0])); - -static const gdouble scale_neg_mpps[] = { 1.0/GZ(0), 1.0/GZ(1), 1.0/GZ(2), 1.0/GZ(3) }; -static const gint num_scales_neg = (sizeof(scale_neg_mpps) / sizeof(scale_neg_mpps[0])); - -#define ERROR_MARGIN 0.01 -static gint tms_zoom ( gdouble mpp ) { - gint i; - for ( i = 0; i < num_scales; i++ ) { - if ( ABS(scale_mpps[i] - mpp) < ERROR_MARGIN ) { - return i; - } - } - for ( i = 0; i < num_scales_neg; i++ ) { - if ( ABS(scale_neg_mpps[i] - mpp) < 0.000001 ) { - return -i; - } - } - - return 255; +static gboolean +_is_direct_file_access ( VikMapSource *self ) +{ + return FALSE; } -gboolean -_supports_download_only_new (VikMapSource *self) +static gboolean +_supports_download_only_new ( VikMapSource *self ) { g_return_val_if_fail (VIK_IS_TMS_MAP_SOURCE(self), FALSE); @@ -299,18 +280,18 @@ _coord_to_mapcoord ( VikMapSource *self, const VikCoord *src, gdouble xzoom, gdo if ( xzoom != yzoom ) return FALSE; - dest->scale = tms_zoom ( xzoom ); + dest->scale = map_utils_mpp_to_scale ( xzoom ); if ( dest->scale == 255 ) return FALSE; - /* Note : GZ(17) / xzoom / 2 = number of tile on Y axis */ + /* Note : VIK_GZ(17) / xzoom / 2 = number of tile on Y axis */ g_debug("%s: xzoom=%f yzoom=%f -> %f", __FUNCTION__, - xzoom, yzoom, GZ(17) / xzoom / 2); - dest->x = floor((src->east_west + 180) / 180 * GZ(17) / xzoom / 2); + xzoom, yzoom, VIK_GZ(17) / xzoom / 2); + dest->x = floor((src->east_west + 180) / 180 * VIK_GZ(17) / xzoom / 2); /* We should restore logic of viking: * tile index on Y axis follow a screen logic (top -> down) */ - dest->y = floor((180 - (src->north_south + 90)) / 180 * GZ(17) / xzoom / 2); + dest->y = floor((180 - (src->north_south + 90)) / 180 * VIK_GZ(17) / xzoom / 2); dest->z = 0; g_debug("%s: %f,%f -> %d,%d", __FUNCTION__, src->east_west, src->north_south, dest->x, dest->y); @@ -322,15 +303,15 @@ _mapcoord_to_center_coord ( VikMapSource *self, MapCoord *src, VikCoord *dest ) { gdouble socalled_mpp; if (src->scale >= 0) - socalled_mpp = GZ(src->scale); + socalled_mpp = VIK_GZ(src->scale); else - socalled_mpp = 1.0/GZ(-src->scale); + socalled_mpp = 1.0/VIK_GZ(-src->scale); dest->mode = VIK_COORD_LATLON; - dest->east_west = (src->x+0.5) * 180 / GZ(17) * socalled_mpp * 2 - 180; + dest->east_west = (src->x+0.5) * 180 / VIK_GZ(17) * socalled_mpp * 2 - 180; /* We should restore logic of viking: * tile index on Y axis follow a screen logic (top -> down) */ - dest->north_south = -((src->y+0.5) * 180 / GZ(17) * socalled_mpp * 2 - 90); + dest->north_south = -((src->y+0.5) * 180 / VIK_GZ(17) * socalled_mpp * 2 - 90); g_debug("%s: %d,%d -> %f,%f", __FUNCTION__, src->x, src->y, dest->east_west, dest->north_south); } @@ -346,7 +327,7 @@ _get_uri( VikMapSourceDefault *self, MapCoord *src ) */ /* Note : nb tiles on Y axis */ - gint nb_tiles = GZ(17 - src->scale - 1); + gint nb_tiles = VIK_GZ(17 - src->scale - 1); gchar *uri = g_strdup_printf (priv->url, 17 - src->scale - 1, src->x, nb_tiles - src->y - 1);