docs: def tile_from_xy(self, x, y, zoom, on_edge_use="rb"):
          """
          Return tile covering a point defined by x and y values.
  
          - x: x coordinate
          - y: y coordinate
          - zoom: zoom level
          - on_edge_use: determine which Tile to pick if Point hits a grid edge
              - rb: right bottom (default)
              - rt: right top
              - lt: left top
              - lb: left bottom
          """
          validate_zoom(zoom)
          if x < self.left or x > self.right or y < self.bottom or y > self.top:
              raise ValueError("x or y are outside of grid bounds")
          if on_edge_use not in ["lb", "rb", "rt", "lt"]:
              raise ValueError("on_edge_use must be one of lb, rb, rt or lt")
          return _tile_from_xy(self, x, y, zoom, on_edge_use=on_edge_use)