## ChamplainMapSource ChamplainMapSource — A base class for map sources |

## Synopsis

    struct              ChamplainMapSource;
    enum                ChamplainMapProjection;
    const gchar *       champlain_map_source_get_id         (ChamplainMapSource *map_source);
    const gchar *       champlain_map_source_get_name       (ChamplainMapSource *map_source);
    const gchar *       champlain_map_source_get_license    (ChamplainMapSource *map_source);
    const gchar *       champlain_map_source_get_license_uri
                                                            (ChamplainMapSource *map_source);
    guint               champlain_map_source_get_min_zoom_level
                                                            (ChamplainMapSource *map_source);
    guint               champlain_map_source_get_max_zoom_level
                                                            (ChamplainMapSource *map_source);
    guint               champlain_map_source_get_tile_size  (ChamplainMapSource *map_source);
    ChamplainMapProjection champlain_map_source_get_projection
                                                            (ChamplainMapSource *map_source);
    gdouble             champlain_map_source_get_x          (ChamplainMapSource *map_source,
                                                             guint zoom_level,
                                                             gdouble longitude);
    gdouble             champlain_map_source_get_y          (ChamplainMapSource *map_source,
                                                             guint zoom_level,
                                                             gdouble latitude);
    gdouble             champlain_map_source_get_longitude  (ChamplainMapSource *map_source,
                                                             guint zoom_level,
                                                             gdouble x);
    gdouble             champlain_map_source_get_latitude   (ChamplainMapSource *map_source,
                                                             guint zoom_level,
                                                             gdouble y);
    guint               champlain_map_source_get_row_count  (ChamplainMapSource *map_source,
                                                             guint zoom_level);
    guint               champlain_map_source_get_column_count
                                                            (ChamplainMapSource *map_source,
                                                             guint zoom_level);
    gdouble             champlain_map_source_get_meters_per_pixel
                                                            (ChamplainMapSource *map_source,
                                                             guint zoom_level,
                                                             gdouble latitude,
                                                             gdouble longitude);
    void                champlain_map_source_fill_tile      (ChamplainMapSource *map_source,
                                                             ChamplainTile *tile);
    ChamplainMapSource * champlain_map_source_get_next_source
                                                            (ChamplainMapSource *map_source);
    void                champlain_map_source_set_next_source
                                                            (ChamplainMapSource *map_source,
                                                             ChamplainMapSource *next_source);
    ChamplainRenderer * champlain_map_source_get_renderer   (ChamplainMapSource *map_source);
    void                champlain_map_source_set_renderer   (ChamplainMapSource *map_source,
                                                             ChamplainRenderer *renderer);

## Object Hierarchy

      GObject
       +----GInitiallyUnowned
             +----ChamplainMapSource
                   +----ChamplainTileCache
                   +----ChamplainTileSource
                   +----ChamplainMapSourceChain

## Properties

      "next-source"              ChamplainMapSource*   : Read / Write
      "renderer"                 ChamplainRenderer*    : Read / Write

## Description

ChamplainTile objects come from map sources which are represented by ChamplainMapSource. This is should be considered an abstract type as it does nothing of interest.

When loading new tiles, ChamplainView calls `champlain_map_source_fill_tile()` on the current ChamplainMapSource passing it a ChamplainTile to be filled with the image.

Apart from being a base class of all map sources, ChamplainMapSource also supports cooperation of multiple map sources by arranging them into chains. Every map source has the "next-source" property that determines the next map source in the chain. When a function of a ChamplainMapSource object is invoked, the map source may decide to delegate the work to the next map source in the chain by invoking the same function on it.

