1 /* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */
2 /* vim:set et sw=4 ts=4 */
3 /*
4  * Copyright (C) 2013 John Stowers <john.stowers@gmail.com>
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #include "private.h"
21 #include "osm-gps-map-source.h"
22 
23 const char*
osm_gps_map_source_get_friendly_name(OsmGpsMapSource_t source)24 osm_gps_map_source_get_friendly_name(OsmGpsMapSource_t source)
25 {
26     switch(source)
27     {
28         case OSM_GPS_MAP_SOURCE_NULL:
29             return "None";
30         case OSM_GPS_MAP_SOURCE_OPENSTREETMAP:
31             return "OpenStreetMap I";
32         case OSM_GPS_MAP_SOURCE_OPENSTREETMAP_RENDERER:
33             return "OpenStreetMap II";
34         case OSM_GPS_MAP_SOURCE_OPENAERIALMAP:
35             return "OpenAerialMap";
36         case OSM_GPS_MAP_SOURCE_OPENCYCLEMAP:
37             return "OpenCycleMap";
38         case OSM_GPS_MAP_SOURCE_OSM_PUBLIC_TRANSPORT:
39             return "Public Transport";
40         case OSM_GPS_MAP_SOURCE_OSMC_TRAILS:
41             return "OSMC Trails";
42         case OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE:
43             return "Maps-For-Free";
44         case OSM_GPS_MAP_SOURCE_GOOGLE_STREET:
45             return "Google Maps";
46         case OSM_GPS_MAP_SOURCE_GOOGLE_SATELLITE:
47             return "Google Satellite";
48         case OSM_GPS_MAP_SOURCE_GOOGLE_HYBRID:
49             return "Google Hybrid";
50         case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_STREET:
51             return "Virtual Earth";
52         case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_SATELLITE:
53             return "Virtual Earth Satellite";
54         case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_HYBRID:
55             return "Virtual Earth Hybrid";
56         case OSM_GPS_MAP_SOURCE_LAST:
57         default:
58             return NULL;
59     }
60     return NULL;
61 }
62 
63 //http://www.internettablettalk.com/forums/showthread.php?t=5209
64 //https://garage.maemo.org/plugins/scmsvn/viewcvs.php/trunk/src/maps.c?root=maemo-mapper&view=markup
65 //http://www.ponies.me.uk/maps/GoogleTileUtils.java
66 //http://www.mgmaps.com/cache/MapTileCacher.perl
67 const char*
osm_gps_map_source_get_repo_uri(OsmGpsMapSource_t source)68 osm_gps_map_source_get_repo_uri(OsmGpsMapSource_t source)
69 {
70     switch(source)
71     {
72         case OSM_GPS_MAP_SOURCE_NULL:
73             return "none://";
74         case OSM_GPS_MAP_SOURCE_OPENSTREETMAP:
75             return OSM_REPO_URI;
76         case OSM_GPS_MAP_SOURCE_OPENAERIALMAP:
77             /* OpenAerialMap is down, offline till furthur notice
78                http://openaerialmap.org/pipermail/talk_openaerialmap.org/2008-December/000055.html */
79             return NULL;
80         case OSM_GPS_MAP_SOURCE_OPENSTREETMAP_RENDERER:
81             /* The Tile@Home serverhas been shut down. */
82             // return "http://tah.openstreetmap.org/Tiles/tile/#Z/#X/#Y.png";
83             return NULL;
84         case OSM_GPS_MAP_SOURCE_OPENCYCLEMAP:
85             // return "http://c.andy.sandbox.cloudmade.com/tiles/cycle/#Z/#X/#Y.png";
86             return "http://b.tile.opencyclemap.org/cycle/#Z/#X/#Y.png";
87         case OSM_GPS_MAP_SOURCE_OSM_PUBLIC_TRANSPORT:
88             return "http://tile.xn--pnvkarte-m4a.de/tilegen/#Z/#X/#Y.png";
89         case OSM_GPS_MAP_SOURCE_OSMC_TRAILS:
90             // Appears to be shut down
91             return NULL;
92         case OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE:
93             return "http://maps-for-free.com/layer/relief/z#Z/row#Y/#Z_#X-#Y.jpg";
94         case OSM_GPS_MAP_SOURCE_GOOGLE_STREET:
95             return "http://mt#R.google.com/vt/lyrs=m&hl=en&x=#X&s=&y=#Y&z=#Z";
96         case OSM_GPS_MAP_SOURCE_GOOGLE_HYBRID:
97             return "http://mt#R.google.com/vt/lyrs=y&hl=en&x=#X&s=&y=#Y&z=#Z";
98         case OSM_GPS_MAP_SOURCE_GOOGLE_SATELLITE:
99             return "http://mt#R.google.com/vt/lyrs=s&hl=en&x=#X&s=&y=#Y&z=#Z";
100         case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_STREET:
101             return "http://a#R.ortho.tiles.virtualearth.net/tiles/r#W.jpeg?g=50";
102         case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_SATELLITE:
103             return "http://a#R.ortho.tiles.virtualearth.net/tiles/a#W.jpeg?g=50";
104         case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_HYBRID:
105             return "http://a#R.ortho.tiles.virtualearth.net/tiles/h#W.jpeg?g=50";
106         case OSM_GPS_MAP_SOURCE_LAST:
107         default:
108             return NULL;
109     }
110     return NULL;
111 }
112 
113 const char *
osm_gps_map_source_get_image_format(OsmGpsMapSource_t source)114 osm_gps_map_source_get_image_format(OsmGpsMapSource_t source)
115 {
116     switch(source) {
117         case OSM_GPS_MAP_SOURCE_NULL:
118         case OSM_GPS_MAP_SOURCE_OPENSTREETMAP:
119         case OSM_GPS_MAP_SOURCE_OPENSTREETMAP_RENDERER:
120         case OSM_GPS_MAP_SOURCE_OPENCYCLEMAP:
121         case OSM_GPS_MAP_SOURCE_OSM_PUBLIC_TRANSPORT:
122         case OSM_GPS_MAP_SOURCE_OSMC_TRAILS:
123             return "png";
124         case OSM_GPS_MAP_SOURCE_OPENAERIALMAP:
125         case OSM_GPS_MAP_SOURCE_GOOGLE_STREET:
126         case OSM_GPS_MAP_SOURCE_GOOGLE_HYBRID:
127         case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_STREET:
128         case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_SATELLITE:
129         case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_HYBRID:
130         case OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE:
131         case OSM_GPS_MAP_SOURCE_GOOGLE_SATELLITE:
132             return "jpg";
133         case OSM_GPS_MAP_SOURCE_LAST:
134         default:
135             return "bin";
136     }
137     return "bin";
138 }
139 
140 
141 int
osm_gps_map_source_get_min_zoom(OsmGpsMapSource_t source)142 osm_gps_map_source_get_min_zoom(OsmGpsMapSource_t source)
143 {
144     return 1;
145 }
146 
147 int
osm_gps_map_source_get_max_zoom(OsmGpsMapSource_t source)148 osm_gps_map_source_get_max_zoom(OsmGpsMapSource_t source)
149 {
150     switch(source) {
151         case OSM_GPS_MAP_SOURCE_NULL:
152             return 18;
153         case OSM_GPS_MAP_SOURCE_OPENSTREETMAP:
154         case OSM_GPS_MAP_SOURCE_OPENCYCLEMAP:
155         case OSM_GPS_MAP_SOURCE_OSM_PUBLIC_TRANSPORT:
156             return OSM_MAX_ZOOM;
157         case OSM_GPS_MAP_SOURCE_OPENSTREETMAP_RENDERER:
158         case OSM_GPS_MAP_SOURCE_OPENAERIALMAP:
159         case OSM_GPS_MAP_SOURCE_GOOGLE_STREET:
160         case OSM_GPS_MAP_SOURCE_GOOGLE_HYBRID:
161         case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_STREET:
162         case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_SATELLITE:
163         case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_HYBRID:
164             return 17;
165         case OSM_GPS_MAP_SOURCE_OSMC_TRAILS:
166             return 15;
167         case OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE:
168             return 11;
169         case OSM_GPS_MAP_SOURCE_GOOGLE_SATELLITE:
170             return 18;
171         case OSM_GPS_MAP_SOURCE_LAST:
172         default:
173             return 17;
174     }
175     return 17;
176 }
177 
178 gboolean
osm_gps_map_source_is_valid(OsmGpsMapSource_t source)179 osm_gps_map_source_is_valid(OsmGpsMapSource_t source)
180 {
181     return osm_gps_map_source_get_repo_uri(source) != NULL;
182 }
183 
184