|
@@ -72,10 +72,11 @@ class SpatioTemporalTopologyBuilder(object):
|
|
|
|
|
|
>>> # Example with two lists of maps
|
|
|
>>> import grass.temporal as tgis
|
|
|
+ >>> import datetime
|
|
|
>>> # Create two list of maps with equal time stamps
|
|
|
>>> mapsA = []
|
|
|
>>> mapsB = []
|
|
|
- >>> for i in range(10):
|
|
|
+ >>> for i in range(4):
|
|
|
... idA = "a%i@B"%(i)
|
|
|
... mapA = tgis.RasterDataset(idA)
|
|
|
... idB = "b%i@B"%(i)
|
|
@@ -97,12 +98,6 @@ class SpatioTemporalTopologyBuilder(object):
|
|
|
Map a1 has equal relation to map b1
|
|
|
Map a2 has equal relation to map b2
|
|
|
Map a3 has equal relation to map b3
|
|
|
- Map a4 has equal relation to map b4
|
|
|
- Map a5 has equal relation to map b5
|
|
|
- Map a6 has equal relation to map b6
|
|
|
- Map a7 has equal relation to map b7
|
|
|
- Map a8 has equal relation to map b8
|
|
|
- Map a9 has equal relation to map b9
|
|
|
>>> # Check relations of mapsB
|
|
|
>>> for map in mapsB:
|
|
|
... if map.get_equal():
|
|
@@ -113,12 +108,174 @@ class SpatioTemporalTopologyBuilder(object):
|
|
|
Map b1 has equal relation to map a1
|
|
|
Map b2 has equal relation to map a2
|
|
|
Map b3 has equal relation to map a3
|
|
|
- Map b4 has equal relation to map a4
|
|
|
- Map b5 has equal relation to map a5
|
|
|
- Map b6 has equal relation to map a6
|
|
|
- Map b7 has equal relation to map a7
|
|
|
- Map b8 has equal relation to map a8
|
|
|
- Map b9 has equal relation to map a9
|
|
|
+
|
|
|
+
|
|
|
+ >>> mapsA = []
|
|
|
+ >>> mapsB = []
|
|
|
+ >>> for i in range(4):
|
|
|
+ ... idA = "a%i@B"%(i)
|
|
|
+ ... mapA = tgis.RasterDataset(idA)
|
|
|
+ ... idB = "b%i@B"%(i)
|
|
|
+ ... mapB = tgis.RasterDataset(idB)
|
|
|
+ ... check = mapA.set_relative_time(i, i + 1, "months")
|
|
|
+ ... check = mapB.set_relative_time(i + 1, i + 2, "months")
|
|
|
+ ... mapsA.append(mapA)
|
|
|
+ ... mapsB.append(mapB)
|
|
|
+ >>> # Build the topology between the two map lists
|
|
|
+ >>> tb = SpatioTemporalTopologyBuilder()
|
|
|
+ >>> tb.build(mapsA, mapsB, None)
|
|
|
+ >>> # Check relations of mapsA
|
|
|
+ >>> for map in mapsA:
|
|
|
+ ... print(map.get_temporal_extent_as_tuple())
|
|
|
+ ... m = map.get_temporal_relations()
|
|
|
+ ... for key in m.keys():
|
|
|
+ ... if key not in ["NEXT", "PREV"]:
|
|
|
+ ... print(key, m[key][0].get_temporal_extent_as_tuple())
|
|
|
+ (0, 1)
|
|
|
+ ('PRECEDES', (1, 2))
|
|
|
+ (1, 2)
|
|
|
+ ('PRECEDES', (2, 3))
|
|
|
+ ('EQUAL', (1, 2))
|
|
|
+ (2, 3)
|
|
|
+ ('FOLLOWS', (1, 2))
|
|
|
+ ('PRECEDES', (3, 4))
|
|
|
+ ('EQUAL', (2, 3))
|
|
|
+ (3, 4)
|
|
|
+ ('FOLLOWS', (2, 3))
|
|
|
+ ('EQUAL', (3, 4))
|
|
|
+ ('PRECEDES', (4, 5))
|
|
|
+
|
|
|
+ >>> mapsA = []
|
|
|
+ >>> mapsB = []
|
|
|
+ >>> for i in range(4):
|
|
|
+ ... idA = "a%i@B"%(i)
|
|
|
+ ... mapA = tgis.RasterDataset(idA)
|
|
|
+ ... idB = "b%i@B"%(i)
|
|
|
+ ... mapB = tgis.RasterDataset(idB)
|
|
|
+ ... start = datetime.datetime(2000 + i, 1, 1)
|
|
|
+ ... end = datetime.datetime(2000 + i + 1, 1, 1)
|
|
|
+ ... check = mapA.set_absolute_time(start, end)
|
|
|
+ ... start = datetime.datetime(2000 + i + 1, 1, 1)
|
|
|
+ ... end = datetime.datetime(2000 + i + 2, 1, 1)
|
|
|
+ ... check = mapB.set_absolute_time(start, end)
|
|
|
+ ... mapsA.append(mapA)
|
|
|
+ ... mapsB.append(mapB)
|
|
|
+ >>> # Build the topology between the two map lists
|
|
|
+ >>> tb = SpatioTemporalTopologyBuilder()
|
|
|
+ >>> tb.build(mapsA, mapsB, None)
|
|
|
+ >>> # Check relations of mapsA
|
|
|
+ >>> for map in mapsA:
|
|
|
+ ... print(map.get_temporal_extent_as_tuple())
|
|
|
+ ... m = map.get_temporal_relations()
|
|
|
+ ... for key in m.keys():
|
|
|
+ ... if key not in ["NEXT", "PREV"]:
|
|
|
+ ... print(key, m[key][0].get_temporal_extent_as_tuple())
|
|
|
+ (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2001, 1, 1, 0, 0))
|
|
|
+ ('PRECEDES', (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2002, 1, 1, 0, 0)))
|
|
|
+ (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2002, 1, 1, 0, 0))
|
|
|
+ ('PRECEDES', (datetime.datetime(2002, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0)))
|
|
|
+ ('EQUAL', (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2002, 1, 1, 0, 0)))
|
|
|
+ (datetime.datetime(2002, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0))
|
|
|
+ ('FOLLOWS', (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2002, 1, 1, 0, 0)))
|
|
|
+ ('PRECEDES', (datetime.datetime(2003, 1, 1, 0, 0), datetime.datetime(2004, 1, 1, 0, 0)))
|
|
|
+ ('EQUAL', (datetime.datetime(2002, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0)))
|
|
|
+ (datetime.datetime(2003, 1, 1, 0, 0), datetime.datetime(2004, 1, 1, 0, 0))
|
|
|
+ ('FOLLOWS', (datetime.datetime(2002, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0)))
|
|
|
+ ('EQUAL', (datetime.datetime(2003, 1, 1, 0, 0), datetime.datetime(2004, 1, 1, 0, 0)))
|
|
|
+ ('PRECEDES', (datetime.datetime(2004, 1, 1, 0, 0), datetime.datetime(2005, 1, 1, 0, 0)))
|
|
|
+
|
|
|
+ >>> mapsA = []
|
|
|
+ >>> mapsB = []
|
|
|
+ >>> for i in range(4):
|
|
|
+ ... idA = "a%i@B"%(i)
|
|
|
+ ... mapA = tgis.RasterDataset(idA)
|
|
|
+ ... idB = "b%i@B"%(i)
|
|
|
+ ... mapB = tgis.RasterDataset(idB)
|
|
|
+ ... start = datetime.datetime(2000 + i, 1, 1)
|
|
|
+ ... end = datetime.datetime(2000 + i + 1, 1, 1)
|
|
|
+ ... check = mapA.set_absolute_time(start, end)
|
|
|
+ ... start = datetime.datetime(2000 + i, 1, 1)
|
|
|
+ ... end = datetime.datetime(2000 + i + 3, 1, 1)
|
|
|
+ ... check = mapB.set_absolute_time(start, end)
|
|
|
+ ... mapsA.append(mapA)
|
|
|
+ ... mapsB.append(mapB)
|
|
|
+ >>> # Build the topology between the two map lists
|
|
|
+ >>> tb = SpatioTemporalTopologyBuilder()
|
|
|
+ >>> tb.build(mapsA, mapsB, None)
|
|
|
+ >>> # Check relations of mapsA
|
|
|
+ >>> for map in mapsA:
|
|
|
+ ... print(map.get_temporal_extent_as_tuple())
|
|
|
+ ... m = map.get_temporal_relations()
|
|
|
+ ... for key in m.keys():
|
|
|
+ ... if key not in ["NEXT", "PREV"]:
|
|
|
+ ... print(key, m[key][0].get_temporal_extent_as_tuple())
|
|
|
+ (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2001, 1, 1, 0, 0))
|
|
|
+ ('DURING', (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0)))
|
|
|
+ ('STARTS', (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0)))
|
|
|
+ ('PRECEDES', (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2004, 1, 1, 0, 0)))
|
|
|
+ (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2002, 1, 1, 0, 0))
|
|
|
+ ('DURING', (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0)))
|
|
|
+ ('STARTS', (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2004, 1, 1, 0, 0)))
|
|
|
+ ('PRECEDES', (datetime.datetime(2002, 1, 1, 0, 0), datetime.datetime(2005, 1, 1, 0, 0)))
|
|
|
+ (datetime.datetime(2002, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0))
|
|
|
+ ('PRECEDES', (datetime.datetime(2003, 1, 1, 0, 0), datetime.datetime(2006, 1, 1, 0, 0)))
|
|
|
+ ('FINISHES', (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0)))
|
|
|
+ ('DURING', (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0)))
|
|
|
+ ('STARTS', (datetime.datetime(2002, 1, 1, 0, 0), datetime.datetime(2005, 1, 1, 0, 0)))
|
|
|
+ (datetime.datetime(2003, 1, 1, 0, 0), datetime.datetime(2004, 1, 1, 0, 0))
|
|
|
+ ('FOLLOWS', (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0)))
|
|
|
+ ('DURING', (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2004, 1, 1, 0, 0)))
|
|
|
+ ('FINISHES', (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2004, 1, 1, 0, 0)))
|
|
|
+ ('STARTS', (datetime.datetime(2003, 1, 1, 0, 0), datetime.datetime(2006, 1, 1, 0, 0)))
|
|
|
+
|
|
|
+ >>> mapsA = []
|
|
|
+ >>> mapsB = []
|
|
|
+ >>> for i in range(4):
|
|
|
+ ... idA = "a%i@B"%(i)
|
|
|
+ ... mapA = tgis.RasterDataset(idA)
|
|
|
+ ... idB = "b%i@B"%(i)
|
|
|
+ ... mapB = tgis.RasterDataset(idB)
|
|
|
+ ... start = datetime.datetime(2000 + i, 1, 1)
|
|
|
+ ... end = datetime.datetime(2000 + i + 2, 1, 1)
|
|
|
+ ... check = mapA.set_absolute_time(start, end)
|
|
|
+ ... start = datetime.datetime(2000 + i, 1, 1)
|
|
|
+ ... end = datetime.datetime(2000 + i + 3, 1, 1)
|
|
|
+ ... check = mapB.set_absolute_time(start, end)
|
|
|
+ ... mapsA.append(mapA)
|
|
|
+ ... mapsB.append(mapB)
|
|
|
+ >>> # Build the topology between the two map lists
|
|
|
+ >>> tb = SpatioTemporalTopologyBuilder()
|
|
|
+ >>> tb.build(mapsA, mapsB, None)
|
|
|
+ >>> # Check relations of mapsA
|
|
|
+ >>> for map in mapsA:
|
|
|
+ ... print(map.get_temporal_extent_as_tuple())
|
|
|
+ ... m = map.get_temporal_relations()
|
|
|
+ ... for key in m.keys():
|
|
|
+ ... if key not in ["NEXT", "PREV"]:
|
|
|
+ ... print(key, m[key][0].get_temporal_extent_as_tuple())
|
|
|
+ (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2002, 1, 1, 0, 0))
|
|
|
+ ('OVERLAPS', (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2004, 1, 1, 0, 0)))
|
|
|
+ ('DURING', (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0)))
|
|
|
+ ('STARTS', (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0)))
|
|
|
+ ('PRECEDES', (datetime.datetime(2002, 1, 1, 0, 0), datetime.datetime(2005, 1, 1, 0, 0)))
|
|
|
+ (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0))
|
|
|
+ ('OVERLAPS', (datetime.datetime(2002, 1, 1, 0, 0), datetime.datetime(2005, 1, 1, 0, 0)))
|
|
|
+ ('PRECEDES', (datetime.datetime(2003, 1, 1, 0, 0), datetime.datetime(2006, 1, 1, 0, 0)))
|
|
|
+ ('FINISHES', (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0)))
|
|
|
+ ('DURING', (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0)))
|
|
|
+ ('STARTS', (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2004, 1, 1, 0, 0)))
|
|
|
+ (datetime.datetime(2002, 1, 1, 0, 0), datetime.datetime(2004, 1, 1, 0, 0))
|
|
|
+ ('OVERLAPS', (datetime.datetime(2003, 1, 1, 0, 0), datetime.datetime(2006, 1, 1, 0, 0)))
|
|
|
+ ('OVERLAPPED', (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0)))
|
|
|
+ ('FINISHES', (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2004, 1, 1, 0, 0)))
|
|
|
+ ('DURING', (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2004, 1, 1, 0, 0)))
|
|
|
+ ('STARTS', (datetime.datetime(2002, 1, 1, 0, 0), datetime.datetime(2005, 1, 1, 0, 0)))
|
|
|
+ (datetime.datetime(2003, 1, 1, 0, 0), datetime.datetime(2005, 1, 1, 0, 0))
|
|
|
+ ('OVERLAPPED', (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2004, 1, 1, 0, 0)))
|
|
|
+ ('DURING', (datetime.datetime(2002, 1, 1, 0, 0), datetime.datetime(2005, 1, 1, 0, 0)))
|
|
|
+ ('FINISHES', (datetime.datetime(2002, 1, 1, 0, 0), datetime.datetime(2005, 1, 1, 0, 0)))
|
|
|
+ ('STARTS', (datetime.datetime(2003, 1, 1, 0, 0), datetime.datetime(2006, 1, 1, 0, 0)))
|
|
|
+ ('FOLLOWS', (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0)))
|
|
|
|
|
|
@endcode
|
|
|
|
|
@@ -309,7 +466,7 @@ class SpatioTemporalTopologyBuilder(object):
|
|
|
|
|
|
list_ = gis.ilist()
|
|
|
rect = self._map_to_rect(tree, mapsB[j], spatial)
|
|
|
- num = vector.RTreeSearch2(tree, rect, byref(list_))
|
|
|
+ vector.RTreeSearch2(tree, rect, byref(list_))
|
|
|
vector.RTreeFreeRect(rect)
|
|
|
|
|
|
for k in xrange(list_.n_values):
|