To understand the concept of chains, consider for instance a chain consisting of ChamplainFileCache whose next source is ChamplainNetworkTileSource whose next source is an error tile source created with `champlain_map_source_factory_create_error_source()`. When `champlain_map_source_fill_tile()` is called on the first object of the chain, ChamplainFileCache, the cache checks whether it contains the requested tile in its database. If it does, it returns the tile; otherwise, it calls `champlain_map_source_fill_tile()` on the next source in the chain (ChamplainNetworkTileSource). The network tile source loads the tile from the network. When successful, it returns the tile; otherwise it requests the tile from the next source in the chain (error tile source). The error tile source always generates an error tile, no matter what its next source is.

## Details

### struct ChamplainMapSource

    struct ChamplainMapSource;

The ChamplainMapSource structure contains only private data and should be accessed using the provided API

Since 0.4

### enum ChamplainMapProjection

    typedef enum {
      CHAMPLAIN_MAP_PROJECTION_MERCATOR
    } ChamplainMapProjection;

Projections supported by the library.

`CHAMPLAIN_MAP_PROJECTION_MERCATOR` | Currently the only supported projection

### champlain_map_source_get_id ()

    const gchar *       champlain_map_source_get_id         (ChamplainMapSource *map_source);

Gets map source's id.

`map_source` : | a ChamplainMapSource
Returns : | the map source's id.

Since 0.4

### champlain_map_source_get_name ()

    const gchar *       champlain_map_source_get_name       (ChamplainMapSource *map_source);

Gets map source's name.

`map_source` : | a ChamplainMapSource
Returns : | the map source's name.

Since 0.4

### champlain_map_source_get_license ()

    const gchar *       champlain_map_source_get_license    (ChamplainMapSource *map_source);

Gets map source's license.

`map_source` : | a ChamplainMapSource
Returns : | the map source's license.

Since 0.4

### champlain_map_source_get_license_uri ()

    const gchar *       champlain_map_source_get_license_uri
                                                            (ChamplainMapSource *map_source);

Gets map source's license URI.

`map_source` : | a ChamplainMapSource
Returns : | the map source's license URI.

Since 0.4

### champlain_map_source_get_min_zoom_level ()

    guint               champlain_map_source_get_min_zoom_level
                                                            (ChamplainMapSource *map_source);

Gets map source's minimum zoom level.

`map_source` : | a ChamplainMapSource
Returns : | the miminum zoom level this map source supports

Since 0.4

### champlain_map_source_get_max_zoom_level ()

    guint               champlain_map_source_get_max_zoom_level
                                                            (ChamplainMapSource *map_source);

Gets map source's maximum zoom level.

`map_source` : | a ChamplainMapSource
Returns : | the maximum zoom level this map source supports

Since 0.4

### champlain_map_source_get_tile_size ()

    guint               champlain_map_source_get_tile_size  (ChamplainMapSource *map_source);

Gets map source's tile size.

`map_source` : | a ChamplainMapSource
Returns : | the tile's size (width and height) in pixels for this map source

Since 0.4

### champlain_map_source_get_projection ()

    ChamplainMapProjection champlain_map_source_get_projection
                                                            (ChamplainMapSource *map_source);

Gets map source's projection.

`map_source` : | a ChamplainMapSource
Returns : | the map source's projection.

Since 0.4

### champlain_map_source_get_x ()

    gdouble             champlain_map_source_get_x          (ChamplainMapSource *map_source,
                                                             guint zoom_level,
                                                             gdouble longitude);

Gets the x position on the map using this map source's projection. (0, 0) is located at the top left.

`map_source` : | a ChamplainMapSource
`zoom_level` : | the zoom level
`longitude` : | a longitude
Returns : | the x position

Since 0.4

### champlain_map_source_get_y ()

    gdouble             champlain_map_source_get_y          (ChamplainMapSource *map_source,
                                                             guint zoom_level,
                                                             gdouble latitude);

Gets the y position on the map using this map source's projection. (0, 0) is located at the top left.

`map_source` : | a ChamplainMapSource
`zoom_level` : | the zoom level
`latitude` : | a latitude
Returns : | the y position

Since 0.4

