Geography : feature request #8428 for kml files loading.

This commit is contained in:
SNoiraud 2015-05-17 12:54:51 +02:00
parent 9e7ec88d3f
commit 9e648b0de5

View File

@ -68,6 +68,7 @@ from .osmgps import OsmGps
from .selectionlayer import SelectionLayer from .selectionlayer import SelectionLayer
from .placeselection import PlaceSelection from .placeselection import PlaceSelection
from .cairoprint import CairoPrintSave from .cairoprint import CairoPrintSave
from .libkml import Kml
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
@ -350,6 +351,11 @@ class GeoGraphyView(OsmGps, NavigationView):
add_item.show() add_item.show()
menu.append(add_item) menu.append(add_item)
add_item = Gtk.MenuItem(label=_("Add place from kml"))
add_item.connect("activate", self.add_place_from_kml, event, lat , lon)
add_item.show()
menu.append(add_item)
add_item = Gtk.MenuItem(label=_("Center here")) add_item = Gtk.MenuItem(label=_("Center here"))
add_item.connect("activate", self.set_center, event, lat , lon) add_item.connect("activate", self.set_center, event, lat , lon)
add_item.show() add_item.show()
@ -923,6 +929,48 @@ class GeoGraphyView(OsmGps, NavigationView):
self.selection_layer, self.place_list, self.selection_layer, self.place_list,
lat, lon, self.__add_place) lat, lon, self.__add_place)
def add_place_from_kml(self, menu, event, lat, lon):
"""
Add new place(s) from a kml file
1 - ask for a kml file ?
2 - Read the kml file.
3 - create the place(s) with name and title found in the kml marker.
"""
# Ask for the kml file
filter = Gtk.FileFilter()
filter.add_pattern("*.kml")
kml = Gtk.FileChooserDialog(
_("Select a kml file used to add places"),
action=Gtk.FileChooserAction.OPEN,
buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
Gtk.STOCK_APPLY, Gtk.ResponseType.OK))
mpath = HOME_DIR
kml.set_current_folder(os.path.dirname(mpath))
kml.set_filter(filter)
status = kml.run()
if status == Gtk.ResponseType.OK:
val = conv_to_unicode(kml.get_filename())
if val:
kmlfile = Kml(val)
points = kmlfile.add_points()
for place in points:
(name, coords) = place
latlong = coords.pop()
(lat, lon) = latlong
new_place = Place()
new_place.set_name(name)
new_place.set_title(name)
new_place.set_latitude(str(lat))
new_place.set_longitude(str(lon))
try:
EditPlace(self.dbstate, self.uistate, [], new_place)
except WindowActiveError:
pass
kml.destroy()
def link_place(self, menu, event, lat, lon): def link_place(self, menu, event, lat, lon):
""" """
Link an existing place using longitude and latitude of location centered Link an existing place using longitude and latitude of location centered