Hi, welcome !
Time based: it’s the easiest to define. Merge similar places and define their hierarchy and names during times. I use a lot of literature to try to define precisely hierarchy timing, even if here in France some periods of time are easily known for place change (1789 Revolution signing the actual departments hierarchy, end of 1870 war for Alsace-Lorraine…)
Hierarchy based: it’s more complicated because, for the moment, one place can’t have more than one place type, it would have at least city and parish (after and before Revolution), but also when two cities as merged into one (like in previous picture), the absorbed city should change its type from city to neighborhood or something like that and it’s not possible now. I’m waiting for 5.2 for that. Here, the reverse, two places, one for the old parish enclosed by the city after Revolution and its diocese before;
Note for defining two times the same enclosure for a place with different dates like what I’ve done on first picture for Haut-Rhin I’d to change the PlaceUpdate gramplet like this to allow multiple dates for the same enclosure (@kku):
def __set_enclosing_place(self, place):
if not self.selected_handle:
return
if self.__encloses(place.get_handle(), self.selected_handle): # place should not include itself
print("Can't set", place.get_name().value, "inside", self.selected_name)
return
pname = place.get_name().value
# PLX Change - Begin
# From Reject same enclosed place to Reject only same enclosed place AND same date
#if self.selected_handle in [r.ref for r in place.placeref_list]:
# print(pname, "already enclosed by", self.selected_name)
# return # prevent duplicates
#print(pname, "<", self.selected_name)
#placeref = PlaceRef()
#placeref.ref = self.selected_handle
#placeref.set_date_object(self.date_object)
placeref = PlaceRef()
placeref.ref = self.selected_handle
placeref.set_date_object(self.date_object)
for r in place.placeref_list:
if self.selected_handle in r.ref and r.date == placeref.date:
print(pname, "already enclosed by", self.selected_name)
return # prevent duplicates
print(pname, "<", self.selected_name)
# PLX Change - End
place.add_placeref(placeref)