### champlain_map_source_get_longitude ()

    gdouble             champlain_map_source_get_longitude  (ChamplainMapSource *map_source,
                                                             guint zoom_level,
                                                             gdouble x);

Gets the longitude corresponding to this x position in the map source's projection.

`map_source` : | a ChamplainMapSource
`zoom_level` : | the zoom level
`x` : | a x position
Returns : | the longitude

Since 0.4

### champlain_map_source_get_latitude ()

    gdouble             champlain_map_source_get_latitude   (ChamplainMapSource *map_source,
                                                             guint zoom_level,
                                                             gdouble y);

Gets the latitude corresponding to this y position in the map source's projection.

`map_source` : | a ChamplainMapSource
`zoom_level` : | the zoom level
`y` : | a y position
Returns : | the latitude

Since 0.4

### champlain_map_source_get_row_count ()

    guint               champlain_map_source_get_row_count  (ChamplainMapSource *map_source,
                                                             guint zoom_level);

Gets the number of tiles in a row at this zoom level for this map source.

`map_source` : | a ChamplainMapSource
`zoom_level` : | the zoom level
Returns : | the number of tiles in a row

Since 0.4

### champlain_map_source_get_column_count ()

    guint               champlain_map_source_get_column_count
                                                            (ChamplainMapSource *map_source,
                                                             guint zoom_level);

Gets the number of tiles in a column at this zoom level for this map source.

`map_source` : | a ChamplainMapSource
`zoom_level` : | the zoom level
Returns : | the number of tiles in a column

Since 0.4

### champlain_map_source_get_meters_per_pixel ()

    gdouble             champlain_map_source_get_meters_per_pixel
                                                            (ChamplainMapSource *map_source,
                                                             guint zoom_level,
                                                             gdouble latitude,
                                                             gdouble longitude);

Gets meters per pixel at the position on the map using this map source's projection.

`map_source` : | a ChamplainMapSource
`zoom_level` : | the zoom level
`latitude` : | a latitude
`longitude` : | a longitude
Returns : | the meters per pixel

Since 0.4.3

### champlain_map_source_fill_tile ()

    void                champlain_map_source_fill_tile      (ChamplainMapSource *map_source,
                                                             ChamplainTile *tile);

Fills the tile with image data (either from cache, network or rendered locally).

`map_source` : | a ChamplainMapSource
`tile` : | a ChamplainTile

Since 0.4

### champlain_map_source_get_next_source ()

    ChamplainMapSource * champlain_map_source_get_next_source
                                                            (ChamplainMapSource *map_source);

Get the next source in the chain.

`map_source` : | a ChamplainMapSource
Returns : | the next source in the chain. [transfer none]

Since 0.6

### champlain_map_source_set_next_source ()

    void                champlain_map_source_set_next_source
                                                            (ChamplainMapSource *map_source,
                                                             ChamplainMapSource *next_source);

Sets the next map source in the chain.

`map_source` : | a ChamplainMapSource
`next_source` : | the next ChamplainMapSource in the chain

Since 0.6

### champlain_map_source_get_renderer ()

    ChamplainRenderer * champlain_map_source_get_renderer   (ChamplainMapSource *map_source);

Get the renderer used for tiles rendering.

`map_source` : | a ChamplainMapSource
Returns : | the renderer. [transfer none]

Since 0.8

### champlain_map_source_set_renderer ()

    void                champlain_map_source_set_renderer   (ChamplainMapSource *map_source,
                                                             ChamplainRenderer *renderer);

Sets the renderer used for tiles rendering.

`map_source` : | a ChamplainMapSource
`renderer` : | the renderer

Since 0.8

## Property Details

### The `"next-source"` property

      "next-source"              ChamplainMapSource*   : Read / Write

Next source in the loading chain.

Since 0.6

### The `"renderer"` property

      "renderer"                 ChamplainRenderer*    : Read / Write

Renderer used for tiles rendering.

Since 0.8