fomatting of headers -> fixup. and documentation fixing.
[framework/uifw/elementary.git] / src / lib / elm_map.h
index 5729059..48e4ea3 100644 (file)
-   /**
-    * @defgroup Map Map
-    * @ingroup Elementary
-    *
-    * @image html img/widget/map/preview-00.png
-    * @image latex img/widget/map/preview-00.eps
-    *
-    * This is a widget specifically for displaying a map. It uses basically
-    * OpenStreetMap provider http://www.openstreetmap.org/,
-    * but custom providers can be added.
-    *
-    * It supports some basic but yet nice features:
-    * @li zoom and scroll
-    * @li markers with content to be displayed when user clicks over it
-    * @li group of markers
-    * @li routes
-    *
-    * Smart callbacks one can listen to:
-    *
-    * - "clicked" - This is called when a user has clicked the map without
-    *   dragging around.
-    * - "press" - This is called when a user has pressed down on the map.
-    * - "longpressed" - This is called when a user has pressed down on the map
-    *   for a long time without dragging around.
-    * - "clicked,double" - This is called when a user has double-clicked
-    *   the map.
-    * - "load,detail" - Map detailed data load begins.
-    * - "loaded,detail" - This is called when all currently visible parts of
-    *   the map are loaded.
-    * - "zoom,start" - Zoom animation started.
-    * - "zoom,stop" - Zoom animation stopped.
-    * - "zoom,change" - Zoom changed when using an auto zoom mode.
-    * - "scroll" - the content has been scrolled (moved).
-    * - "scroll,anim,start" - scrolling animation has started.
-    * - "scroll,anim,stop" - scrolling animation has stopped.
-    * - "scroll,drag,start" - dragging the contents around has started.
-    * - "scroll,drag,stop" - dragging the contents around has stopped.
-    * - "downloaded" - This is called when all currently required map images
-    *   are downloaded.
-    * - "route,load" - This is called when route request begins.
-    * - "route,loaded" - This is called when route request ends.
-    * - "name,load" - This is called when name request begins.
-    * - "name,loaded- This is called when name request ends.
-    *
-    * Available style for map widget:
-    * - @c "default"
-    *
-    * Available style for markers:
-    * - @c "radio"
-    * - @c "radio2"
-    * - @c "empty"
-    *
-    * Available style for marker bubble:
-    * - @c "default"
-    *
-    * List of examples:
-    * @li @ref map_example_01
-    * @li @ref map_example_02
-    * @li @ref map_example_03
-    */
-
-   /**
-    * @addtogroup Map
-    * @{
-    */
-
-   /**
-    * @enum _Elm_Map_Zoom_Mode
-    * @typedef Elm_Map_Zoom_Mode
-    *
-    * Set map's zoom behavior. It can be set to manual or automatic.
-    *
-    * Default value is #ELM_MAP_ZOOM_MODE_MANUAL.
-    *
-    * Values <b> don't </b> work as bitmask, only one can be choosen.
-    *
-    * @note Valid sizes are 2^zoom, consequently the map may be smaller
-    * than the scroller view.
-    *
-    * @see elm_map_zoom_mode_set()
-    * @see elm_map_zoom_mode_get()
-    *
-    * @ingroup Map
-    */
-   typedef enum _Elm_Map_Zoom_Mode
-     {
-        ELM_MAP_ZOOM_MODE_MANUAL, /**< Zoom controlled manually by elm_map_zoom_set(). It's set by default. */
-        ELM_MAP_ZOOM_MODE_AUTO_FIT, /**< Zoom until map fits inside the scroll frame with no pixels outside this area. */
-        ELM_MAP_ZOOM_MODE_AUTO_FILL, /**< Zoom until map fills scroll, ensuring no pixels are left unfilled. */
-        ELM_MAP_ZOOM_MODE_LAST
-     } Elm_Map_Zoom_Mode;
-
-   /**
-    * @enum _Elm_Map_Route_Sources
-    * @typedef Elm_Map_Route_Sources
-    *
-    * Set route service to be used. By default used source is
-    * #ELM_MAP_ROUTE_SOURCE_YOURS.
-    *
-    * @see elm_map_route_source_set()
-    * @see elm_map_route_source_get()
-    *
-    * @ingroup Map
-    */
-   typedef enum _Elm_Map_Route_Sources
-     {
-        ELM_MAP_ROUTE_SOURCE_YOURS, /**< Routing service http://www.yournavigation.org/ . Set by default.*/
-        ELM_MAP_ROUTE_SOURCE_MONAV, /**< MoNav offers exact routing without heuristic assumptions. Its routing core is based on Contraction Hierarchies. It's not working with Map yet. */
-        ELM_MAP_ROUTE_SOURCE_ORS, /**< Open Route Service: http://www.openrouteservice.org/ . It's not working with Map yet. */
-        ELM_MAP_ROUTE_SOURCE_LAST
-     } Elm_Map_Route_Sources;
-
-   typedef enum _Elm_Map_Name_Sources
-     {
-        ELM_MAP_NAME_SOURCE_NOMINATIM,
-        ELM_MAP_NAME_SOURCE_LAST
-     } Elm_Map_Name_Sources;
-
-   /**
-    * @enum _Elm_Map_Route_Type
-    * @typedef Elm_Map_Route_Type
-    *
-    * Set type of transport used on route.
-    *
-    * @see elm_map_route_add()
-    *
-    * @ingroup Map
-    */
-   typedef enum _Elm_Map_Route_Type
-     {
-        ELM_MAP_ROUTE_TYPE_MOTOCAR, /**< Route should consider an automobile will be used. */
-        ELM_MAP_ROUTE_TYPE_BICYCLE, /**< Route should consider a bicycle will be used by the user. */
-        ELM_MAP_ROUTE_TYPE_FOOT, /**< Route should consider user will be walking. */
-        ELM_MAP_ROUTE_TYPE_LAST
-     } Elm_Map_Route_Type;
-
-   /**
-    * @enum _Elm_Map_Route_Method
-    * @typedef Elm_Map_Route_Method
-    *
-    * Set the routing method, what should be priorized, time or distance.
-    *
-    * @see elm_map_route_add()
-    *
-    * @ingroup Map
-    */
-   typedef enum _Elm_Map_Route_Method
-     {
-        ELM_MAP_ROUTE_METHOD_FASTEST, /**< Route should priorize time. */
-        ELM_MAP_ROUTE_METHOD_SHORTEST, /**< Route should priorize distance. */
-        ELM_MAP_ROUTE_METHOD_LAST
-     } Elm_Map_Route_Method;
-
-   typedef enum _Elm_Map_Name_Method
-     {
-        ELM_MAP_NAME_METHOD_SEARCH,
-        ELM_MAP_NAME_METHOD_REVERSE,
-        ELM_MAP_NAME_METHOD_LAST
-     } Elm_Map_Name_Method;
-
-   typedef struct _Elm_Map_Marker          Elm_Map_Marker; /**< A marker to be shown in a specific point of the map. Can be created with elm_map_marker_add() and deleted with elm_map_marker_remove(). */
-   typedef struct _Elm_Map_Marker_Class    Elm_Map_Marker_Class; /**< Each marker must be associated to a class. It's required to add a mark. The class defines the style of the marker when a marker is displayed alone (not grouped). A new class can be created with elm_map_marker_class_new(). */
-   typedef struct _Elm_Map_Group_Class     Elm_Map_Group_Class; /**< Each marker must be associated to a group class. It's required to add a mark. The group class defines the style of the marker when a marker is grouped to other markers. Markers with the same group are grouped if they are close. A new group class can be created with elm_map_marker_group_class_new(). */
-   typedef struct _Elm_Map_Route           Elm_Map_Route; /**< A route to be shown in the map. Can be created with elm_map_route_add() and deleted with elm_map_route_remove(). */
-   typedef struct _Elm_Map_Name            Elm_Map_Name; /**< A handle for specific coordinates. */
-   typedef struct _Elm_Map_Track           Elm_Map_Track;
-
-   typedef Evas_Object *(*ElmMapMarkerGetFunc)      (Evas_Object *obj, Elm_Map_Marker *marker, void *data); /**< Bubble content fetching class function for marker classes. When the user click on a marker, a bubble is displayed with a content. */
-   typedef void         (*ElmMapMarkerDelFunc)      (Evas_Object *obj, Elm_Map_Marker *marker, void *data, Evas_Object *o); /**< Function to delete bubble content for marker classes. */
-   typedef Evas_Object *(*ElmMapMarkerIconGetFunc)  (Evas_Object *obj, Elm_Map_Marker *marker, void *data); /**< Icon fetching class function for marker classes. */
-   typedef Evas_Object *(*ElmMapGroupIconGetFunc)   (Evas_Object *obj, void *data); /**< Icon fetching class function for markers group classes. */
-
-   typedef char        *(*ElmMapModuleSourceFunc) (void);
-   typedef int          (*ElmMapModuleZoomMinFunc) (void);
-   typedef int          (*ElmMapModuleZoomMaxFunc) (void);
-   typedef char        *(*ElmMapModuleUrlFunc) (Evas_Object *obj, int x, int y, int zoom);
-   typedef int          (*ElmMapModuleRouteSourceFunc) (void);
-   typedef char        *(*ElmMapModuleRouteUrlFunc) (Evas_Object *obj, char *type_name, int method, double flon, double flat, double tlon, double tlat);
-   typedef char        *(*ElmMapModuleNameUrlFunc) (Evas_Object *obj, int method, char *name, double lon, double lat);
-   typedef Eina_Bool    (*ElmMapModuleGeoIntoCoordFunc) (const Evas_Object *obj, int zoom, double lon, double lat, int size, int *x, int *y);
-   typedef Eina_Bool    (*ElmMapModuleCoordIntoGeoFunc) (const Evas_Object *obj, int zoom, int x, int y, int size, double *lon, double *lat);
-
-   /**
-    * Add a new map widget to the given parent Elementary (container) object.
-    *
-    * @param parent The parent object.
-    * @return a new map widget handle or @c NULL, on errors.
-    *
-    * This function inserts a new map widget on the canvas.
-    *
-    * @ingroup Map
-    */
-   EAPI Evas_Object          *elm_map_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set the zoom level of the map.
-    *
-    * @param obj The map object.
-    * @param zoom The zoom level to set.
-    *
-    * This sets the zoom level.
-    *
-    * It will respect limits defined by elm_map_source_zoom_min_set() and
-    * elm_map_source_zoom_max_set().
-    *
-    * By default these values are 0 (world map) and 18 (maximum zoom).
-    *
-    * This function should be used when zoom mode is set to
-    * #ELM_MAP_ZOOM_MODE_MANUAL. This is the default mode, and can be set
-    * with elm_map_zoom_mode_set().
-    *
-    * @see elm_map_zoom_mode_set().
-    * @see elm_map_zoom_get().
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_zoom_set(Evas_Object *obj, int zoom) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get the zoom level of the map.
-    *
-    * @param obj The map object.
-    * @return The current zoom level.
-    *
-    * This returns the current zoom level of the map object.
-    *
-    * Note that if you set the fill mode to other than #ELM_MAP_ZOOM_MODE_MANUAL
-    * (which is the default), the zoom level may be changed at any time by the
-    * map object itself to account for map size and map viewport size.
-    *
-    * @see elm_map_zoom_set() for details.
-    *
-    * @ingroup Map
-    */
-   EAPI int                   elm_map_zoom_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set the zoom mode used by the map object.
-    *
-    * @param obj The map object.
-    * @param mode The zoom mode of the map, being it one of
-    * #ELM_MAP_ZOOM_MODE_MANUAL (default), #ELM_MAP_ZOOM_MODE_AUTO_FIT,
-    * or #ELM_MAP_ZOOM_MODE_AUTO_FILL.
-    *
-    * This sets the zoom mode to manual or one of the automatic levels.
-    * Manual (#ELM_MAP_ZOOM_MODE_MANUAL) means that zoom is set manually by
-    * elm_map_zoom_set() and will stay at that level until changed by code
-    * or until zoom mode is changed. This is the default mode.
-    *
-    * The Automatic modes will allow the map object to automatically
-    * adjust zoom mode based on properties. #ELM_MAP_ZOOM_MODE_AUTO_FIT will
-    * adjust zoom so the map fits inside the scroll frame with no pixels
-    * outside this area. #ELM_MAP_ZOOM_MODE_AUTO_FILL will be similar but
-    * ensure no pixels within the frame are left unfilled. Do not forget that
-    * the valid sizes are 2^zoom, consequently the map may be smaller than
-    * the scroller view.
-    *
-    * @see elm_map_zoom_set()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_zoom_mode_set(Evas_Object *obj, Elm_Map_Zoom_Mode mode) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get the zoom mode used by the map object.
-    *
-    * @param obj The map object.
-    * @return The zoom mode of the map, being it one of
-    * #ELM_MAP_ZOOM_MODE_MANUAL (default), #ELM_MAP_ZOOM_MODE_AUTO_FIT,
-    * or #ELM_MAP_ZOOM_MODE_AUTO_FILL.
-    *
-    * This function returns the current zoom mode used by the map object.
-    *
-    * @see elm_map_zoom_mode_set() for more details.
-    *
-    * @ingroup Map
-    */
-   EAPI Elm_Map_Zoom_Mode     elm_map_zoom_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get the current coordinates of the map.
-    *
-    * @param obj The map object.
-    * @param lon Pointer where to store longitude.
-    * @param lat Pointer where to store latitude.
-    *
-    * This gets the current center coordinates of the map object. It can be
-    * set by elm_map_geo_region_bring_in() and elm_map_geo_region_show().
-    *
-    * @see elm_map_geo_region_bring_in()
-    * @see elm_map_geo_region_show()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_geo_region_get(const Evas_Object *obj, double *lon, double *lat) EINA_ARG_NONNULL(1);
-
-   /**
-    * Animatedly bring in given coordinates to the center of the map.
-    *
-    * @param obj The map object.
-    * @param lon Longitude to center at.
-    * @param lat Latitude to center at.
-    *
-    * This causes map to jump to the given @p lat and @p lon coordinates
-    * and show it (by scrolling) in the center of the viewport, if it is not
-    * already centered. This will use animation to do so and take a period
-    * of time to complete.
-    *
-    * @see elm_map_geo_region_show() for a function to avoid animation.
-    * @see elm_map_geo_region_get()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_geo_region_bring_in(Evas_Object *obj, double lon, double lat) EINA_ARG_NONNULL(1);
-
-   /**
-    * Show the given coordinates at the center of the map, @b immediately.
-    *
-    * @param obj The map object.
-    * @param lon Longitude to center at.
-    * @param lat Latitude to center at.
-    *
-    * This causes map to @b redraw its viewport's contents to the
-    * region contining the given @p lat and @p lon, that will be moved to the
-    * center of the map.
-    *
-    * @see elm_map_geo_region_bring_in() for a function to move with animation.
-    * @see elm_map_geo_region_get()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_geo_region_show(Evas_Object *obj, double lon, double lat) EINA_ARG_NONNULL(1);
-
-   /**
-    * Pause or unpause the map.
-    *
-    * @param obj The map object.
-    * @param paused Use @c EINA_TRUE to pause the map @p obj or @c EINA_FALSE
-    * to unpause it.
-    *
-    * This sets the paused state to on (@c EINA_TRUE) or off (@c EINA_FALSE)
-    * for map.
-    *
-    * The default is off.
-    *
-    * This will stop zooming using animation, changing zoom levels will
-    * change instantly. This will stop any existing animations that are running.
-    *
-    * @see elm_map_paused_get()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_paused_set(Evas_Object *obj, Eina_Bool paused) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get a value whether map is paused or not.
-    *
-    * @param obj The map object.
-    * @return @c EINA_TRUE means map is pause. @c EINA_FALSE indicates
-    * it is not. If @p obj is @c NULL, @c EINA_FALSE is returned.
-    *
-    * This gets the current paused state for the map object.
-    *
-    * @see elm_map_paused_set() for details.
-    *
-    * @ingroup Map
-    */
-   EAPI Eina_Bool             elm_map_paused_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set to show markers during zoom level changes or not.
-    *
-    * @param obj The map object.
-    * @param paused Use @c EINA_TRUE to @b not show markers or @c EINA_FALSE
-    * to show them.
-    *
-    * This sets the paused state to on (@c EINA_TRUE) or off (@c EINA_FALSE)
-    * for map.
-    *
-    * The default is off.
-    *
-    * This will stop zooming using animation, changing zoom levels will
-    * change instantly. This will stop any existing animations that are running.
-    *
-    * This sets the paused state to on (@c EINA_TRUE) or off (@c EINA_FALSE)
-    * for the markers.
-    *
-    * The default  is off.
-    *
-    * Enabling it will force the map to stop displaying the markers during
-    * zoom level changes. Set to on if you have a large number of markers.
-    *
-    * @see elm_map_paused_markers_get()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_paused_markers_set(Evas_Object *obj, Eina_Bool paused) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get a value whether markers will be displayed on zoom level changes or not
-    *
-    * @param obj The map object.
-    * @return @c EINA_TRUE means map @b won't display markers or @c EINA_FALSE
-    * indicates it will. If @p obj is @c NULL, @c EINA_FALSE is returned.
-    *
-    * This gets the current markers paused state for the map object.
-    *
-    * @see elm_map_paused_markers_set() for details.
-    *
-    * @ingroup Map
-    */
-   EAPI Eina_Bool             elm_map_paused_markers_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get the information of downloading status.
-    *
-    * @param obj The map object.
-    * @param try_num Pointer where to store number of tiles being downloaded.
-    * @param finish_num Pointer where to store number of tiles successfully
-    * downloaded.
-    *
-    * This gets the current downloading status for the map object, the number
-    * of tiles being downloaded and the number of tiles already downloaded.
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_utils_downloading_status_get(const Evas_Object *obj, int *try_num, int *finish_num) EINA_ARG_NONNULL(1, 2, 3);
-
-   /**
-    * Convert a pixel coordinate (x,y) into a geographic coordinate
-    * (longitude, latitude).
-    *
-    * @param obj The map object.
-    * @param x the coordinate.
-    * @param y the coordinate.
-    * @param size the size in pixels of the map.
-    * The map is a square and generally his size is : pow(2.0, zoom)*256.
-    * @param lon Pointer where to store the longitude that correspond to x.
-    * @param lat Pointer where to store the latitude that correspond to y.
-    *
-    * @note Origin pixel point is the top left corner of the viewport.
-    * Map zoom and size are taken on account.
-    *
-    * @see elm_map_utils_convert_geo_into_coord() if you need the inverse.
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_utils_convert_coord_into_geo(const Evas_Object *obj, int x, int y, int size, double *lon, double *lat) EINA_ARG_NONNULL(1, 5, 6);
-
-   /**
-    * Convert a geographic coordinate (longitude, latitude) into a pixel
-    * coordinate (x, y).
-    *
-    * @param obj The map object.
-    * @param lon the longitude.
-    * @param lat the latitude.
-    * @param size the size in pixels of the map. The map is a square
-    * and generally his size is : pow(2.0, zoom)*256.
-    * @param x Pointer where to store the horizontal pixel coordinate that
-    * correspond to the longitude.
-    * @param y Pointer where to store the vertical pixel coordinate that
-    * correspond to the latitude.
-    *
-    * @note Origin pixel point is the top left corner of the viewport.
-    * Map zoom and size are taken on account.
-    *
-    * @see elm_map_utils_convert_coord_into_geo() if you need the inverse.
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_utils_convert_geo_into_coord(const Evas_Object *obj, double lon, double lat, int size, int *x, int *y) EINA_ARG_NONNULL(1, 5, 6);
-
-   /**
-    * Convert a geographic coordinate (longitude, latitude) into a name
-    * (address).
-    *
-    * @param obj The map object.
-    * @param lon the longitude.
-    * @param lat the latitude.
-    * @return name A #Elm_Map_Name handle for this coordinate.
-    *
-    * To get the string for this address, elm_map_name_address_get()
-    * should be used.
-    *
-    * @see elm_map_utils_convert_name_into_coord() if you need the inverse.
-    *
-    * @ingroup Map
-    */
-   EAPI Elm_Map_Name         *elm_map_utils_convert_coord_into_name(const Evas_Object *obj, double lon, double lat) EINA_ARG_NONNULL(1);
-
-   /**
-    * Convert a name (address) into a geographic coordinate
-    * (longitude, latitude).
-    *
-    * @param obj The map object.
-    * @param name The address.
-    * @return name A #Elm_Map_Name handle for this address.
-    *
-    * To get the longitude and latitude, elm_map_name_region_get()
-    * should be used.
-    *
-    * @see elm_map_utils_convert_coord_into_name() if you need the inverse.
-    *
-    * @ingroup Map
-    */
-   EAPI Elm_Map_Name         *elm_map_utils_convert_name_into_coord(const Evas_Object *obj, char *address) EINA_ARG_NONNULL(1, 2);
-
-   /**
-    * Convert a pixel coordinate into a rotated pixel coordinate.
-    *
-    * @param obj The map object.
-    * @param x horizontal coordinate of the point to rotate.
-    * @param y vertical coordinate of the point to rotate.
-    * @param cx rotation's center horizontal position.
-    * @param cy rotation's center vertical position.
-    * @param degree amount of degrees from 0.0 to 360.0 to rotate arount Z axis.
-    * @param xx Pointer where to store rotated x.
-    * @param yy Pointer where to store rotated y.
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_utils_rotate_coord(const Evas_Object *obj, const Evas_Coord x, const Evas_Coord y, const Evas_Coord cx, const Evas_Coord cy, const double degree, Evas_Coord *xx, Evas_Coord *yy) EINA_ARG_NONNULL(1);
-
-   /**
-    * Add a new marker to the map object.
-    *
-    * @param obj The map object.
-    * @param lon The longitude of the marker.
-    * @param lat The latitude of the marker.
-    * @param clas The class, to use when marker @b isn't grouped to others.
-    * @param clas_group The class group, to use when marker is grouped to others
-    * @param data The data passed to the callbacks.
-    *
-    * @return The created marker or @c NULL upon failure.
-    *
-    * A marker will be created and shown in a specific point of the map, defined
-    * by @p lon and @p lat.
-    *
-    * It will be displayed using style defined by @p class when this marker
-    * is displayed alone (not grouped). A new class can be created with
-    * elm_map_marker_class_new().
-    *
-    * If the marker is grouped to other markers, it will be displayed with
-    * style defined by @p class_group. Markers with the same group are grouped
-    * if they are close. A new group class can be created with
-    * elm_map_marker_group_class_new().
-    *
-    * Markers created with this method can be deleted with
-    * elm_map_marker_remove().
-    *
-    * A marker can have associated content to be displayed by a bubble,
-    * when a user click over it, as well as an icon. These objects will
-    * be fetch using class' callback functions.
-    *
-    * @see elm_map_marker_class_new()
-    * @see elm_map_marker_group_class_new()
-    * @see elm_map_marker_remove()
-    *
-    * @ingroup Map
-    */
-   EAPI Elm_Map_Marker       *elm_map_marker_add(Evas_Object *obj, double lon, double lat, Elm_Map_Marker_Class *clas, Elm_Map_Group_Class *clas_group, void *data) EINA_ARG_NONNULL(1, 4, 5);
-
-   /**
-    * Set the maximum numbers of markers' content to be displayed in a group.
-    *
-    * @param obj The map object.
-    * @param max The maximum numbers of items displayed in a bubble.
-    *
-    * A bubble will be displayed when the user clicks over the group,
-    * and will place the content of markers that belong to this group
-    * inside it.
-    *
-    * A group can have a long list of markers, consequently the creation
-    * of the content of the bubble can be very slow.
-    *
-    * In order to avoid this, a maximum number of items is displayed
-    * in a bubble.
-    *
-    * By default this number is 30.
-    *
-    * Marker with the same group class are grouped if they are close.
-    *
-    * @see elm_map_marker_add()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_max_marker_per_group_set(Evas_Object *obj, int max) EINA_ARG_NONNULL(1);
-
-   /**
-    * Remove a marker from the map.
-    *
-    * @param marker The marker to remove.
-    *
-    * @see elm_map_marker_add()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_marker_remove(Elm_Map_Marker *marker) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get the current coordinates of the marker.
-    *
-    * @param marker marker.
-    * @param lat Pointer where to store the marker's latitude.
-    * @param lon Pointer where to store the marker's longitude.
-    *
-    * These values are set when adding markers, with function
-    * elm_map_marker_add().
-    *
-    * @see elm_map_marker_add()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_marker_region_get(const Elm_Map_Marker *marker, double *lon, double *lat) EINA_ARG_NONNULL(1);
-
-   /**
-    * Animatedly bring in given marker to the center of the map.
-    *
-    * @param marker The marker to center at.
-    *
-    * This causes map to jump to the given @p marker's coordinates
-    * and show it (by scrolling) in the center of the viewport, if it is not
-    * already centered. This will use animation to do so and take a period
-    * of time to complete.
-    *
-    * @see elm_map_marker_show() for a function to avoid animation.
-    * @see elm_map_marker_region_get()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_marker_bring_in(Elm_Map_Marker *marker) EINA_ARG_NONNULL(1);
-
-   /**
-    * Show the given marker at the center of the map, @b immediately.
-    *
-    * @param marker The marker to center at.
-    *
-    * This causes map to @b redraw its viewport's contents to the
-    * region contining the given @p marker's coordinates, that will be
-    * moved to the center of the map.
-    *
-    * @see elm_map_marker_bring_in() for a function to move with animation.
-    * @see elm_map_markers_list_show() if more than one marker need to be
-    * displayed.
-    * @see elm_map_marker_region_get()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_marker_show(Elm_Map_Marker *marker) EINA_ARG_NONNULL(1);
-
-   /**
-    * Move and zoom the map to display a list of markers.
-    *
-    * @param markers A list of #Elm_Map_Marker handles.
-    *
-    * The map will be centered on the center point of the markers in the list.
-    * Then the map will be zoomed in order to fit the markers using the maximum
-    * zoom which allows display of all the markers.
-    *
-    * @warning All the markers should belong to the same map object.
-    *
-    * @see elm_map_marker_show() to show a single marker.
-    * @see elm_map_marker_bring_in()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_markers_list_show(Eina_List *markers) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get the Evas object returned by the ElmMapMarkerGetFunc callback
-    *
-    * @param marker The marker wich content should be returned.
-    * @return Return the evas object if it exists, else @c NULL.
-    *
-    * To set callback function #ElmMapMarkerGetFunc for the marker class,
-    * elm_map_marker_class_get_cb_set() should be used.
-    *
-    * This content is what will be inside the bubble that will be displayed
-    * when an user clicks over the marker.
-    *
-    * This returns the actual Evas object used to be placed inside
-    * the bubble. This may be @c NULL, as it may
-    * not have been created or may have been deleted, at any time, by
-    * the map. <b>Do not modify this object</b> (move, resize,
-    * show, hide, etc.), as the map is controlling it. This
-    * function is for querying, emitting custom signals or hooking
-    * lower level callbacks for events on that object. Do not delete
-    * this object under any circumstances.
-    *
-    * @ingroup Map
-    */
-   EAPI Evas_Object          *elm_map_marker_object_get(const Elm_Map_Marker *marker) EINA_ARG_NONNULL(1);
-
-   /**
-    * Update the marker
-    *
-    * @param marker The marker to be updated.
-    *
-    * If a content is set to this marker, it will call function to delete it,
-    * #ElmMapMarkerDelFunc, and then will fetch the content again with
-    * #ElmMapMarkerGetFunc.
-    *
-    * These functions are set for the marker class with
-    * elm_map_marker_class_get_cb_set() and elm_map_marker_class_del_cb_set().
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_marker_update(Elm_Map_Marker *marker) EINA_ARG_NONNULL(1);
-
-   /**
-    * Close all the bubbles opened by the user.
-    *
-    * @param obj The map object.
-    *
-    * A bubble is displayed with a content fetched with #ElmMapMarkerGetFunc
-    * when the user clicks on a marker.
-    *
-    * This functions is set for the marker class with
-    * elm_map_marker_class_get_cb_set().
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_bubbles_close(Evas_Object *obj) EINA_ARG_NONNULL(1);
-
-   /**
-    * Create a new group class.
-    *
-    * @param obj The map object.
-    * @return Returns the new group class.
-    *
-    * Each marker must be associated to a group class. Markers in the same
-    * group are grouped if they are close.
-    *
-    * The group class defines the style of the marker when a marker is grouped
-    * to others markers. When it is alone, another class will be used.
-    *
-    * A group class will need to be provided when creating a marker with
-    * elm_map_marker_add().
-    *
-    * Some properties and functions can be set by class, as:
-    * - style, with elm_map_group_class_style_set()
-    * - data - to be associated to the group class. It can be set using
-    *   elm_map_group_class_data_set().
-    * - min zoom to display markers, set with
-    *   elm_map_group_class_zoom_displayed_set().
-    * - max zoom to group markers, set using
-    *   elm_map_group_class_zoom_grouped_set().
-    * - visibility - set if markers will be visible or not, set with
-    *   elm_map_group_class_hide_set().
-    * - #ElmMapGroupIconGetFunc - used to fetch icon for markers group classes.
-    *   It can be set using elm_map_group_class_icon_cb_set().
-    *
-    * @see elm_map_marker_add()
-    * @see elm_map_group_class_style_set()
-    * @see elm_map_group_class_data_set()
-    * @see elm_map_group_class_zoom_displayed_set()
-    * @see elm_map_group_class_zoom_grouped_set()
-    * @see elm_map_group_class_hide_set()
-    * @see elm_map_group_class_icon_cb_set()
-    *
-    * @ingroup Map
-    */
-   EAPI Elm_Map_Group_Class  *elm_map_group_class_new(Evas_Object *obj) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set the marker's style of a group class.
-    *
-    * @param clas The group class.
-    * @param style The style to be used by markers.
-    *
-    * Each marker must be associated to a group class, and will use the style
-    * defined by such class when grouped to other markers.
-    *
-    * The following styles are provided by default theme:
-    * @li @c radio - blue circle
-    * @li @c radio2 - green circle
-    * @li @c empty
-    *
-    * @see elm_map_group_class_new() for more details.
-    * @see elm_map_marker_add()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_group_class_style_set(Elm_Map_Group_Class *clas, const char *style) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set the icon callback function of a group class.
-    *
-    * @param clas The group class.
-    * @param icon_get The callback function that will return the icon.
-    *
-    * Each marker must be associated to a group class, and it can display a
-    * custom icon. The function @p icon_get must return this icon.
-    *
-    * @see elm_map_group_class_new() for more details.
-    * @see elm_map_marker_add()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_group_class_icon_cb_set(Elm_Map_Group_Class *clas, ElmMapGroupIconGetFunc icon_get) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set the data associated to the group class.
-    *
-    * @param clas The group class.
-    * @param data The new user data.
-    *
-    * This data will be passed for callback functions, like icon get callback,
-    * that can be set with elm_map_group_class_icon_cb_set().
-    *
-    * If a data was previously set, the object will lose the pointer for it,
-    * so if needs to be freed, you must do it yourself.
-    *
-    * @see elm_map_group_class_new() for more details.
-    * @see elm_map_group_class_icon_cb_set()
-    * @see elm_map_marker_add()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_group_class_data_set(Elm_Map_Group_Class *clas, void *data) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set the minimum zoom from where the markers are displayed.
-    *
-    * @param clas The group class.
-    * @param zoom The minimum zoom.
-    *
-    * Markers only will be displayed when the map is displayed at @p zoom
-    * or bigger.
-    *
-    * @see elm_map_group_class_new() for more details.
-    * @see elm_map_marker_add()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_group_class_zoom_displayed_set(Elm_Map_Group_Class *clas, int zoom) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set the zoom from where the markers are no more grouped.
-    *
-    * @param clas The group class.
-    * @param zoom The maximum zoom.
-    *
-    * Markers only will be grouped when the map is displayed at
-    * less than @p zoom.
-    *
-    * @see elm_map_group_class_new() for more details.
-    * @see elm_map_marker_add()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_group_class_zoom_grouped_set(Elm_Map_Group_Class *clas, int zoom) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set if the markers associated to the group class @clas are hidden or not.
-    *
-    * @param clas The group class.
-    * @param hide Use @c EINA_TRUE to hide markers or @c EINA_FALSE
-    * to show them.
-    *
-    * If @p hide is @c EINA_TRUE the markers will be hidden, but default
-    * is to show them.
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_group_class_hide_set(Evas_Object *obj, Elm_Map_Group_Class *clas, Eina_Bool hide) EINA_ARG_NONNULL(1, 2);
-
-   /**
-    * Create a new marker class.
-    *
-    * @param obj The map object.
-    * @return Returns the new group class.
-    *
-    * Each marker must be associated to a class.
-    *
-    * The marker class defines the style of the marker when a marker is
-    * displayed alone, i.e., not grouped to to others markers. When grouped
-    * it will use group class style.
-    *
-    * A marker class will need to be provided when creating a marker with
-    * elm_map_marker_add().
-    *
-    * Some properties and functions can be set by class, as:
-    * - style, with elm_map_marker_class_style_set()
-    * - #ElmMapMarkerIconGetFunc - used to fetch icon for markers classes.
-    *   It can be set using elm_map_marker_class_icon_cb_set().
-    * - #ElmMapMarkerGetFunc - used to fetch bubble content for marker classes.
-    *   Set using elm_map_marker_class_get_cb_set().
-    * - #ElmMapMarkerDelFunc - used to delete bubble content for marker classes.
-    *   Set using elm_map_marker_class_del_cb_set().
-    *
-    * @see elm_map_marker_add()
-    * @see elm_map_marker_class_style_set()
-    * @see elm_map_marker_class_icon_cb_set()
-    * @see elm_map_marker_class_get_cb_set()
-    * @see elm_map_marker_class_del_cb_set()
-    *
-    * @ingroup Map
-    */
-   EAPI Elm_Map_Marker_Class *elm_map_marker_class_new(Evas_Object *obj) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set the marker's style of a marker class.
-    *
-    * @param clas The marker class.
-    * @param style The style to be used by markers.
-    *
-    * Each marker must be associated to a marker class, and will use the style
-    * defined by such class when alone, i.e., @b not grouped to other markers.
-    *
-    * The following styles are provided by default theme:
-    * @li @c radio
-    * @li @c radio2
-    * @li @c empty
-    *
-    * @see elm_map_marker_class_new() for more details.
-    * @see elm_map_marker_add()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_marker_class_style_set(Elm_Map_Marker_Class *clas, const char *style) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set the icon callback function of a marker class.
-    *
-    * @param clas The marker class.
-    * @param icon_get The callback function that will return the icon.
-    *
-    * Each marker must be associated to a marker class, and it can display a
-    * custom icon. The function @p icon_get must return this icon.
-    *
-    * @see elm_map_marker_class_new() for more details.
-    * @see elm_map_marker_add()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_marker_class_icon_cb_set(Elm_Map_Marker_Class *clas, ElmMapMarkerIconGetFunc icon_get) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set the bubble content callback function of a marker class.
-    *
-    * @param clas The marker class.
-    * @param get The callback function that will return the content.
-    *
-    * Each marker must be associated to a marker class, and it can display a
-    * a content on a bubble that opens when the user click over the marker.
-    * The function @p get must return this content object.
-    *
-    * If this content will need to be deleted, elm_map_marker_class_del_cb_set()
-    * can be used.
-    *
-    * @see elm_map_marker_class_new() for more details.
-    * @see elm_map_marker_class_del_cb_set()
-    * @see elm_map_marker_add()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_marker_class_get_cb_set(Elm_Map_Marker_Class *clas, ElmMapMarkerGetFunc get) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set the callback function used to delete bubble content of a marker class.
-    *
-    * @param clas The marker class.
-    * @param del The callback function that will delete the content.
-    *
-    * Each marker must be associated to a marker class, and it can display a
-    * a content on a bubble that opens when the user click over the marker.
-    * The function to return such content can be set with
-    * elm_map_marker_class_get_cb_set().
-    *
-    * If this content must be freed, a callback function need to be
-    * set for that task with this function.
-    *
-    * If this callback is defined it will have to delete (or not) the
-    * object inside, but if the callback is not defined the object will be
-    * destroyed with evas_object_del().
-    *
-    * @see elm_map_marker_class_new() for more details.
-    * @see elm_map_marker_class_get_cb_set()
-    * @see elm_map_marker_add()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_marker_class_del_cb_set(Elm_Map_Marker_Class *clas, ElmMapMarkerDelFunc del) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get the list of available sources.
-    *
-    * @param obj The map object.
-    * @return The source names list.
-    *
-    * It will provide a list with all available sources, that can be set as
-    * current source with elm_map_source_name_set(), or get with
-    * elm_map_source_name_get().
-    *
-    * Available sources:
-    * @li "Mapnik"
-    * @li "Osmarender"
-    * @li "CycleMap"
-    * @li "Maplint"
-    *
-    * @see elm_map_source_name_set() for more details.
-    * @see elm_map_source_name_get()
-    *
-    * @ingroup Map
-    */
-   EAPI const char          **elm_map_source_names_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set the source of the map.
-    *
-    * @param obj The map object.
-    * @param source The source to be used.
-    *
-    * Map widget retrieves images that composes the map from a web service.
-    * This web service can be set with this method.
-    *
-    * A different service can return a different maps with different
-    * information and it can use different zoom values.
-    *
-    * The @p source_name need to match one of the names provided by
-    * elm_map_source_names_get().
-    *
-    * The current source can be get using elm_map_source_name_get().
-    *
-    * @see elm_map_source_names_get()
-    * @see elm_map_source_name_get()
-    *
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_source_name_set(Evas_Object *obj, const char *source_name) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get the name of currently used source.
-    *
-    * @param obj The map object.
-    * @return Returns the name of the source in use.
-    *
-    * @see elm_map_source_name_set() for more details.
-    *
-    * @ingroup Map
-    */
-   EAPI const char           *elm_map_source_name_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set the source of the route service to be used by the map.
-    *
-    * @param obj The map object.
-    * @param source The route service to be used, being it one of
-    * #ELM_MAP_ROUTE_SOURCE_YOURS (default), #ELM_MAP_ROUTE_SOURCE_MONAV,
-    * and #ELM_MAP_ROUTE_SOURCE_ORS.
-    *
-    * Each one has its own algorithm, so the route retrieved may
-    * differ depending on the source route. Now, only the default is working.
-    *
-    * #ELM_MAP_ROUTE_SOURCE_YOURS is the routing service provided at
-    * http://www.yournavigation.org/.
-    *
-    * #ELM_MAP_ROUTE_SOURCE_MONAV, offers exact routing without heuristic
-    * assumptions. Its routing core is based on Contraction Hierarchies.
-    *
-    * #ELM_MAP_ROUTE_SOURCE_ORS, is provided at http://www.openrouteservice.org/
-    *
-    * @see elm_map_route_source_get().
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_route_source_set(Evas_Object *obj, Elm_Map_Route_Sources source) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get the current route source.
-    *
-    * @param obj The map object.
-    * @return The source of the route service used by the map.
-    *
-    * @see elm_map_route_source_set() for details.
-    *
-    * @ingroup Map
-    */
-   EAPI Elm_Map_Route_Sources elm_map_route_source_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set the minimum zoom of the source.
-    *
-    * @param obj The map object.
-    * @param zoom New minimum zoom value to be used.
-    *
-    * By default, it's 0.
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_source_zoom_min_set(Evas_Object *obj, int zoom) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get the minimum zoom of the source.
-    *
-    * @param obj The map object.
-    * @return Returns the minimum zoom of the source.
-    *
-    * @see elm_map_source_zoom_min_set() for details.
-    *
-    * @ingroup Map
-    */
-   EAPI int                   elm_map_source_zoom_min_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set the maximum zoom of the source.
-    *
-    * @param obj The map object.
-    * @param zoom New maximum zoom value to be used.
-    *
-    * By default, it's 18.
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_source_zoom_max_set(Evas_Object *obj, int zoom) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get the maximum zoom of the source.
-    *
-    * @param obj The map object.
-    * @return Returns the maximum zoom of the source.
-    *
-    * @see elm_map_source_zoom_min_set() for details.
-    *
-    * @ingroup Map
-    */
-   EAPI int                   elm_map_source_zoom_max_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set the user agent used by the map object to access routing services.
-    *
-    * @param obj The map object.
-    * @param user_agent The user agent to be used by the map.
-    *
-    * User agent is a client application implementing a network protocol used
-    * in communications within a client–server distributed computing system
-    *
-    * The @p user_agent identification string will transmitted in a header
-    * field @c User-Agent.
-    *
-    * @see elm_map_user_agent_get()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_user_agent_set(Evas_Object *obj, const char *user_agent) EINA_ARG_NONNULL(1, 2);
-
-   /**
-    * Get the user agent used by the map object.
-    *
-    * @param obj The map object.
-    * @return The user agent identification string used by the map.
-    *
-    * @see elm_map_user_agent_set() for details.
-    *
-    * @ingroup Map
-    */
-   EAPI const char           *elm_map_user_agent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-
-   /**
-    * Add a new route to the map object.
-    *
-    * @param obj The map object.
-    * @param type The type of transport to be considered when tracing a route.
-    * @param method The routing method, what should be priorized.
-    * @param flon The start longitude.
-    * @param flat The start latitude.
-    * @param tlon The destination longitude.
-    * @param tlat The destination latitude.
-    *
-    * @return The created route or @c NULL upon failure.
-    *
-    * A route will be traced by point on coordinates (@p flat, @p flon)
-    * to point on coordinates (@p tlat, @p tlon), using the route service
-    * set with elm_map_route_source_set().
-    *
-    * It will take @p type on consideration to define the route,
-    * depending if the user will be walking or driving, the route may vary.
-    * One of #ELM_MAP_ROUTE_TYPE_MOTOCAR, #ELM_MAP_ROUTE_TYPE_BICYCLE, or
-    * #ELM_MAP_ROUTE_TYPE_FOOT need to be used.
-    *
-    * Another parameter is what the route should priorize, the minor distance
-    * or the less time to be spend on the route. So @p method should be one
-    * of #ELM_MAP_ROUTE_METHOD_SHORTEST or #ELM_MAP_ROUTE_METHOD_FASTEST.
-    *
-    * Routes created with this method can be deleted with
-    * elm_map_route_remove(), colored with elm_map_route_color_set(),
-    * and distance can be get with elm_map_route_distance_get().
-    *
-    * @see elm_map_route_remove()
-    * @see elm_map_route_color_set()
-    * @see elm_map_route_distance_get()
-    * @see elm_map_route_source_set()
-    *
-    * @ingroup Map
-    */
-   EAPI Elm_Map_Route        *elm_map_route_add(Evas_Object *obj, Elm_Map_Route_Type type, Elm_Map_Route_Method method, double flon, double flat, double tlon, double tlat) EINA_ARG_NONNULL(1);
-
-   /**
-    * Remove a route from the map.
-    *
-    * @param route The route to remove.
-    *
-    * @see elm_map_route_add()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_route_remove(Elm_Map_Route *route) EINA_ARG_NONNULL(1);
-
-   /**
-    * Set the route color.
-    *
-    * @param route The route object.
-    * @param r Red channel value, from 0 to 255.
-    * @param g Green channel value, from 0 to 255.
-    * @param b Blue channel value, from 0 to 255.
-    * @param a Alpha channel value, from 0 to 255.
-    *
-    * It uses an additive color model, so each color channel represents
-    * how much of each primary colors must to be used. 0 represents
-    * ausence of this color, so if all of the three are set to 0,
-    * the color will be black.
-    *
-    * These component values should be integers in the range 0 to 255,
-    * (single 8-bit byte).
-    *
-    * This sets the color used for the route. By default, it is set to
-    * solid red (r = 255, g = 0, b = 0, a = 255).
-    *
-    * For alpha channel, 0 represents completely transparent, and 255, opaque.
-    *
-    * @see elm_map_route_color_get()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_route_color_set(Elm_Map_Route *route, int r, int g , int b, int a) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get the route color.
-    *
-    * @param route The route object.
-    * @param r Pointer where to store the red channel value.
-    * @param g Pointer where to store the green channel value.
-    * @param b Pointer where to store the blue channel value.
-    * @param a Pointer where to store the alpha channel value.
-    *
-    * @see elm_map_route_color_set() for details.
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_route_color_get(const Elm_Map_Route *route, int *r, int *g , int *b, int *a) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get the route distance in kilometers.
-    *
-    * @param route The route object.
-    * @return The distance of route (unit : km).
-    *
-    * @ingroup Map
-    */
-   EAPI double                elm_map_route_distance_get(const Elm_Map_Route *route) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get the information of route nodes.
-    *
-    * @param route The route object.
-    * @return Returns a string with the nodes of route.
-    *
-    * @ingroup Map
-    */
-   EAPI const char           *elm_map_route_node_get(const Elm_Map_Route *route) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get the information of route waypoint.
-    *
-    * @param route the route object.
-    * @return Returns a string with information about waypoint of route.
-    *
-    * @ingroup Map
-    */
-   EAPI const char           *elm_map_route_waypoint_get(const Elm_Map_Route *route) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get the address of the name.
-    *
-    * @param name The name handle.
-    * @return Returns the address string of @p name.
-    *
-    * This gets the coordinates of the @p name, created with one of the
-    * conversion functions.
-    *
-    * @see elm_map_utils_convert_name_into_coord()
-    * @see elm_map_utils_convert_coord_into_name()
-    *
-    * @ingroup Map
-    */
-   EAPI const char           *elm_map_name_address_get(const Elm_Map_Name *name) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get the current coordinates of the name.
-    *
-    * @param name The name handle.
-    * @param lat Pointer where to store the latitude.
-    * @param lon Pointer where to store The longitude.
-    *
-    * This gets the coordinates of the @p name, created with one of the
-    * conversion functions.
-    *
-    * @see elm_map_utils_convert_name_into_coord()
-    * @see elm_map_utils_convert_coord_into_name()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_name_region_get(const Elm_Map_Name *name, double *lon, double *lat) EINA_ARG_NONNULL(1);
-
-   /**
-    * Remove a name from the map.
-    *
-    * @param name The name to remove.
-    *
-    * Basically the struct handled by @p name will be freed, so convertions
-    * between address and coordinates will be lost.
-    *
-    * @see elm_map_utils_convert_name_into_coord()
-    * @see elm_map_utils_convert_coord_into_name()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_name_remove(Elm_Map_Name *name) EINA_ARG_NONNULL(1);
-
-   /**
-    * Rotate the map.
-    *
-    * @param obj The map object.
-    * @param degree Angle from 0.0 to 360.0 to rotate arount Z axis.
-    * @param cx Rotation's center horizontal position.
-    * @param cy Rotation's center vertical position.
-    *
-    * @see elm_map_rotate_get()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_rotate_set(Evas_Object *obj, double degree, Evas_Coord cx, Evas_Coord cy) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get the rotate degree of the map
-    *
-    * @param obj The map object
-    * @param degree Pointer where to store degrees from 0.0 to 360.0
-    * to rotate arount Z axis.
-    * @param cx Pointer where to store rotation's center horizontal position.
-    * @param cy Pointer where to store rotation's center vertical position.
-    *
-    * @see elm_map_rotate_set() to set map rotation.
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_rotate_get(const Evas_Object *obj, double *degree, Evas_Coord *cx, Evas_Coord *cy) EINA_ARG_NONNULL(1, 2, 3, 4);
-
-   /**
-    * Enable or disable mouse wheel to be used to zoom in / out the map.
-    *
-    * @param obj The map object.
-    * @param disabled Use @c EINA_TRUE to disable mouse wheel or @c EINA_FALSE
-    * to enable it.
-    *
-    * Mouse wheel can be used for the user to zoom in or zoom out the map.
-    *
-    * It's disabled by default.
-    *
-    * @see elm_map_wheel_disabled_get()
-    *
-    * @ingroup Map
-    */
-   EAPI void                  elm_map_wheel_disabled_set(Evas_Object *obj, Eina_Bool disabled) EINA_ARG_NONNULL(1);
-
-   /**
-    * Get a value whether mouse wheel is enabled or not.
-    *
-    * @param obj The map object.
-    * @return @c EINA_TRUE means map is disabled. @c EINA_FALSE indicates
-    * it is enabled. If @p obj is @c NULL, @c EINA_FALSE is returned.
-    *
-    * Mouse wheel can be used for the user to zoom in or zoom out the map.
-    *
-    * @see elm_map_wheel_disabled_set() for details.
-    *
-    * @ingroup Map
-    */
-   EAPI Eina_Bool             elm_map_wheel_disabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+/**
+ * @defgroup Map Map
+ * @ingroup Elementary
+ *
+ * @image html img/widget/map/preview-00.png
+ * @image latex img/widget/map/preview-00.eps
+ *
+ * This is a widget specifically for displaying a map. It uses basically
+ * OpenStreetMap provider http://www.openstreetmap.org/,
+ * but custom providers can be added.
+ *
+ * It supports some basic but yet nice features:
+ * @li zoom and scroll
+ * @li markers with content to be displayed when user clicks over it
+ * @li group of markers
+ * @li routes
+ *
+ * Smart callbacks one can listen to:
+ *
+ * - "clicked" - This is called when a user has clicked the map without
+ *   dragging around.
+ * - "press" - This is called when a user has pressed down on the map.
+ * - "longpressed" - This is called when a user has pressed down on the map
+ *   for a long time without dragging around.
+ * - "clicked,double" - This is called when a user has double-clicked
+ *   the map.
+ * - "load,detail" - Map detailed data load begins.
+ * - "loaded,detail" - This is called when all currently visible parts of
+ *   the map are loaded.
+ * - "zoom,start" - Zoom animation started.
+ * - "zoom,stop" - Zoom animation stopped.
+ * - "zoom,change" - Zoom changed when using an auto zoom mode.
+ * - "scroll" - the content has been scrolled (moved).
+ * - "scroll,anim,start" - scrolling animation has started.
+ * - "scroll,anim,stop" - scrolling animation has stopped.
+ * - "scroll,drag,start" - dragging the contents around has started.
+ * - "scroll,drag,stop" - dragging the contents around has stopped.
+ * - "downloaded" - This is called when all currently required map images
+ *   are downloaded.
+ * - "route,load" - This is called when route request begins.
+ * - "route,loaded" - This is called when route request ends.
+ * - "name,load" - This is called when name request begins.
+ * - "name,loaded- This is called when name request ends.
+ *
+ * Available style for map widget:
+ * - @c "default"
+ *
+ * Available style for markers:
+ * - @c "radio"
+ * - @c "radio2"
+ * - @c "empty"
+ *
+ * Available style for marker bubble:
+ * - @c "default"
+ *
+ * List of examples:
+ * @li @ref map_example_01
+ * @li @ref map_example_02
+ * @li @ref map_example_03
+ */
+
+/**
+ * @addtogroup Map
+ * @{
+ */
+
+/**
+ * @enum _Elm_Map_Zoom_Mode
+ * @typedef Elm_Map_Zoom_Mode
+ *
+ * Set map's zoom behavior. It can be set to manual or automatic.
+ *
+ * Default value is #ELM_MAP_ZOOM_MODE_MANUAL.
+ *
+ * Values <b> don't </b> work as bitmask, only one can be choosen.
+ *
+ * @note Valid sizes are 2^zoom, consequently the map may be smaller
+ * than the scroller view.
+ *
+ * @see elm_map_zoom_mode_set()
+ * @see elm_map_zoom_mode_get()
+ *
+ * @ingroup Map
+ */
+typedef enum _Elm_Map_Zoom_Mode
+{
+   ELM_MAP_ZOOM_MODE_MANUAL, /**< Zoom controlled manually by elm_map_zoom_set(). It's set by default. */
+   ELM_MAP_ZOOM_MODE_AUTO_FIT, /**< Zoom until map fits inside the scroll frame with no pixels outside this area. */
+   ELM_MAP_ZOOM_MODE_AUTO_FILL, /**< Zoom until map fills scroll, ensuring no pixels are left unfilled. */
+   ELM_MAP_ZOOM_MODE_LAST
+} Elm_Map_Zoom_Mode;
+
+/**
+ * @enum _Elm_Map_Route_Sources
+ * @typedef Elm_Map_Route_Sources
+ *
+ * Set route service to be used. By default used source is
+ * #ELM_MAP_ROUTE_SOURCE_YOURS.
+ *
+ * @see elm_map_route_source_set()
+ * @see elm_map_route_source_get()
+ *
+ * @ingroup Map
+ */
+typedef enum _Elm_Map_Route_Sources
+{
+   ELM_MAP_ROUTE_SOURCE_YOURS, /**< Routing service http://www.yournavigation.org/ . Set by default.*/
+   ELM_MAP_ROUTE_SOURCE_MONAV, /**< MoNav offers exact routing without heuristic assumptions. Its routing core is based on Contraction Hierarchies. It's not working with Map yet. */
+   ELM_MAP_ROUTE_SOURCE_ORS, /**< Open Route Service: http://www.openrouteservice.org/ . It's not working with Map yet. */
+   ELM_MAP_ROUTE_SOURCE_LAST
+} Elm_Map_Route_Sources;
+
+typedef enum _Elm_Map_Name_Sources
+{
+   ELM_MAP_NAME_SOURCE_NOMINATIM,
+   ELM_MAP_NAME_SOURCE_LAST
+} Elm_Map_Name_Sources;
+
+/**
+ * @enum _Elm_Map_Route_Type
+ * @typedef Elm_Map_Route_Type
+ *
+ * Set type of transport used on route.
+ *
+ * @see elm_map_route_add()
+ *
+ * @ingroup Map
+ */
+typedef enum _Elm_Map_Route_Type
+{
+   ELM_MAP_ROUTE_TYPE_MOTOCAR, /**< Route should consider an automobile will be used. */
+   ELM_MAP_ROUTE_TYPE_BICYCLE, /**< Route should consider a bicycle will be used by the user. */
+   ELM_MAP_ROUTE_TYPE_FOOT, /**< Route should consider user will be walking. */
+   ELM_MAP_ROUTE_TYPE_LAST
+} Elm_Map_Route_Type;
+
+/**
+ * @enum _Elm_Map_Route_Method
+ * @typedef Elm_Map_Route_Method
+ *
+ * Set the routing method, what should be priorized, time or distance.
+ *
+ * @see elm_map_route_add()
+ *
+ * @ingroup Map
+ */
+typedef enum _Elm_Map_Route_Method
+{
+   ELM_MAP_ROUTE_METHOD_FASTEST, /**< Route should priorize time. */
+   ELM_MAP_ROUTE_METHOD_SHORTEST, /**< Route should priorize distance. */
+   ELM_MAP_ROUTE_METHOD_LAST
+} Elm_Map_Route_Method;
+
+typedef enum _Elm_Map_Name_Method
+{
+   ELM_MAP_NAME_METHOD_SEARCH,
+   ELM_MAP_NAME_METHOD_REVERSE,
+   ELM_MAP_NAME_METHOD_LAST
+} Elm_Map_Name_Method;
+
+typedef struct _Elm_Map_Marker       Elm_Map_Marker; /**< A marker to be shown in a specific point of the map. Can be created with elm_map_marker_add() and deleted with elm_map_marker_remove(). */
+typedef struct _Elm_Map_Marker_Class Elm_Map_Marker_Class; /**< Each marker must be associated to a class. It's required to add a mark. The class defines the style of the marker when a marker is displayed alone (not grouped). A new class can be created with elm_map_marker_class_new(). */
+typedef struct _Elm_Map_Group_Class  Elm_Map_Group_Class; /**< Each marker must be associated to a group class. It's required to add a mark. The group class defines the style of the marker when a marker is grouped to other markers. Markers with the same group are grouped if they are close. A new group class can be created with elm_map_marker_group_class_new(). */
+typedef struct _Elm_Map_Route        Elm_Map_Route; /**< A route to be shown in the map. Can be created with elm_map_route_add() and deleted with elm_map_route_remove(). */
+typedef struct _Elm_Map_Name         Elm_Map_Name; /**< A handle for specific coordinates. */
+typedef struct _Elm_Map_Track        Elm_Map_Track;
+
+typedef Evas_Object               *(*ElmMapMarkerGetFunc)(Evas_Object *obj, Elm_Map_Marker *marker, void *data); /**< Bubble content fetching class function for marker classes. When the user click on a marker, a bubble is displayed with a content. */
+typedef void                       (*ElmMapMarkerDelFunc)(Evas_Object *obj, Elm_Map_Marker *marker, void *data, Evas_Object *o); /**< Function to delete bubble content for marker classes. */
+typedef Evas_Object               *(*ElmMapMarkerIconGetFunc)(Evas_Object *obj, Elm_Map_Marker *marker, void *data); /**< Icon fetching class function for marker classes. */
+typedef Evas_Object               *(*ElmMapGroupIconGetFunc)(Evas_Object *obj, void *data); /**< Icon fetching class function for markers group classes. */
+
+typedef char                      *(*ElmMapModuleSourceFunc)(void);
+typedef int                        (*ElmMapModuleZoomMinFunc)(void);
+typedef int                        (*ElmMapModuleZoomMaxFunc)(void);
+typedef char                      *(*ElmMapModuleUrlFunc)(Evas_Object *obj, int x, int y, int zoom);
+typedef int                        (*ElmMapModuleRouteSourceFunc)(void);
+typedef char                      *(*ElmMapModuleRouteUrlFunc)(Evas_Object *obj, char *type_name, int method, double flon, double flat, double tlon, double tlat);
+typedef char                      *(*ElmMapModuleNameUrlFunc)(Evas_Object *obj, int method, char *name, double lon, double lat);
+typedef Eina_Bool                  (*ElmMapModuleGeoIntoCoordFunc)(const Evas_Object *obj, int zoom, double lon, double lat, int size, int *x, int *y);
+typedef Eina_Bool                  (*ElmMapModuleCoordIntoGeoFunc)(const Evas_Object *obj, int zoom, int x, int y, int size, double *lon, double *lat);
+
+/**
+ * Add a new map widget to the given parent Elementary (container) object.
+ *
+ * @param parent The parent object.
+ * @return a new map widget handle or @c NULL, on errors.
+ *
+ * This function inserts a new map widget on the canvas.
+ *
+ * @ingroup Map
+ */
+EAPI Evas_Object *
+                           elm_map_add(Evas_Object *parent)
+EINA_ARG_NONNULL(1);
+
+/**
+ * Set the zoom level of the map.
+ *
+ * @param obj The map object.
+ * @param zoom The zoom level to set.
+ *
+ * This sets the zoom level.
+ *
+ * It will respect limits defined by elm_map_source_zoom_min_set() and
+ * elm_map_source_zoom_max_set().
+ *
+ * By default these values are 0 (world map) and 18 (maximum zoom).
+ *
+ * This function should be used when zoom mode is set to
+ * #ELM_MAP_ZOOM_MODE_MANUAL. This is the default mode, and can be set
+ * with elm_map_zoom_mode_set().
+ *
+ * @see elm_map_zoom_mode_set().
+ * @see elm_map_zoom_get().
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_zoom_set(Evas_Object *obj, int zoom) EINA_ARG_NONNULL(1);
+
+/**
+ * Get the zoom level of the map.
+ *
+ * @param obj The map object.
+ * @return The current zoom level.
+ *
+ * This returns the current zoom level of the map object.
+ *
+ * Note that if you set the fill mode to other than #ELM_MAP_ZOOM_MODE_MANUAL
+ * (which is the default), the zoom level may be changed at any time by the
+ * map object itself to account for map size and map viewport size.
+ *
+ * @see elm_map_zoom_set() for details.
+ *
+ * @ingroup Map
+ */
+EAPI int                   elm_map_zoom_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+/**
+ * Set the zoom mode used by the map object.
+ *
+ * @param obj The map object.
+ * @param mode The zoom mode of the map, being it one of
+ * #ELM_MAP_ZOOM_MODE_MANUAL (default), #ELM_MAP_ZOOM_MODE_AUTO_FIT,
+ * or #ELM_MAP_ZOOM_MODE_AUTO_FILL.
+ *
+ * This sets the zoom mode to manual or one of the automatic levels.
+ * Manual (#ELM_MAP_ZOOM_MODE_MANUAL) means that zoom is set manually by
+ * elm_map_zoom_set() and will stay at that level until changed by code
+ * or until zoom mode is changed. This is the default mode.
+ *
+ * The Automatic modes will allow the map object to automatically
+ * adjust zoom mode based on properties. #ELM_MAP_ZOOM_MODE_AUTO_FIT will
+ * adjust zoom so the map fits inside the scroll frame with no pixels
+ * outside this area. #ELM_MAP_ZOOM_MODE_AUTO_FILL will be similar but
+ * ensure no pixels within the frame are left unfilled. Do not forget that
+ * the valid sizes are 2^zoom, consequently the map may be smaller than
+ * the scroller view.
+ *
+ * @see elm_map_zoom_set()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_zoom_mode_set(Evas_Object *obj, Elm_Map_Zoom_Mode mode) EINA_ARG_NONNULL(1);
+
+/**
+ * Get the zoom mode used by the map object.
+ *
+ * @param obj The map object.
+ * @return The zoom mode of the map, being it one of
+ * #ELM_MAP_ZOOM_MODE_MANUAL (default), #ELM_MAP_ZOOM_MODE_AUTO_FIT,
+ * or #ELM_MAP_ZOOM_MODE_AUTO_FILL.
+ *
+ * This function returns the current zoom mode used by the map object.
+ *
+ * @see elm_map_zoom_mode_set() for more details.
+ *
+ * @ingroup Map
+ */
+EAPI Elm_Map_Zoom_Mode     elm_map_zoom_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+/**
+ * Get the current coordinates of the map.
+ *
+ * @param obj The map object.
+ * @param lon Pointer where to store longitude.
+ * @param lat Pointer where to store latitude.
+ *
+ * This gets the current center coordinates of the map object. It can be
+ * set by elm_map_geo_region_bring_in() and elm_map_geo_region_show().
+ *
+ * @see elm_map_geo_region_bring_in()
+ * @see elm_map_geo_region_show()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_geo_region_get(const Evas_Object *obj, double *lon, double *lat) EINA_ARG_NONNULL(1);
+
+/**
+ * Animatedly bring in given coordinates to the center of the map.
+ *
+ * @param obj The map object.
+ * @param lon Longitude to center at.
+ * @param lat Latitude to center at.
+ *
+ * This causes map to jump to the given @p lat and @p lon coordinates
+ * and show it (by scrolling) in the center of the viewport, if it is not
+ * already centered. This will use animation to do so and take a period
+ * of time to complete.
+ *
+ * @see elm_map_geo_region_show() for a function to avoid animation.
+ * @see elm_map_geo_region_get()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_geo_region_bring_in(Evas_Object *obj, double lon, double lat) EINA_ARG_NONNULL(1);
+
+/**
+ * Show the given coordinates at the center of the map, @b immediately.
+ *
+ * @param obj The map object.
+ * @param lon Longitude to center at.
+ * @param lat Latitude to center at.
+ *
+ * This causes map to @b redraw its viewport's contents to the
+ * region contining the given @p lat and @p lon, that will be moved to the
+ * center of the map.
+ *
+ * @see elm_map_geo_region_bring_in() for a function to move with animation.
+ * @see elm_map_geo_region_get()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_geo_region_show(Evas_Object *obj, double lon, double lat) EINA_ARG_NONNULL(1);
+
+/**
+ * Pause or unpause the map.
+ *
+ * @param obj The map object.
+ * @param paused Use @c EINA_TRUE to pause the map @p obj or @c EINA_FALSE
+ * to unpause it.
+ *
+ * This sets the paused state to on (@c EINA_TRUE) or off (@c EINA_FALSE)
+ * for map.
+ *
+ * The default is off.
+ *
+ * This will stop zooming using animation, changing zoom levels will
+ * change instantly. This will stop any existing animations that are running.
+ *
+ * @see elm_map_paused_get()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_paused_set(Evas_Object *obj, Eina_Bool paused) EINA_ARG_NONNULL(1);
+
+/**
+ * Get a value whether map is paused or not.
+ *
+ * @param obj The map object.
+ * @return @c EINA_TRUE means map is pause. @c EINA_FALSE indicates
+ * it is not. If @p obj is @c NULL, @c EINA_FALSE is returned.
+ *
+ * This gets the current paused state for the map object.
+ *
+ * @see elm_map_paused_set() for details.
+ *
+ * @ingroup Map
+ */
+EAPI Eina_Bool             elm_map_paused_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+/**
+ * Set to show markers during zoom level changes or not.
+ *
+ * @param obj The map object.
+ * @param paused Use @c EINA_TRUE to @b not show markers or @c EINA_FALSE
+ * to show them.
+ *
+ * This sets the paused state to on (@c EINA_TRUE) or off (@c EINA_FALSE)
+ * for map.
+ *
+ * The default is off.
+ *
+ * This will stop zooming using animation, changing zoom levels will
+ * change instantly. This will stop any existing animations that are running.
+ *
+ * This sets the paused state to on (@c EINA_TRUE) or off (@c EINA_FALSE)
+ * for the markers.
+ *
+ * The default  is off.
+ *
+ * Enabling it will force the map to stop displaying the markers during
+ * zoom level changes. Set to on if you have a large number of markers.
+ *
+ * @see elm_map_paused_markers_get()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_paused_markers_set(Evas_Object *obj, Eina_Bool paused) EINA_ARG_NONNULL(1);
+
+/**
+ * Get a value whether markers will be displayed on zoom level changes or not
+ *
+ * @param obj The map object.
+ * @return @c EINA_TRUE means map @b won't display markers or @c EINA_FALSE
+ * indicates it will. If @p obj is @c NULL, @c EINA_FALSE is returned.
+ *
+ * This gets the current markers paused state for the map object.
+ *
+ * @see elm_map_paused_markers_set() for details.
+ *
+ * @ingroup Map
+ */
+EAPI Eina_Bool             elm_map_paused_markers_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+/**
+ * Get the information of downloading status.
+ *
+ * @param obj The map object.
+ * @param try_num Pointer where to store number of tiles being downloaded.
+ * @param finish_num Pointer where to store number of tiles successfully
+ * downloaded.
+ *
+ * This gets the current downloading status for the map object, the number
+ * of tiles being downloaded and the number of tiles already downloaded.
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_utils_downloading_status_get(const Evas_Object *obj, int *try_num, int *finish_num) EINA_ARG_NONNULL(1, 2, 3);
+
+/**
+ * Convert a pixel coordinate (x,y) into a geographic coordinate
+ * (longitude, latitude).
+ *
+ * @param obj The map object.
+ * @param x the coordinate.
+ * @param y the coordinate.
+ * @param size the size in pixels of the map.
+ * The map is a square and generally his size is : pow(2.0, zoom)*256.
+ * @param lon Pointer where to store the longitude that correspond to x.
+ * @param lat Pointer where to store the latitude that correspond to y.
+ *
+ * @note Origin pixel point is the top left corner of the viewport.
+ * Map zoom and size are taken on account.
+ *
+ * @see elm_map_utils_convert_geo_into_coord() if you need the inverse.
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_utils_convert_coord_into_geo(const Evas_Object *obj, int x, int y, int size, double *lon, double *lat) EINA_ARG_NONNULL(1, 5, 6);
+
+/**
+ * Convert a geographic coordinate (longitude, latitude) into a pixel
+ * coordinate (x, y).
+ *
+ * @param obj The map object.
+ * @param lon the longitude.
+ * @param lat the latitude.
+ * @param size the size in pixels of the map. The map is a square
+ * and generally his size is : pow(2.0, zoom)*256.
+ * @param x Pointer where to store the horizontal pixel coordinate that
+ * correspond to the longitude.
+ * @param y Pointer where to store the vertical pixel coordinate that
+ * correspond to the latitude.
+ *
+ * @note Origin pixel point is the top left corner of the viewport.
+ * Map zoom and size are taken on account.
+ *
+ * @see elm_map_utils_convert_coord_into_geo() if you need the inverse.
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_utils_convert_geo_into_coord(const Evas_Object *obj, double lon, double lat, int size, int *x, int *y) EINA_ARG_NONNULL(1, 5, 6);
+
+/**
+ * Convert a geographic coordinate (longitude, latitude) into a name
+ * (address).
+ *
+ * @param obj The map object.
+ * @param lon the longitude.
+ * @param lat the latitude.
+ * @return name A #Elm_Map_Name handle for this coordinate.
+ *
+ * To get the string for this address, elm_map_name_address_get()
+ * should be used.
+ *
+ * @see elm_map_utils_convert_name_into_coord() if you need the inverse.
+ *
+ * @ingroup Map
+ */
+EAPI Elm_Map_Name         *elm_map_utils_convert_coord_into_name(const Evas_Object *obj, double lon, double lat) EINA_ARG_NONNULL(1);
+
+/**
+ * Convert a name (address) into a geographic coordinate
+ * (longitude, latitude).
+ *
+ * @param obj The map object.
+ * @param name The address.
+ * @return name A #Elm_Map_Name handle for this address.
+ *
+ * To get the longitude and latitude, elm_map_name_region_get()
+ * should be used.
+ *
+ * @see elm_map_utils_convert_coord_into_name() if you need the inverse.
+ *
+ * @ingroup Map
+ */
+EAPI Elm_Map_Name         *elm_map_utils_convert_name_into_coord(const Evas_Object *obj, char *address) EINA_ARG_NONNULL(1, 2);
+
+/**
+ * Convert a pixel coordinate into a rotated pixel coordinate.
+ *
+ * @param obj The map object.
+ * @param x horizontal coordinate of the point to rotate.
+ * @param y vertical coordinate of the point to rotate.
+ * @param cx rotation's center horizontal position.
+ * @param cy rotation's center vertical position.
+ * @param degree amount of degrees from 0.0 to 360.0 to rotate arount Z axis.
+ * @param xx Pointer where to store rotated x.
+ * @param yy Pointer where to store rotated y.
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_utils_rotate_coord(const Evas_Object *obj, const Evas_Coord x, const Evas_Coord y, const Evas_Coord cx, const Evas_Coord cy, const double degree, Evas_Coord *xx, Evas_Coord *yy) EINA_ARG_NONNULL(1);
+
+/**
+ * Add a new marker to the map object.
+ *
+ * @param obj The map object.
+ * @param lon The longitude of the marker.
+ * @param lat The latitude of the marker.
+ * @param clas The class, to use when marker @b isn't grouped to others.
+ * @param clas_group The class group, to use when marker is grouped to others
+ * @param data The data passed to the callbacks.
+ *
+ * @return The created marker or @c NULL upon failure.
+ *
+ * A marker will be created and shown in a specific point of the map, defined
+ * by @p lon and @p lat.
+ *
+ * It will be displayed using style defined by @p class when this marker
+ * is displayed alone (not grouped). A new class can be created with
+ * elm_map_marker_class_new().
+ *
+ * If the marker is grouped to other markers, it will be displayed with
+ * style defined by @p class_group. Markers with the same group are grouped
+ * if they are close. A new group class can be created with
+ * elm_map_marker_group_class_new().
+ *
+ * Markers created with this method can be deleted with
+ * elm_map_marker_remove().
+ *
+ * A marker can have associated content to be displayed by a bubble,
+ * when a user click over it, as well as an icon. These objects will
+ * be fetch using class' callback functions.
+ *
+ * @see elm_map_marker_class_new()
+ * @see elm_map_marker_group_class_new()
+ * @see elm_map_marker_remove()
+ *
+ * @ingroup Map
+ */
+EAPI Elm_Map_Marker       *elm_map_marker_add(Evas_Object *obj, double lon, double lat, Elm_Map_Marker_Class *clas, Elm_Map_Group_Class *clas_group, void *data) EINA_ARG_NONNULL(1, 4, 5);
+
+/**
+ * Set the maximum numbers of markers' content to be displayed in a group.
+ *
+ * @param obj The map object.
+ * @param max The maximum numbers of items displayed in a bubble.
+ *
+ * A bubble will be displayed when the user clicks over the group,
+ * and will place the content of markers that belong to this group
+ * inside it.
+ *
+ * A group can have a long list of markers, consequently the creation
+ * of the content of the bubble can be very slow.
+ *
+ * In order to avoid this, a maximum number of items is displayed
+ * in a bubble.
+ *
+ * By default this number is 30.
+ *
+ * Marker with the same group class are grouped if they are close.
+ *
+ * @see elm_map_marker_add()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_max_marker_per_group_set(Evas_Object *obj, int max) EINA_ARG_NONNULL(1);
+
+/**
+ * Remove a marker from the map.
+ *
+ * @param marker The marker to remove.
+ *
+ * @see elm_map_marker_add()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_marker_remove(Elm_Map_Marker *marker) EINA_ARG_NONNULL(1);
+
+/**
+ * Get the current coordinates of the marker.
+ *
+ * @param marker marker.
+ * @param lat Pointer where to store the marker's latitude.
+ * @param lon Pointer where to store the marker's longitude.
+ *
+ * These values are set when adding markers, with function
+ * elm_map_marker_add().
+ *
+ * @see elm_map_marker_add()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_marker_region_get(const Elm_Map_Marker *marker, double *lon, double *lat) EINA_ARG_NONNULL(1);
+
+/**
+ * Animatedly bring in given marker to the center of the map.
+ *
+ * @param marker The marker to center at.
+ *
+ * This causes map to jump to the given @p marker's coordinates
+ * and show it (by scrolling) in the center of the viewport, if it is not
+ * already centered. This will use animation to do so and take a period
+ * of time to complete.
+ *
+ * @see elm_map_marker_show() for a function to avoid animation.
+ * @see elm_map_marker_region_get()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_marker_bring_in(Elm_Map_Marker *marker) EINA_ARG_NONNULL(1);
+
+/**
+ * Show the given marker at the center of the map, @b immediately.
+ *
+ * @param marker The marker to center at.
+ *
+ * This causes map to @b redraw its viewport's contents to the
+ * region contining the given @p marker's coordinates, that will be
+ * moved to the center of the map.
+ *
+ * @see elm_map_marker_bring_in() for a function to move with animation.
+ * @see elm_map_markers_list_show() if more than one marker need to be
+ * displayed.
+ * @see elm_map_marker_region_get()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_marker_show(Elm_Map_Marker *marker) EINA_ARG_NONNULL(1);
+
+/**
+ * Move and zoom the map to display a list of markers.
+ *
+ * @param markers A list of #Elm_Map_Marker handles.
+ *
+ * The map will be centered on the center point of the markers in the list.
+ * Then the map will be zoomed in order to fit the markers using the maximum
+ * zoom which allows display of all the markers.
+ *
+ * @warning All the markers should belong to the same map object.
+ *
+ * @see elm_map_marker_show() to show a single marker.
+ * @see elm_map_marker_bring_in()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_markers_list_show(Eina_List *markers) EINA_ARG_NONNULL(1);
+
+/**
+ * Get the Evas object returned by the ElmMapMarkerGetFunc callback
+ *
+ * @param marker The marker wich content should be returned.
+ * @return Return the evas object if it exists, else @c NULL.
+ *
+ * To set callback function #ElmMapMarkerGetFunc for the marker class,
+ * elm_map_marker_class_get_cb_set() should be used.
+ *
+ * This content is what will be inside the bubble that will be displayed
+ * when an user clicks over the marker.
+ *
+ * This returns the actual Evas object used to be placed inside
+ * the bubble. This may be @c NULL, as it may
+ * not have been created or may have been deleted, at any time, by
+ * the map. <b>Do not modify this object</b> (move, resize,
+ * show, hide, etc.), as the map is controlling it. This
+ * function is for querying, emitting custom signals or hooking
+ * lower level callbacks for events on that object. Do not delete
+ * this object under any circumstances.
+ *
+ * @ingroup Map
+ */
+EAPI Evas_Object          *elm_map_marker_object_get(const Elm_Map_Marker *marker) EINA_ARG_NONNULL(1);
+
+/**
+ * Update the marker
+ *
+ * @param marker The marker to be updated.
+ *
+ * If a content is set to this marker, it will call function to delete it,
+ * #ElmMapMarkerDelFunc, and then will fetch the content again with
+ * #ElmMapMarkerGetFunc.
+ *
+ * These functions are set for the marker class with
+ * elm_map_marker_class_get_cb_set() and elm_map_marker_class_del_cb_set().
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_marker_update(Elm_Map_Marker *marker) EINA_ARG_NONNULL(1);
+
+/**
+ * Close all the bubbles opened by the user.
+ *
+ * @param obj The map object.
+ *
+ * A bubble is displayed with a content fetched with #ElmMapMarkerGetFunc
+ * when the user clicks on a marker.
+ *
+ * This functions is set for the marker class with
+ * elm_map_marker_class_get_cb_set().
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_bubbles_close(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+/**
+ * Create a new group class.
+ *
+ * @param obj The map object.
+ * @return Returns the new group class.
+ *
+ * Each marker must be associated to a group class. Markers in the same
+ * group are grouped if they are close.
+ *
+ * The group class defines the style of the marker when a marker is grouped
+ * to others markers. When it is alone, another class will be used.
+ *
+ * A group class will need to be provided when creating a marker with
+ * elm_map_marker_add().
+ *
+ * Some properties and functions can be set by class, as:
+ * - style, with elm_map_group_class_style_set()
+ * - data - to be associated to the group class. It can be set using
+ *   elm_map_group_class_data_set().
+ * - min zoom to display markers, set with
+ *   elm_map_group_class_zoom_displayed_set().
+ * - max zoom to group markers, set using
+ *   elm_map_group_class_zoom_grouped_set().
+ * - visibility - set if markers will be visible or not, set with
+ *   elm_map_group_class_hide_set().
+ * - #ElmMapGroupIconGetFunc - used to fetch icon for markers group classes.
+ *   It can be set using elm_map_group_class_icon_cb_set().
+ *
+ * @see elm_map_marker_add()
+ * @see elm_map_group_class_style_set()
+ * @see elm_map_group_class_data_set()
+ * @see elm_map_group_class_zoom_displayed_set()
+ * @see elm_map_group_class_zoom_grouped_set()
+ * @see elm_map_group_class_hide_set()
+ * @see elm_map_group_class_icon_cb_set()
+ *
+ * @ingroup Map
+ */
+EAPI Elm_Map_Group_Class  *elm_map_group_class_new(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+/**
+ * Set the marker's style of a group class.
+ *
+ * @param clas The group class.
+ * @param style The style to be used by markers.
+ *
+ * Each marker must be associated to a group class, and will use the style
+ * defined by such class when grouped to other markers.
+ *
+ * The following styles are provided by default theme:
+ * @li @c radio - blue circle
+ * @li @c radio2 - green circle
+ * @li @c empty
+ *
+ * @see elm_map_group_class_new() for more details.
+ * @see elm_map_marker_add()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_group_class_style_set(Elm_Map_Group_Class *clas, const char *style) EINA_ARG_NONNULL(1);
+
+/**
+ * Set the icon callback function of a group class.
+ *
+ * @param clas The group class.
+ * @param icon_get The callback function that will return the icon.
+ *
+ * Each marker must be associated to a group class, and it can display a
+ * custom icon. The function @p icon_get must return this icon.
+ *
+ * @see elm_map_group_class_new() for more details.
+ * @see elm_map_marker_add()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_group_class_icon_cb_set(Elm_Map_Group_Class *clas, ElmMapGroupIconGetFunc icon_get) EINA_ARG_NONNULL(1);
+
+/**
+ * Set the data associated to the group class.
+ *
+ * @param clas The group class.
+ * @param data The new user data.
+ *
+ * This data will be passed for callback functions, like icon get callback,
+ * that can be set with elm_map_group_class_icon_cb_set().
+ *
+ * If a data was previously set, the object will lose the pointer for it,
+ * so if needs to be freed, you must do it yourself.
+ *
+ * @see elm_map_group_class_new() for more details.
+ * @see elm_map_group_class_icon_cb_set()
+ * @see elm_map_marker_add()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_group_class_data_set(Elm_Map_Group_Class *clas, void *data) EINA_ARG_NONNULL(1);
+
+/**
+ * Set the minimum zoom from where the markers are displayed.
+ *
+ * @param clas The group class.
+ * @param zoom The minimum zoom.
+ *
+ * Markers only will be displayed when the map is displayed at @p zoom
+ * or bigger.
+ *
+ * @see elm_map_group_class_new() for more details.
+ * @see elm_map_marker_add()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_group_class_zoom_displayed_set(Elm_Map_Group_Class *clas, int zoom) EINA_ARG_NONNULL(1);
+
+/**
+ * Set the zoom from where the markers are no more grouped.
+ *
+ * @param clas The group class.
+ * @param zoom The maximum zoom.
+ *
+ * Markers only will be grouped when the map is displayed at
+ * less than @p zoom.
+ *
+ * @see elm_map_group_class_new() for more details.
+ * @see elm_map_marker_add()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_group_class_zoom_grouped_set(Elm_Map_Group_Class *clas, int zoom) EINA_ARG_NONNULL(1);
+
+/**
+ * Set if the markers associated to the group class @p clas are hidden or not.
+ *
+ * @param clas The group class.
+ * @param hide Use @c EINA_TRUE to hide markers or @c EINA_FALSE
+ * to show them.
+ *
+ * If @p hide is @c EINA_TRUE the markers will be hidden, but default
+ * is to show them.
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_group_class_hide_set(Evas_Object *obj, Elm_Map_Group_Class *clas, Eina_Bool hide) EINA_ARG_NONNULL(1, 2);
+
+/**
+ * Create a new marker class.
+ *
+ * @param obj The map object.
+ * @return Returns the new group class.
+ *
+ * Each marker must be associated to a class.
+ *
+ * The marker class defines the style of the marker when a marker is
+ * displayed alone, i.e., not grouped to to others markers. When grouped
+ * it will use group class style.
+ *
+ * A marker class will need to be provided when creating a marker with
+ * elm_map_marker_add().
+ *
+ * Some properties and functions can be set by class, as:
+ * - style, with elm_map_marker_class_style_set()
+ * - #ElmMapMarkerIconGetFunc - used to fetch icon for markers classes.
+ *   It can be set using elm_map_marker_class_icon_cb_set().
+ * - #ElmMapMarkerGetFunc - used to fetch bubble content for marker classes.
+ *   Set using elm_map_marker_class_get_cb_set().
+ * - #ElmMapMarkerDelFunc - used to delete bubble content for marker classes.
+ *   Set using elm_map_marker_class_del_cb_set().
+ *
+ * @see elm_map_marker_add()
+ * @see elm_map_marker_class_style_set()
+ * @see elm_map_marker_class_icon_cb_set()
+ * @see elm_map_marker_class_get_cb_set()
+ * @see elm_map_marker_class_del_cb_set()
+ *
+ * @ingroup Map
+ */
+EAPI Elm_Map_Marker_Class *elm_map_marker_class_new(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+/**
+ * Set the marker's style of a marker class.
+ *
+ * @param clas The marker class.
+ * @param style The style to be used by markers.
+ *
+ * Each marker must be associated to a marker class, and will use the style
+ * defined by such class when alone, i.e., @b not grouped to other markers.
+ *
+ * The following styles are provided by default theme:
+ * @li @c radio
+ * @li @c radio2
+ * @li @c empty
+ *
+ * @see elm_map_marker_class_new() for more details.
+ * @see elm_map_marker_add()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_marker_class_style_set(Elm_Map_Marker_Class *clas, const char *style) EINA_ARG_NONNULL(1);
+
+/**
+ * Set the icon callback function of a marker class.
+ *
+ * @param clas The marker class.
+ * @param icon_get The callback function that will return the icon.
+ *
+ * Each marker must be associated to a marker class, and it can display a
+ * custom icon. The function @p icon_get must return this icon.
+ *
+ * @see elm_map_marker_class_new() for more details.
+ * @see elm_map_marker_add()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_marker_class_icon_cb_set(Elm_Map_Marker_Class *clas, ElmMapMarkerIconGetFunc icon_get) EINA_ARG_NONNULL(1);
+
+/**
+ * Set the bubble content callback function of a marker class.
+ *
+ * @param clas The marker class.
+ * @param get The callback function that will return the content.
+ *
+ * Each marker must be associated to a marker class, and it can display a
+ * a content on a bubble that opens when the user click over the marker.
+ * The function @p get must return this content object.
+ *
+ * If this content will need to be deleted, elm_map_marker_class_del_cb_set()
+ * can be used.
+ *
+ * @see elm_map_marker_class_new() for more details.
+ * @see elm_map_marker_class_del_cb_set()
+ * @see elm_map_marker_add()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_marker_class_get_cb_set(Elm_Map_Marker_Class *clas, ElmMapMarkerGetFunc get) EINA_ARG_NONNULL(1);
+
+/**
+ * Set the callback function used to delete bubble content of a marker class.
+ *
+ * @param clas The marker class.
+ * @param del The callback function that will delete the content.
+ *
+ * Each marker must be associated to a marker class, and it can display a
+ * a content on a bubble that opens when the user click over the marker.
+ * The function to return such content can be set with
+ * elm_map_marker_class_get_cb_set().
+ *
+ * If this content must be freed, a callback function need to be
+ * set for that task with this function.
+ *
+ * If this callback is defined it will have to delete (or not) the
+ * object inside, but if the callback is not defined the object will be
+ * destroyed with evas_object_del().
+ *
+ * @see elm_map_marker_class_new() for more details.
+ * @see elm_map_marker_class_get_cb_set()
+ * @see elm_map_marker_add()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_marker_class_del_cb_set(Elm_Map_Marker_Class *clas, ElmMapMarkerDelFunc del) EINA_ARG_NONNULL(1);
+
+/**
+ * Get the list of available sources.
+ *
+ * @param obj The map object.
+ * @return The source names list.
+ *
+ * It will provide a list with all available sources, that can be set as
+ * current source with elm_map_source_name_set(), or get with
+ * elm_map_source_name_get().
+ *
+ * Available sources:
+ * @li "Mapnik"
+ * @li "Osmarender"
+ * @li "CycleMap"
+ * @li "Maplint"
+ *
+ * @see elm_map_source_name_set() for more details.
+ * @see elm_map_source_name_get()
+ *
+ * @ingroup Map
+ */
+EAPI const char          **elm_map_source_names_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+/**
+ * Set the source of the map.
+ *
+ * @param obj The map object.
+ * @param source The source to be used.
+ *
+ * Map widget retrieves images that composes the map from a web service.
+ * This web service can be set with this method.
+ *
+ * A different service can return a different maps with different
+ * information and it can use different zoom values.
+ *
+ * The @p source_name need to match one of the names provided by
+ * elm_map_source_names_get().
+ *
+ * The current source can be get using elm_map_source_name_get().
+ *
+ * @see elm_map_source_names_get()
+ * @see elm_map_source_name_get()
+ *
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_source_name_set(Evas_Object *obj, const char *source_name) EINA_ARG_NONNULL(1);
+
+/**
+ * Get the name of currently used source.
+ *
+ * @param obj The map object.
+ * @return Returns the name of the source in use.
+ *
+ * @see elm_map_source_name_set() for more details.
+ *
+ * @ingroup Map
+ */
+EAPI const char           *elm_map_source_name_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+/**
+ * Set the source of the route service to be used by the map.
+ *
+ * @param obj The map object.
+ * @param source The route service to be used, being it one of
+ * #ELM_MAP_ROUTE_SOURCE_YOURS (default), #ELM_MAP_ROUTE_SOURCE_MONAV,
+ * and #ELM_MAP_ROUTE_SOURCE_ORS.
+ *
+ * Each one has its own algorithm, so the route retrieved may
+ * differ depending on the source route. Now, only the default is working.
+ *
+ * #ELM_MAP_ROUTE_SOURCE_YOURS is the routing service provided at
+ * http://www.yournavigation.org/.
+ *
+ * #ELM_MAP_ROUTE_SOURCE_MONAV, offers exact routing without heuristic
+ * assumptions. Its routing core is based on Contraction Hierarchies.
+ *
+ * #ELM_MAP_ROUTE_SOURCE_ORS, is provided at http://www.openrouteservice.org/
+ *
+ * @see elm_map_route_source_get().
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_route_source_set(Evas_Object *obj, Elm_Map_Route_Sources source) EINA_ARG_NONNULL(1);
+
+/**
+ * Get the current route source.
+ *
+ * @param obj The map object.
+ * @return The source of the route service used by the map.
+ *
+ * @see elm_map_route_source_set() for details.
+ *
+ * @ingroup Map
+ */
+EAPI Elm_Map_Route_Sources elm_map_route_source_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+/**
+ * Set the minimum zoom of the source.
+ *
+ * @param obj The map object.
+ * @param zoom New minimum zoom value to be used.
+ *
+ * By default, it's 0.
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_source_zoom_min_set(Evas_Object *obj, int zoom) EINA_ARG_NONNULL(1);
+
+/**
+ * Get the minimum zoom of the source.
+ *
+ * @param obj The map object.
+ * @return Returns the minimum zoom of the source.
+ *
+ * @see elm_map_source_zoom_min_set() for details.
+ *
+ * @ingroup Map
+ */
+EAPI int                   elm_map_source_zoom_min_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+/**
+ * Set the maximum zoom of the source.
+ *
+ * @param obj The map object.
+ * @param zoom New maximum zoom value to be used.
+ *
+ * By default, it's 18.
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_source_zoom_max_set(Evas_Object *obj, int zoom) EINA_ARG_NONNULL(1);
+
+/**
+ * Get the maximum zoom of the source.
+ *
+ * @param obj The map object.
+ * @return Returns the maximum zoom of the source.
+ *
+ * @see elm_map_source_zoom_min_set() for details.
+ *
+ * @ingroup Map
+ */
+EAPI int                   elm_map_source_zoom_max_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+/**
+ * Set the user agent used by the map object to access routing services.
+ *
+ * @param obj The map object.
+ * @param user_agent The user agent to be used by the map.
+ *
+ * User agent is a client application implementing a network protocol used
+ * in communications within a client–server distributed computing system
+ *
+ * The @p user_agent identification string will transmitted in a header
+ * field @c User-Agent.
+ *
+ * @see elm_map_user_agent_get()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_user_agent_set(Evas_Object *obj, const char *user_agent) EINA_ARG_NONNULL(1, 2);
+
+/**
+ * Get the user agent used by the map object.
+ *
+ * @param obj The map object.
+ * @return The user agent identification string used by the map.
+ *
+ * @see elm_map_user_agent_set() for details.
+ *
+ * @ingroup Map
+ */
+EAPI const char           *elm_map_user_agent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+/**
+ * Add a new route to the map object.
+ *
+ * @param obj The map object.
+ * @param type The type of transport to be considered when tracing a route.
+ * @param method The routing method, what should be priorized.
+ * @param flon The start longitude.
+ * @param flat The start latitude.
+ * @param tlon The destination longitude.
+ * @param tlat The destination latitude.
+ *
+ * @return The created route or @c NULL upon failure.
+ *
+ * A route will be traced by point on coordinates (@p flat, @p flon)
+ * to point on coordinates (@p tlat, @p tlon), using the route service
+ * set with elm_map_route_source_set().
+ *
+ * It will take @p type on consideration to define the route,
+ * depending if the user will be walking or driving, the route may vary.
+ * One of #ELM_MAP_ROUTE_TYPE_MOTOCAR, #ELM_MAP_ROUTE_TYPE_BICYCLE, or
+ * #ELM_MAP_ROUTE_TYPE_FOOT need to be used.
+ *
+ * Another parameter is what the route should priorize, the minor distance
+ * or the less time to be spend on the route. So @p method should be one
+ * of #ELM_MAP_ROUTE_METHOD_SHORTEST or #ELM_MAP_ROUTE_METHOD_FASTEST.
+ *
+ * Routes created with this method can be deleted with
+ * elm_map_route_remove(), colored with elm_map_route_color_set(),
+ * and distance can be get with elm_map_route_distance_get().
+ *
+ * @see elm_map_route_remove()
+ * @see elm_map_route_color_set()
+ * @see elm_map_route_distance_get()
+ * @see elm_map_route_source_set()
+ *
+ * @ingroup Map
+ */
+EAPI Elm_Map_Route        *elm_map_route_add(Evas_Object *obj, Elm_Map_Route_Type type, Elm_Map_Route_Method method, double flon, double flat, double tlon, double tlat) EINA_ARG_NONNULL(1);
+
+/**
+ * Remove a route from the map.
+ *
+ * @param route The route to remove.
+ *
+ * @see elm_map_route_add()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_route_remove(Elm_Map_Route *route) EINA_ARG_NONNULL(1);
+
+/**
+ * Set the route color.
+ *
+ * @param route The route object.
+ * @param r Red channel value, from 0 to 255.
+ * @param g Green channel value, from 0 to 255.
+ * @param b Blue channel value, from 0 to 255.
+ * @param a Alpha channel value, from 0 to 255.
+ *
+ * It uses an additive color model, so each color channel represents
+ * how much of each primary colors must to be used. 0 represents
+ * ausence of this color, so if all of the three are set to 0,
+ * the color will be black.
+ *
+ * These component values should be integers in the range 0 to 255,
+ * (single 8-bit byte).
+ *
+ * This sets the color used for the route. By default, it is set to
+ * solid red (r = 255, g = 0, b = 0, a = 255).
+ *
+ * For alpha channel, 0 represents completely transparent, and 255, opaque.
+ *
+ * @see elm_map_route_color_get()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_route_color_set(Elm_Map_Route *route, int r, int g, int b, int a) EINA_ARG_NONNULL(1);
+
+/**
+ * Get the route color.
+ *
+ * @param route The route object.
+ * @param r Pointer where to store the red channel value.
+ * @param g Pointer where to store the green channel value.
+ * @param b Pointer where to store the blue channel value.
+ * @param a Pointer where to store the alpha channel value.
+ *
+ * @see elm_map_route_color_set() for details.
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_route_color_get(const Elm_Map_Route *route, int *r, int *g, int *b, int *a) EINA_ARG_NONNULL(1);
+
+/**
+ * Get the route distance in kilometers.
+ *
+ * @param route The route object.
+ * @return The distance of route (unit : km).
+ *
+ * @ingroup Map
+ */
+EAPI double                elm_map_route_distance_get(const Elm_Map_Route *route) EINA_ARG_NONNULL(1);
+
+/**
+ * Get the information of route nodes.
+ *
+ * @param route The route object.
+ * @return Returns a string with the nodes of route.
+ *
+ * @ingroup Map
+ */
+EAPI const char           *elm_map_route_node_get(const Elm_Map_Route *route) EINA_ARG_NONNULL(1);
+
+/**
+ * Get the information of route waypoint.
+ *
+ * @param route the route object.
+ * @return Returns a string with information about waypoint of route.
+ *
+ * @ingroup Map
+ */
+EAPI const char           *elm_map_route_waypoint_get(const Elm_Map_Route *route) EINA_ARG_NONNULL(1);
+
+/**
+ * Get the address of the name.
+ *
+ * @param name The name handle.
+ * @return Returns the address string of @p name.
+ *
+ * This gets the coordinates of the @p name, created with one of the
+ * conversion functions.
+ *
+ * @see elm_map_utils_convert_name_into_coord()
+ * @see elm_map_utils_convert_coord_into_name()
+ *
+ * @ingroup Map
+ */
+EAPI const char           *elm_map_name_address_get(const Elm_Map_Name *name) EINA_ARG_NONNULL(1);
+
+/**
+ * Get the current coordinates of the name.
+ *
+ * @param name The name handle.
+ * @param lat Pointer where to store the latitude.
+ * @param lon Pointer where to store The longitude.
+ *
+ * This gets the coordinates of the @p name, created with one of the
+ * conversion functions.
+ *
+ * @see elm_map_utils_convert_name_into_coord()
+ * @see elm_map_utils_convert_coord_into_name()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_name_region_get(const Elm_Map_Name *name, double *lon, double *lat) EINA_ARG_NONNULL(1);
+
+/**
+ * Remove a name from the map.
+ *
+ * @param name The name to remove.
+ *
+ * Basically the struct handled by @p name will be freed, so convertions
+ * between address and coordinates will be lost.
+ *
+ * @see elm_map_utils_convert_name_into_coord()
+ * @see elm_map_utils_convert_coord_into_name()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_name_remove(Elm_Map_Name *name) EINA_ARG_NONNULL(1);
+
+/**
+ * Rotate the map.
+ *
+ * @param obj The map object.
+ * @param degree Angle from 0.0 to 360.0 to rotate arount Z axis.
+ * @param cx Rotation's center horizontal position.
+ * @param cy Rotation's center vertical position.
+ *
+ * @see elm_map_rotate_get()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_rotate_set(Evas_Object *obj, double degree, Evas_Coord cx, Evas_Coord cy) EINA_ARG_NONNULL(1);
+
+/**
+ * Get the rotate degree of the map
+ *
+ * @param obj The map object
+ * @param degree Pointer where to store degrees from 0.0 to 360.0
+ * to rotate arount Z axis.
+ * @param cx Pointer where to store rotation's center horizontal position.
+ * @param cy Pointer where to store rotation's center vertical position.
+ *
+ * @see elm_map_rotate_set() to set map rotation.
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_rotate_get(const Evas_Object *obj, double *degree, Evas_Coord *cx, Evas_Coord *cy) EINA_ARG_NONNULL(1, 2, 3, 4);
+
+/**
+ * Enable or disable mouse wheel to be used to zoom in / out the map.
+ *
+ * @param obj The map object.
+ * @param disabled Use @c EINA_TRUE to disable mouse wheel or @c EINA_FALSE
+ * to enable it.
+ *
+ * Mouse wheel can be used for the user to zoom in or zoom out the map.
+ *
+ * It's disabled by default.
+ *
+ * @see elm_map_wheel_disabled_get()
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_wheel_disabled_set(Evas_Object *obj, Eina_Bool disabled) EINA_ARG_NONNULL(1);
+
+/**
+ * Get a value whether mouse wheel is enabled or not.
+ *
+ * @param obj The map object.
+ * @return @c EINA_TRUE means map is disabled. @c EINA_FALSE indicates
+ * it is enabled. If @p obj is @c NULL, @c EINA_FALSE is returned.
+ *
+ * Mouse wheel can be used for the user to zoom in or zoom out the map.
+ *
+ * @see elm_map_wheel_disabled_set() for details.
+ *
+ * @ingroup Map
+ */
+EAPI Eina_Bool             elm_map_wheel_disabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
 
 #ifdef ELM_EMAP
-   /**
   * Add a track on the map
   *
   * @param obj The map object.
   * @param emap The emap route object.
   * @return The route object. This is an elm object of type Route.
   *
   * @see elm_route_add() for details.
   *
   * @ingroup Map
   */
-   EAPI Evas_Object          *elm_map_track_add(Evas_Object *obj, EMap_Route *emap) EINA_ARG_NONNULL(1);
+/**
+ * Add a track on the map
+ *
+ * @param obj The map object.
+ * @param emap The emap route object.
+ * @return The route object. This is an elm object of type Route.
+ *
+ * @see elm_route_add() for details.
+ *
+ * @ingroup Map
+ */
+EAPI Evas_Object          *elm_map_track_add(Evas_Object *obj, EMap_Route *emap) EINA_ARG_NONNULL(1);
 #endif
 
-   /**
   * Remove a track from the map
   *
   * @param obj The map object.
   * @param route The track to remove.
   *
   * @ingroup Map
   */
-   EAPI void                  elm_map_track_remove(Evas_Object *obj, Evas_Object *route) EINA_ARG_NONNULL(1);
-
-   /**
   * @}
   */
+/**
+ * Remove a track from the map
+ *
+ * @param obj The map object.
+ * @param route The track to remove.
+ *
+ * @ingroup Map
+ */
+EAPI void                  elm_map_track_remove(Evas_Object *obj, Evas_Object *route) EINA_ARG_NONNULL(1);
+
+/**
+ * @}
+ */