Can't link to a place if wrong lat/lon in the db.

Fixes #10266
This commit is contained in:
SNoiraud 2017-11-15 16:14:47 +01:00
parent 4b7a0bafa4
commit a91bc09160

View File

@ -52,10 +52,12 @@ from gi.repository import Gtk
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from gramps.gen.errors import WindowActiveError from gramps.gen.errors import WindowActiveError
from gramps.gui.managedwindow import ManagedWindow from gramps.gui.managedwindow import ManagedWindow
from gramps.gui.dialog import WarningDialog
from .osmgps import OsmGps from .osmgps import OsmGps
from gramps.gen.utils.location import get_main_location from gramps.gen.utils.location import get_main_location
from gramps.gen.lib import PlaceType from gramps.gen.lib import PlaceType
from gramps.gen.utils.place import conv_lat_lon from gramps.gen.utils.place import conv_lat_lon
from gramps.gen.display.place import displayer as _pd
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -103,6 +105,7 @@ class PlaceSelection(ManagedWindow, OsmGps):
self.function = function self.function = function
self.selection_layer = layer self.selection_layer = layer
self.layer = layer self.layer = layer
self.warning = False
self.set_window( self.set_window(
Gtk.Dialog(_('Place Selection in a region'), uistate.window, Gtk.Dialog(_('Place Selection in a region'), uistate.window,
buttons=(_('_Close'), Gtk.ResponseType.CLOSE)), buttons=(_('_Close'), Gtk.ResponseType.CLOSE)),
@ -258,11 +261,31 @@ class PlaceSelection(ManagedWindow, OsmGps):
place, other) = self.get_location(entry[9]) place, other) = self.get_location(entry[9])
if not [country, state, county, place, other] in self.places: if not [country, state, county, place, other] in self.places:
self.places.append([country, state, county, place, other]) self.places.append([country, state, county, place, other])
self.warning = False
for place in self.dbstate.db.iter_places(): for place in self.dbstate.db.iter_places():
latn = place.get_latitude() latn = place.get_latitude()
lonn = place.get_longitude() lonn = place.get_longitude()
if latn and lonn: if latn and lonn:
latn, lonn = conv_lat_lon(latn, lonn, "D.D8") latn, ignore = conv_lat_lon(latn, "0", "D.D8")
if not latn:
if not self.warning:
self.close()
warn1 = _("you have a wrong latitude for:")
warn2 = _pd.display(self.dbstate.db, place) + "\n\n<b>"
warn2 += _("Please, correct this before linking") + "</b>"
WarningDialog(warn1, warn2, parent=self.uistate.window)
self.warning = True
continue
ignore, lonn = conv_lat_lon("0", lonn, "D.D8")
if not lonn:
if not self.warning:
self.close()
warn1 = _("you have a wrong longitude for:") + "\n"
warn2 = _pd.display(self.dbstate.db, place) + "\n\n<b>"
warn2 += _("Please, correct this before linking") + "</b>"
WarningDialog(warn1, warn2, parent=self.uistate.window)
self.warning = True
continue
if (math.hypot(lat-float(latn), if (math.hypot(lat-float(latn),
lon-float(lonn)) <= rds) == True: lon-float(lonn)) <= rds) == True:
(country, state, county, (country, state, county,