#
source:
cows/trunk/cows/bbox_util.py
@
4072

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/cows/trunk/cows/bbox_util.py@4311
Revision 4072, 2.4 KB checked in by spascoe, 13 years ago (diff) |
---|

Line | |
---|---|

1 | """ |

2 | Utilities for manipulating bounding boxes as a tuple (llx, lly, urx, ury) |

3 | |

4 | @note: This has no connection with the cows data model. This module |

5 | will probably move eventually. |

6 | |

7 | """ |

8 | |

9 | import math |

10 | |

11 | def intersection(bbox1, bbox2): |

12 | """ |

13 | Return a bbox of the intersection of bbox1 and bbox2. |

14 | |

15 | """ |

16 | llx = max(bbox1[0], bbox2[0]) |

17 | lly = max(bbox1[1], bbox2[1]) |

18 | urx = min(bbox1[2], bbox2[2]) |

19 | ury = min(bbox1[3], bbox2[3]) |

20 | |

21 | return llx, lly, urx, ury |

22 | |

23 | def relativeSize(bbox1, bbox2): |

24 | """ |

25 | Calculate the relative size of bbox1 to bbox2. |

26 | |

27 | @return: (sx, sy) where bbox1_width = sx * bbox2_width, etc. |

28 | |

29 | """ |

30 | sx = (bbox1[2]-bbox1[0]) / (bbox2[2]-bbox2[0]) |

31 | sy = (bbox1[3]-bbox1[1]) / (bbox2[3]-bbox2[1]) |

32 | |

33 | return (sx, sy) |

34 | |

35 | def geoToPixel(x_g, y_g, bbox, width, height, roundUpX=False, roundUpY=False): |

36 | """ |

37 | Calculate the pixel coordinate of a point within a bbox given the |

38 | width and height of the bbox in pixels. |

39 | |

40 | This algorithm takes the origin of the bbox as the bottom left and |

41 | the origin of the image as top left. |

42 | |

43 | @param x_g: x coordinate in goegraphic coordinates |

44 | @param y_g: y coordinate in geographic coordinates |

45 | @param bbox: The bounding box of the image |

46 | @param width: The width of the image in pixels |

47 | @param height: The height of the image in pixels. |

48 | @param roundUpX: Round the X pixel value upwards. |

49 | @param roundUpY: Round the y pixel value upwards. |

50 | |

51 | @return: (x,y) in pixel coordinates |

52 | |

53 | """ |

54 | |

55 | x = (x_g - bbox[0])*width / (bbox[2]-bbox[0]) |

56 | y = (bbox[3] - y_g)*height / (bbox[3]-bbox[1]) |

57 | |

58 | if roundUpX: |

59 | x = math.ceil(x) |

60 | if roundUpY: |

61 | y = math.ceil(y) |

62 | |

63 | return int(x), int(y) |

64 | |

65 | def pixelToGeo(x, y, bbox, width, height): |

66 | """ |

67 | Calculate the geographic coordinates of a pixel on an image |

68 | of given bbox and size. |

69 | |

70 | This algorithm takes the origin of the bbox as the bottom left and |

71 | the origin of the image as top left. |

72 | |

73 | @param x: x coordinate in pixel coordinates |

74 | @param y: y coordinate in pixel coordinates |

75 | @param bbox: The bounding box of the image |

76 | @param width: The width of the image in pixels |

77 | @param height: The height of the image in pixels. |

78 | |

79 | @return: (x_g, y_g) in geographic coordinates |

80 | |

81 | """ |

82 | |

83 | x_g = bbox[0] + ((bbox[2]-bbox[0]) / width)*x |

84 | y_g = bbox[3] - ((bbox[3]-bbox[1]) / height)*y |

85 | |

86 | return (x_g, y_g) |

**Note:**See TracBrowser for help on using the repository browser.