X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/10a64d33f744b0b04592fce080053a8ae3ee3a49..02d0c36780d02fe5ba62bf4232c5d6c923ffdb79:/src/vikslippymapsource.c?ds=sidebyside diff --git a/src/vikslippymapsource.c b/src/vikslippymapsource.c index d8e45a9d..0fd926bf 100644 --- a/src/vikslippymapsource.c +++ b/src/vikslippymapsource.c @@ -55,6 +55,7 @@ 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 _is_direct_file_access (VikMapSource *self ); static gboolean _supports_download_only_new (VikMapSource *self ); static gchar *_get_uri( VikMapSourceDefault *self, MapCoord *src ); @@ -67,6 +68,7 @@ struct _VikSlippyMapSourcePrivate gchar *hostname; gchar *url; DownloadMapOptions options; + gboolean is_direct_file_access; }; #define VIK_SLIPPY_MAP_SOURCE_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIK_TYPE_SLIPPY_MAP_SOURCE, VikSlippyMapSourcePrivate)) @@ -82,6 +84,7 @@ enum PROP_FOLLOW_LOCATION, PROP_CHECK_FILE_SERVER_TIME, PROP_USE_ETAG, + PROP_IS_DIRECT_FILE_ACCESS, }; G_DEFINE_TYPE (VikSlippyMapSource, vik_slippy_map_source, VIK_TYPE_MAP_SOURCE_DEFAULT); @@ -98,6 +101,8 @@ vik_slippy_map_source_init (VikSlippyMapSource *self) priv->options.follow_location = 0; priv->options.check_file = a_check_map_file; priv->options.check_file_server_time = FALSE; + priv->options.use_etag = FALSE; + priv->is_direct_file_access = FALSE; g_object_set (G_OBJECT (self), "tilesize-x", 256, @@ -160,6 +165,10 @@ vik_slippy_map_source_set_property (GObject *object, priv->options.use_etag = g_value_get_boolean (value); break; + case PROP_IS_DIRECT_FILE_ACCESS: + priv->is_direct_file_access = g_value_get_boolean (value); + break; + default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -202,6 +211,10 @@ vik_slippy_map_source_get_property (GObject *object, g_value_set_boolean (value, priv->options.use_etag); break; + case PROP_IS_DIRECT_FILE_ACCESS: + g_value_set_boolean (value, priv->is_direct_file_access); + break; + default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -223,6 +236,7 @@ vik_slippy_map_source_class_init (VikSlippyMapSourceClass *klass) /* Overiding methods */ grandparent_class->coord_to_mapcoord = _coord_to_mapcoord; grandparent_class->mapcoord_to_center_coord = _mapcoord_to_center_coord; + grandparent_class->is_direct_file_access = _is_direct_file_access; grandparent_class->supports_download_only_new = _supports_download_only_new; parent_class->get_uri = _get_uri; @@ -233,14 +247,14 @@ vik_slippy_map_source_class_init (VikSlippyMapSourceClass *klass) "Hostname", "The hostname of the map server", "" /* default value */, - G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); + G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_HOSTNAME, pspec); pspec = g_param_spec_string ("url", "URL", "The template of the tiles' URL", "" /* default value */, - G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); + G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_URL, pspec); pspec = g_param_spec_string ("referer", @@ -273,6 +287,13 @@ vik_slippy_map_source_class_init (VikSlippyMapSourceClass *klass) G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_USE_ETAG, pspec); + pspec = g_param_spec_boolean ("use-direct-file-access", + "Use direct file access", + "Use direct file access to OSM like tile images - no need for a webservice", + FALSE /* default value */, + G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); + g_object_class_install_property (object_class, PROP_IS_DIRECT_FILE_ACCESS, pspec); + g_type_class_add_private (klass, sizeof (VikSlippyMapSourcePrivate)); object_class->finalize = vik_slippy_map_source_finalize; @@ -290,7 +311,8 @@ static const gdouble scale_neg_mpps[] = { 1.0/GZ(0), 1.0/GZ(1), 1.0/GZ(2), 1.0/G static const gint num_scales_neg = (sizeof(scale_neg_mpps) / sizeof(scale_neg_mpps[0])); #define ERROR_MARGIN 0.01 -static gint slippy_zoom ( gdouble mpp ) { +gint +vik_slippy_map_source_zoom_to_scale ( gdouble mpp ) { gint i; for ( i = 0; i < num_scales; i++ ) { if ( ABS(scale_mpps[i] - mpp) < ERROR_MARGIN ) { @@ -306,6 +328,16 @@ static gint slippy_zoom ( gdouble mpp ) { return 255; } +gboolean +_is_direct_file_access (VikMapSource *self) +{ + g_return_val_if_fail (VIK_IS_SLIPPY_MAP_SOURCE(self), FALSE); + + VikSlippyMapSourcePrivate *priv = VIK_SLIPPY_MAP_SOURCE_PRIVATE(self); + + return priv->is_direct_file_access; +} + gboolean _supports_download_only_new (VikMapSource *self) { @@ -324,7 +356,7 @@ _coord_to_mapcoord ( VikMapSource *self, const VikCoord *src, gdouble xzoom, gdo if ( xzoom != yzoom ) return FALSE; - dest->scale = slippy_zoom ( xzoom ); + dest->scale = vik_slippy_map_source_zoom_to_scale ( xzoom ); if ( dest->scale == 255 ) return FALSE;