@@ -335,3 +335,82 @@ def test_checkOverlapDBXY():
335335 flagOverlap = aT .checkOverlapDBXY (rasterTransfo )
336336
337337 assert flagOverlap
338+
339+
340+ def test_checkOverlapDBXYWithData ():
341+ """test checkOverlapDBXYWithData - detect intersection points in coordinate grid"""
342+ from shapely import geometry as shp
343+
344+ # Test case 1: No intersection - parallel lines
345+ x1 = np .arange (0 , 5 , 1 )
346+ y1 = np .arange (0 , 4 , 1 )
347+ X , Y = np .meshgrid (x1 , y1 )
348+ rasterTransfo = {"gridx" : X , "gridy" : Y }
349+ pointTolerance = 0.01
350+
351+ intPointsArray = aT .checkOverlapDBXYWithData (rasterTransfo , pointTolerance )
352+
353+ # Verify output is boolean array with correct shape
354+ assert intPointsArray .dtype == bool
355+ assert intPointsArray .shape == X .shape
356+ # No intersections should be found
357+ assert np .sum (intPointsArray ) == 0
358+
359+ # Test case 2: Lines with intersection
360+ # Create a grid where two columns cross each other
361+ # Column 0: vertical line at x=0
362+ # Column 1: diagonal line from (1,0) through (0,2) to (-1,4)
363+ # These should intersect at approximately (0.5, 1)
364+ X = np .array ([[0 , 1 , 0.5 , 2 ], [0 , 0.5 , 1 , 2 ], [0 , 0 , 1.5 , 2 ], [0 , - 0.5 , 2 , 2 ], [0 , - 1 , 2.5 , 2 ]])
365+ Y = np .array ([[0 , 0 , 0 , 0 ], [1 , 1 , 1 , 1 ], [2 , 2 , 2 , 2 ], [3 , 3 , 3 , 3 ], [4 , 4 , 4 , 4 ]])
366+ rasterTransfo = {"gridx" : X , "gridy" : Y }
367+
368+ intPointsArray = aT .checkOverlapDBXYWithData (rasterTransfo , pointTolerance )
369+
370+ # Verify output is boolean array with correct shape
371+ assert intPointsArray .dtype == bool
372+ assert intPointsArray .shape == X .shape
373+ # With crossing lines, intersections may or may not be found depending on geometry
374+ # The function should at least run without errors
375+ assert isinstance (intPointsArray , np .ndarray )
376+
377+
378+ def test_findIntSectCoors ():
379+ """test findIntSectCoors - find indices of intersection points in coordinate arrays"""
380+ from shapely import geometry as shp
381+
382+ # Setup test data
383+ x = np .array ([[0 , 1 , 2 ], [0 , 1 , 2 ], [0 , 1 , 2 ]])
384+ y = np .array ([[0 , 0 , 0 ], [1 , 1 , 1 ], [2 , 2 , 2 ]])
385+ intPointsArray = np .zeros ((3 , 3 ))
386+ pointTolerance = 0.01
387+
388+ # Test case 1: Single point intersection at (1, 1)
389+ intersectionPoint = shp .Point (1.0 , 1.0 )
390+
391+ intPointsArray = aT .findIntSectCoors (intersectionPoint , x , y , intPointsArray , pointTolerance )
392+
393+ # Verify that the point at (1,1) is marked
394+ assert intPointsArray [1 , 1 ] == 1
395+ # Verify only one point is marked
396+ assert np .sum (intPointsArray ) == 1
397+
398+ # Test case 2: Point with tolerance
399+ intPointsArray = np .zeros ((3 , 3 ))
400+ # Point slightly off from (2, 2) but within tolerance
401+ intersectionPoint = shp .Point (2.005 , 2.005 )
402+
403+ intPointsArray = aT .findIntSectCoors (intersectionPoint , x , y , intPointsArray , pointTolerance )
404+
405+ # Verify that the point at (2,2) is marked despite slight offset
406+ assert intPointsArray [2 , 2 ] == 1
407+ assert np .sum (intPointsArray ) == 1
408+
409+ # Test case 3: Point outside grid
410+ intPointsArray = np .zeros ((3 , 3 ))
411+ intersectionPoint = shp .Point (5.0 , 5.0 )
412+
413+ intPointsArray = aT .findIntSectCoors (intersectionPoint , x , y , intPointsArray , pointTolerance )
414+
415+ # Verify no points are marked
416+ assert np .sum (intPointsArray ) == 0
0 commit comments