%headertop{ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "vikcoord.h" #include "mapcoord.h" #include "vik-map-type.h" %} %{ #include #include #include #include #include #include #include #include "coords.h" #include "vikcoord.h" #include "mapcoord.h" #include "download.h" #include "curl_download.h" #include "globals.h" #include "google.h" #include "vikmapslayer.h" %} %h{ typedef enum { TYPE_GOOGLE_MAPS = 0, TYPE_GOOGLE_TRANS, TYPE_GOOGLE_SAT, TYPE_GOOGLE_TERRAIN, TYPE_GOOGLE_NUM } GoogleType; %} %{ /* 1 << (x) is like a 2**(x) */ #define GZ(x) ((1<mode == VIK_COORD_LATLON ); if ( xzoom != yzoom ) return FALSE; dest->scale = google_zoom ( xzoom ); if ( dest->scale == 255 ) return FALSE; dest->x = (src->east_west + 180) / 360 * GZ(17) / xzoom; dest->y = (180 - MERCLAT(src->north_south)) / 360 * GZ(17) / xzoom; dest->z = 0; return TRUE; } override (Vik:Map:Type) void mapcoord_to_center_coord ( Vik:Map:Type *self, MapCoord *src, VikCoord *dest ) { gdouble socalled_mpp = GZ(src->scale); dest->mode = VIK_COORD_LATLON; dest->east_west = ((src->x+0.5) / GZ(17) * socalled_mpp * 360) - 180; dest->north_south = DEMERCLAT(180 - ((src->y+0.5) / GZ(17) * socalled_mpp * 360)); } override (Vik:Map:Type) int download ( Vik:Map:Type *self, MapCoord *src, const gchar *dest_fn ) { const gchar *vers_str = google_version_number(src, GOOGLE_MAP_TYPE(self)->_priv->type); return(real_google_download ( src, dest_fn, vers_str )); } }