1
/*
2
 * Copyright (C) 2010-2012 Jiri Techet <techet@gmail.com>
3
 *
4
 * This library is free software; you can redistribute it and/or
5
 * modify it under the terms of the GNU Lesser General Public
6
 * License as published by the Free Software Foundation; either
7
 * version 2.1 of the License, or (at your option) any later version.
8
 *
9
 * This library is distributed in the hope that it will be useful,
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12
 * Lesser General Public License for more details.
13
 *
14
 * You should have received a copy of the GNU Lesser General Public
15
 * License along with this library; if not, write to the Free Software
16
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17
 */
18
19
#if !defined (__CHAMPLAIN_CHAMPLAIN_H_INSIDE__) && !defined (CHAMPLAIN_COMPILATION)
20
#error "Only <champlain/champlain.h> can be included directly."
21
#endif
22
23
#ifndef _CHAMPLAIN_MAP_SOURCE_H_
24
#define _CHAMPLAIN_MAP_SOURCE_H_
25
26
#include <champlain/champlain-defines.h>
27
#include <champlain/champlain-tile.h>
28
#include <champlain/champlain-renderer.h>
29
30
G_BEGIN_DECLS
31
32
#define CHAMPLAIN_TYPE_MAP_SOURCE champlain_map_source_get_type ()
33
34
#define CHAMPLAIN_MAP_SOURCE(obj) \
35
  (G_TYPE_CHECK_INSTANCE_CAST ((obj), CHAMPLAIN_TYPE_MAP_SOURCE, ChamplainMapSource))
36
37
#define CHAMPLAIN_MAP_SOURCE_CLASS(klass) \
38
  (G_TYPE_CHECK_CLASS_CAST ((klass), CHAMPLAIN_TYPE_MAP_SOURCE, ChamplainMapSourceClass))
39
40
#define CHAMPLAIN_IS_MAP_SOURCE(obj) \
41
  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CHAMPLAIN_TYPE_MAP_SOURCE))
42
43
#define CHAMPLAIN_IS_MAP_SOURCE_CLASS(klass) \
44
  (G_TYPE_CHECK_CLASS_TYPE ((klass), CHAMPLAIN_TYPE_MAP_SOURCE))
45
46
#define CHAMPLAIN_MAP_SOURCE_GET_CLASS(obj) \
47
  (G_TYPE_INSTANCE_GET_CLASS ((obj), CHAMPLAIN_TYPE_MAP_SOURCE, ChamplainMapSourceClass))
48
49
typedef struct _ChamplainMapSourcePrivate ChamplainMapSourcePrivate;
50
51
typedef struct _ChamplainMapSourceClass ChamplainMapSourceClass;
52
53
/**
54
 * ChamplainMapProjection:
55
 * @CHAMPLAIN_MAP_PROJECTION_MERCATOR: Currently the only supported projection
56
 *
57
 * Projections supported by the library.
58
 */
59
typedef enum
60
{
61
  CHAMPLAIN_MAP_PROJECTION_MERCATOR
62
} ChamplainMapProjection;
63
64
/**
65
 * ChamplainMapSource:
66
 *
67
 * The #ChamplainMapSource structure contains only private data
68
 * and should be accessed using the provided API
69
 *
70
 * Since: 0.4
71
 */
72
struct _ChamplainMapSource
73
{
74
  GInitiallyUnowned parent_instance;
75
76
  ChamplainMapSourcePrivate *priv;
77
};
78
79
struct _ChamplainMapSourceClass
80
{
81
  GInitiallyUnownedClass parent_class;
82
83
  const gchar * (*get_id)(ChamplainMapSource *map_source);
84
  const gchar * (*get_name)(ChamplainMapSource *map_source);
85
  const gchar * (*get_license)(ChamplainMapSource *map_source);
86
  const gchar * (*get_license_uri)(ChamplainMapSource *map_source);
87
  guint (*get_min_zoom_level)(ChamplainMapSource *map_source);
88
  guint (*get_max_zoom_level)(ChamplainMapSource *map_source);
89
  guint (*get_tile_size)(ChamplainMapSource *map_source);
90
  ChamplainMapProjection (*get_projection)(ChamplainMapSource *map_source);
91
92
  void (*fill_tile)(ChamplainMapSource *map_source,
93
      ChamplainTile *tile);
94
};
95
96
GType champlain_map_source_get_type (void);
97
98
ChamplainMapSource *champlain_map_source_get_next_source (ChamplainMapSource *map_source);
99
void champlain_map_source_set_next_source (ChamplainMapSource *map_source,
100
    ChamplainMapSource *next_source);
101
102
ChamplainRenderer *champlain_map_source_get_renderer (ChamplainMapSource *map_source);
103
void champlain_map_source_set_renderer (ChamplainMapSource *map_source,
104
    ChamplainRenderer *renderer);
105
106
const gchar *champlain_map_source_get_id (ChamplainMapSource *map_source);
107
const gchar *champlain_map_source_get_name (ChamplainMapSource *map_source);
108
const gchar *champlain_map_source_get_license (ChamplainMapSource *map_source);
109
const gchar *champlain_map_source_get_license_uri (ChamplainMapSource *map_source);
110
guint champlain_map_source_get_min_zoom_level (ChamplainMapSource *map_source);
111
guint champlain_map_source_get_max_zoom_level (ChamplainMapSource *map_source);
112
guint champlain_map_source_get_tile_size (ChamplainMapSource *map_source);
113
ChamplainMapProjection champlain_map_source_get_projection (ChamplainMapSource *map_source);
114
115
gdouble champlain_map_source_get_x (ChamplainMapSource *map_source,
116
    guint zoom_level,
117
    gdouble longitude);
118
gdouble champlain_map_source_get_y (ChamplainMapSource *map_source,
119
    guint zoom_level,
120
    gdouble latitude);
121
gdouble champlain_map_source_get_longitude (ChamplainMapSource *map_source,
122
    guint zoom_level,
123
    gdouble x);
124
gdouble champlain_map_source_get_latitude (ChamplainMapSource *map_source,
125
    guint zoom_level,
126
    gdouble y);
127
guint champlain_map_source_get_row_count (ChamplainMapSource *map_source,
128
    guint zoom_level);
129
guint champlain_map_source_get_column_count (ChamplainMapSource *map_source,
130
    guint zoom_level);
131
gdouble champlain_map_source_get_meters_per_pixel (ChamplainMapSource *map_source,
132
    guint zoom_level,
133
    gdouble latitude,
134
    gdouble longitude);
135
136
void champlain_map_source_fill_tile (ChamplainMapSource *map_source,
137
    ChamplainTile *tile);
138
139
G_END_DECLS
140
141
#endif /* _CHAMPLAIN_MAP_SOURCE_H_ */