Geography: Add custom tiles provider (#976)
* Geography: Add custom tiles provider Fixes #11416 * Geography: some cleanup
This commit is contained in:
parent
8184f1b603
commit
a2ae7b93fc
@ -186,6 +186,7 @@ register('geography.zoom_when_center', 12)
|
||||
register('geography.show_cross', False)
|
||||
register('geography.path', "")
|
||||
register('geography.use-keypad', True)
|
||||
register('geography.personal-map', "")
|
||||
|
||||
# note that other calls to "register" are done in realtime (when
|
||||
# needed), for instance to four 'interface.clipboard' variables --
|
||||
|
@ -64,6 +64,7 @@ VIRTUAL_EARTH_HYBRID = 13
|
||||
YAHOO_STREET = 14
|
||||
YAHOO_SATELLITE = 15
|
||||
YAHOO_HYBRID = 16
|
||||
PERSONAL = 30
|
||||
|
||||
TILES_PATH = {
|
||||
OPENSTREETMAP : "openstreetmap",
|
||||
@ -82,6 +83,7 @@ TILES_PATH = {
|
||||
YAHOO_STREET : "yahoostreet",
|
||||
YAHOO_SATELLITE : "yahoosat",
|
||||
YAHOO_HYBRID : "yahoohybrid",
|
||||
PERSONAL : "personal",
|
||||
}
|
||||
|
||||
MAP_TITLE = {
|
||||
@ -101,6 +103,7 @@ MAP_TITLE = {
|
||||
YAHOO_STREET : "Yahoo street",
|
||||
YAHOO_SATELLITE : "Yahoo sat",
|
||||
YAHOO_HYBRID : "Yahoo hybrid",
|
||||
PERSONAL : "Personal map",
|
||||
}
|
||||
|
||||
MAP_TYPE = {
|
||||
@ -114,5 +117,6 @@ MAP_TYPE = {
|
||||
VIRTUAL_EARTH_STREET : osmgpsmap.MapSource_t.VIRTUAL_EARTH_STREET,
|
||||
VIRTUAL_EARTH_SATELLITE : osmgpsmap.MapSource_t.VIRTUAL_EARTH_SATELLITE,
|
||||
VIRTUAL_EARTH_HYBRID : osmgpsmap.MapSource_t.VIRTUAL_EARTH_HYBRID,
|
||||
PERSONAL : None,
|
||||
}
|
||||
|
||||
|
@ -125,6 +125,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
('geography.map_service', constants.OPENSTREETMAP),
|
||||
('geography.max_places', 5000),
|
||||
('geography.use-keypad', True),
|
||||
('geography.personal-map', ""),
|
||||
)
|
||||
|
||||
def __init__(self, title, pdata, dbstate, uistate,
|
||||
@ -143,6 +144,8 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
self.lock = config.get("geography.lock")
|
||||
if config.get('geography.path') == "":
|
||||
config.set('geography.path', GEOGRAPHY_PATH)
|
||||
if not config.is_set('geography.personal-map'):
|
||||
config.set('geography.personal-map', "")
|
||||
|
||||
self.uistate = uistate
|
||||
self.uistate.connect('font-changed', self.font_changed)
|
||||
@ -1266,8 +1269,52 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
'from the keyboard.'),
|
||||
5, 'geography.use-keypad',
|
||||
extra_callback=self.update_shortcuts)
|
||||
label = configdialog.add_text(
|
||||
grid,
|
||||
_('If you want to use a specific map provider,'
|
||||
' You can set the following field to the'
|
||||
' provider\'s url.\ni.e:\n'
|
||||
'http://tile.stamen.com/toner/#Z/#X/#Y.png\n'
|
||||
'http://tile.stamen.com/terrain/#Z/#X/#Y.jpg\n'
|
||||
'http://tile.stamen.com/watercolor/#Z/#X/#Y.jpg\n'
|
||||
'http://tile.xn--pnvkarte-m4a.de/tilegen/#Z/#X/#Y.png\n'
|
||||
),
|
||||
6, line_wrap=False)
|
||||
# set the possibility to copy/paste the urls
|
||||
label.set_selectable(True)
|
||||
start = label.get_text().find("http")
|
||||
end = label.get_text().find("http", start + 1)
|
||||
label.select_region(start, end)
|
||||
url = configdialog.add_entry(grid, _("Personal map"),
|
||||
7, 'geography.personal-map',
|
||||
self.choosen_map,
|
||||
)
|
||||
if config.get('geography.personal-map') != "":
|
||||
url.set_text(config.get('geography.personal-map'))
|
||||
return _('The map'), grid
|
||||
|
||||
def choosen_map(self, *obj):
|
||||
"""
|
||||
Save the provider map path in the config section.
|
||||
"""
|
||||
map_source = obj[0].get_text()
|
||||
name = constants.TILES_PATH[constants.PERSONAL]
|
||||
print(self.current_map, constants.PERSONAL,
|
||||
map_source, config.get('geography.personal-map'))
|
||||
config.set('geography.personal-map', map_source)
|
||||
self.clear_map(None, name)
|
||||
if map_source == "":
|
||||
print("reset osm")
|
||||
config.set("geography.map_service", constants.OPENSTREETMAP)
|
||||
self.change_map(self.osm, config.get("geography.map_service"))
|
||||
self.reload_tiles()
|
||||
return
|
||||
if map_source != config.get('geography.personal-map'):
|
||||
print("set personal")
|
||||
config.set("geography.map_service", constants.PERSONAL)
|
||||
self.change_new_map(name, map_source)
|
||||
self.reload_tiles()
|
||||
|
||||
def set_tilepath(self, *obj):
|
||||
"""
|
||||
Save the tile path in the config section.
|
||||
|
@ -147,6 +147,15 @@ class OsmGps:
|
||||
"""
|
||||
Change the current map
|
||||
"""
|
||||
if map_type == constants.PERSONAL:
|
||||
map_source = config.get('geography.personal-map')
|
||||
if map_source == "":
|
||||
return
|
||||
name = constants.TILES_PATH[map_type]
|
||||
self.change_new_map(name, map_source)
|
||||
config.set("geography.map_service", map_type)
|
||||
self.current_map = map_type
|
||||
return
|
||||
if obj is not None:
|
||||
self.osm.layer_remove_all()
|
||||
self.osm.image_remove_all()
|
||||
@ -277,8 +286,12 @@ class OsmGps:
|
||||
pt2 = bbox[1]
|
||||
self.zoom = config.get("geography.zoom")
|
||||
tile_size = float(256)
|
||||
# get the file extension depending on the map provider
|
||||
img_format = self.osm.source_get_image_format(map_idx)
|
||||
if map_idx != constants.PERSONAL:
|
||||
# get the file extension depending on the map provider
|
||||
img_format = self.osm.source_get_image_format(map_idx)
|
||||
else:
|
||||
filename = config.get("geography.personal-map")
|
||||
img_format = os.path.splitext(filename)[1]
|
||||
# calculate the number of images to download in rows and columns
|
||||
pt1_x = floor(lon2pixel(self.zoom, pt1.rlon, tile_size) / tile_size)
|
||||
pt1_y = floor(lat2pixel(self.zoom, pt1.rlat, tile_size) / tile_size)
|
||||
|
@ -204,6 +204,7 @@ class GeoClose(GeoGraphyView):
|
||||
('geography.center-lat', 0.0),
|
||||
('geography.center-lon', 0.0),
|
||||
('geography.use-keypad', True),
|
||||
('geography.personal-map', ""),
|
||||
|
||||
('geography.map_service', constants.OPENSTREETMAP),
|
||||
('geography.max_places', 5000),
|
||||
|
@ -203,6 +203,7 @@ class GeoFamClose(GeoGraphyView):
|
||||
('geography.center-lat', 0.0),
|
||||
('geography.center-lon', 0.0),
|
||||
('geography.use-keypad', True),
|
||||
('geography.personal-map', ""),
|
||||
|
||||
('geography.map_service', constants.OPENSTREETMAP),
|
||||
('geography.max_places', 5000),
|
||||
|
@ -191,6 +191,7 @@ class GeoMoves(GeoGraphyView):
|
||||
('geography.center-lat', 0.0),
|
||||
('geography.center-lon', 0.0),
|
||||
('geography.use-keypad', True),
|
||||
('geography.personal-map', ""),
|
||||
|
||||
('geography.map_service', constants.OPENSTREETMAP),
|
||||
('geography.max_places', 5000),
|
||||
|
@ -191,6 +191,7 @@ class GeoPerson(GeoGraphyView):
|
||||
('geography.center-lat', 0.0),
|
||||
('geography.center-lon', 0.0),
|
||||
('geography.use-keypad', True),
|
||||
('geography.personal-map', ""),
|
||||
|
||||
#('geography.gps_mode', GPS_DISABLED),
|
||||
#('geography.gps_update_rate', float(1.0)),
|
||||
|
@ -176,6 +176,7 @@ class GeoPlaces(GeoGraphyView):
|
||||
('geography.map_service', constants.OPENSTREETMAP),
|
||||
('geography.max_places', 5000),
|
||||
('geography.use-keypad', True),
|
||||
('geography.personal-map', ""),
|
||||
|
||||
# specific to geoplaces :
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user